in sdk/src/client/Client.cc [53:82]
Client::ClientOutcome Client::AttemptRequest(const std::string & endpoint, const ServiceRequest & request, Http::Method method) const
{
for (int retry =0; ;retry++) {
auto outcome = AttemptOnceRequest(endpoint, request, method);
if (outcome.isSuccess()) {
return outcome;
}
else if (!httpClient_->isEnable()) {
return outcome;
}
else {
if (configuration_.enableDateSkewAdjustment &&
outcome.error().Status() == 403 &&
outcome.error().Message().find("RequestTimeTooSkewed")) {
auto serverTimeStr = analyzeServerTime(outcome.error().Message());
auto serverTime = UtcToUnixTime(serverTimeStr);
if (serverTime != -1) {
std::time_t localTime = std::time(nullptr);
setRequestDateOffset(serverTime - localTime);
}
}
RetryStrategy *retryStrategy = configuration().retryStrategy.get();
if (retryStrategy == nullptr || !retryStrategy->shouldRetry(outcome.error(), retry)) {
return outcome;
}
long sleepTmeMs = retryStrategy->calcDelayTimeMs(outcome.error(), retry);
httpClient_->waitForRetry(sleepTmeMs);
}
}
}