| Index: webrtc/base/natserver.h
|
| diff --git a/webrtc/base/natserver.h b/webrtc/base/natserver.h
|
| index 597562053d1af0cdb8f30d39fae2088aa375d881..e987021773501176ff945a1f02b5bd7d8ad10a5f 100644
|
| --- a/webrtc/base/natserver.h
|
| +++ b/webrtc/base/natserver.h
|
| @@ -19,6 +19,7 @@
|
| #include "webrtc/base/thread.h"
|
| #include "webrtc/base/socketfactory.h"
|
| #include "webrtc/base/nattypes.h"
|
| +#include "webrtc/base/proxyserver.h"
|
|
|
| namespace rtc {
|
|
|
| @@ -46,27 +47,40 @@ 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_PORT = 4237;
|
| +const int NAT_SERVER_UDP_PORT = 4237;
|
| +const int NAT_SERVER_TCP_PORT = 4238;
|
|
|
| class NATServer : public sigslot::has_slots<> {
|
| public:
|
| NATServer(
|
| - NATType type, SocketFactory* internal, const SocketAddress& internal_addr,
|
| + NATType type, SocketFactory* internal,
|
| + const SocketAddress& internal_udp_addr,
|
| + const SocketAddress& internal_tcp_addr,
|
| SocketFactory* external, const SocketAddress& external_ip);
|
| ~NATServer() override;
|
|
|
| - SocketAddress internal_address() const {
|
| - return server_socket_->GetLocalAddress();
|
| + SocketAddress internal_udp_address() const {
|
| + return udp_server_socket_->GetLocalAddress();
|
| + }
|
| +
|
| + SocketAddress internal_tcp_address() const {
|
| + return tcp_proxy_server_->GetServerAddress();
|
| }
|
|
|
| // Packets received on one of the networks.
|
| - void OnInternalPacket(AsyncPacketSocket* socket, const char* buf,
|
| - size_t size, const SocketAddress& addr,
|
| - const PacketTime& packet_time);
|
| - void OnExternalPacket(AsyncPacketSocket* socket, const char* buf,
|
| - size_t size, const SocketAddress& remote_addr,
|
| - const PacketTime& packet_time);
|
| + void OnInternalUDPPacket(AsyncPacketSocket* socket, const char* buf,
|
| + size_t size, const SocketAddress& addr,
|
| + const PacketTime& packet_time);
|
| + void OnExternalUDPPacket(AsyncPacketSocket* socket, const char* buf,
|
| + size_t size, const SocketAddress& remote_addr,
|
| + const PacketTime& packet_time);
|
|
|
| private:
|
| typedef std::set<SocketAddress, AddrCmp> AddressSet;
|
| @@ -98,8 +112,8 @@ class NATServer : public sigslot::has_slots<> {
|
| SocketFactory* internal_;
|
| SocketFactory* external_;
|
| SocketAddress external_ip_;
|
| - AsyncUDPSocket* server_socket_;
|
| - AsyncSocket* tcp_server_socket_;
|
| + AsyncUDPSocket* udp_server_socket_;
|
| + ProxyServer* tcp_proxy_server_;
|
| InternalMap* int_map_;
|
| ExternalMap* ext_map_;
|
| DISALLOW_COPY_AND_ASSIGN(NATServer);
|
|
|