📄 natserver.h
字号:
#ifndef UTILS_BASE_NATSERVER_H_#define UTILS_BASE_NATSERVER_H_#include "asyncudpsocket.h"#include "socketaddresspair.h"#include "thread.h"#include "socketfactory.h"#include "nattypes.h"#include <map>namespace utils_base {// 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 { RouteCmp(NAT* nat); size_t operator()(const SocketAddressPair& r) const; bool operator()( const SocketAddressPair& r1, const SocketAddressPair& r2) const; bool symmetric;};// Changes how addresses are compared based on the filtering rules of the NAT.struct AddrCmp { AddrCmp(NAT* nat); size_t operator()(const SocketAddress& r) const; bool operator()(const SocketAddress& r1, const SocketAddress& r2) const; bool use_ip; bool use_port;};// Implements the NAT device. It listens for packets on the internal network,// translates them, and sends them out over the external network.const int NAT_SERVER_PORT = 4237;class NATServer : public sigslot::has_slots<> {public: NATServer( NATType type, SocketFactory* internal, const SocketAddress& internal_addr, SocketFactory* external, const SocketAddress& external_ip); ~NATServer(); // Packets received on one of the networks. void OnInternalPacket( const char* buf, size_t size, const SocketAddress& addr, AsyncPacketSocket* socket); void OnExternalPacket( const char* buf, size_t size, const SocketAddress& remote_addr, AsyncPacketSocket* socket);private: typedef std::set<SocketAddress,AddrCmp> AddressSet; /* Records a translation and the associated external socket. */ struct TransEntry { TransEntry(const SocketAddressPair& r, AsyncUDPSocket* s, NAT* nat); ~TransEntry(); SocketAddressPair route; AsyncUDPSocket* socket; AddressSet* whitelist; }; typedef std::map<SocketAddressPair,TransEntry*,RouteCmp> InternalMap; typedef std::map<SocketAddress,TransEntry*> ExternalMap; NAT* nat_; AsyncUDPSocket* server_socket_; SocketFactory* external_; SocketAddress external_ip_; InternalMap* int_map_; ExternalMap* ext_map_; /* Creates a new entry that translates the given route. */ void Translate(const SocketAddressPair& route); /* Determines whether the NAT would filter out a packet from this address. */ bool Filter(TransEntry* entry, const SocketAddress& ext_addr);};} // namespace utils_base#endif // UTILS_BASE_NATSERVER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -