void AzWinHttpLogLastError()

in src/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp [94:179]


void AzWinHttpLogLastError(const char* FuncName)
{
#define AZ_WINHTTP_ERROR(win_http_error) \
    {win_http_error, #win_http_error}
#define AZ_WINHTTP_ERROR_FALLBACK(win_http_error, value) \
    {value, #win_http_error}

    static const std::pair<DWORD, const char*> WIN_HTTP_ERRORS[] = {
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_OUT_OF_HANDLES),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_TIMEOUT),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INTERNAL_ERROR),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INVALID_URL),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_UNRECOGNIZED_SCHEME),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_NAME_NOT_RESOLVED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INVALID_OPTION),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_OPTION_NOT_SETTABLE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SHUTDOWN),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_LOGIN_FAILURE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_OPERATION_CANCELLED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INCORRECT_HANDLE_TYPE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INCORRECT_HANDLE_STATE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CANNOT_CONNECT),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CONNECTION_ERROR),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_RESEND_REQUEST),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CANNOT_CALL_AFTER_OPEN),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_HEADER_NOT_FOUND),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INVALID_SERVER_RESPONSE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INVALID_HEADER),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_INVALID_QUERY_REQUEST),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_HEADER_ALREADY_EXISTS),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_REDIRECT_FAILED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_UNHANDLED_SCRIPT_TYPE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SCRIPT_EXECUTION_ERROR),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_NOT_INITIALIZED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_FAILURE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CERT_DATE_INVALID),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CERT_CN_INVALID),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_INVALID_CA),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CERT_REV_FAILED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CHANNEL_ERROR),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_INVALID_CERT),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CERT_REVOKED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_SECURE_CERT_WRONG_USAGE),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_AUTODETECTION_FAILED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_HEADER_COUNT_EXCEEDED),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_HEADER_SIZE_OVERFLOW),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CLIENT_CERT_NO_PRIVATE_KEY),
            AZ_WINHTTP_ERROR(ERROR_WINHTTP_CLIENT_CERT_NO_ACCESS_PRIVATE_KEY),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED_PROXY, (WINHTTP_ERROR_BASE + 187)),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_SECURE_FAILURE_PROXY, (WINHTTP_ERROR_BASE + 188)),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_RESERVED_189, (WINHTTP_ERROR_BASE + 189)),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH, (WINHTTP_ERROR_BASE + 190)),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_GLOBAL_CALLBACK_FAILED, (WINHTTP_ERROR_BASE + 191)),
            AZ_WINHTTP_ERROR_FALLBACK(ERROR_WINHTTP_FEATURE_DISABLED, (WINHTTP_ERROR_BASE + 192)),
            AZ_WINHTTP_ERROR(ERROR_INVALID_PARAMETER),
            AZ_WINHTTP_ERROR(ERROR_NOT_ENOUGH_MEMORY)
    };
#undef AZ_WINHTTP_ERROR
#undef AZ_WINHTTP_ERROR_FALLBACK

    static const size_t WIN_HTTP_ERRORS_SZ = sizeof(WIN_HTTP_ERRORS) / sizeof(WIN_HTTP_ERRORS[0]);

    const auto lastError = GetLastError();
    size_t errorIdx = 0;
    for(; errorIdx < WIN_HTTP_ERRORS_SZ; ++errorIdx)
    {
        if(WIN_HTTP_ERRORS[errorIdx].first == lastError)
        {
            AWS_LOGSTREAM_ERROR("WinHttp", "Failed to " << FuncName << " with an error code: " << WIN_HTTP_ERRORS[errorIdx].second);
            break;
        }
    }
    if (errorIdx == WIN_HTTP_ERRORS_SZ)
    {
        AWS_LOGSTREAM_ERROR("WinHttp", "Failed to " << FuncName << " with an unknown error code: " << lastError);
    }
}