Index: remoting/protocol/ssl_hmac_channel_authenticator.cc |
diff --git a/remoting/protocol/ssl_hmac_channel_authenticator.cc b/remoting/protocol/ssl_hmac_channel_authenticator.cc |
index 808bd1b85a5ba0d032a7d1f4e9fbe51aca2d1c82..ec6d9bdb9cacd917b72477db82186d538d48bb08 100644 |
--- a/remoting/protocol/ssl_hmac_channel_authenticator.cc |
+++ b/remoting/protocol/ssl_hmac_channel_authenticator.cc |
@@ -151,8 +151,10 @@ class NetStreamSocketAdapter : public net::StreamSocket { |
// Implements P2PStreamSocket interface on top of net::StreamSocket. |
class P2PStreamSocketAdapter : public P2PStreamSocket { |
public: |
- P2PStreamSocketAdapter(scoped_ptr<net::StreamSocket> socket) |
- : socket_(std::move(socket)) {} |
+ P2PStreamSocketAdapter(scoped_ptr<net::StreamSocket> socket, |
+ scoped_ptr<net::SSLServerContext> server_context) |
+ : socket_(std::move(socket)), |
+ server_context_(std::move(server_context)) {} |
~P2PStreamSocketAdapter() override {} |
int Read(const scoped_refptr<net::IOBuffer>& buf, int buf_len, |
@@ -166,6 +168,8 @@ class P2PStreamSocketAdapter : public P2PStreamSocket { |
private: |
scoped_ptr<net::StreamSocket> socket_; |
+ // The server_context_ will be a nullptr for client sockets. |
+ scoped_ptr<net::SSLServerContext> server_context_; |
Sergey Ulanov
2016/03/07 22:30:24
move this above socket_. Otherwise it will be dest
ryanchung
2016/03/07 22:44:06
Done. Thanks!
|
}; |
} // namespace |
@@ -217,8 +221,8 @@ void SslHmacChannelAuthenticator::SecureAndAuthenticate( |
result = net::ERR_FAILED; |
#else |
scoped_refptr<net::X509Certificate> cert = |
- net::X509Certificate::CreateFromBytes( |
- local_cert_.data(), local_cert_.length()); |
+ net::X509Certificate::CreateFromBytes(local_cert_.data(), |
+ local_cert_.length()); |
if (!cert.get()) { |
LOG(ERROR) << "Failed to parse X509Certificate"; |
NotifyError(net::ERR_FAILED); |
@@ -228,9 +232,12 @@ void SslHmacChannelAuthenticator::SecureAndAuthenticate( |
net::SSLServerConfig ssl_config; |
ssl_config.require_ecdhe = true; |
- scoped_ptr<net::SSLServerSocket> server_socket = net::CreateSSLServerSocket( |
- make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket))), |
+ server_context_ = net::CreateSSLServerContext( |
cert.get(), *local_key_pair_->private_key(), ssl_config); |
+ |
+ scoped_ptr<net::SSLServerSocket> server_socket = |
+ server_context_->CreateSSLServerSocket( |
+ make_scoped_ptr(new NetStreamSocketAdapter(std::move(socket)))); |
net::SSLServerSocket* raw_server_socket = server_socket.get(); |
socket_ = std::move(server_socket); |
result = raw_server_socket->Handshake( |
@@ -430,8 +437,8 @@ void SslHmacChannelAuthenticator::CheckDone(bool* callback_called) { |
*callback_called = true; |
base::ResetAndReturn(&done_callback_) |
- .Run(net::OK, |
- make_scoped_ptr(new P2PStreamSocketAdapter(std::move(socket_)))); |
+ .Run(net::OK, make_scoped_ptr(new P2PStreamSocketAdapter( |
+ std::move(socket_), std::move(server_context_)))); |
} |
} |