Chromium Code Reviews| Index: remoting/protocol/jingle_stream_connector.cc |
| diff --git a/remoting/protocol/jingle_stream_connector.cc b/remoting/protocol/jingle_stream_connector.cc |
| index 44cc3c526bb047bd4bf22601a456e452f805ab90..b753de5fd4f2a478d58b64773c296fcfd15fe851 100644 |
| --- a/remoting/protocol/jingle_stream_connector.cc |
| +++ b/remoting/protocol/jingle_stream_connector.cc |
| @@ -32,34 +32,6 @@ const int kTcpAckDelayMilliseconds = 10; |
| const int kTcpReceiveBufferSize = 256 * 1024; |
| const int kTcpSendBufferSize = kTcpReceiveBufferSize + 30 * 1024; |
| -// Helper method to create a SSL client socket. |
| -net::SSLClientSocket* CreateSSLClientSocket( |
| - net::StreamSocket* socket, const std::string& der_cert, |
| - net::CertVerifier* cert_verifier) { |
| - net::SSLConfig ssl_config; |
| - |
| - // Certificate provided by the host doesn't need authority. |
| - net::SSLConfig::CertAndStatus cert_and_status; |
| - cert_and_status.cert_status = net::CERT_STATUS_AUTHORITY_INVALID; |
| - cert_and_status.der_cert = der_cert; |
| - ssl_config.allowed_bad_certs.push_back(cert_and_status); |
| - |
| - // Revocation checking is not needed because we use self-signed |
| - // certs. Disable it so that SSL layer doesn't try to initialize |
| - // OCSP (OCSP works only on IO thread). |
| - ssl_config.rev_checking_enabled = false; |
| - |
| - // SSLClientSocket takes ownership of the adapter. |
| - net::HostPortPair host_and_port( |
| - ContentDescription::kChromotingContentName, 0); |
| - net::SSLClientSocketContext context; |
| - context.cert_verifier = cert_verifier; |
| - net::SSLClientSocket* ssl_socket = |
| - net::ClientSocketFactory::GetDefaultFactory()->CreateSSLClientSocket( |
| - socket, host_and_port, ssl_config, NULL, context); |
| - return ssl_socket; |
| -} |
| - |
| } // namespace |
| JingleStreamConnector::JingleStreamConnector( |
| @@ -69,30 +41,20 @@ JingleStreamConnector::JingleStreamConnector( |
| : session_(session), |
| name_(name), |
| callback_(callback), |
| - initiator_(false), |
| - local_private_key_(NULL), |
| raw_channel_(NULL), |
| ALLOW_THIS_IN_INITIALIZER_LIST(tcp_connect_callback_( |
| - this, &JingleStreamConnector::OnTCPConnect)), |
| - ALLOW_THIS_IN_INITIALIZER_LIST(ssl_connect_callback_( |
| - this, &JingleStreamConnector::OnSSLConnect)) { |
| + this, &JingleStreamConnector::OnTCPConnect)) { |
| } |
| JingleStreamConnector::~JingleStreamConnector() { |
| } |
| -void JingleStreamConnector::Connect(bool initiator, |
| - const std::string& local_cert, |
| - const std::string& remote_cert, |
| - crypto::RSAPrivateKey* local_private_key, |
| +void JingleStreamConnector::Connect(ChannelAuthenticator* authenticator, |
| cricket::TransportChannel* raw_channel) { |
| DCHECK(CalledOnValidThread()); |
| DCHECK(!raw_channel_); |
| - initiator_ = initiator; |
| - local_cert_ = local_cert; |
| - remote_cert_ = remote_cert; |
| - local_private_key_ = local_private_key; |
| + authenticator_.reset(authenticator); |
| raw_channel_ = raw_channel; |
| net::Socket* socket = |
| @@ -132,49 +94,6 @@ bool JingleStreamConnector::EstablishTCPConnection(net::Socket* socket) { |
| return false; |
| } |
| -bool JingleStreamConnector::EstablishSSLConnection() { |
| - DCHECK(tcp_socket_->IsConnected()); |
| - |
| - int result; |
| - if (initiator_) { |
| - cert_verifier_.reset(new net::CertVerifier()); |
| - |
| - // Create client SSL socket. |
| - net::SSLClientSocket* socket = CreateSSLClientSocket( |
| - tcp_socket_.release(), remote_cert_, cert_verifier_.get()); |
| - socket_.reset(socket); |
| - |
| - result = socket->Connect(&ssl_connect_callback_); |
| - } else { |
| - scoped_refptr<net::X509Certificate> cert = |
| - net::X509Certificate::CreateFromBytes( |
| - local_cert_.data(), local_cert_.length()); |
| - if (!cert) { |
| - LOG(ERROR) << "Failed to parse X509Certificate"; |
| - return false; |
| - } |
| - |
| - // Create server SSL socket. |
| - net::SSLConfig ssl_config; |
| - net::SSLServerSocket* socket = net::CreateSSLServerSocket( |
| - tcp_socket_.release(), cert, local_private_key_, ssl_config); |
| - socket_.reset(socket); |
| - |
| - result = socket->Handshake(&ssl_connect_callback_); |
| - } |
| - |
| - if (result == net::ERR_IO_PENDING) { |
| - return true; |
| - } else if (result != net::OK) { |
| - LOG(ERROR) << "Failed to establish SSL connection"; |
| - return false; |
| - } |
| - |
| - // Reach here if net::OK is received. |
| - ssl_connect_callback_.Run(net::OK); |
| - return true; |
| -} |
| - |
| void JingleStreamConnector::OnTCPConnect(int result) { |
| DCHECK(CalledOnValidThread()); |
| @@ -184,46 +103,18 @@ void JingleStreamConnector::OnTCPConnect(int result) { |
| return; |
| } |
| - if (!EstablishSSLConnection()) |
| - NotifyError(); |
| + authenticator_->SecureAndAuthenticate(tcp_socket_.release(), base::Bind( |
| + &JingleStreamConnector::OnAuthenticationDone, base::Unretained(this))); |
| } |
| -void JingleStreamConnector::OnSSLConnect(int result) { |
| - DCHECK(CalledOnValidThread()); |
| - |
| - if (result != net::OK) { |
| - LOG(ERROR) << "Error during SSL connection: " << result; |
| +void JingleStreamConnector::OnAuthenticationDone( |
| + net::Error error, net::StreamSocket* socket) { |
| + if (error != net::OK) { |
|
Wez
2011/11/22 22:29:48
nit: Make this an if ... else ... block?
Sergey Ulanov
2011/11/23 01:23:42
Done.
|
| NotifyError(); |
| return; |
| } |
| - DCHECK(socket_->IsConnected()); |
| - AuthenticateChannel(); |
| -} |
| - |
| -void JingleStreamConnector::AuthenticateChannel() { |
| - if (initiator_) { |
| - authenticator_.reset( |
| - new ClientChannelAuthenticator(session_->shared_secret())); |
| - } else { |
| - authenticator_.reset( |
| - new HostChannelAuthenticator(session_->shared_secret())); |
| - } |
| - authenticator_->Authenticate(socket_.get(), base::Bind( |
| - &JingleStreamConnector::OnAuthenticationDone, base::Unretained(this))); |
| -} |
| - |
| -void JingleStreamConnector::OnAuthenticationDone( |
| - ChannelAuthenticator::Result result) { |
| - switch (result) { |
| - case ChannelAuthenticator::SUCCESS: |
| - NotifyDone(socket_.release()); |
| - break; |
| - |
| - case ChannelAuthenticator::FAILURE: |
| - NotifyError(); |
| - break; |
| - } |
| + NotifyDone(socket); |
| } |
| void JingleStreamConnector::NotifyDone(net::StreamSocket* socket) { |
| @@ -233,7 +124,6 @@ void JingleStreamConnector::NotifyDone(net::StreamSocket* socket) { |
| } |
| void JingleStreamConnector::NotifyError() { |
| - socket_.reset(); |
| NotifyDone(NULL); |
| } |