@@ -56,7 +56,7 @@ SrsSslClient::~SrsSslClient()
56
56
57
57
#pragma GCC diagnostic push
58
58
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
59
- srs_error_t SrsSslClient::handshake ()
59
+ srs_error_t SrsSslClient::handshake (const std::string& hostname )
60
60
{
61
61
srs_error_t err = srs_success;
62
62
@@ -88,6 +88,11 @@ srs_error_t SrsSslClient::handshake()
88
88
// SSL setup active, as client role.
89
89
SSL_set_connect_state (ssl);
90
90
SSL_set_mode (ssl, SSL_MODE_ENABLE_PARTIAL_WRITE);
91
+ // If the server address is not in IP address format, set the hostname
92
+ // in the Server Name Indication (SNI) field.
93
+ if (! srs_check_ip_addr_valid (hostname)) {
94
+ SSL_set_tlsext_host_name (ssl, hostname.c_str ());
95
+ }
91
96
92
97
// Send ClientHello.
93
98
int r0 = SSL_do_handshake (ssl); int r1 = SSL_get_error (ssl, r0); ERR_clear_error ();
@@ -468,7 +473,7 @@ srs_error_t SrsHttpClient::connect()
468
473
469
474
srs_utime_t starttime = srs_update_system_time ();
470
475
471
- if ((err = ssl_transport->handshake ()) != srs_success) {
476
+ if ((err = ssl_transport->handshake (host )) != srs_success) {
472
477
disconnect ();
473
478
return srs_error_wrap (err, " http: ssl connect %s %s:%d to=%dms, rto=%dms" ,
474
479
schema_.c_str (), host.c_str (), port, srsu2msi (timeout), srsu2msi (recv_timeout));
0 commit comments