in source/azure_iot_hub_client.c [736:811]
AzureIoTResult_t AzureIoTHubClient_Connect( AzureIoTHubClient_t * pxAzureIoTHubClient,
bool xCleanSession,
bool * pxOutSessionPresent,
uint32_t ulTimeoutMilliseconds )
{
AzureIoTMQTTConnectInfo_t xConnectInfo = { 0 };
AzureIoTResult_t xResult;
AzureIoTMQTTResult_t xMQTTResult;
uint32_t ulPasswordLength = 0;
size_t xMQTTUserNameLength;
az_result xCoreResult;
if( ( pxAzureIoTHubClient == NULL ) || ( pxOutSessionPresent == NULL ) )
{
AZLogError( ( "AzureIoTHubClient_Connect failed: invalid argument" ) );
xResult = eAzureIoTErrorInvalidArgument;
}
else
{
/* Use working buffer for username/password */
xConnectInfo.pcUserName = pxAzureIoTHubClient->_internal.pucWorkingBuffer;
xConnectInfo.pcPassword = xConnectInfo.pcUserName + azureiotconfigUSERNAME_MAX;
if( az_result_failed( xCoreResult = az_iot_hub_client_get_user_name( &pxAzureIoTHubClient->_internal.xAzureIoTHubClientCore,
( char * ) xConnectInfo.pcUserName, azureiotconfigUSERNAME_MAX,
&xMQTTUserNameLength ) ) )
{
AZLogError( ( "Failed to get username: core error=0x%08x", ( uint16_t ) xCoreResult ) );
xResult = AzureIoT_TranslateCoreError( xCoreResult );
}
/* Check if token refresh is set, then generate password */
else if( ( pxAzureIoTHubClient->_internal.pxTokenRefresh ) &&
( pxAzureIoTHubClient->_internal.pxTokenRefresh( pxAzureIoTHubClient,
pxAzureIoTHubClient->_internal.xTimeFunction() +
azureiothubDEFAULT_TOKEN_TIMEOUT_IN_SEC,
pxAzureIoTHubClient->_internal.pucSymmetricKey,
pxAzureIoTHubClient->_internal.ulSymmetricKeyLength,
( uint8_t * ) xConnectInfo.pcPassword, azureiotconfigPASSWORD_MAX,
&ulPasswordLength ) ) )
{
AZLogError( ( "Failed to generate SAS token" ) );
xResult = eAzureIoTErrorFailed;
}
else
{
xConnectInfo.xCleanSession = xCleanSession;
xConnectInfo.pcClientIdentifier = pxAzureIoTHubClient->_internal.pucDeviceID;
xConnectInfo.usClientIdentifierLength = ( uint16_t ) pxAzureIoTHubClient->_internal.ulDeviceIDLength;
xConnectInfo.usUserNameLength = ( uint16_t ) xMQTTUserNameLength;
xConnectInfo.usKeepAliveSeconds = azureiothubKEEP_ALIVE_TIMEOUT_SECONDS;
xConnectInfo.usPasswordLength = ( uint16_t ) ulPasswordLength;
/* Send MQTT CONNECT packet to broker. Last Will and Testament is not used. */
if( ( xMQTTResult = AzureIoTMQTT_Connect( &( pxAzureIoTHubClient->_internal.xMQTTContext ),
&xConnectInfo,
NULL,
ulTimeoutMilliseconds,
pxOutSessionPresent ) ) != eAzureIoTMQTTSuccess )
{
AZLogError( ( "Failed to establish MQTT connection: Server=%.*s, MQTT error=0x%08x",
pxAzureIoTHubClient->_internal.ulHostnameLength, ( const char * ) pxAzureIoTHubClient->_internal.pucHostname,
xMQTTResult ) );
xResult = eAzureIoTErrorFailed;
}
else
{
/* Successfully established a MQTT connection with the broker. */
AZLogInfo( ( "An MQTT connection is established with %.*s", pxAzureIoTHubClient->_internal.ulHostnameLength,
( const char * ) pxAzureIoTHubClient->_internal.pucHostname ) );
xResult = eAzureIoTSuccess;
}
}
}
return xResult;
}