summaryrefslogtreecommitdiffstats
path: root/remoting/protocol/jingle_stream_connector.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-15 01:55:53 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-15 01:55:53 +0000
commit9f505c2437d78edde989628a0156a84890723c0d (patch)
tree5a3d61d389311840b9f347796f47c88be620b3fd /remoting/protocol/jingle_stream_connector.cc
parent27f31bfabd6a4562b5b9d1f108c2fc992b597d92 (diff)
downloadchromium_src-9f505c2437d78edde989628a0156a84890723c0d.zip
chromium_src-9f505c2437d78edde989628a0156a84890723c0d.tar.gz
chromium_src-9f505c2437d78edde989628a0156a84890723c0d.tar.bz2
Revert 92641 because it doesn't compile - Move channel initialization logic to JingleChannel class.
Added new CreateChannel() method in Session interface. The new method can be used to create arbitrary channels. BUG=None TEST=Unittests Review URL: http://codereview.chromium.org/7326024 TBR=sergeyu@chromium.org Review URL: http://codereview.chromium.org/7385002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92642 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/protocol/jingle_stream_connector.cc')
-rw-r--r--remoting/protocol/jingle_stream_connector.cc188
1 files changed, 0 insertions, 188 deletions
diff --git a/remoting/protocol/jingle_stream_connector.cc b/remoting/protocol/jingle_stream_connector.cc
deleted file mode 100644
index f150749..0000000
--- a/remoting/protocol/jingle_stream_connector.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "remoting/protocol/jingle_stream_connector.h"
-
-#include "jingle/glue/channel_socket_adapter.h"
-#include "jingle/glue/pseudotcp_adapter.h"
-#include "net/base/cert_status_flags.h"
-#include "net/base/cert_verifier.h"
-#include "net/base/host_port_pair.h"
-#include "net/base/ssl_config_service.h"
-#include "net/base/x509_certificate.h"
-#include "net/socket/ssl_client_socket.h"
-#include "net/socket/ssl_server_socket.h"
-#include "net/socket/client_socket_factory.h"
-#include "remoting/protocol/jingle_session.h"
-#include "third_party/libjingle/source/talk/p2p/base/p2ptransportchannel.h"
-
-namespace remoting {
-namespace protocol {
-
-namespace {
-
-// Value is choosen to balance the extra latency against the reduced
-// load due to ACK traffic.
-const int kTcpAckDelayMilliseconds = 10;
-
-// Helper method to create a SSL client socket.
-net::SSLClientSocket* CreateSSLClientSocket(
- net::StreamSocket* socket, scoped_refptr<net::X509Certificate> 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.cert = cert;
- ssl_config.allowed_bad_certs.push_back(cert_and_status);
-
- // SSLClientSocket takes ownership of the adapter.
- net::HostPortPair host_and_pair(JingleSession::kChromotingContentName, 0);
- net::SSLClientSocket* ssl_socket =
- net::ClientSocketFactory::GetDefaultFactory()->CreateSSLClientSocket(
- socket, host_and_pair, ssl_config, NULL, cert_verifier);
- return ssl_socket;
-}
-
-} // namespace
-
-JingleStreamConnector::JingleStreamConnector(
- JingleSession* session,
- const std::string& name,
- const Session::StreamChannelCallback& callback)
- : 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)) {
-}
-
-JingleStreamConnector::~JingleStreamConnector() {
-}
-
-void JingleStreamConnector::Connect(bool initiator,
- net::X509Certificate* local_cert,
- net::X509Certificate* remote_cert,
- crypto::RSAPrivateKey* local_private_key,
- 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;
- raw_channel_ = raw_channel;
-
- if (!initiator_) {
- // Don't make outgoing connections from the host to client.
- raw_channel_->GetP2PChannel()->set_incoming_only(true);
- }
-
- net::Socket* socket =
- new jingle_glue::TransportChannelSocketAdapter(raw_channel_);
-
- if (!EstablishTCPConnection(socket))
- NotifyError();
-}
-
-bool JingleStreamConnector::EstablishTCPConnection(net::Socket* socket) {
- jingle_glue::PseudoTcpAdapter* adapter =
- new jingle_glue::PseudoTcpAdapter(socket);
- adapter->SetAckDelay(kTcpAckDelayMilliseconds);
- adapter->SetNoDelay(true);
-
- socket_.reset(adapter);
- int result = socket_->Connect(&tcp_connect_callback_);
- if (result == net::ERR_IO_PENDING) {
- return true;
- } else if (result == net::OK) {
- tcp_connect_callback_.Run(result);
- return true;
- }
-
- return false;
-}
-
-bool JingleStreamConnector::EstablishSSLConnection() {
- DCHECK(socket_->IsConnected());
-
- int result;
- if (initiator_) {
- cert_verifier_.reset(new net::CertVerifier());
-
- // Create client SSL socket.
- net::SSLClientSocket* ssl_client_socket = CreateSSLClientSocket(
- socket_.release(), remote_cert_, cert_verifier_.get());
- socket_.reset(ssl_client_socket);
-
- int result = ssl_client_socket->Connect(&ssl_connect_callback_);
- } else {
- // Create server SSL socket.
- net::SSLConfig ssl_config;
- net::SSLServerSocket* ssl_server_socket =
- net::CreateSSLServerSocket(socket_.release(), local_cert_,
- local_private_key_, ssl_config);
- socket_.reset(ssl_server_socket);
-
- int result = ssl_server_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());
-
- if (result != net::OK) {
- LOG(ERROR) << "PseudoTCP connection failed: " << result;
- NotifyError();
- return;
- }
-
- if (!EstablishSSLConnection())
- NotifyError();
-}
-
-void JingleStreamConnector::OnSSLConnect(int result) {
- DCHECK(CalledOnValidThread());
-
- if (result != net::OK) {
- LOG(ERROR) << "Error during SSL connection: " << result;
- NotifyError();
- return;
- }
-
- DCHECK(socket_->IsConnected());
- NotifyDone(socket_.release());
-}
-
-void JingleStreamConnector::NotifyDone(net::StreamSocket* socket) {
- callback_.Run(name_, socket);
- session_->OnChannelConnectorFinished(name_, this);
-}
-
-void JingleStreamConnector::NotifyError() {
- socket_.reset();
- callback_.Run(name_, NULL);
- session_->OnChannelConnectorFinished(name_, this);
-}
-
-} // namespace protocol
-} // namespace remoting