📄 firewallsocketserver.h
字号:
#ifndef UTILS_BASE_FIREWALLSOCKETSERVER_H_#define UTILS_BASE_FIREWALLSOCKETSERVER_H_#include <vector>#include "socketserver.h"#include "criticalsection.h"namespace utils_base {class FirewallManager;// This SocketServer shim simulates a rule-based firewall serverenum FirewallProtocol { FP_UDP, FP_TCP, FP_ANY };enum FirewallDirection { FD_IN, FD_OUT, FD_ANY };class FirewallSocketServer : public SocketServer {public: FirewallSocketServer(SocketServer * server, FirewallManager * manager = 0); virtual ~FirewallSocketServer(); void AddRule(bool allow, FirewallProtocol p = FP_ANY, FirewallDirection d = FD_ANY, const SocketAddress& addr = SocketAddress()); void ClearRules(); bool Check(FirewallProtocol p, FirewallDirection d, const SocketAddress& addr); virtual Socket* CreateSocket(int type); virtual AsyncSocket* CreateAsyncSocket(int type); virtual bool Wait(int cms, bool process_io) { return server_->Wait(cms, process_io); } virtual void WakeUp() { return server_->WakeUp(); } Socket * WrapSocket(Socket * sock, int type); AsyncSocket * WrapSocket(AsyncSocket * sock, int type);private: SocketServer * server_; FirewallManager * manager_; CriticalSection crit_; struct Rule { bool allow; FirewallProtocol p; FirewallDirection d; SocketAddress addr; }; std::vector<Rule> rules_;};// FirewallManager allows you to manage firewalls in multiple threads togetherclass FirewallManager {public: FirewallManager(); ~FirewallManager(); void AddServer(FirewallSocketServer * server); void RemoveServer(FirewallSocketServer * server); void AddRule(bool allow, FirewallProtocol p = FP_ANY, FirewallDirection d = FD_ANY, const SocketAddress& addr = SocketAddress()); void ClearRules();private: CriticalSection crit_; std::vector<FirewallSocketServer *> servers_;};} // namespace utils_base#endif // UTILS_BASE_FIREWALLSOCKETSERVER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -