Lines Matching full:client

3  * MQTT client
5 * @defgroup mqtt MQTT client
77 * MQTT client connection states
162 * @param client MQTT client
166 msg_generate_packet_id(mqtt_client_t *client) in msg_generate_packet_id() argument
168 client->pkt_id_seq++; in msg_generate_packet_id()
169 if (client->pkt_id_seq == 0) { in msg_generate_packet_id()
170 client->pkt_id_seq++; in msg_generate_packet_id()
172 return client->pkt_id_seq; in msg_generate_packet_id()
501 * @param client MQTT client
505 mqtt_close(mqtt_client_t *client, mqtt_connection_status_t reason) in mqtt_close() argument
507 LWIP_ASSERT("mqtt_close: client != NULL", client != NULL); in mqtt_close()
510 if (client->conn != NULL) { in mqtt_close()
512 tcp_recv(client->conn, NULL); in mqtt_close()
513 tcp_err(client->conn, NULL); in mqtt_close()
514 tcp_sent(client->conn, NULL); in mqtt_close()
515 res = tcp_close(client->conn); in mqtt_close()
517 tcp_abort(client->conn); in mqtt_close()
520 client->conn = NULL; in mqtt_close()
524 mqtt_clear_requests(&client->pend_req_queue); in mqtt_close()
526 sys_untimeout(mqtt_cyclic_timer, client); in mqtt_close()
529 if (client->conn_state != TCP_DISCONNECTED) { in mqtt_close()
531 client->conn_state = TCP_DISCONNECTED; in mqtt_close()
532 if (client->connect_cb != NULL) { in mqtt_close()
533 client->connect_cb(client, client->connect_arg, reason); in mqtt_close()
541 * @param arg MQTT client
547 mqtt_client_t *client = (mqtt_client_t *)arg; in mqtt_cyclic_timer() local
548 LWIP_ASSERT("mqtt_cyclic_timer: client != NULL", client != NULL); in mqtt_cyclic_timer()
550 if (client->conn_state == MQTT_CONNECTING) { in mqtt_cyclic_timer()
551 client->cyclic_tick++; in mqtt_cyclic_timer()
552 if ((client->cyclic_tick * MQTT_CYCLIC_TIMER_INTERVAL) >= MQTT_CONNECT_TIMOUT) { in mqtt_cyclic_timer()
555 mqtt_close(client, MQTT_CONNECT_TIMEOUT); in mqtt_cyclic_timer()
558 } else if (client->conn_state == MQTT_CONNECTED) { in mqtt_cyclic_timer()
560 mqtt_request_time_elapsed(&client->pend_req_queue, MQTT_CYCLIC_TIMER_INTERVAL); in mqtt_cyclic_timer()
563 if (client->keep_alive > 0) { in mqtt_cyclic_timer()
565 client->server_watchdog++; in mqtt_cyclic_timer()
567 …if ((client->server_watchdog * MQTT_CYCLIC_TIMER_INTERVAL) > (client->keep_alive + client->keep_al… in mqtt_cyclic_timer()
569 mqtt_close(client, MQTT_CONNECT_TIMEOUT); in mqtt_cyclic_timer()
574 if ((client->cyclic_tick * MQTT_CYCLIC_TIMER_INTERVAL) >= client->keep_alive) { in mqtt_cyclic_timer()
576 if (mqtt_output_check_space(&client->output, 0) != 0) { in mqtt_cyclic_timer()
577 mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_PINGREQ, 0, 0, 0, 0); in mqtt_cyclic_timer()
578 client->cyclic_tick = 0; in mqtt_cyclic_timer()
581 client->cyclic_tick++; in mqtt_cyclic_timer()
585 …T_DEBUG_WARN,("mqtt_cyclic_timer: Timer should not be running in state %d\n", client->conn_state)); in mqtt_cyclic_timer()
596 * @param client MQTT client
603 pub_ack_rec_rel_response(mqtt_client_t *client, u8_t msg, u16_t pkt_id, u8_t qos) in pub_ack_rec_rel_response() argument
606 if (mqtt_output_check_space(&client->output, 2)) { in pub_ack_rec_rel_response()
607 mqtt_output_append_fixed_header(&client->output, msg, 0, qos, 0, 2); in pub_ack_rec_rel_response()
608 mqtt_output_append_u16(&client->output, pkt_id); in pub_ack_rec_rel_response()
609 mqtt_output_send(&client->output, client->conn); in pub_ack_rec_rel_response()
634 * @param client MQTT client
640 …mqtt_message_received(mqtt_client_t *client, u8_t fixed_hdr_idx, u16_t length, u32_t remaining_len… in mqtt_message_received() argument
644 u8_t *var_hdr_payload = client->rx_buffer + fixed_hdr_idx; in mqtt_message_received()
647 u8_t pkt_type = MQTT_CTL_PACKET_TYPE(client->rx_buffer[0]); in mqtt_message_received()
651 if (client->conn_state == MQTT_CONNECTING) { in mqtt_message_received()
657 client->cyclic_tick = 0; in mqtt_message_received()
658 client->conn_state = MQTT_CONNECTED; in mqtt_message_received()
660 if (client->connect_cb != 0) { in mqtt_message_received()
661 client->connect_cb(client, client->connect_arg, res); in mqtt_message_received()
673 u8_t qos = MQTT_CTL_PACKET_QOS(client->rx_buffer[0]); in mqtt_message_received()
675 if (client->msg_idx <= MQTT_VAR_HEADER_BUFFER_LEN) { in mqtt_message_received()
693client->inpub_pkt_id = ((u16_t)var_hdr_payload[after_topic] << 8) + (u16_t)var_hdr_payload[after_t… in mqtt_message_received()
696 client->inpub_pkt_id = 0; in mqtt_message_received()
708 if (client->pub_cb != NULL) { in mqtt_message_received()
709 client->pub_cb(client->inpub_arg, (const char *)topic, remaining_length + payload_length); in mqtt_message_received()
715client->data_cb(client->inpub_arg, var_hdr_payload + payload_offset, payload_length, remaining_len… in mqtt_message_received()
721 mqtt_msg_type_to_str(resp_msg), client->inpub_pkt_id)); in mqtt_message_received()
722 pub_ack_rec_rel_response(client, resp_msg, client->inpub_pkt_id, 0); in mqtt_message_received()
735 pub_ack_rec_rel_response(client, MQTT_MSG_TYPE_PUBREL, pkt_id, 1); in mqtt_message_received()
739 pub_ack_rec_rel_response(client, MQTT_MSG_TYPE_PUBCOMP, pkt_id, 0); in mqtt_message_received()
743 struct mqtt_request_t *r = mqtt_take_request(&client->pend_req_queue, pkt_id); in mqtt_message_received()
773 * @param client MQTT client
778 mqtt_parse_incoming(mqtt_client_t *client, struct pbuf *p) in mqtt_parse_incoming() argument
788 if (fixed_hdr_idx < client->msg_idx) { in mqtt_parse_incoming()
789 b = client->rx_buffer[fixed_hdr_idx]; in mqtt_parse_incoming()
792 client->rx_buffer[client->msg_idx++] = b; in mqtt_parse_incoming()
802 mqtt_message_received(client, fixed_hdr_idx, 0, 0); in mqtt_parse_incoming()
803 client->msg_idx = 0; in mqtt_parse_incoming()
807 msg_rem_len = (msg_rem_len + fixed_hdr_idx) - client->msg_idx; in mqtt_parse_incoming()
814 …cpy_start = (client->msg_idx - fixed_hdr_idx) % (MQTT_VAR_HEADER_BUFFER_LEN - fixed_hdr_idx) + fix… in mqtt_parse_incoming()
824 pbuf_copy_partial(p, client->rx_buffer+cpy_start, cpy_len, in_offset); in mqtt_parse_incoming()
827 client->msg_idx += cpy_len; in mqtt_parse_incoming()
831 …_TRACE,("mqtt_parse_incoming: msg_idx: %d, cpy_len: %d, remaining %d\n", client->msg_idx, cpy_len,… in mqtt_parse_incoming()
834 …mqtt_connection_status_t res = mqtt_message_received(client, fixed_hdr_idx, (cpy_start + cpy_len) … in mqtt_parse_incoming()
840 client->msg_idx = 0; in mqtt_parse_incoming()
853 * @param arg MQTT client
861 mqtt_client_t *client = (mqtt_client_t *)arg; in mqtt_tcp_recv_cb() local
862 LWIP_ASSERT("mqtt_tcp_recv_cb: client != NULL", client != NULL); in mqtt_tcp_recv_cb()
863 LWIP_ASSERT("mqtt_tcp_recv_cb: client->conn == pcb", client->conn == pcb); in mqtt_tcp_recv_cb()
867 mqtt_close(client, MQTT_CONNECT_DISCONNECTED); in mqtt_tcp_recv_cb()
878 res = mqtt_parse_incoming(client, p); in mqtt_tcp_recv_cb()
882 mqtt_close(client, res); in mqtt_tcp_recv_cb()
885 if (client->keep_alive != 0) { in mqtt_tcp_recv_cb()
887 client->server_watchdog = 0; in mqtt_tcp_recv_cb()
897 * @param arg MQTT client
905 mqtt_client_t *client = (mqtt_client_t *)arg; in mqtt_tcp_sent_cb() local
910 if (client->conn_state == MQTT_CONNECTED) { in mqtt_tcp_sent_cb()
914 client->cyclic_tick = 0; in mqtt_tcp_sent_cb()
915 client->server_watchdog = 0; in mqtt_tcp_sent_cb()
917 while ((r = mqtt_take_request(&client->pend_req_queue, 0)) != NULL) { in mqtt_tcp_sent_cb()
925 mqtt_output_send(&client->output, client->conn); in mqtt_tcp_sent_cb()
932 * @param arg MQTT client
938 mqtt_client_t *client = (mqtt_client_t *)arg; in mqtt_tcp_err_cb() local
941 LWIP_ASSERT("mqtt_tcp_err_cb: client != NULL", client != NULL); in mqtt_tcp_err_cb()
943 client->conn = 0; in mqtt_tcp_err_cb()
944 mqtt_close(client, MQTT_CONNECT_DISCONNECTED); in mqtt_tcp_err_cb()
949 * @param arg MQTT client
956 mqtt_client_t *client = (mqtt_client_t *)arg; in mqtt_tcp_poll_cb() local
957 if (client->conn_state == MQTT_CONNECTED) { in mqtt_tcp_poll_cb()
959 mqtt_output_send(&client->output, tpcb); in mqtt_tcp_poll_cb()
966 * @param arg MQTT client
973 mqtt_client_t* client = (mqtt_client_t *)arg; in mqtt_tcp_connect_cb() local
981 client->msg_idx = 0; in mqtt_tcp_connect_cb()
990 client->conn_state = MQTT_CONNECTING; in mqtt_tcp_connect_cb()
993 sys_timeout(MQTT_CYCLIC_TIMER_INTERVAL*1000, mqtt_cyclic_timer, client); in mqtt_tcp_connect_cb()
994 client->cyclic_tick = 0; in mqtt_tcp_connect_cb()
997 mqtt_output_send(&client->output, client->conn); in mqtt_tcp_connect_cb()
1011 * @param client MQTT client
1020 * ERR_CONN if client is disconnected
1024 mqtt_publish(mqtt_client_t *client, const char *topic, const void *payload, u16_t payload_length, u… in mqtt_publish() argument
1034 LWIP_ASSERT("mqtt_publish: client != NULL", client); in mqtt_publish()
1036 …LWIP_ERROR("mqtt_publish: TCP disconnected", (client->conn_state != TCP_DISCONNECTED), return ERR_… in mqtt_publish()
1050 pkt_id = msg_generate_packet_id(client); in mqtt_publish()
1056 r = mqtt_create_request(client->req_list, pkt_id, cb, arg); in mqtt_publish()
1061 if (mqtt_output_check_space(&client->output, remaining_length) == 0) { in mqtt_publish()
1066 …mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_PUBLISH, 0, qos, retain, remaining_… in mqtt_publish()
1069 mqtt_output_append_string(&client->output, topic, topic_len); in mqtt_publish()
1073 mqtt_output_append_u16(&client->output, pkt_id); in mqtt_publish()
1078 mqtt_output_append_buf(&client->output, payload, payload_length); in mqtt_publish()
1081 mqtt_append_request(&client->pend_req_queue, r); in mqtt_publish()
1082 mqtt_output_send(&client->output, client->conn); in mqtt_publish()
1090 * @param client MQTT client
1099 mqtt_sub_unsub(mqtt_client_t *client, const char *topic, u8_t qos, mqtt_request_cb_t cb, void *arg,… in mqtt_sub_unsub() argument
1108 LWIP_ASSERT("mqtt_sub_unsub: client != NULL", client); in mqtt_sub_unsub()
1120 if (client->conn_state == TCP_DISCONNECTED) { in mqtt_sub_unsub()
1125 pkt_id = msg_generate_packet_id(client); in mqtt_sub_unsub()
1126 r = mqtt_create_request(client->req_list, pkt_id, cb, arg); in mqtt_sub_unsub()
1131 if (mqtt_output_check_space(&client->output, remaining_length) == 0) { in mqtt_sub_unsub()
1136 …LWIP_DEBUGF(MQTT_DEBUG_TRACE,("mqtt_sub_unsub: Client (un)subscribe to topic \"%s\", id: %d\n", to… in mqtt_sub_unsub()
1138 …mqtt_output_append_fixed_header(&client->output, sub ? MQTT_MSG_TYPE_SUBSCRIBE : MQTT_MSG_TYPE_UNS… in mqtt_sub_unsub()
1140 mqtt_output_append_u16(&client->output, pkt_id); in mqtt_sub_unsub()
1142 mqtt_output_append_string(&client->output, topic, topic_len); in mqtt_sub_unsub()
1145 mqtt_output_append_u8(&client->output, LWIP_MIN(qos, 2)); in mqtt_sub_unsub()
1148 mqtt_append_request(&client->pend_req_queue, r); in mqtt_sub_unsub()
1149 mqtt_output_send(&client->output, client->conn); in mqtt_sub_unsub()
1157 * @param client MQTT client
1163 mqtt_set_inpub_callback(mqtt_client_t *client, mqtt_incoming_publish_cb_t pub_cb, in mqtt_set_inpub_callback() argument
1166 LWIP_ASSERT("mqtt_set_inpub_callback: client != NULL", client != NULL); in mqtt_set_inpub_callback()
1167 client->data_cb = data_cb; in mqtt_set_inpub_callback()
1168 client->pub_cb = pub_cb; in mqtt_set_inpub_callback()
1169 client->inpub_arg = arg; in mqtt_set_inpub_callback()
1174 * Create a new MQTT client instance
1180 mqtt_client_t *client = (mqtt_client_t *)mem_malloc(sizeof(mqtt_client_t)); in mqtt_client_new() local
1181 if (client != NULL) { in mqtt_client_new()
1182 memset(client, 0, sizeof(mqtt_client_t)); in mqtt_client_new()
1184 return client; in mqtt_client_new()
1191 * @param client MQTT client
1196 * @param client_info Client identification and connection options
1200 mqtt_client_connect(mqtt_client_t *client, const ip_addr_t *ip_addr, u16_t port, mqtt_connection_cb… in mqtt_client_connect() argument
1210 LWIP_ASSERT("mqtt_client_connect: client != NULL", client != NULL); in mqtt_client_connect()
1215 if (client->conn_state != TCP_DISCONNECTED) { in mqtt_client_connect()
1221 memset(client, 0, sizeof(mqtt_client_t)); in mqtt_client_connect()
1222 client->connect_arg = arg; in mqtt_client_connect()
1223 client->connect_cb = cb; in mqtt_client_connect()
1224 client->keep_alive = client_info->keep_alive; in mqtt_client_connect()
1225 mqtt_init_requests(client->req_list); in mqtt_client_connect()
1256 if (mqtt_output_check_space(&client->output, remaining_length) == 0) { in mqtt_client_connect()
1260 client->conn = tcp_new(); in mqtt_client_connect()
1261 if (client->conn == NULL) { in mqtt_client_connect()
1266 tcp_arg(client->conn, client); in mqtt_client_connect()
1268 err = tcp_bind(client->conn, IP_ADDR_ANY, 0); in mqtt_client_connect()
1276 err = tcp_connect(client->conn, ip_addr, port, mqtt_tcp_connect_cb); in mqtt_client_connect()
1282 tcp_err(client->conn, mqtt_tcp_err_cb); in mqtt_client_connect()
1283 client->conn_state = TCP_CONNECTING; in mqtt_client_connect()
1286 …mqtt_output_append_fixed_header(&client->output, MQTT_MSG_TYPE_CONNECT, 0, 0, 0, remaining_length); in mqtt_client_connect()
1288 mqtt_output_append_string(&client->output, "MQTT", 4); in mqtt_client_connect()
1290 mqtt_output_append_u8(&client->output, 4); in mqtt_client_connect()
1292 mqtt_output_append_u8(&client->output, flags); in mqtt_client_connect()
1294 mqtt_output_append_u16(&client->output, client_info->keep_alive); in mqtt_client_connect()
1295 /* Append client id */ in mqtt_client_connect()
1296 mqtt_output_append_string(&client->output, client_info->client_id, client_id_length); in mqtt_client_connect()
1299 mqtt_output_append_string(&client->output, client_info->will_topic, will_topic_len); in mqtt_client_connect()
1300 mqtt_output_append_string(&client->output, client_info->will_msg, will_msg_len); in mqtt_client_connect()
1305 tcp_abort(client->conn); in mqtt_client_connect()
1306 client->conn = NULL; in mqtt_client_connect()
1314 * @param client MQTT client
1317 mqtt_disconnect(mqtt_client_t *client) in mqtt_disconnect() argument
1319 LWIP_ASSERT("mqtt_disconnect: client != NULL", client); in mqtt_disconnect()
1321 if (client->conn_state != TCP_DISCONNECTED) { in mqtt_disconnect()
1323 client->conn_state = TCP_DISCONNECTED; in mqtt_disconnect()
1324 mqtt_close(client, (mqtt_connection_status_t)0); in mqtt_disconnect()
1331 * @param client MQTT client
1335 mqtt_client_is_connected(mqtt_client_t *client) in mqtt_client_is_connected() argument
1337 LWIP_ASSERT("mqtt_client_is_connected: client != NULL", client); in mqtt_client_is_connected()
1338 return client->conn_state == MQTT_CONNECTED; in mqtt_client_is_connected()