in source/azure_iot_hub_client.c [1124:1194]
AzureIoTResult_t AzureIoTHubClient_SendCommandResponse( AzureIoTHubClient_t * pxAzureIoTHubClient,
const AzureIoTHubClientCommandRequest_t * pxMessage,
uint32_t ulStatus,
const uint8_t * pucCommandPayload,
uint32_t ulCommandPayloadLength )
{
AzureIoTMQTTResult_t xMQTTResult;
AzureIoTResult_t xResult;
AzureIoTMQTTPublishInfo_t xMQTTPublishInfo = { 0 };
az_span xRequestID;
size_t xTopicLength;
az_result xCoreResult;
if( ( pxAzureIoTHubClient == NULL ) ||
( pxMessage == NULL ) )
{
AZLogError( ( "AzureIoTHubClient_SendCommandResponse failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else if( ( pxMessage->pucRequestID == NULL ) || ( pxMessage->usRequestIDLength == 0 ) )
{
AZLogError( ( "AzureIoTHubClient_SendCommandResponse failed: invalid request id " ) );
xResult = eAzureIoTErrorFailed;
}
else
{
xRequestID = az_span_create( ( uint8_t * ) pxMessage->pucRequestID, ( int32_t ) pxMessage->usRequestIDLength );
if( az_result_failed(
xCoreResult =
az_iot_hub_client_commands_response_get_publish_topic( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
xRequestID, ( uint16_t ) ulStatus,
( char * ) pxAzureIoTHubClient->_internal.pucWorkingBuffer,
pxAzureIoTHubClient->_internal.ulWorkingBufferLength,
&xTopicLength ) ) )
{
AZLogError( ( "Failed to get command response topic: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
else
{
xMQTTPublishInfo.xQOS = eAzureIoTMQTTQoS0;
xMQTTPublishInfo.pcTopicName = pxAzureIoTHubClient->_internal.pucWorkingBuffer;
xMQTTPublishInfo.usTopicNameLength = ( uint16_t ) xTopicLength;
if( ( pucCommandPayload == NULL ) || ( ulCommandPayloadLength == 0 ) )
{
xMQTTPublishInfo.pvPayload = ( const void * ) azureiothubCOMMAND_EMPTY_RESPONSE;
xMQTTPublishInfo.xPayloadLength = sizeof( azureiothubCOMMAND_EMPTY_RESPONSE ) - 1;
}
else
{
xMQTTPublishInfo.pvPayload = ( const void * ) pucCommandPayload;
xMQTTPublishInfo.xPayloadLength = ulCommandPayloadLength;
}
if( ( xMQTTResult = AzureIoTMQTT_Publish( &( pxAzureIoTHubClient->_internal.xMQTTContext ),
&xMQTTPublishInfo, 0 ) ) != eAzureIoTMQTTSuccess )
{
AZLogError( ( "Failed to publish response: MQTT error=0x%08x", xMQTTResult ) );
xResult = eAzureIoTErrorPublishFailed;
}
else
{
xResult = eAzureIoTSuccess;
}
}
}
return xResult;
}