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:
- 19:f87dfe76bc70
- Parent:
- 18:ec8e5e97c6a4
- Child:
- 20:594780be216d
diff -r ec8e5e97c6a4 -r f87dfe76bc70 iothubtransport_mqtt_common.c --- a/iothubtransport_mqtt_common.c Fri Feb 24 14:00:29 2017 -0800 +++ b/iothubtransport_mqtt_common.c Fri Mar 10 11:47:21 2017 -0800 @@ -1282,13 +1282,26 @@ } else { - /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_056: [ If type is IOTHUB_TYPE_TELEMETRY, then on success mqtt_notification_callback shall call IoTHubClient_LL_MessageCallback. ] */ - if (IoTHubClient_LL_MessageCallback(transportData->llClientHandle, IoTHubMessage) != IOTHUBMESSAGE_ACCEPTED) + MESSAGE_CALLBACK_INFO* messageData = (MESSAGE_CALLBACK_INFO*)malloc(sizeof(MESSAGE_CALLBACK_INFO)); + if (messageData == NULL) + { + LogError("malloc failed"); + } + else { - LogError("Event not accepted by our client."); + messageData->messageHandle = IoTHubMessage; + messageData->transportContext = NULL; + + /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_056: [ If type is IOTHUB_TYPE_TELEMETRY, then on success mqtt_notification_callback shall call IoTHubClient_LL_MessageCallback. ] */ + if (!IoTHubClient_LL_MessageCallback(transportData->llClientHandle, messageData)) + { + LogError("IoTHubClient_LL_MessageCallback returned false"); + + IoTHubMessage_Destroy(IoTHubMessage); + free(messageData); + } } } - IoTHubMessage_Destroy(IoTHubMessage); } } } @@ -1343,18 +1356,18 @@ transport_data->currPacketState = CONNACK_TYPE; transport_data->isRecoverableError = true; StopRetryTimer(transport_data->retryLogic); - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_AUTHENTICATED, IOTHUB_CLIENT_CONNECTION_OK); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_AUTHENTICATED, IOTHUB_CLIENT_CONNECTION_OK); } else { if (connack->returnCode == CONN_REFUSED_BAD_USERNAME_PASSWORD) { transport_data->isRecoverableError = false; - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_BAD_CREDENTIAL); } else if (connack->returnCode == CONN_REFUSED_NOT_AUTHORIZED) { - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_DEVICE_DISABLED); } else if (connack->returnCode == CONN_REFUSED_UNACCEPTABLE_VERSION) { @@ -1425,7 +1438,7 @@ { case MQTT_CLIENT_CONNECTION_ERROR: { - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_NO_NETWORK); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_NO_NETWORK); break; } case MQTT_CLIENT_NO_PING_RESPONSE: @@ -1614,7 +1627,7 @@ sasToken = STRING_clone(transport_data->transport_creds.CREDENTIAL_VALUE.deviceSasToken); if (!SASToken_Validate(sasToken)) { - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN); STRING_delete(sasToken); result = __FAILURE__; } @@ -1721,7 +1734,7 @@ if ((current_time - transport_data->mqtt_connect_time) / 1000 > (SAS_TOKEN_DEFAULT_LIFETIME*SAS_REFRESH_MULTIPLIER)) { (void)mqtt_client_disconnect(transport_data->mqttClient); - IotHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN); + IoTHubClient_LL_ConnectionStatusCallBack(transport_data->llClientHandle, IOTHUB_CLIENT_CONNECTION_UNAUTHENTICATED, IOTHUB_CLIENT_CONNECTION_EXPIRED_SAS_TOKEN); transport_data->isConnected = false; transport_data->currPacketState = UNKNOWN_TYPE; transport_data->device_twin_get_sent = false; @@ -2744,3 +2757,33 @@ } return result; } + +IOTHUB_CLIENT_RESULT IoTHubTransport_MQTT_Common_SendMessageDisposition(MESSAGE_CALLBACK_INFO* message_data, IOTHUBMESSAGE_DISPOSITION_RESULT disposition) +{ + (void)disposition; + + IOTHUB_CLIENT_RESULT result; + if (message_data) + { + if (message_data->messageHandle) + { + IoTHubMessage_Destroy(message_data->messageHandle); + result = IOTHUB_CLIENT_OK; + } + else + { + /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_10_002: [If any of the messageData fields are NULL, IoTHubTransport_MQTT_Common_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR. ]*/ + LogError("message handle is NULL"); + result = IOTHUB_CLIENT_ERROR; + } + free(message_data); + } + else + { + /*Codes_SRS_IOTHUB_MQTT_TRANSPORT_10_001: [If messageData is NULL, IoTHubTransport_MQTT_Common_SendMessageDisposition shall fail and return IOTHUB_CLIENT_ERROR. ]*/ + LogError("message_data is NULL"); + result = IOTHUB_CLIENT_ERROR; + } + return result; +} +