blob: 72afd630e4bc5fe386d78627cacbb0277b34424e [file] [log] [blame]
[email protected]a2006ece2010-04-23 16:44:021// Copyright (c) 2010 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit586acc5fe2008-07-26 22:42:524
[email protected]f7984fc62009-06-22 23:26:445#include "net/socket/client_socket_factory.h"
initial.commit586acc5fe2008-07-26 22:42:526
7#include "base/singleton.h"
[email protected]68bf9152008-09-25 19:47:308#include "build/build_config.h"
[email protected]e60e47a2010-07-14 03:37:189#include "net/socket/client_socket_handle.h"
[email protected]68bf9152008-09-25 19:47:3010#if defined(OS_WIN)
[email protected]f7984fc62009-06-22 23:26:4411#include "net/socket/ssl_client_socket_win.h"
[email protected]d518cd92010-09-29 12:27:4412#elif defined(USE_OPENSSL)
13#include "net/socket/ssl_client_socket_openssl.h"
[email protected]1a157302010-01-29 03:36:4514#elif defined(USE_NSS)
[email protected]f7984fc62009-06-22 23:26:4415#include "net/socket/ssl_client_socket_nss.h"
[email protected]b75523f2008-10-17 14:49:0716#elif defined(OS_MACOSX)
[email protected]fd4f139f2010-06-11 17:02:2017#include "net/socket/ssl_client_socket_nss.h"
[email protected]68bf9152008-09-25 19:47:3018#endif
[email protected]d0672be2010-10-20 16:30:1919#include "net/socket/ssl_host_info.h"
[email protected]f7984fc62009-06-22 23:26:4420#include "net/socket/tcp_client_socket.h"
initial.commit586acc5fe2008-07-26 22:42:5221
22namespace net {
23
[email protected]d8fbf582010-11-04 21:51:1224class DnsRRResolver;
25
[email protected]abe48d32010-02-03 02:09:3626namespace {
27
28SSLClientSocket* DefaultSSLClientSocketFactory(
[email protected]e60e47a2010-07-14 03:37:1829 ClientSocketHandle* transport_socket,
[email protected]4f4de7e62010-11-12 19:55:2730 const HostPortPair& host_and_port,
[email protected]7ab5bbd12010-10-19 13:33:2131 const SSLConfig& ssl_config,
[email protected]d8fbf582010-11-04 21:51:1232 SSLHostInfo* ssl_host_info,
33 DnsRRResolver* dnsrr_resolver) {
[email protected]7ab5bbd12010-10-19 13:33:2134 scoped_ptr<SSLHostInfo> shi(ssl_host_info);
[email protected]abe48d32010-02-03 02:09:3635#if defined(OS_WIN)
[email protected]4f4de7e62010-11-12 19:55:2736 return new SSLClientSocketWin(transport_socket, host_and_port, ssl_config);
[email protected]d518cd92010-09-29 12:27:4437#elif defined(USE_OPENSSL)
[email protected]4f4de7e62010-11-12 19:55:2738 return new SSLClientSocketOpenSSL(transport_socket, host_and_port,
39 ssl_config);
[email protected]abe48d32010-02-03 02:09:3640#elif defined(USE_NSS)
[email protected]4f4de7e62010-11-12 19:55:2741 return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config,
[email protected]d8fbf582010-11-04 21:51:1242 shi.release(), dnsrr_resolver);
[email protected]abe48d32010-02-03 02:09:3643#elif defined(OS_MACOSX)
[email protected]4f4de7e62010-11-12 19:55:2744 return new SSLClientSocketNSS(transport_socket, host_and_port, ssl_config,
[email protected]d8fbf582010-11-04 21:51:1245 shi.release(), dnsrr_resolver);
[email protected]abe48d32010-02-03 02:09:3646#else
47 NOTIMPLEMENTED();
48 return NULL;
49#endif
50}
51
[email protected]abe48d32010-02-03 02:09:3652SSLClientSocketFactory g_ssl_factory = DefaultSSLClientSocketFactory;
53
initial.commit586acc5fe2008-07-26 22:42:5254class DefaultClientSocketFactory : public ClientSocketFactory {
55 public:
56 virtual ClientSocket* CreateTCPClientSocket(
[email protected]0a0b7682010-08-25 17:08:0757 const AddressList& addresses,
58 NetLog* net_log,
59 const NetLog::Source& source) {
60 return new TCPClientSocket(addresses, net_log, source);
initial.commit586acc5fe2008-07-26 22:42:5261 }
62
[email protected]aaead502008-10-15 00:20:1163 virtual SSLClientSocket* CreateSSLClientSocket(
[email protected]e60e47a2010-07-14 03:37:1864 ClientSocketHandle* transport_socket,
[email protected]4f4de7e62010-11-12 19:55:2765 const HostPortPair& host_and_port,
[email protected]7ab5bbd12010-10-19 13:33:2166 const SSLConfig& ssl_config,
[email protected]d8fbf582010-11-04 21:51:1267 SSLHostInfo* ssl_host_info,
68 DnsRRResolver* dnsrr_resolver) {
[email protected]4f4de7e62010-11-12 19:55:2769 return g_ssl_factory(transport_socket, host_and_port, ssl_config,
70 ssl_host_info, dnsrr_resolver);
initial.commit586acc5fe2008-07-26 22:42:5271 }
72};
73
[email protected]abe48d32010-02-03 02:09:3674} // namespace
75
initial.commit586acc5fe2008-07-26 22:42:5276// static
77ClientSocketFactory* ClientSocketFactory::GetDefaultFactory() {
78 return Singleton<DefaultClientSocketFactory>::get();
79}
80
[email protected]abe48d32010-02-03 02:09:3681// static
82void ClientSocketFactory::SetSSLClientSocketFactory(
83 SSLClientSocketFactory factory) {
84 g_ssl_factory = factory;
85}
86
[email protected]e60e47a2010-07-14 03:37:1887// Deprecated function (http://crbug.com/37810) that takes a ClientSocket.
88SSLClientSocket* ClientSocketFactory::CreateSSLClientSocket(
89 ClientSocket* transport_socket,
[email protected]4f4de7e62010-11-12 19:55:2790 const HostPortPair& host_and_port,
[email protected]7ab5bbd12010-10-19 13:33:2191 const SSLConfig& ssl_config,
92 SSLHostInfo* ssl_host_info) {
[email protected]e60e47a2010-07-14 03:37:1893 ClientSocketHandle* socket_handle = new ClientSocketHandle();
94 socket_handle->set_socket(transport_socket);
[email protected]4f4de7e62010-11-12 19:55:2795 return CreateSSLClientSocket(socket_handle, host_and_port, ssl_config,
[email protected]d8fbf582010-11-04 21:51:1296 ssl_host_info, NULL /* DnsRRResolver */);
[email protected]e60e47a2010-07-14 03:37:1897}
98
initial.commit586acc5fe2008-07-26 22:42:5299} // namespace net