(websocket+tls) fix hang in tls handshake which could lead to ANR, discovered through unittesting.
This commit is contained in:
@ -224,7 +224,10 @@ namespace ix
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SocketOpenSSL::openSSLClientHandshake(const std::string& host, std::string& errMsg)
|
||||
bool SocketOpenSSL::openSSLClientHandshake(
|
||||
const std::string& host,
|
||||
std::string& errMsg,
|
||||
const CancellationRequest& isCancellationRequested)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
@ -233,6 +236,12 @@ namespace ix
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isCancellationRequested())
|
||||
{
|
||||
errMsg = "Cancellation requested";
|
||||
return false;
|
||||
}
|
||||
|
||||
ERR_clear_error();
|
||||
int connect_result = SSL_connect(_ssl_connection);
|
||||
if (connect_result == 1)
|
||||
@ -577,7 +586,7 @@ namespace ix
|
||||
X509_VERIFY_PARAM* param = SSL_get0_param(_ssl_connection);
|
||||
X509_VERIFY_PARAM_set1_host(param, host.c_str(), 0);
|
||||
#endif
|
||||
handshakeSuccessful = openSSLClientHandshake(host, errMsg);
|
||||
handshakeSuccessful = openSSLClientHandshake(host, errMsg, isCancellationRequested);
|
||||
}
|
||||
|
||||
if (!handshakeSuccessful)
|
||||
|
Reference in New Issue
Block a user