in source/azure_iot_hub_client.c [1197:1253]
AzureIoTResult_t AzureIoTHubClient_SubscribeProperties( AzureIoTHubClient_t * pxAzureIoTHubClient,
AzureIoTHubClientPropertiesCallback_t xCallback,
void * prvCallbackContext,
uint32_t ulTimeoutMilliseconds )
{
AzureIoTMQTTSubscribeInfo_t xMqttSubscription[ 2 ] = { { 0 }, { 0 } };
AzureIoTMQTTResult_t xMQTTResult;
AzureIoTResult_t xResult;
uint16_t usSubscribePacketIdentifier;
AzureIoTHubClientReceiveContext_t * pxContext;
if( ( pxAzureIoTHubClient == NULL ) ||
( xCallback == NULL ) )
{
AZLogError( ( "AzureIoTHubClient_SubscribeProperties failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
pxContext = &pxAzureIoTHubClient->_internal.xReceiveContext[ azureiothubRECEIVE_CONTEXT_INDEX_PROPERTIES ];
xMqttSubscription[ 0 ].xQoS = eAzureIoTMQTTQoS0;
xMqttSubscription[ 0 ].pcTopicFilter = ( const uint8_t * ) AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_SUBSCRIBE_TOPIC;
xMqttSubscription[ 0 ].usTopicFilterLength = ( uint16_t ) sizeof( AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_SUBSCRIBE_TOPIC ) - 1;
xMqttSubscription[ 1 ].xQoS = eAzureIoTMQTTQoS0;
xMqttSubscription[ 1 ].pcTopicFilter = ( const uint8_t * ) AZ_IOT_HUB_CLIENT_PROPERTIES_WRITABLE_UPDATES_SUBSCRIBE_TOPIC;
xMqttSubscription[ 1 ].usTopicFilterLength = ( uint16_t ) sizeof( AZ_IOT_HUB_CLIENT_PROPERTIES_WRITABLE_UPDATES_SUBSCRIBE_TOPIC ) - 1;
usSubscribePacketIdentifier = AzureIoTMQTT_GetPacketId( &( pxAzureIoTHubClient->_internal.xMQTTContext ) );
AZLogDebug( ( "Attempting to subscribe to the MQTT topics: %s and %s",
AZ_IOT_HUB_CLIENT_PROPERTIES_MESSAGE_SUBSCRIBE_TOPIC, AZ_IOT_HUB_CLIENT_PROPERTIES_WRITABLE_UPDATES_SUBSCRIBE_TOPIC ) );
if( ( xMQTTResult = AzureIoTMQTT_Subscribe( &( pxAzureIoTHubClient->_internal.xMQTTContext ),
xMqttSubscription, 2,
usSubscribePacketIdentifier ) ) != eAzureIoTMQTTSuccess )
{
AZLogError( ( "Properties subscribe failed: MQTT error=0x%08x", xMQTTResult ) );
xResult = eAzureIoTErrorSubscribeFailed;
}
else
{
pxContext->_internal.usState = azureiothubTOPIC_SUBSCRIBE_STATE_SUB;
pxContext->_internal.usMqttSubPacketID = usSubscribePacketIdentifier;
pxContext->_internal.pxProcessFunction = prvAzureIoTHubClientPropertiesProcess;
pxContext->_internal.callbacks.xPropertiesCallback = xCallback;
pxContext->_internal.pvCallbackContext = prvCallbackContext;
if( ( xResult = prvWaitForSubAck( pxAzureIoTHubClient, pxContext,
ulTimeoutMilliseconds ) ) != eAzureIoTSuccess )
{
AZLogError( ( "Wait for properties sub ack failed: error=0x%08x", xResult ) );
memset( pxContext, 0, sizeof( AzureIoTHubClientReceiveContext_t ) );
}
}
}
return xResult;
}