Skip to content

Commit ba2e35b

Browse files
author
Patrik Fiedler
committed
translate the ssl error flag into human readable exception.
1 parent a6366cd commit ba2e35b

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

Release/src/http/client/http_client_winhttp.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ class winhttp_client : public _http_client_communicator
462462
if(WINHTTP_INVALID_STATUS_CALLBACK == WinHttpSetStatusCallback(
463463
m_hSession,
464464
&winhttp_client::completion_callback,
465-
WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_FLAG_HANDLES,
465+
WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_FLAG_HANDLES | WINHTTP_CALLBACK_FLAG_SECURE_FAILURE,
466466
0))
467467
{
468468
return report_failure(_XPLATSTR("Error registering callback"));
@@ -1092,6 +1092,23 @@ class winhttp_client : public _http_client_communicator
10921092
}
10931093
break;
10941094
}
1095+
case WINHTTP_CALLBACK_STATUS_SECURE_FAILURE:
1096+
{
1097+
auto *flagsPtr = reinterpret_cast<std::uint32_t*>(statusInfo);
1098+
auto flags = *flagsPtr;
1099+
1100+
std::string err = "SSL error: ";
1101+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED) err += "WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED failed to check revocation status. ";
1102+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT) err += "WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT SSL certificate is invalid. ";
1103+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED) err += "WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED SSL certificate was revoked. ";
1104+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA) err += "WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA SSL invalid CA. ";
1105+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID) err += "WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID SSL common name does not match. ";
1106+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID) err += "WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID SLL certificate is expired. ";
1107+
if (flags & WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR) err += "WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR internal error. ";
1108+
1109+
p_request_context->report_exception(std::runtime_error(err));
1110+
break;
1111+
}
10951112
case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE :
10961113
{
10971114
DWORD bytesWritten = *((DWORD *)statusInfo);

0 commit comments

Comments
 (0)