/* * Copyright 2004 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef RTC_BASE_NAT_SERVER_H_ #define RTC_BASE_NAT_SERVER_H_ #include <map> #include <set> #include "rtc_base/async_udp_socket.h" #include "rtc_base/nat_types.h" #include "rtc_base/proxy_server.h" #include "rtc_base/socket_address_pair.h" #include "rtc_base/socket_factory.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/thread.h" namespace rtc { // Change how routes (socketaddress pairs) are compared based on the type of // NAT. The NAT server maintains a hashtable of the routes that it knows // about. So these affect which routes are treated the same. struct RouteCmp { … }; // Changes how addresses are compared based on the filtering rules of the NAT. struct AddrCmp { … }; // Implements the NAT device. It listens for packets on the internal network, // translates them, and sends them out over the external network. // // TCP connections initiated from the internal side of the NAT server are // also supported, by making a connection to the NAT server's TCP address and // then sending the remote address in quasi-STUN format. The connection status // will be indicated back to the client as a 1 byte status code, where '0' // indicates success. const int NAT_SERVER_UDP_PORT = …; const int NAT_SERVER_TCP_PORT = …; class NATServer { … }; } // namespace rtc #endif // RTC_BASE_NAT_SERVER_H_