⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 natserver.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 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 + -