client_socket_factory.cc revision 513209b27ff55e2841eac0e4120199c23acce758
1// Copyright (c) 2010 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 "net/socket/client_socket_factory.h" 6 7#include "base/singleton.h" 8#include "build/build_config.h" 9#include "net/socket/client_socket_handle.h" 10#if defined(OS_WIN) 11#include "net/socket/ssl_client_socket_win.h" 12#elif defined(USE_OPENSSL) 13#include "net/socket/ssl_client_socket_openssl.h" 14#elif defined(USE_NSS) 15#include "net/socket/ssl_client_socket_nss.h" 16#elif defined(USE_OPENSSL) && defined(ANDROID) 17#include "net/socket/ssl_client_socket_openssl.h" 18#elif defined(OS_MACOSX) 19#include "net/socket/ssl_client_socket_nss.h" 20#endif 21#include "net/socket/ssl_host_info.h" 22#include "net/socket/tcp_client_socket.h" 23 24namespace net { 25 26class DnsRRResolver; 27 28namespace { 29 30SSLClientSocket* DefaultSSLClientSocketFactory( 31 ClientSocketHandle* transport_socket, 32 const std::string& hostname, 33 const SSLConfig& ssl_config, 34 SSLHostInfo* ssl_host_info, 35 DnsRRResolver* dnsrr_resolver) { 36 scoped_ptr<SSLHostInfo> shi(ssl_host_info); 37#if defined(OS_WIN) 38 return new SSLClientSocketWin(transport_socket, hostname, ssl_config); 39#elif defined(USE_OPENSSL) 40 return new SSLClientSocketOpenSSL(transport_socket, hostname, ssl_config); 41#elif defined(USE_NSS) 42 return new SSLClientSocketNSS(transport_socket, hostname, ssl_config, 43 shi.release(), dnsrr_resolver); 44#elif defined(OS_MACOSX) 45 return new SSLClientSocketNSS(transport_socket, hostname, ssl_config, 46 shi.release(), dnsrr_resolver); 47#else 48 NOTIMPLEMENTED(); 49 return NULL; 50#endif 51} 52 53SSLClientSocketFactory g_ssl_factory = DefaultSSLClientSocketFactory; 54 55class DefaultClientSocketFactory : public ClientSocketFactory { 56 public: 57 virtual ClientSocket* CreateTCPClientSocket( 58 const AddressList& addresses, 59 NetLog* net_log, 60 const NetLog::Source& source) { 61 return new TCPClientSocket(addresses, net_log, source); 62 } 63 64 virtual SSLClientSocket* CreateSSLClientSocket( 65 ClientSocketHandle* transport_socket, 66 const std::string& hostname, 67 const SSLConfig& ssl_config, 68 SSLHostInfo* ssl_host_info, 69 DnsRRResolver* dnsrr_resolver) { 70 return g_ssl_factory(transport_socket, hostname, ssl_config, ssl_host_info, 71 dnsrr_resolver); 72 } 73}; 74 75} // namespace 76 77// static 78ClientSocketFactory* ClientSocketFactory::GetDefaultFactory() { 79 return Singleton<DefaultClientSocketFactory>::get(); 80} 81 82// static 83void ClientSocketFactory::SetSSLClientSocketFactory( 84 SSLClientSocketFactory factory) { 85 g_ssl_factory = factory; 86} 87 88// Deprecated function (http://crbug.com/37810) that takes a ClientSocket. 89SSLClientSocket* ClientSocketFactory::CreateSSLClientSocket( 90 ClientSocket* transport_socket, 91 const std::string& hostname, 92 const SSLConfig& ssl_config, 93 SSLHostInfo* ssl_host_info) { 94 ClientSocketHandle* socket_handle = new ClientSocketHandle(); 95 socket_handle->set_socket(transport_socket); 96 return CreateSSLClientSocket(socket_handle, hostname, ssl_config, 97 ssl_host_info, NULL /* DnsRRResolver */); 98} 99 100} // namespace net 101