AWS_CORE_API AWSError CoreErrorsMapper::GetErrorForHttpResponseCode()

in src/aws-cpp-sdk-core/source/client/CoreErrors.cpp [110:150]


AWS_CORE_API AWSError<CoreErrors> CoreErrorsMapper::GetErrorForHttpResponseCode(HttpResponseCode code)
{
    // best effort attempt to map HTTP response codes to CoreErrors
    bool retryable = IsRetryableHttpResponseCode(code);
    AWSError<CoreErrors> error;
    switch (code)
    {
        case HttpResponseCode::UNAUTHORIZED:
        case HttpResponseCode::FORBIDDEN:
            error =  AWSError<CoreErrors>(CoreErrors::ACCESS_DENIED, retryable);
            break;
        case HttpResponseCode::NOT_FOUND:
            error = AWSError<CoreErrors>(CoreErrors::RESOURCE_NOT_FOUND, retryable);
            break;
        case HttpResponseCode::TOO_MANY_REQUESTS:
            error = AWSError<CoreErrors>(CoreErrors::SLOW_DOWN, retryable);
            break;
        case HttpResponseCode::INTERNAL_SERVER_ERROR:
            error = AWSError<CoreErrors>(CoreErrors::INTERNAL_FAILURE, retryable);
            break;
        case HttpResponseCode::BANDWIDTH_LIMIT_EXCEEDED:
            error = AWSError<CoreErrors>(CoreErrors::THROTTLING, retryable);
            break;
        case HttpResponseCode::SERVICE_UNAVAILABLE:
            error = AWSError<CoreErrors>(CoreErrors::SERVICE_UNAVAILABLE, retryable);
            break;
        case HttpResponseCode::REQUEST_TIMEOUT:
        case HttpResponseCode::AUTHENTICATION_TIMEOUT:
        case HttpResponseCode::LOGIN_TIMEOUT:
        case HttpResponseCode::GATEWAY_TIMEOUT:
        case HttpResponseCode::NETWORK_READ_TIMEOUT:
        case HttpResponseCode::NETWORK_CONNECT_TIMEOUT:
            error = AWSError<CoreErrors>(CoreErrors::REQUEST_TIMEOUT, retryable);
            break;
        default:
            int codeValue = static_cast<int>(code);
            error = AWSError<CoreErrors>(CoreErrors::UNKNOWN, codeValue >= 500 && codeValue < 600);
    }
    error.SetResponseCode(code);
    return error;
}