OLD | NEW |
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 #include <memory> | 11 #include <memory> |
12 | 12 |
| 13 #include "webrtc/base/checks.h" |
13 #include "webrtc/base/natsocketfactory.h" | 14 #include "webrtc/base/natsocketfactory.h" |
14 #include "webrtc/base/natserver.h" | 15 #include "webrtc/base/natserver.h" |
15 #include "webrtc/base/logging.h" | 16 #include "webrtc/base/logging.h" |
16 #include "webrtc/base/socketadapters.h" | 17 #include "webrtc/base/socketadapters.h" |
17 | 18 |
18 namespace rtc { | 19 namespace rtc { |
19 | 20 |
20 RouteCmp::RouteCmp(NAT* nat) : symmetric(nat->IsSymmetric()) { | 21 RouteCmp::RouteCmp(NAT* nat) : symmetric(nat->IsSymmetric()) { |
21 } | 22 } |
22 | 23 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 BufferedReadAdapter::DirectSend(&code, sizeof(char)); | 81 BufferedReadAdapter::DirectSend(&code, sizeof(char)); |
81 } | 82 } |
82 | 83 |
83 protected: | 84 protected: |
84 void ProcessInput(char* data, size_t* len) override { | 85 void ProcessInput(char* data, size_t* len) override { |
85 if (*len < 2) { | 86 if (*len < 2) { |
86 return; | 87 return; |
87 } | 88 } |
88 | 89 |
89 int family = data[1]; | 90 int family = data[1]; |
90 ASSERT(family == AF_INET || family == AF_INET6); | 91 RTC_DCHECK(family == AF_INET || family == AF_INET6); |
91 if ((family == AF_INET && *len < kNATEncodedIPv4AddressSize) || | 92 if ((family == AF_INET && *len < kNATEncodedIPv4AddressSize) || |
92 (family == AF_INET6 && *len < kNATEncodedIPv6AddressSize)) { | 93 (family == AF_INET6 && *len < kNATEncodedIPv6AddressSize)) { |
93 return; | 94 return; |
94 } | 95 } |
95 | 96 |
96 SocketAddress dest_addr; | 97 SocketAddress dest_addr; |
97 size_t address_length = UnpackAddressFromNAT(data, *len, &dest_addr); | 98 size_t address_length = UnpackAddressFromNAT(data, *len, &dest_addr); |
98 | 99 |
99 *len -= address_length; | 100 *len -= address_length; |
100 if (*len > 0) { | 101 if (*len > 0) { |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 SocketAddress dest_addr; | 163 SocketAddress dest_addr; |
163 size_t length = UnpackAddressFromNAT(buf, size, &dest_addr); | 164 size_t length = UnpackAddressFromNAT(buf, size, &dest_addr); |
164 | 165 |
165 // Find the translation for these addresses (allocating one if necessary). | 166 // Find the translation for these addresses (allocating one if necessary). |
166 SocketAddressPair route(addr, dest_addr); | 167 SocketAddressPair route(addr, dest_addr); |
167 InternalMap::iterator iter = int_map_->find(route); | 168 InternalMap::iterator iter = int_map_->find(route); |
168 if (iter == int_map_->end()) { | 169 if (iter == int_map_->end()) { |
169 Translate(route); | 170 Translate(route); |
170 iter = int_map_->find(route); | 171 iter = int_map_->find(route); |
171 } | 172 } |
172 ASSERT(iter != int_map_->end()); | 173 RTC_DCHECK(iter != int_map_->end()); |
173 | 174 |
174 // Allow the destination to send packets back to the source. | 175 // Allow the destination to send packets back to the source. |
175 iter->second->WhitelistInsert(dest_addr); | 176 iter->second->WhitelistInsert(dest_addr); |
176 | 177 |
177 // Send the packet to its intended destination. | 178 // Send the packet to its intended destination. |
178 rtc::PacketOptions options; | 179 rtc::PacketOptions options; |
179 iter->second->socket->SendTo(buf + length, size - length, dest_addr, options); | 180 iter->second->socket->SendTo(buf + length, size - length, dest_addr, options); |
180 } | 181 } |
181 | 182 |
182 void NATServer::OnExternalUDPPacket( | 183 void NATServer::OnExternalUDPPacket( |
183 AsyncPacketSocket* socket, const char* buf, size_t size, | 184 AsyncPacketSocket* socket, const char* buf, size_t size, |
184 const SocketAddress& remote_addr, const PacketTime& packet_time) { | 185 const SocketAddress& remote_addr, const PacketTime& packet_time) { |
185 SocketAddress local_addr = socket->GetLocalAddress(); | 186 SocketAddress local_addr = socket->GetLocalAddress(); |
186 | 187 |
187 // Find the translation for this addresses. | 188 // Find the translation for this addresses. |
188 ExternalMap::iterator iter = ext_map_->find(local_addr); | 189 ExternalMap::iterator iter = ext_map_->find(local_addr); |
189 ASSERT(iter != ext_map_->end()); | 190 RTC_DCHECK(iter != ext_map_->end()); |
190 | 191 |
191 // Allow the NAT to reject this packet. | 192 // Allow the NAT to reject this packet. |
192 if (ShouldFilterOut(iter->second, remote_addr)) { | 193 if (ShouldFilterOut(iter->second, remote_addr)) { |
193 LOG(LS_INFO) << "Packet from " << remote_addr.ToSensitiveString() | 194 LOG(LS_INFO) << "Packet from " << remote_addr.ToSensitiveString() |
194 << " was filtered out by the NAT."; | 195 << " was filtered out by the NAT."; |
195 return; | 196 return; |
196 } | 197 } |
197 | 198 |
198 // Forward this packet to the internal address. | 199 // Forward this packet to the internal address. |
199 // First prepend the address in a quasi-STUN format. | 200 // First prepend the address in a quasi-STUN format. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 CritScope cs(&crit_); | 243 CritScope cs(&crit_); |
243 whitelist->insert(addr); | 244 whitelist->insert(addr); |
244 } | 245 } |
245 | 246 |
246 bool NATServer::TransEntry::WhitelistContains(const SocketAddress& ext_addr) { | 247 bool NATServer::TransEntry::WhitelistContains(const SocketAddress& ext_addr) { |
247 CritScope cs(&crit_); | 248 CritScope cs(&crit_); |
248 return whitelist->find(ext_addr) == whitelist->end(); | 249 return whitelist->find(ext_addr) == whitelist->end(); |
249 } | 250 } |
250 | 251 |
251 } // namespace rtc | 252 } // namespace rtc |
OLD | NEW |