OLD | NEW |
| (Empty) |
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 #ifndef NET_DNS_DNS_SOCKET_POOL_H_ | |
6 #define NET_DNS_DNS_SOCKET_POOL_H_ | |
7 | |
8 #include <vector> | |
9 | |
10 #include "base/memory/scoped_ptr.h" | |
11 #include "net/base/net_export.h" | |
12 #include "net/base/net_log.h" | |
13 | |
14 namespace net { | |
15 | |
16 class ClientSocketFactory; | |
17 class DatagramClientSocket; | |
18 class IPEndPoint; | |
19 class NetLog; | |
20 class StreamSocket; | |
21 | |
22 // A DnsSocketPool is an abstraction layer around a ClientSocketFactory that | |
23 // allows preallocation, reuse, or other strategies to manage sockets connected | |
24 // to DNS servers. | |
25 class NET_EXPORT_PRIVATE DnsSocketPool { | |
26 public: | |
27 virtual ~DnsSocketPool() { } | |
28 | |
29 // Creates a DnsSocketPool that implements the default strategy for managing | |
30 // sockets. (This varies by platform; see DnsSocketPoolImpl in | |
31 // dns_socket_pool.cc for details.) | |
32 static scoped_ptr<DnsSocketPool> CreateDefault( | |
33 ClientSocketFactory* factory); | |
34 | |
35 // Creates a DnsSocketPool that implements a "null" strategy -- no sockets are | |
36 // preallocated, allocation requests are satisfied by calling the factory | |
37 // directly, and returned sockets are deleted immediately. | |
38 static scoped_ptr<DnsSocketPool> CreateNull( | |
39 ClientSocketFactory* factory); | |
40 | |
41 // Initializes the DnsSocketPool. |nameservers| is the list of nameservers | |
42 // for which the DnsSocketPool will manage sockets; |net_log| is the NetLog | |
43 // used when constructing sockets with the factory. | |
44 // | |
45 // Initialize may not be called more than once, and must be called before | |
46 // calling AllocateSocket or FreeSocket. | |
47 virtual void Initialize( | |
48 const std::vector<IPEndPoint>* nameservers, | |
49 NetLog* net_log) = 0; | |
50 | |
51 // Allocates a socket that is already connected to the nameserver referenced | |
52 // by |server_index|. May return a scoped_ptr to NULL if no sockets are | |
53 // available to reuse and the factory fails to produce a socket (or produces | |
54 // one on which Connect fails). | |
55 virtual scoped_ptr<DatagramClientSocket> AllocateSocket( | |
56 unsigned server_index) = 0; | |
57 | |
58 // Frees a socket allocated by AllocateSocket. |server_index| must be the | |
59 // same index passed to AllocateSocket. | |
60 virtual void FreeSocket( | |
61 unsigned server_index, | |
62 scoped_ptr<DatagramClientSocket> socket) = 0; | |
63 | |
64 // Creates a StreamSocket from the factory for a transaction over TCP. These | |
65 // sockets are not pooled. | |
66 scoped_ptr<StreamSocket> CreateTCPSocket( | |
67 unsigned server_index, | |
68 const NetLog::Source& source); | |
69 | |
70 protected: | |
71 DnsSocketPool(ClientSocketFactory* socket_factory); | |
72 | |
73 void InitializeInternal( | |
74 const std::vector<IPEndPoint>* nameservers, | |
75 NetLog* net_log); | |
76 | |
77 scoped_ptr<DatagramClientSocket> CreateConnectedSocket( | |
78 unsigned server_index); | |
79 | |
80 private: | |
81 ClientSocketFactory* socket_factory_; | |
82 NetLog* net_log_; | |
83 const std::vector<IPEndPoint>* nameservers_; | |
84 bool initialized_; | |
85 | |
86 DISALLOW_COPY_AND_ASSIGN(DnsSocketPool); | |
87 }; | |
88 | |
89 } // namespace net | |
90 | |
91 #endif // NET_DNS_DNS_SOCKET_POOL_H_ | |
OLD | NEW |