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:
- 80:db5f5237bc95
- Parent:
- 78:74a8d3068204
- Child:
- 81:8de701563187
diff -r bb88037c05e6 -r db5f5237bc95 iothub_client_ll.c --- a/iothub_client_ll.c Fri Nov 17 13:57:39 2017 -0800 +++ b/iothub_client_ll.c Fri Dec 15 14:09:20 2017 -0800 @@ -97,6 +97,8 @@ static const char DEVICEKEY_TOKEN[] = "SharedAccessKey"; static const char DEVICESAS_TOKEN[] = "SharedAccessSignature"; static const char PROTOCOL_GATEWAY_HOST[] = "GatewayHostName"; +static const char PROVISIONING_TOKEN[] = "UseProvisioning"; +static const char PROVISIONING_ACCEPTABLE_VALUE[] = "true"; static void setTransportProtocol(IOTHUB_CLIENT_LL_HANDLE_DATA* handleData, TRANSPORT_PROVIDER* protocol) { @@ -538,7 +540,6 @@ memset(config, 0, sizeof(IOTHUB_CLIENT_CONFIG) ); config->protocol = protocol; config->deviceId = device_id; - //config->useDeviceAuthKey = 1; // Find the iothub suffix initial = iterator = iothub_uri; @@ -567,6 +568,7 @@ { LogError("Failed to allocate iothub suffix"); free(iothub_name); + iothub_name = NULL; result = NULL; } } @@ -698,6 +700,7 @@ else { int isx509found = 0; + bool use_provisioning = false; while ((STRING_TOKENIZER_get_next_token(tokenizer1, tokenString, "=") == 0)) { if (STRING_TOKENIZER_get_next_token(tokenizer1, valueString, ";") != 0) @@ -797,6 +800,19 @@ isx509found = 1; } } + else if (strcmp(s_token, PROVISIONING_TOKEN) == 0) + { + if (strcmp(STRING_c_str(valueString), PROVISIONING_ACCEPTABLE_VALUE) != 0) + { + LogError("provisioning option has wrong value, the only acceptable one is \"true\""); + break; + } + else + { + use_provisioning = 1; + } + } + /* Codes_SRS_IOTHUBCLIENT_LL_04_001: [IoTHubClient_LL_CreateFromConnectionString shall verify the existence of key/value pair GatewayHostName. If it does exist it shall pass the value to IoTHubClient_LL_Create API.] */ else if (strcmp(s_token, PROTOCOL_GATEWAY_HOST) == 0) { @@ -831,17 +847,17 @@ result = NULL; } else if (!( - ((!isx509found) && (config->deviceSasToken == NULL) ^ (config->deviceKey == NULL)) || - ((isx509found) && (config->deviceSasToken == NULL) && (config->deviceKey == NULL)) + ((!use_provisioning && !isx509found) && (config->deviceSasToken == NULL) ^ (config->deviceKey == NULL)) || + ((use_provisioning || isx509found) && (config->deviceSasToken == NULL) && (config->deviceKey == NULL)) )) { - LogError("invalid combination of x509, deviceSasToken and deviceKey"); + LogError("invalid combination of x509, provisioning, deviceSasToken and deviceKey"); result = NULL; } else { /* Codes_SRS_IOTHUBCLIENT_LL_12_011: [IoTHubClient_LL_CreateFromConnectionString shall call into the IoTHubClient_LL_Create API with the current structure and returns with the return value of it] */ - result = initialize_iothub_client(config, NULL, false); + result = initialize_iothub_client(config, NULL, use_provisioning); if (result == NULL) { LogError("IoTHubClient_LL_Create failed"); @@ -2058,6 +2074,7 @@ IOTHUB_CLIENT_RESULT result; /*Codes_SRS_IOTHUBCLIENT_LL_02_061: [ If iotHubClientHandle is NULL then IoTHubClient_LL_UploadToBlob shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/ /*Codes_SRS_IOTHUBCLIENT_LL_02_062: [ If destinationFileName is NULL then IoTHubClient_LL_UploadToBlob shall fail and return IOTHUB_CLIENT_INVALID_ARG. ]*/ + /*Codes_SRS_IOTHUBCLIENT_LL_02_063: [ If `source` is `NULL` and size is greater than 0 then `IoTHubClient_LL_UploadToBlob` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/ if ( (iotHubClientHandle == NULL) || (destinationFileName == NULL) || @@ -2073,4 +2090,27 @@ } return result; } -#endif + +IOTHUB_CLIENT_RESULT IoTHubClient_LL_UploadMultipleBlocksToBlob(IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle, const char* destinationFileName, IOTHUB_CLIENT_FILE_UPLOAD_GET_DATA_CALLBACK getDataCallback, void* context) +{ + IOTHUB_CLIENT_RESULT result; + /*Codes_SRS_IOTHUBCLIENT_LL_99_005: [ If `iotHubClientHandle` is `NULL` then `IoTHubClient_LL_UploadMultipleBlocksToBlob` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/ + /*Codes_SRS_IOTHUBCLIENT_LL_99_006: [ If `destinationFileName` is `NULL` then `IoTHubClient_LL_UploadMultipleBlocksToBlob` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/ + /*Codes_SRS_IOTHUBCLIENT_LL_99_007: [ If `getDataCallback` is `NULL` then `IoTHubClient_LL_UploadMultipleBlocksToBlob` shall fail and return `IOTHUB_CLIENT_INVALID_ARG`. ]*/ + if ( + (iotHubClientHandle == NULL) || + (destinationFileName == NULL) || + (getDataCallback == NULL) + ) + { + LogError("invalid parameters IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle=%p, const char* destinationFileName=%p, getDataCallback=%p", iotHubClientHandle, destinationFileName, getDataCallback); + result = IOTHUB_CLIENT_INVALID_ARG; + } + else + { + result = IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl(iotHubClientHandle->uploadToBlobHandle, destinationFileName, getDataCallback, context); + } + return result; +} + +#endif /* DONT_USE_UPLOADTOBLOB */