static bool decideAboutReadRetry()

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;
}