in source/azure_iot_provisioning_client.c [909:959]
AzureIoTResult_t AzureIoTProvisioningClient_GetDeviceAndHub( AzureIoTProvisioningClient_t * pxAzureProvClient,
uint8_t * pucHubHostname,
uint32_t * pulHostnameLength,
uint8_t * pucDeviceID,
uint32_t * pulDeviceIDLength )
{
uint32_t ulHostnameLength;
uint32_t ulDeviceIDLength;
AzureIoTResult_t xResult;
az_span * pxHostname;
az_span * pxDeviceID;
if( ( pxAzureProvClient == NULL ) || ( pucHubHostname == NULL ) ||
( pulHostnameLength == NULL ) || ( pucDeviceID == NULL ) || ( pulDeviceIDLength == NULL ) )
{
AZLogError( ( "AzureIoTProvisioningClient_GetDeviceAndHub failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else if( pxAzureProvClient->_internal.ulWorkflowState != azureiotprovisioningWF_STATE_COMPLETE )
{
AZLogError( ( "AzureIoTProvisioning client state is not in complete state" ) );
xResult = eAzureIoTErrorFailed;
}
else if( pxAzureProvClient->_internal.ulLastOperationResult )
{
xResult = pxAzureProvClient->_internal.ulLastOperationResult;
}
else
{
pxHostname = &pxAzureProvClient->_internal.xRegisterResponse.registration_state.assigned_hub_hostname;
pxDeviceID = &pxAzureProvClient->_internal.xRegisterResponse.registration_state.device_id;
ulHostnameLength = ( uint32_t ) az_span_size( *pxHostname );
ulDeviceIDLength = ( uint32_t ) az_span_size( *pxDeviceID );
if( ( *pulHostnameLength < ulHostnameLength ) || ( *pulDeviceIDLength < ulDeviceIDLength ) )
{
AZLogWarn( ( "AzureIoTProvisioning memory buffer passed is not enough to store hub info" ) );
xResult = eAzureIoTErrorFailed;
}
else
{
memcpy( pucHubHostname, az_span_ptr( *pxHostname ), ulHostnameLength );
memcpy( pucDeviceID, az_span_ptr( *pxDeviceID ), ulDeviceIDLength );
*pulHostnameLength = ulHostnameLength;
*pulDeviceIDLength = ulDeviceIDLength;
xResult = eAzureIoTSuccess;
}
}
return xResult;
}