00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __WVIPFIREWALL_H
00014 #define __WVIPFIREWALL_H
00015
00016 #include "wvinterface.h"
00017 #include "wvstringlist.h"
00018 #include "wvaddr.h"
00019
00020
00021 DeclareWvList(WvIPPortAddr);
00022 class IWvIPFirewall
00023 {
00024 public:
00025 virtual ~IWvIPFirewall() { }
00026 virtual void zap() = 0;
00027 virtual void add_port(const WvIPPortAddr &addr) = 0;
00028 virtual void add_redir(const WvIPPortAddr &src, int dstport) = 0;
00029 virtual void add_redir_all(int dstport) = 0;
00030 virtual void add_redir_port_range(const WvIPPortAddr &src_min,
00031 const WvIPPortAddr &src_max, int dstport) = 0;
00032 virtual void add_proto(WvStringParm proto) = 0;
00033 virtual void add_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst,
00034 bool snat) = 0;
00035
00036 virtual void del_port(const WvIPPortAddr &addr) = 0;
00037 virtual void del_redir(const WvIPPortAddr &src, int dstport) = 0;
00038 virtual void del_redir_all(int dstport) = 0;
00039 virtual void del_redir_port_range(const WvIPPortAddr &src_min,
00040 const WvIPPortAddr &src_max, int dstport) = 0;
00041 virtual void del_proto(WvStringParm proto) = 0;
00042 virtual void del_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst,
00043 bool snat) = 0;
00044 };
00045
00047 class WvIPFirewall : public IWvIPFirewall
00048 {
00049 class FFwd
00050 {
00051 public:
00052 WvIPPortAddr src;
00053 WvIPPortAddr dst;
00054 bool snat;
00055
00056 FFwd(const WvIPPortAddr &_src, const WvIPPortAddr &_dst, bool _snat) : src(_src), dst(_dst)
00057 { snat = _snat; }
00058 };
00059
00060 class Redir
00061 {
00062 public:
00063 WvIPPortAddr src;
00064 int dstport;
00065
00066 Redir(const WvIPPortAddr &_src, int _dstport) : src(_src)
00067 { dstport = _dstport; }
00068 };
00069
00070 class RedirAll
00071 {
00072 public:
00073 int dstport;
00074
00075 RedirAll(int _dstport)
00076 { dstport = _dstport; }
00077 };
00078
00079 class RedirPortRange
00080 {
00081 public:
00082 WvIPPortAddr src_min;
00083 WvIPPortAddr src_max;
00084 int dstport;
00085
00086 RedirPortRange(const WvIPPortAddr &_src_min,
00087 const WvIPPortAddr &_src_max, int _dstport)
00088 : src_min(_src_min), src_max(_src_max)
00089 { dstport = _dstport; }
00090 };
00091
00092 DeclareWvList(FFwd);
00093 DeclareWvList(Redir);
00094 DeclareWvList(RedirAll);
00095 DeclareWvList(RedirPortRange);
00096
00097 FFwdList ffwds;
00098 RedirList redirs;
00099 RedirAllList redir_alls;
00100 RedirPortRangeList redir_port_ranges;
00101
00102 WvIPPortAddrList addrs;
00103 WvStringList protos;
00104
00105 WvString port_command(const char *cmd, const char *proto,
00106 const WvIPPortAddr &addr);
00107 WvString redir_command(const char *cmd,
00108 const WvIPPortAddr &src, int dstport);
00109 WvString redir_port_range_command(const char *cmd,
00110 const WvIPPortAddr &src_min, const WvIPPortAddr &src_max, int dstport);
00111 WvString redir_all_command(const char *cmd, int dstport);
00112 WvString proto_command(const char *cmd, const char *proto);
00113 WvString forward_command(const char *cmd, const char *proto,
00114 const WvIPPortAddr &src,
00115 const WvIPPortAddr &dst, bool snat);
00116 WvLog log;
00117 const char *shutup() const
00118 { return ignore_errors ? " >/dev/null 2>/dev/null " : ""; }
00119
00120 public:
00121 WvIPFirewall();
00122 virtual ~WvIPFirewall();
00123
00124 static bool enable, ignore_errors;
00125
00126 virtual void zap();
00127 virtual void add_port(const WvIPPortAddr &addr);
00128 virtual void add_redir(const WvIPPortAddr &src, int dstport);
00129 virtual void add_redir_all(int dstport);
00130 virtual void add_redir_port_range(const WvIPPortAddr &src_min,
00131 const WvIPPortAddr &src_max, int dstport);
00132 virtual void add_proto(WvStringParm proto);
00133 virtual void add_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst,
00134 bool snat);
00135 virtual void del_proto(WvStringParm proto);
00136 virtual void del_port(const WvIPPortAddr &addr);
00137 virtual void del_redir(const WvIPPortAddr &src, int dstport);
00138 virtual void del_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst,
00139 bool snat);
00140 virtual void del_redir_all(int dstport);
00141 virtual void del_redir_port_range(const WvIPPortAddr &src_min,
00142 const WvIPPortAddr &src_max, int dstport);
00143 };
00144
00145 #endif // __WVIPFIREWALL_H