Azure / azure-iot-sdk-c

A C99 SDK for connecting devices to Microsoft Azure IoT services
https://azure.github.io/azure-iot-sdk-c
Other
588 stars 737 forks source link

How to access IoTHubClient_Auth_Get_SasToken #2653

Open AndreRicardo-Zoetis opened 1 month ago

AndreRicardo-Zoetis commented 1 month ago

We currently call IoTHubDeviceClient_LL_AzureStorageInitializeBlobUpload and pass the SAS token to an external process. We are going to upload larger files and do not want to do it in the C/ADU code, thus the external process.

 if (IoTHubDeviceClient_LL_AzureStorageInitializeBlobUpload(
            device_ll_handle, path, &uploadCorrelationId, sas)
        != IOTHUB_CLIENT_OK)
    {

The issue is that we also need to call IoTHubDeviceClient_LL_AzureStorageNotifyBlobUploadCompletion or the files/notifications endpoint or we get error 403006 "Number of active file upload requests exceeded limit"

AducIotAgent[21124]: Info: HTTP Response:{"Message":"{\"errorCode\":403006,\"message\":\"Number of active file upload requests exceeded limit\",\"trackingId\":\"395BB5681CF848498AA9C3227DE274D5-G2:-TimeStamp:2024-09-10T12:45:06.852386663Z\",\"timestampUtc\":\"2024-09-10T12:45:06.852386663Z\",\"info\":null}","ExceptionMessage":""}

We were planning to notify IoT by calling in the external process the equivalent of POST to https://our_iot_hub.azure-devices.net/devices/my-device/files/notifications

curl --request POST \
  --url 'https://our_iot_hub.azure-devices.net/devices/my-device/files/notifications?api-version=2021-04-12' \
  --header 'Authorization: SharedAccessSignature sr=our_iot_hub.azure-devices.net&sig=[REDACTED]&se=1726066175&skn=iothubowner' \
  --header 'content-type: application/json' \
  --data '{
        "correlationId": "MjA....",
        "isSuccess": true,
        "statusCode": 200,
        "statusDescription": "File uploaded successfully"
  }'

In order to get this signature we would like to call the equivalent from the Azure IoT C SDK IoTHubClient_Auth_Get_SasToken

https://github.com/Azure/azure-iot-sdk-c/blob/b8af2f4ee2b909e5c6a72b8f95bda4ba62e2052d/iothub_client/src/iothub_client_ll_uploadtoblob.c#L348-L349

Any way we can do this?