A small footprint MQTT library

Dependents:   STM32F746_iothub_client_sample_mqtt FXOS8700CQ_To_Azure_IoT f767zi_mqtt FXOS8700CQ_To_Azure_IoT ... more

Revision:
14:4b5b4dccfc8b
Parent:
13:3c202001e4ba
Child:
15:ec5a36121959
--- a/mqtt_client.c	Sat Jan 28 09:34:52 2017 -0800
+++ b/mqtt_client.c	Fri Feb 10 17:01:07 2017 -0800
@@ -413,6 +413,20 @@
     }
 }
 
+static void clear_mqtt_options(MQTT_CLIENT* mqtt_client)
+{
+    free(mqtt_client->mqttOptions.clientId);
+    mqtt_client->mqttOptions.clientId = NULL;
+    free(mqtt_client->mqttOptions.willTopic);
+    mqtt_client->mqttOptions.willTopic = NULL;
+    free(mqtt_client->mqttOptions.willMessage);
+    mqtt_client->mqttOptions.willMessage = NULL;
+    free(mqtt_client->mqttOptions.username);
+    mqtt_client->mqttOptions.username = NULL;
+    free(mqtt_client->mqttOptions.password);
+    mqtt_client->mqttOptions.password = NULL;
+}
+
 static int cloneMqttOptions(MQTT_CLIENT* mqtt_client, const MQTT_CLIENT_OPTIONS* mqttOptions)
 {
     int result = 0;
@@ -465,11 +479,7 @@
     }
     else
     {
-        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);
+        clear_mqtt_options(mqtt_client);
     }
     return result;
 }
@@ -883,6 +893,8 @@
                 /*Codes_SRS_MQTT_CLIENT_07_007: [If any failure is encountered then mqtt_client_connect shall return a non-zero value.]*/
                 LOG(AZ_LOG_ERROR, LOG_LINE, "Error: io_open failed");
                 result = __LINE__;
+                // Remove cloned options
+                clear_mqtt_options(mqtt_client);
             }
             else
             {
@@ -1092,11 +1104,7 @@
                 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);
+            clear_mqtt_options(mqtt_client);
         }
     }
     return result;