in source/azure_iot_hub_client.c [201:244]
static uint32_t prvAzureIoTHubClientC2DProcess( AzureIoTHubClientReceiveContext_t * pxContext,
AzureIoTHubClient_t * pxAzureIoTHubClient,
void * pvPublishInfo )
{
AzureIoTResult_t xResult;
AzureIoTHubClientCloudToDeviceMessageRequest_t xCloudToDeviceMessage = { 0 };
AzureIoTMQTTPublishInfo_t * xMQTTPublishInfo = ( AzureIoTMQTTPublishInfo_t * ) pvPublishInfo;
az_result xCoreResult;
az_iot_hub_client_c2d_request xOutEmbeddedRequest;
az_span xTopicSpan = az_span_create( ( uint8_t * ) xMQTTPublishInfo->pcTopicName, xMQTTPublishInfo->usTopicNameLength );
/* Failed means no topic match. This means the message is not for cloud to device messaging. */
xCoreResult = az_iot_hub_client_c2d_parse_received_topic( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
xTopicSpan, &xOutEmbeddedRequest );
if( az_result_failed( xCoreResult ) )
{
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
AZLogDebug( ( "Cloud xCloudToDeviceMessage topic: %.*s with payload : %.*s",
xMQTTPublishInfo->usTopicNameLength,
xMQTTPublishInfo->pcTopicName,
xMQTTPublishInfo->xPayloadLength,
( const char * ) xMQTTPublishInfo->pvPayload ) );
if( pxContext->_internal.callbacks.xCloudToDeviceMessageCallback )
{
xCloudToDeviceMessage.pvMessagePayload = xMQTTPublishInfo->pvPayload;
xCloudToDeviceMessage.ulPayloadLength = ( uint32_t ) xMQTTPublishInfo->xPayloadLength;
xCloudToDeviceMessage.xProperties._internal.xProperties = xOutEmbeddedRequest.properties;
AZLogDebug( ( "Invoking Cloud to Device callback" ) );
pxContext->_internal.callbacks.xCloudToDeviceMessageCallback( &xCloudToDeviceMessage,
pxContext->_internal.pvCallbackContext );
AZLogDebug( ( "Returned from Cloud to Device callback" ) );
}
xResult = eAzureIoTSuccess;
}
return ( uint32_t ) xResult;
}