in source/core_sntp_client.c [43:127]
SntpStatus_t Sntp_Init( SntpContext_t * pContext,
const SntpServerInfo_t * pTimeServers,
size_t numOfServers,
uint32_t serverResponseTimeoutMs,
uint8_t * pNetworkBuffer,
size_t bufferSize,
SntpResolveDns_t resolveDnsFunc,
SntpGetTime_t getSystemTimeFunc,
SntpSetTime_t setSystemTimeFunc,
const UdpTransportInterface_t * pTransportIntf,
const SntpAuthenticationInterface_t * pAuthIntf )
{
SntpStatus_t status = SntpSuccess;
/* Validate pointer parameters are not NULL. */
if( ( pContext == NULL ) || ( pTimeServers == NULL ) ||
( pNetworkBuffer == NULL ) || ( resolveDnsFunc == NULL ) ||
( getSystemTimeFunc == NULL ) || ( setSystemTimeFunc == NULL ) ||
( pTransportIntf == NULL ) )
{
LogError( ( "Invalid parameter: Pointer parameters (except pAuthIntf) cannot be NULL" ) );
status = SntpErrorBadParameter;
}
/* Validate the length of the servers list.*/
else if( numOfServers == 0U )
{
LogError( ( "Invalid parameter: Size of server list cannot be zero" ) );
status = SntpErrorBadParameter;
}
/* Validate that the UDP transport interface functions are valid. */
else if( ( pTransportIntf->recvFrom == NULL ) || ( pTransportIntf->sendTo == NULL ) )
{
LogError( ( "Invalid parameter: Function members of UDP transport interface cannot be NULL" ) );
status = SntpErrorBadParameter;
}
/* If an authentication interface is provided, validate that its function pointer
* members are valid. */
else if( ( pAuthIntf != NULL ) &&
( ( pAuthIntf->generateClientAuth == NULL ) ||
( pAuthIntf->validateServerAuth == NULL ) ) )
{
LogError( ( "Invalid parameter: Function members of authentication interface cannot be NULL" ) );
status = SntpErrorBadParameter;
}
else if( bufferSize < SNTP_PACKET_BASE_SIZE )
{
LogError( ( "Cannot initialize context: Passed network buffer size is less than %u bytes: "
"bufferSize=%lu", SNTP_PACKET_BASE_SIZE, ( unsigned long ) bufferSize ) );
status = SntpErrorBufferTooSmall;
}
else
{
/* Reset the context memory to zero. */
( void ) memset( pContext, 0, sizeof( SntpContext_t ) );
/* Set the members of the context with passed parameters. */
pContext->pTimeServers = pTimeServers;
pContext->numOfServers = numOfServers;
pContext->responseTimeoutMs = serverResponseTimeoutMs;
pContext->pNetworkBuffer = pNetworkBuffer;
pContext->bufferSize = bufferSize;
pContext->resolveDnsFunc = resolveDnsFunc;
pContext->getTimeFunc = getSystemTimeFunc;
pContext->setTimeFunc = setSystemTimeFunc;
/* Copy contents of UDP transport interface to context. */
( void ) memcpy( &pContext->networkIntf, pTransportIntf, sizeof( UdpTransportInterface_t ) );
/* If authentication interface has been passed, copy its contents to the context. */
if( pAuthIntf != NULL )
{
( void ) memcpy( &pContext->authIntf, pAuthIntf, sizeof( SntpAuthenticationInterface_t ) );
}
/* Initialize the packet size member to the standard minimum SNTP packet size.*/
pContext->sntpPacketSize = SNTP_PACKET_BASE_SIZE;
}
return status;
}