A small footprint MQTT library
Dependents: STM32F746_iothub_client_sample_mqtt FXOS8700CQ_To_Azure_IoT f767zi_mqtt FXOS8700CQ_To_Azure_IoT ... more
Diff: mqtt_client.c
- Revision:
- 13:3c202001e4ba
- Parent:
- 12:30b08cda82fd
- Child:
- 14:4b5b4dccfc8b
--- a/mqtt_client.c Tue Jan 24 15:24:05 2017 -0800 +++ b/mqtt_client.c Sat Jan 28 09:34:52 2017 -0800 @@ -350,8 +350,9 @@ } else { + size_t size = BUFFER_length(connPacket); /*Codes_SRS_MQTT_CLIENT_07_009: [On success mqtt_client_connect shall send the MQTT CONNECT to the endpoint.]*/ - if (sendPacketItem(mqtt_client, BUFFER_u_char(connPacket), BUFFER_length(connPacket)) != 0) + if (sendPacketItem(mqtt_client, BUFFER_u_char(connPacket), size) != 0) { LOG(AZ_LOG_ERROR, LOG_LINE, "Error: mqtt_codec_connect failed"); } @@ -615,7 +616,8 @@ } if (pubRel != NULL) { - (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), BUFFER_length(pubRel)); + size_t size = BUFFER_length(pubRel); + (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), size); BUFFER_delete(pubRel); } } @@ -674,7 +676,8 @@ } if (pubRel != NULL) { - (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), BUFFER_length(pubRel)); + size_t size = BUFFER_length(pubRel); + (void)sendPacketItem(mqtt_client, BUFFER_u_char(pubRel), size); BUFFER_delete(pubRel); } } @@ -840,11 +843,6 @@ MQTT_CLIENT* mqtt_client = (MQTT_CLIENT*)handle; tickcounter_destroy(mqtt_client->packetTickCntr); mqtt_codec_destroy(mqtt_client->codec_handle); - free(mqtt_client->mqttOptions.clientId); - free(mqtt_client->mqttOptions.willTopic); - free(mqtt_client->mqttOptions.willMessage); - free(mqtt_client->mqttOptions.username); - free(mqtt_client->mqttOptions.password); free(mqtt_client); } } @@ -918,8 +916,12 @@ { STRING_HANDLE trace_log = construct_trace_log_handle(mqtt_client); - BUFFER_HANDLE publishPacket = mqtt_codec_publish(mqttmessage_getQosType(msgHandle), mqttmessage_getIsDuplicateMsg(msgHandle), - mqttmessage_getIsRetained(msgHandle), mqttmessage_getPacketId(msgHandle), mqttmessage_getTopicName(msgHandle), payload->message, payload->length, trace_log); + QOS_VALUE qos = mqttmessage_getQosType(msgHandle); + bool isDuplicate = mqttmessage_getIsDuplicateMsg(msgHandle); + bool isRetained = mqttmessage_getIsRetained(msgHandle); + uint16_t packetId = mqttmessage_getPacketId(msgHandle); + const char* topicName = mqttmessage_getTopicName(msgHandle); + BUFFER_HANDLE publishPacket = mqtt_codec_publish(qos, isDuplicate, isRetained, packetId, topicName, payload->message, payload->length, trace_log); if (publishPacket == NULL) { /*Codes_SRS_MQTT_CLIENT_07_020: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/ @@ -931,7 +933,8 @@ mqtt_client->packetState = PUBLISH_TYPE; /*Codes_SRS_MQTT_CLIENT_07_022: [On success mqtt_client_publish shall send the MQTT SUBCRIBE packet to the endpoint.]*/ - if (sendPacketItem(mqtt_client, BUFFER_u_char(publishPacket), BUFFER_length(publishPacket)) != 0) + size_t size = BUFFER_length(publishPacket); + if (sendPacketItem(mqtt_client, BUFFER_u_char(publishPacket), size) != 0) { /*Codes_SRS_MQTT_CLIENT_07_020: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.]*/ LOG(AZ_LOG_ERROR, LOG_LINE, "Error: mqtt_client_publish send failed"); @@ -977,8 +980,9 @@ { mqtt_client->packetState = SUBSCRIBE_TYPE; + size_t size = BUFFER_length(subPacket); /*Codes_SRS_MQTT_CLIENT_07_015: [On success mqtt_client_subscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/ - if (sendPacketItem(mqtt_client, BUFFER_u_char(subPacket), BUFFER_length(subPacket)) != 0) + if (sendPacketItem(mqtt_client, BUFFER_u_char(subPacket), size) != 0) { /*Codes_SRS_MQTT_CLIENT_07_014: [If any failure is encountered then mqtt_client_subscribe shall return a non-zero value.]*/ LOG(AZ_LOG_ERROR, LOG_LINE, "Error: mqtt_client_subscribe send failed"); @@ -1023,8 +1027,9 @@ { mqtt_client->packetState = UNSUBSCRIBE_TYPE; + size_t size = BUFFER_length(unsubPacket); /*Codes_SRS_MQTT_CLIENT_07_018: [On success mqtt_client_unsubscribe shall send the MQTT SUBCRIBE packet to the endpoint.]*/ - if (sendPacketItem(mqtt_client, BUFFER_u_char(unsubPacket), BUFFER_length(unsubPacket)) != 0) + if (sendPacketItem(mqtt_client, BUFFER_u_char(unsubPacket), size) != 0) { /*Codes_SRS_MQTT_CLIENT_07_017: [If any failure is encountered then mqtt_client_unsubscribe shall return a non-zero value.].]*/ LOG(AZ_LOG_ERROR, LOG_LINE, "Error: mqtt_client_unsubscribe send failed"); @@ -1068,8 +1073,9 @@ { mqtt_client->packetState = DISCONNECT_TYPE; + size_t size = BUFFER_length(disconnectPacket); /*Codes_SRS_MQTT_CLIENT_07_012: [On success mqtt_client_disconnect shall send the MQTT DISCONNECT packet to the endpoint.]*/ - if (sendPacketItem(mqtt_client, BUFFER_u_char(disconnectPacket), BUFFER_length(disconnectPacket)) != 0) + if (sendPacketItem(mqtt_client, BUFFER_u_char(disconnectPacket), size) != 0) { /*Codes_SRS_MQTT_CLIENT_07_011: [If any failure is encountered then mqtt_client_disconnect shall return a non-zero value.]*/ LOG(AZ_LOG_ERROR, LOG_LINE, "Error: mqtt_client_disconnect send failed"); @@ -1086,6 +1092,11 @@ result = 0; } BUFFER_delete(disconnectPacket); + free(mqtt_client->mqttOptions.clientId); + free(mqtt_client->mqttOptions.willTopic); + free(mqtt_client->mqttOptions.willMessage); + free(mqtt_client->mqttOptions.username); + free(mqtt_client->mqttOptions.password); } } return result; @@ -1125,7 +1136,8 @@ BUFFER_HANDLE pingPacket = mqtt_codec_ping(); if (pingPacket != NULL) { - (void)sendPacketItem(mqtt_client, BUFFER_u_char(pingPacket), BUFFER_length(pingPacket)); + size_t size = BUFFER_length(pingPacket); + (void)sendPacketItem(mqtt_client, BUFFER_u_char(pingPacket), size); BUFFER_delete(pingPacket); (void)tickcounter_get_current_ms(mqtt_client->packetTickCntr, &mqtt_client->timeSincePing);