Microsoft Azure IoTHub client libraries
Dependents: sht15_remote_monitoring RobotArmDemo iothub_client_sample_amqp f767zi_mqtt ... more
This library implements the Microsoft Azure IoTHub client library. The code is replicated from https://github.com/Azure/azure-iot-sdks
Diff: iothub_client_ll.c
- Revision:
- 77:e4e36df9caee
- Parent:
- 75:86205ca63a59
- Child:
- 78:74a8d3068204
--- a/iothub_client_ll.c Mon Sep 25 13:37:53 2017 -0700 +++ b/iothub_client_ll.c Sat Oct 21 20:11:49 2017 +0000 @@ -18,6 +18,7 @@ #include "iothub_client_private.h" #include "iothub_client_options.h" #include "iothub_client_version.h" +#include "iothub_client_diagnostic.h" #include <stdint.h> #ifdef USE_DPS_MODULE @@ -86,6 +87,7 @@ bool complete_twin_update_encountered; IOTHUB_AUTHORIZATION_HANDLE authorization_module; STRING_HANDLE product_info; + IOTHUB_DIAGNOSTIC_SETTING_DATA diagnostic_setting; }IOTHUB_CLIENT_LL_HANDLE_DATA; static const char HOSTNAME_TOKEN[] = "HostName"; @@ -183,6 +185,7 @@ static IOTHUB_CLIENT_LL_HANDLE_DATA* initialize_iothub_client(const IOTHUB_CLIENT_CONFIG* client_config, const IOTHUB_CLIENT_DEVICE_CONFIG* device_config, bool use_dev_auth) { IOTHUB_CLIENT_LL_HANDLE_DATA* result; + srand((unsigned int)time(NULL)); STRING_HANDLE product_info = make_product_info(NULL); if (product_info == NULL) { @@ -421,6 +424,9 @@ /*Codes_SRS_IOTHUBCLIENT_LL_02_042: [ By default, messages shall not timeout. ]*/ result->currentMessageTimeout = 0; result->current_device_twin_timeout = 0; + + result->diagnostic_setting.currentMessageNumber = 0; + result->diagnostic_setting.diagSamplingPercentage = 0; /*Codes_SRS_IOTHUBCLIENT_LL_25_124: [ `IoTHubClient_LL_Create` shall set the default retry policy as Exponential backoff with jitter and if succeed and return a `non-NULL` handle. ]*/ if (IoTHubClient_LL_SetRetryPolicy(result, IOTHUB_CLIENT_RETRY_EXPONENTIAL_BACKOFF_WITH_JITTER, 0) != IOTHUB_CLIENT_OK) { @@ -1040,11 +1046,18 @@ /*Codes_SRS_IOTHUBCLIENT_LL_02_013: [IoTHubClient_LL_SendEventAsync shall add the DLIST waitingToSend a new record cloning the information from eventMessageHandle, eventConfirmationCallback, userContextCallback.]*/ if ((newEntry->messageHandle = IoTHubMessage_Clone(eventMessageHandle)) == NULL) { - /*Codes_SRS_IOTHUBCLIENT_LL_02_014: [If cloning and/or adding the information fails for any reason, IoTHubClient_LL_SendEventAsync shall fail and return IOTHUB_CLIENT_ERROR.] */ result = IOTHUB_CLIENT_ERROR; free(newEntry); LOG_ERROR_RESULT; } + else if (IoTHubClient_Diagnostic_AddIfNecessary(&handleData->diagnostic_setting, newEntry->messageHandle) != 0) + { + /*Codes_SRS_IOTHUBCLIENT_LL_02_014: [If cloning and/or adding the information/diagnostic fails for any reason, IoTHubClient_LL_SendEventAsync shall fail and return IOTHUB_CLIENT_ERROR.] */ + result = IOTHUB_CLIENT_ERROR; + IoTHubMessage_Destroy(newEntry->messageHandle); + free(newEntry); + LOG_ERROR_RESULT; + } else { /*Codes_SRS_IOTHUBCLIENT_LL_02_013: [IoTHubClient_LL_SendEventAsync shall add the DLIST waitingToSend a new record cloning the information from eventMessageHandle, eventConfirmationCallback, userContextCallback.]*/ @@ -1707,6 +1720,23 @@ result = IOTHUB_CLIENT_OK; } } + else if (strcmp(optionName, OPTION_DIAGNOSTIC_SAMPLING_PERCENTAGE) == 0) + { + uint32_t percentage = *(uint32_t*)value; + if (percentage > 100) + { + /*Codes_SRS_IOTHUBCLIENT_LL_10_036: [Calling IoTHubClient_LL_SetOption with value > 100 shall return `IOTHUB_CLIENT_ERRROR`. ]*/ + LogError("The value of diag_sampling_percentage is out of range [0, 100]: %u", percentage); + result = IOTHUB_CLIENT_ERROR; + } + else + { + /*Codes_SRS_IOTHUBCLIENT_LL_10_037: [Calling IoTHubClient_LL_SetOption with value between [0, 100] shall return `IOTHUB_CLIENT_OK`. ]*/ + handleData->diagnostic_setting.diagSamplingPercentage = percentage; + handleData->diagnostic_setting.currentMessageNumber = 0; + result = IOTHUB_CLIENT_OK; + } + } else {