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/ssl_client_socket.h" 12#include "net/url_request/url_request_context.h" 13#include "net/url_request/url_request_context_getter.h" 14 15namespace jingle_glue { 16 17XmppClientSocketFactory::XmppClientSocketFactory( 18 net::ClientSocketFactory* client_socket_factory, 19 const net::SSLConfig& ssl_config, 20 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter, 21 bool use_fake_ssl_client_socket) 22 : client_socket_factory_(client_socket_factory), 23 request_context_getter_(request_context_getter), 24 ssl_config_(ssl_config), 25 use_fake_ssl_client_socket_(use_fake_ssl_client_socket) { 26 CHECK(client_socket_factory_); 27} 28 29XmppClientSocketFactory::~XmppClientSocketFactory() {} 30 31net::StreamSocket* XmppClientSocketFactory::CreateTransportClientSocket( 32 const net::HostPortPair& host_and_port) { 33 // TODO(akalin): Use socket pools. 34 net::StreamSocket* transport_socket = new ProxyResolvingClientSocket( 35 NULL, 36 request_context_getter_, 37 ssl_config_, 38 host_and_port); 39 return (use_fake_ssl_client_socket_ ? 40 new FakeSSLClientSocket(transport_socket) : transport_socket); 41} 42 43net::SSLClientSocket* XmppClientSocketFactory::CreateSSLClientSocket( 44 net::ClientSocketHandle* transport_socket, 45 const net::HostPortPair& host_and_port) { 46 net::SSLClientSocketContext context; 47 context.cert_verifier = 48 request_context_getter_->GetURLRequestContext()->cert_verifier(); 49 context.transport_security_state = request_context_getter_-> 50 GetURLRequestContext()->transport_security_state(); 51 DCHECK(context.transport_security_state); 52 // TODO(rkn): context.server_bound_cert_service is NULL because the 53 // ServerBoundCertService class is not thread safe. 54 return client_socket_factory_->CreateSSLClientSocket( 55 transport_socket, host_and_port, ssl_config_, context); 56} 57 58 59} // namespace jingle_glue 60