in qgsm/cellular_qgsm_api.c [2554:2644]
CellularError_t Cellular_GetHostByName( CellularHandle_t cellularHandle,
uint8_t contextId,
const char * pcHostName,
char * pResolvedAddress )
{
CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
CellularError_t cellularStatus = CELLULAR_SUCCESS;
CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
char cmdBuf[ CELLULAR_AT_CMD_QUERY_DNS_MAX_SIZE ];
cellularDnsQueryResult_t dnsQueryResult = CELLULAR_DNS_QUERY_UNKNOWN;
cellularModuleContext_t * pModuleContext = NULL;
CellularAtReq_t atReqQueryDns =
{
cmdBuf,
CELLULAR_AT_NO_RESULT,
NULL,
NULL,
NULL,
0,
};
/* pContext is checked in _Cellular_CheckLibraryStatus function. */
cellularStatus = _Cellular_CheckLibraryStatus( pContext );
if( cellularStatus != CELLULAR_SUCCESS )
{
LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
}
else if( ( pcHostName == NULL ) || ( pResolvedAddress == NULL ) )
{
cellularStatus = CELLULAR_BAD_PARAMETER;
}
else
{
cellularStatus = _Cellular_IsValidPdn( contextId );
}
if( cellularStatus == CELLULAR_SUCCESS )
{
cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
}
if( cellularStatus == CELLULAR_SUCCESS )
{
PlatformMutex_Lock( &pModuleContext->dnsQueryMutex );
pModuleContext->dnsResultNumber = 0;
pModuleContext->dnsIndex = 0;
( void ) xQueueReset( pModuleContext->pktDnsQueue );
cellularStatus = registerDnsEventCallback( pModuleContext, _dnsResultCallback, pResolvedAddress );
}
/* Send the AT command and wait the URC result. */
if( cellularStatus == CELLULAR_SUCCESS )
{
/* The return value of snprintf is not used.
* The max length of the string is fixed and checked offline. */
/* coverity[misra_c_2012_rule_21_6_violation]. */
( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_QUERY_DNS_MAX_SIZE,
"AT+QIDNSGIP=%u,\"%s\"", contextId, pcHostName );
pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqQueryDns );
if( pktStatus != CELLULAR_PKT_STATUS_OK )
{
LogError( ( "Cellular_GetHostByName: couldn't resolve host name" ) );
cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
PlatformMutex_Unlock( &pModuleContext->dnsQueryMutex );
}
}
/* URC handler calls the callback to unblock this function. */
if( cellularStatus == CELLULAR_SUCCESS )
{
if( xQueueReceive( pModuleContext->pktDnsQueue, &dnsQueryResult,
pdMS_TO_TICKS( DNS_QUERY_TIMEOUT_MS ) ) == pdTRUE )
{
if( dnsQueryResult != CELLULAR_DNS_QUERY_SUCCESS )
{
cellularStatus = CELLULAR_UNKNOWN;
}
}
else
{
( void ) registerDnsEventCallback( pModuleContext, NULL, NULL );
cellularStatus = CELLULAR_TIMEOUT;
}
PlatformMutex_Unlock( &pModuleContext->dnsQueryMutex );
}
return cellularStatus;
}