Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: webrtc/base/natserver.h

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/base/nat_unittest.cc ('k') | webrtc/base/natserver.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef WEBRTC_BASE_NATSERVER_H_ 11 #ifndef WEBRTC_BASE_NATSERVER_H_
12 #define WEBRTC_BASE_NATSERVER_H_ 12 #define WEBRTC_BASE_NATSERVER_H_
13 13
14 #include <map>
15 #include <set>
16 14
17 #include "webrtc/base/asyncudpsocket.h" 15 // This header is deprecated and is just left here temporarily during
18 #include "webrtc/base/constructormagic.h" 16 // refactoring. See https://bugs.webrtc.org/7634 for more details.
19 #include "webrtc/base/socketaddresspair.h" 17 #include "webrtc/rtc_base/natserver.h"
20 #include "webrtc/base/thread.h"
21 #include "webrtc/base/socketfactory.h"
22 #include "webrtc/base/nattypes.h"
23 #include "webrtc/base/proxyserver.h"
24
25 namespace rtc {
26
27 // Change how routes (socketaddress pairs) are compared based on the type of
28 // NAT. The NAT server maintains a hashtable of the routes that it knows
29 // about. So these affect which routes are treated the same.
30 struct RouteCmp {
31 explicit RouteCmp(NAT* nat);
32 size_t operator()(const SocketAddressPair& r) const;
33 bool operator()(
34 const SocketAddressPair& r1, const SocketAddressPair& r2) const;
35
36 bool symmetric;
37 };
38
39 // Changes how addresses are compared based on the filtering rules of the NAT.
40 struct AddrCmp {
41 explicit AddrCmp(NAT* nat);
42 size_t operator()(const SocketAddress& r) const;
43 bool operator()(const SocketAddress& r1, const SocketAddress& r2) const;
44
45 bool use_ip;
46 bool use_port;
47 };
48
49 // Implements the NAT device. It listens for packets on the internal network,
50 // translates them, and sends them out over the external network.
51 //
52 // TCP connections initiated from the internal side of the NAT server are
53 // also supported, by making a connection to the NAT server's TCP address and
54 // then sending the remote address in quasi-STUN format. The connection status
55 // will be indicated back to the client as a 1 byte status code, where '0'
56 // indicates success.
57
58 const int NAT_SERVER_UDP_PORT = 4237;
59 const int NAT_SERVER_TCP_PORT = 4238;
60
61 class NATServer : public sigslot::has_slots<> {
62 public:
63 NATServer(
64 NATType type, SocketFactory* internal,
65 const SocketAddress& internal_udp_addr,
66 const SocketAddress& internal_tcp_addr,
67 SocketFactory* external, const SocketAddress& external_ip);
68 ~NATServer() override;
69
70 SocketAddress internal_udp_address() const {
71 return udp_server_socket_->GetLocalAddress();
72 }
73
74 SocketAddress internal_tcp_address() const {
75 return tcp_proxy_server_->GetServerAddress();
76 }
77
78 // Packets received on one of the networks.
79 void OnInternalUDPPacket(AsyncPacketSocket* socket, const char* buf,
80 size_t size, const SocketAddress& addr,
81 const PacketTime& packet_time);
82 void OnExternalUDPPacket(AsyncPacketSocket* socket, const char* buf,
83 size_t size, const SocketAddress& remote_addr,
84 const PacketTime& packet_time);
85
86 private:
87 typedef std::set<SocketAddress, AddrCmp> AddressSet;
88
89 /* Records a translation and the associated external socket. */
90 struct TransEntry {
91 TransEntry(const SocketAddressPair& r, AsyncUDPSocket* s, NAT* nat);
92 ~TransEntry();
93
94 void WhitelistInsert(const SocketAddress& addr);
95 bool WhitelistContains(const SocketAddress& ext_addr);
96
97 SocketAddressPair route;
98 AsyncUDPSocket* socket;
99 AddressSet* whitelist;
100 CriticalSection crit_;
101 };
102
103 typedef std::map<SocketAddressPair, TransEntry*, RouteCmp> InternalMap;
104 typedef std::map<SocketAddress, TransEntry*> ExternalMap;
105
106 /* Creates a new entry that translates the given route. */
107 void Translate(const SocketAddressPair& route);
108
109 /* Determines whether the NAT would filter out a packet from this address. */
110 bool ShouldFilterOut(TransEntry* entry, const SocketAddress& ext_addr);
111
112 NAT* nat_;
113 SocketFactory* external_;
114 SocketAddress external_ip_;
115 AsyncUDPSocket* udp_server_socket_;
116 ProxyServer* tcp_proxy_server_;
117 InternalMap* int_map_;
118 ExternalMap* ext_map_;
119 RTC_DISALLOW_COPY_AND_ASSIGN(NATServer);
120 };
121
122 } // namespace rtc
123 18
124 #endif // WEBRTC_BASE_NATSERVER_H_ 19 #endif // WEBRTC_BASE_NATSERVER_H_
OLDNEW
« no previous file with comments | « webrtc/base/nat_unittest.cc ('k') | webrtc/base/natserver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698