in source/core_sntp_client.c [760:813]
static bool decideAboutReadRetry( const SntpTimestamp_t * pCurrentTime,
const SntpTimestamp_t * pReadStartTime,
const SntpTimestamp_t * pRequestTime,
uint32_t responseTimeoutMs,
uint32_t blockTimeMs,
bool * pHasResponseTimedOut )
{
uint64_t timeSinceRequestMs = 0UL;
uint64_t timeElapsedInReadAttempts = 0UL;
bool shouldRetry = false;
assert( pCurrentTime != NULL );
assert( pReadStartTime != NULL );
assert( pRequestTime != NULL );
assert( pHasResponseTimedOut != NULL );
/* Calculate time elapsed since the time request was sent to the server
* to determine whether the server response has timed out. */
timeSinceRequestMs = calculateElapsedTimeMs( pCurrentTime, pRequestTime );
/* Calculate the time elapsed across all the read attempts so far to determine
* whether the block time window for reading server response has expired. */
timeElapsedInReadAttempts = calculateElapsedTimeMs( pCurrentTime, pReadStartTime );
/* Check whether a response timeout has occurred to inform whether we should
* wait for server response anymore. */
if( timeSinceRequestMs >= ( uint64_t ) responseTimeoutMs )
{
shouldRetry = false;
*pHasResponseTimedOut = true;
LogError( ( "Unable to receive response: Server response has timed out: "
"RequestTime=%us %ums, TimeoutDuration=%ums, ElapsedTime=%lu",
pRequestTime->seconds, FRACTIONS_TO_MS( pRequestTime->fractions ),
responseTimeoutMs, timeSinceRequestMs ) );
}
/* Check whether the block time window has expired to determine whether read can be retried. */
else if( timeElapsedInReadAttempts >= ( uint64_t ) blockTimeMs )
{
shouldRetry = false;
LogDebug( ( "Did not receive server response: Read block time has expired: "
"BlockTime=%ums, ResponseWaitElapsedTime=%lums",
blockTimeMs, timeSinceRequestMs ) );
}
else
{
shouldRetry = true;
LogDebug( ( "Did not receive server response: Retrying read: "
"BlockTime=%ums, ResponseWaitElapsedTime=%lums, ResponseTimeout=%u",
blockTimeMs, timeSinceRequestMs, responseTimeoutMs ) );
}
return shouldRetry;
}