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_uploadtoblob.c
- Revision:
- 86:a1352899ea45
- Parent:
- 82:f94e6bed4495
- Child:
- 88:248736be106e
--- a/iothub_client_ll_uploadtoblob.c Tue Mar 20 10:29:00 2018 -0700 +++ b/iothub_client_ll_uploadtoblob.c Mon Apr 16 14:25:56 2018 -0700 @@ -71,6 +71,7 @@ char* certificates; /*if there are any certificates used*/ HTTP_PROXY_OPTIONS http_proxy_options; size_t curl_verbose; + size_t blob_upload_timeout_secs; }IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA; typedef struct BLOB_UPLOAD_CONTEXT_TAG @@ -123,6 +124,7 @@ handleData->certificates = NULL; memset(&(handleData->http_proxy_options), 0, sizeof(HTTP_PROXY_OPTIONS)); handleData->curl_verbose = 0; + handleData->blob_upload_timeout_secs = 0; if ((config->deviceSasToken != NULL) && (config->deviceKey == NULL)) { @@ -804,6 +806,22 @@ return IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_OK; } +static HTTPAPIEX_RESULT set_transfer_timeout(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE_DATA* handleData, HTTPAPIEX_HANDLE iotHubHttpApiExHandle) +{ + HTTPAPIEX_RESULT result; + if (handleData->blob_upload_timeout_secs != 0) + { + // Convert the timeout to milliseconds for curl + long http_timeout = (long)handleData->blob_upload_timeout_secs * 1000; + result = HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_HTTP_TIMEOUT, &http_timeout); + } + else + { + result = HTTPAPIEX_OK; + } + return result; +} + IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(IOTHUB_CLIENT_LL_UPLOADTOBLOB_HANDLE handle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK_EX getDataCallbackEx, void* context) { IOTHUB_CLIENT_RESULT result; @@ -833,6 +851,13 @@ LogError("unable to HTTPAPIEX_Create"); result = IOTHUB_CLIENT_ERROR; } + /*Codes_SRS_IOTHUBCLIENT_LL_30_020: [ If the blob_upload_timeout_secs option has been set to non-zero, IoTHubClient_LL_UploadMultipleBlocksToBlob(Ex) shall set the timeout on the underlying transport accordingly. ]*/ + else if (set_transfer_timeout(handleData, iotHubHttpApiExHandle) != HTTPAPIEX_OK) + { + LogError("unable to set blob transfer timeout"); + result = IOTHUB_CLIENT_ERROR; + + } else { (void)HTTPAPIEX_SetOption(iotHubHttpApiExHandle, OPTION_CURL_VERBOSE, &handleData->curl_verbose); @@ -1194,7 +1219,7 @@ } } } - else if (strcmp("TrustedCerts", optionName) == 0) + else if (strcmp(OPTION_TRUSTED_CERT, optionName) == 0) { if (value == NULL) { @@ -1284,6 +1309,11 @@ handleData->curl_verbose = *(size_t*)value; result = IOTHUB_CLIENT_OK; } + else if (strcmp(optionName, OPTION_BLOB_UPLOAD_TIMEOUT_SECS) == 0) + { + handleData->blob_upload_timeout_secs = *(size_t*)value; + result = IOTHUB_CLIENT_OK; + } else { /*Codes_SRS_IOTHUBCLIENT_LL_02_102: [ If an unknown option is presented then IoTHubClient_LL_UploadToBlob_SetOption shall return IOTHUB_CLIENT_INVALID_ARG. ]*/