Chromium Code Reviews| 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_)))); |
| } |
| } |