00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <QStringList>
00029
00030 #include "exitpolicy.h"
00031
00032
00033
00034 ExitPolicy::ExitPolicy()
00035 {
00036 }
00037
00038
00039 ExitPolicy::ExitPolicy(SpecialExitPolicy exitPolicy)
00040 {
00041 if (exitPolicy == Middleman) {
00042 _exitPolicy << Policy(Policy::RejectAll);
00043 } else if (exitPolicy == Default) {
00044 _exitPolicy << Policy("reject *:25")
00045 << Policy("reject *:119")
00046 << Policy("reject *:135-139")
00047 << Policy("reject *:445")
00048 << Policy("reject *:465")
00049 << Policy("reject *:587")
00050 << Policy("reject *:1214")
00051 << Policy("reject *:4661-4666")
00052 << Policy("reject *:6346-6429")
00053 << Policy("reject *:6699")
00054 << Policy("reject *:6881-6999")
00055 << Policy("accept *:*");
00056 }
00057 }
00058
00059
00060
00061 ExitPolicy::ExitPolicy(QString exitPolicy)
00062 {
00063 if (!exitPolicy.isEmpty()) {
00064 QStringList policyList = exitPolicy.split(",");
00065 foreach(QString policy, policyList) {
00066 addPolicy(Policy(policy));
00067 }
00068 }
00069 }
00070
00071
00072 void
00073 ExitPolicy::addPolicy(Policy policy)
00074 {
00075 if (!contains(policy)) {
00076 _exitPolicy << policy;
00077 }
00078 }
00079
00080
00081 void
00082 ExitPolicy::removePolicy(Policy policy)
00083 {
00084 for (int i = 0; i < _exitPolicy.size(); i++) {
00085 if (policy == _exitPolicy.at(i)) {
00086 _exitPolicy.removeAt(i);
00087 return;
00088 }
00089 }
00090 }
00091
00092
00093
00094 void
00095 ExitPolicy::addAcceptedPorts(QStringList portList)
00096 {
00097 foreach (QString port, portList) {
00098 addPolicy(Policy("accept *:" + port));
00099 }
00100 }
00101
00102
00103
00104
00105 bool
00106 ExitPolicy::acceptsPorts(QStringList portList)
00107 {
00108 foreach (QString port, portList) {
00109 if (!contains(Policy("accept *:" + port))) {
00110 return false;
00111 }
00112 }
00113 return true;
00114 }
00115
00116
00117
00118 void
00119 ExitPolicy::addRejectedPorts(QStringList portList)
00120 {
00121 foreach (QString port, portList) {
00122 addPolicy(Policy("reject *:" + port));
00123 }
00124 }
00125
00126
00127
00128
00129 bool
00130 ExitPolicy::rejectsPorts(QStringList portList)
00131 {
00132 foreach (QString port, portList) {
00133 if (!contains(Policy("reject *:" + port))) {
00134 return false;
00135 }
00136 }
00137 return true;
00138 }
00139
00140
00141 bool
00142 ExitPolicy::contains(Policy policy)
00143 {
00144 Policy acceptAll(Policy::AcceptAll);
00145 Policy rejectAll(Policy::RejectAll);
00146
00147
00148 foreach (Policy p, _exitPolicy) {
00149 if (p.matches(policy)) {
00150 return true;
00151 }
00152 if ((p == acceptAll) || (p == rejectAll)) {
00153
00154 return false;
00155 }
00156 }
00157
00158 foreach (Policy p, ExitPolicy(Default).policyList()) {
00159 if (p.matches(policy)) {
00160 return true;
00161 }
00162 }
00163 return false;
00164 }
00165
00166
00167 QString
00168 ExitPolicy::toString()
00169 {
00170 QStringList policyList;
00171 foreach (Policy policy, _exitPolicy) {
00172 policyList << policy.toString();
00173 }
00174 return policyList.join(",");
00175 }
00176