@@ -462,7 +462,7 @@ class winhttp_client : public _http_client_communicator
462
462
if (WINHTTP_INVALID_STATUS_CALLBACK == WinHttpSetStatusCallback (
463
463
m_hSession,
464
464
&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 ,
466
466
0 ))
467
467
{
468
468
return report_failure (_XPLATSTR (" Error registering callback" ));
@@ -1092,6 +1092,23 @@ class winhttp_client : public _http_client_communicator
1092
1092
}
1093
1093
break ;
1094
1094
}
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
+ }
1095
1112
case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE :
1096
1113
{
1097
1114
DWORD bytesWritten = *((DWORD *)statusInfo);
0 commit comments