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:
- 29:923be0c3998a
- Parent:
- 28:0cd355c3294e
- Child:
- 30:52ff609606c8
diff -r 0cd355c3294e -r 923be0c3998a iothubtransport_mqtt_common.c --- a/iothubtransport_mqtt_common.c Mon Sep 11 09:22:41 2017 -0700 +++ b/iothubtransport_mqtt_common.c Mon Sep 25 13:37:36 2017 -0700 @@ -178,7 +178,8 @@ bool log_trace; bool raw_trace; TICK_COUNTER_HANDLE msgTickCounter; - OPTIONHANDLER_HANDLE saved_tls_options; // Here are the options from the xio layer if any is saved. + OPTIONHANDLER_HANDLE saved_tls_options; // Here are the options from the xio layer if any is saved. + size_t option_sas_token_lifetime_secs; // Internal lists for message tracking PDLIST_ENTRY waitingToSend; @@ -1570,9 +1571,7 @@ IOTHUB_CREDENTIAL_TYPE cred_type = IoTHubClient_Auth_Get_Credential_Type(transport_data->authorization_module); if (cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_KEY || cred_type == IOTHUB_CREDENTIAL_TYPE_DEVICE_AUTH) { - size_t secSinceEpoch = (size_t)(difftime(get_time(NULL), EPOCH_TIME_T_VALUE) + 0); - size_t expiryTime = secSinceEpoch + SAS_TOKEN_DEFAULT_LIFETIME; - sasToken = IoTHubClient_Auth_Get_SasToken(transport_data->authorization_module, STRING_c_str(transport_data->devicesPath), expiryTime); + sasToken = IoTHubClient_Auth_Get_SasToken(transport_data->authorization_module, STRING_c_str(transport_data->devicesPath), transport_data->option_sas_token_lifetime_secs); if (sasToken == NULL) { LogError("failure getting sas token from IoTHubClient_Auth_Get_SasToken."); @@ -1742,7 +1741,7 @@ } else { - if ((current_time - transport_data->mqtt_connect_time) / 1000 > (SAS_TOKEN_DEFAULT_LIFETIME*SAS_REFRESH_MULTIPLIER)) + if ((current_time - transport_data->mqtt_connect_time) / 1000 > (transport_data->option_sas_token_lifetime_secs*SAS_REFRESH_MULTIPLIER)) { /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_058: [ If the sas token has timed out IoTHubTransport_MQTT_Common_DoWork shall disconnect from the mqtt client and destroy the transport information and wait for reconnect. ] */ OPTIONHANDLER_HANDLE options = xio_retrieveoptions(transport_data->xioTransport); @@ -1913,6 +1912,7 @@ srand((unsigned int)get_time(NULL)); state->authorization_module = auth_module; state->isProductInfoSet = false; + state->option_sas_token_lifetime_secs = SAS_TOKEN_DEFAULT_LIFETIME; } } } @@ -2585,6 +2585,13 @@ mqtt_client_set_trace(transport_data->mqttClient, transport_data->log_trace, transport_data->raw_trace); result = IOTHUB_CLIENT_OK; } + /* Codes_SRS_IOTHUB_TRANSPORT_MQTT_COMMON_07_052: [ If the option parameter is set to "sas_token_lifetime" then the value shall be a size_t_ptr and the value will determine the mqtt sas token lifetime.] */ + else if (strcmp(OPTION_SAS_TOKEN_LIFETIME, option) == 0) + { + size_t* sas_lifetime = (size_t*)value; + transport_data->option_sas_token_lifetime_secs = *sas_lifetime; + result = IOTHUB_CLIENT_OK; + } else if (strcmp(OPTION_KEEP_ALIVE, option) == 0) { /* Codes_SRS_IOTHUB_MQTT_TRANSPORT_07_036: [If the option parameter is set to "keepalive" then the value shall be a int_ptr and the value will determine the mqtt keepalive time that is set for pings.] */