• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "jingle/glue/xmpp_client_socket_factory.h"
6 
7 #include "base/logging.h"
8 #include "jingle/glue/fake_ssl_client_socket.h"
9 #include "jingle/glue/proxy_resolving_client_socket.h"
10 #include "net/socket/client_socket_factory.h"
11 #include "net/socket/client_socket_handle.h"
12 #include "net/socket/ssl_client_socket.h"
13 #include "net/url_request/url_request_context.h"
14 #include "net/url_request/url_request_context_getter.h"
15 
16 namespace jingle_glue {
17 
XmppClientSocketFactory(net::ClientSocketFactory * client_socket_factory,const net::SSLConfig & ssl_config,const scoped_refptr<net::URLRequestContextGetter> & request_context_getter,bool use_fake_ssl_client_socket)18 XmppClientSocketFactory::XmppClientSocketFactory(
19     net::ClientSocketFactory* client_socket_factory,
20     const net::SSLConfig& ssl_config,
21     const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
22     bool use_fake_ssl_client_socket)
23     : client_socket_factory_(client_socket_factory),
24       request_context_getter_(request_context_getter),
25       ssl_config_(ssl_config),
26       use_fake_ssl_client_socket_(use_fake_ssl_client_socket) {
27   CHECK(client_socket_factory_);
28 }
29 
~XmppClientSocketFactory()30 XmppClientSocketFactory::~XmppClientSocketFactory() {}
31 
32 scoped_ptr<net::StreamSocket>
CreateTransportClientSocket(const net::HostPortPair & host_and_port)33 XmppClientSocketFactory::CreateTransportClientSocket(
34     const net::HostPortPair& host_and_port) {
35   // TODO(akalin): Use socket pools.
36   scoped_ptr<net::StreamSocket> transport_socket(
37       new ProxyResolvingClientSocket(
38           NULL,
39           request_context_getter_,
40           ssl_config_,
41           host_and_port));
42   return (use_fake_ssl_client_socket_ ?
43           scoped_ptr<net::StreamSocket>(
44               new FakeSSLClientSocket(transport_socket.Pass())) :
45           transport_socket.Pass());
46 }
47 
48 scoped_ptr<net::SSLClientSocket>
CreateSSLClientSocket(scoped_ptr<net::ClientSocketHandle> transport_socket,const net::HostPortPair & host_and_port)49 XmppClientSocketFactory::CreateSSLClientSocket(
50     scoped_ptr<net::ClientSocketHandle> transport_socket,
51     const net::HostPortPair& host_and_port) {
52   net::SSLClientSocketContext context;
53   context.cert_verifier =
54       request_context_getter_->GetURLRequestContext()->cert_verifier();
55   context.transport_security_state = request_context_getter_->
56       GetURLRequestContext()->transport_security_state();
57   DCHECK(context.transport_security_state);
58   // TODO(rkn): context.channel_id_service is NULL because the
59   // ChannelIDService class is not thread safe.
60   return client_socket_factory_->CreateSSLClientSocket(
61       transport_socket.Pass(), host_and_port, ssl_config_, context);
62 }
63 
64 
65 }  // namespace jingle_glue
66