Microsoft Azure IoTHub client MQTT transport
Dependents: STM32F746_iothub_client_sample_mqtt FXOS8700CQ_To_Azure_IoT f767zi_mqtt FXOS8700CQ_To_Azure_IoT ... more
Diff: iothubtransport_mqtt_common.c
- Revision:
- 33:b7dfb208ef0a
- Parent:
- 32:103a46ed8822
- Child:
- 34:9363cf585ef3
--- a/iothubtransport_mqtt_common.c Fri Dec 15 14:08:57 2017 -0800 +++ b/iothubtransport_mqtt_common.c Wed Jan 17 08:56:02 2018 -0800 @@ -129,7 +129,8 @@ { MQTT_CLIENT_STATUS_NOT_CONNECTED, MQTT_CLIENT_STATUS_CONNECTING, - MQTT_CLIENT_STATUS_CONNECTED + MQTT_CLIENT_STATUS_CONNECTED, + MQTT_CLIENT_STATUS_PENDING_CLOSE } MQTT_CLIENT_STATUS; typedef struct MQTTTRANSPORT_HANDLE_DATA_TAG @@ -1352,8 +1353,7 @@ transport_data->isRecoverableError = false; } LogError("Connection Not Accepted: 0x%x: %s", connack->returnCode, retrieve_mqtt_return_codes(connack->returnCode) ); - (void)mqtt_client_disconnect(transport_data->mqttClient, NULL, NULL); - transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED; + transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_PENDING_CLOSE; transport_data->currPacketState = PACKET_TYPE_ERROR; } } @@ -1410,9 +1410,11 @@ static void DisconnectFromClient(PMQTTTRANSPORT_HANDLE_DATA transport_data) { - OPTIONHANDLER_HANDLE options = xio_retrieveoptions(transport_data->xioTransport); - set_saved_tls_options(transport_data, options); - + if (!transport_data->isDestroyCalled) + { + OPTIONHANDLER_HANDLE options = xio_retrieveoptions(transport_data->xioTransport); + set_saved_tls_options(transport_data, options); + } (void)mqtt_client_disconnect(transport_data->mqttClient, NULL, NULL); xio_destroy(transport_data->xioTransport); transport_data->xioTransport = NULL; @@ -1453,7 +1455,10 @@ break; } } - transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED; + if (transport_data->mqttClientStatus != MQTT_CLIENT_STATUS_PENDING_CLOSE) + { + transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED; + } transport_data->currPacketState = PACKET_TYPE_ERROR; transport_data->device_twin_get_sent = false; if (transport_data->topic_MqttMessage != NULL) @@ -2471,7 +2476,12 @@ } else { - if (transport_data->currPacketState == CONNACK_TYPE || transport_data->currPacketState == SUBSCRIBE_TYPE) + if (transport_data->mqttClientStatus == MQTT_CLIENT_STATUS_PENDING_CLOSE) + { + mqtt_client_disconnect(transport_data->mqttClient, NULL, NULL); + transport_data->mqttClientStatus = MQTT_CLIENT_STATUS_NOT_CONNECTED; + } + else if (transport_data->currPacketState == CONNACK_TYPE || transport_data->currPacketState == SUBSCRIBE_TYPE) { SubscribeToMqttProtocol(transport_data); }