#!/bin/sh
#This script is created by ssparser automatically. The parser first created by MaoShouyan
printf "Content-type: text/html
Cache-Control: no-cache

"
echo -n "";
. ../common/common.sh 
myself="/cgi-bin/Setup/`basename $0`"

echo -n "
<script type=\"text/javascript\" src=\"/img/common.js\"></script>
<script language=\"javascript\">
";
echo "var actionlist = ["
${FLOWEYE} policy listbwo | while read no bdg name type dir theoterhs
do
	echo "[ \"${bdg}\", \"${dir}\", \"${type}\", \"${name}\", \"${name}\" ],"
done
${FLOWEYE} nat listproxy | while read name ifname addr gateway
do
	echo "[ \"0\", \"both\", \"proxy\", \"${name}\", \"${name}\" ],"
done
echo "[ \"NULL\", \"NULL\", \"NULL\", \"NULL\", \"NULL\" ]"
echo " ]; "

echo -n "
		
function beforeAddRule(frm)
{
	var rngs;
	var polno   = document.getElementsByName(\"polno\")[0];
	var iprate  = document.getElementsByName(\"iprate\")[0];
	var intype  = document.getElementsByName(\"intype\")[0];
	var outtype = document.getElementsByName(\"outtype\")[0];
	var inipnet = document.getElementsByName(\"inipnet\")[0];
	var iniprng = document.getElementsByName(\"iniprng\")[0];
	var outipnet= document.getElementsByName(\"outipnet\")[0];
	var outiprng= document.getElementsByName(\"outiprng\")[0];
	var action  = document.getElementsByName(\"action\")[0];
	var apid    = document.getElementsByName(\"appid\")[0];
	var tos     = document.getElementsByName(\"tos\")[0];
	var pri     = document.getElementsByName(\"priority\")[0];
	polno.value = TrimAll(polno.value);
	if (!IsDigitIn(polno.value, 1, 65535)) {
		alert(\"űǽ165535֮һ!\");
		polno.select();
		return false;
	}
	inipnet.value = TrimAll(inipnet.value);
	iniprng.value = TrimAll(iniprng.value);
	if (intype.value == \"net\") {
		if (!IsIPAddr(inipnet.value)) {
			alert(\"ȷIPַʽΪx.x.x.x/n\");
			inipnet.select();
			return false;
		}
	}
	else
	if (intype.value == \"range\") {
		rngs = iniprng.value.split(\"-\");
		if (rngs.length != 2 || !IsIPAddr(rngs[0]) || !IsIPAddr(rngs[1])) {
			alert(\"ȷIPΣʽΪx.x.x.x-y.y.y.y\");
			iniprng.select();
			return false;
		}
	}
	outipnet.value = TrimAll(outipnet.value);
	outiprng.value = TrimAll(outiprng.value);
	if (outtype.value == \"net\") {
		if (!IsIPAddr(outipnet.value)) {
			alert(\"ȷIPַʽΪx.x.x.x/n\");
			outipnet.select();
			return false;
		}
	}
	else
	if (outtype.value == \"range\") {
		rngs = outiprng.value.split(\"-\");
		if (rngs.length != 2 || !IsIPAddr(rngs[0]) || !IsIPAddr(rngs[1])) {
			alert(\"ȷIPΣʽΪx.x.x.x-y.y.y.y\");
			outiprng.select();
			return false;
		}
	}
		
	iprate.value = TrimAll(iprate.value);
	if (iprate.value == \"\") 
		iprate.value = \"0\";
	tos.value = TrimAll(tos.value);
	if (tos.value == \"\") tos.value = \"0\";
	if (!IsDigitIn(tos.value, 0, 63)) {
		alert(\"0~63!\");
		tos.select();
		return false;
	}
	pri.value = TrimAll(pri.value);
	if (pri.value == \"\") pri.value = \"0\";
	if (!IsDigitIn(pri.value, 0, ${MAXPRI})) {
		alert(\"0~${MAXPRI}!\");
		pri.select();
		return false;
	}
	if (!IsDigitIn(iprate.value, 0, 65536)) {
		alert(\"ʣ0kbits/s~65536kbits/s֮!\");
		iprate.select();
		return false;
	}
	if (action.value == \"deny\" && apid.value == \"other\") {
		if (!confirm(\"Эsyn/ackҪݰ,صĺ,ȷҪ?\")) 
			return false;
	}
	if (action.value == \"deny\" && apid.value == \"any\") {
		if (!confirm(\"Э齫粻ͨ,ȷҪЭ?\"))
			return false;
	}
	
	return true;
}
function onCancel(polgrpid)
{
	window.location.href = \"/cgi-bin/Setup/policy_getgrp?policy=\" + polgrpid;
}
function onPathChanged(obj) 
{
	var ar, bridge, dir;
	var action = document.getElementsByName(\"action\")[0];
	var value  = action.value;
	var isproxy = 0;
	ar = obj.value.split(\".\");
	bridge = ar[0]; 
	dir = ar[1];
	ar = obj.value.split(\"-\");
	if (ar[0] == \"PROXY\" || ar[0] == \"proxy\")
		isproxy = 1;
	action.options.length = 0;
	opt = document.createElement(\"option\");
	opt.value = \"deny\";
	opt.text  = \"\";
	action.options.add(opt);
	opt = document.createElement(\"option\");
	opt.value = \"permit\";
	opt.text  = \"\";
	action.options.add(opt);
	for (var i = 0; i < actionlist.length; i++) {
		if (actionlist[i][0] == \"NULL\")
			continue;
		if (actionlist[i][2] == \"limit\") {
			opt = document.createElement(\"option\");
			opt.value = actionlist[i][3];
			opt.text  = actionlist[i][4];
			action.options.add(opt);
		}
		else
		if (actionlist[i][2] == \"proxy\") {
			opt = document.createElement(\"option\");
			opt.value = \"PROXY-\" + actionlist[i][3];
			opt.text  = \"PROXY-\" + actionlist[i][4];
			action.options.add(opt);
		}
		else {
			if (isproxy || (bridge != \"0\" && bridge == actionlist[i][0] &&
			    dir != \"both\" && dir == actionlist[i][1])) {
				opt = document.createElement(\"option\");
				opt.value = actionlist[i][3];
				opt.text  = actionlist[i][4];
				action.options.add(opt);
			}
		}
	}
	for (i = 0; i < action.options.length; i++) {
		if (action.options[i].value == value) {
			action.selectedIndex = i;
			break;
		}
	}
	if (action.selectedIndex < 0)
		action.selectedIndex = 0;
}
function onIntypeChanged(obj) 
{
	var net = document.getElementsByName(\"inipnet\")[0];
	var rng = document.getElementsByName(\"iniprng\")[0];
	var tbl = document.getElementsByName(\"iniptbl\")[0];
	if (obj.value == \"any\") {
		net.style.display = \"none\";
		rng.style.display = \"none\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"net\") {
		net.style.display = \"block\";
		rng.style.display = \"none\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"range\") {
		net.style.display = \"none\";
		rng.style.display = \"block\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"table\") {
		net.style.display = \"none\";
		rng.style.display = \"none\";
		tbl.style.display = \"block\";
	}
}
function onOuttypeChanged(obj) 
{
	var net = document.getElementsByName(\"outipnet\")[0];
	var rng = document.getElementsByName(\"outiprng\")[0];
	var tbl = document.getElementsByName(\"outiptbl\")[0];
	if (obj.value == \"any\") {
		net.style.display = \"none\";
		rng.style.display = \"none\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"net\") {
		net.style.display = \"block\";
		rng.style.display = \"none\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"range\") {
		net.style.display = \"none\";
		rng.style.display = \"block\";
		tbl.style.display = \"none\";
	}
	else
	if (obj.value == \"table\") {
		net.style.display = \"none\";
		rng.style.display = \"none\";
		tbl.style.display = \"block\";
	}
}
function onActionChanged(obj) 
{
	var nextact = document.getElementsByName(\"matchact\")[0];
	var iprate  = document.getElementsByName(\"iprate\")[0];
	var dscp = document.getElementsByName(\"tos\")[0];
	var prclevel = document.getElementsByName(\"prclevel\")[0];
	var priority = document.getElementsByName(\"priority\")[0];
	if (obj.value == \"deny\") {
		nextact.disabled = true;
		iprate.disabled  = true;
		dscp.disabled = true;
		prclevel.disabled = true;
		priority.disabled = true;
	}
	else {
		nextact.disabled = false;
		iprate.disabled  = false;
		dscp.disabled = false;
		prclevel.disabled = false;
		priority.disabled = false;
	}
}
function onLoad() 
{
	var path = document.getElementsByName(\"path\")[0];
	onPathChanged(path);
}
function selectApp(appid)
{
	var url = \"/cgi-bin/Setup/app_select\";
	var retval = ShowDialog(url, \"\", 400, 600);
	if (retval == \"NONE\") return;
	var ar = retval.split(\",\");
	if (ar.length != 2) {
		alert(\"Чķֵ\");
		return;
	}
	var appid = document.getElementsByName(\"appid\")[0];
	var appname = document.getElementsByName(\"appname\")[0];
	appid.value = ar[0];
	appname.value = ar[1];
}
</script>
";
if [ "${REQUEST_METHOD}" = "POST" ]; then
	case "${CGI_intype}" in
	"any")
		CGI_inip="any"
		;;
	"net")
		CGI_inip="${CGI_inipnet}"
		;;
	"range")
		CGI_inip="${CGI_iniprng}"
		;;
	"table")
		CGI_inip="${CGI_iniptbl}"
		;;
	esac
	case "${CGI_outtype}" in
	"any")
		CGI_outip="any"
		;;
	"net")
		CGI_outip="${CGI_outipnet}"
		;;
	"range")
		CGI_outip="${CGI_outiprng}"
		;;
	"table")
		CGI_outip="${CGI_outiptbl}"
		;;
	esac
	case "${CGI_matchact}" in
	"next")
		CGI_next="1"
		;;
	"stop")
		CGI_next="0"
		;;
	"")
		CGI_next="0"
		;;
	esac
	CGI_bridge=`echo ${CGI_path} | cut -d'.' -f1`
	CGI_dir=`echo ${CGI_path} | cut -d'.' -f2`
	[ "${CGI_natip}" = "" ] && CGI_natip="0"
	[ "${CGI_prclevel}" = "" ] && CGI_prclevel="0"
	[ "${CGI_tos}" = "" ] && CGI_tos="0"
	[ "${CGI_priority}" = "" ] && CGI_priority="0"
	[ "${CGI_iprate}" = "" ] && CGI_iprate="0"
	errmsg=`${FLOWEYE} policy addrule group=${CGI_policy} id=${CGI_polno} bridge=${CGI_bridge} dir=${CGI_dir} \
app=${CGI_appid} inip=${CGI_inip} outip=${CGI_outip} action=${CGI_action} iprate=${CGI_iprate} next=${CGI_next} \
prclevel=${CGI_prclevel} tos=${CGI_tos} pri=${CGI_priority} natip=${CGI_natip}`
	if [ "$?" != "0" ]; then
		afm_dialog_msg "ִ:${errmsg}"
	else
		afm_dialog_msg "ɹ!"
		afm_load_page 0 "/cgi-bin/Setup/policy_getgrp?policy=${CGI_policy}"
		exit 0
	fi
else
	[ "${CGI_bridge}" = "" ] && CGI_bridge="0"
	[ "${CGI_dir}" = "" ] && CGI_dir="in"
	[ "${CGI_inip}" = "" ] && CGI_inip="any"
	[ "${CGI_outip}" = "" ] && CGI_outip="any"
	[ "${CGI_matchact}" = "" ] && CGI_matchact="stop"
	[ "${CGI_action}" = "" ] && CGI_action="permit"
	[ "${CGI_prclevel}" = "" ] && CGI_prclevel="0"
	[ "${CGI_iprate}" = "" ] && CGI_iprate="0"
	[ "${CGI_tos}" = "" ] && CGI_tos="0"
	[ "${CGI_priority}" = "" ] && CGI_priority="0"
	[ "${CGI_natip}" = "" ] && CGI_natip="0"
fi

echo -n "
<body onload=\"onLoad()\">
<script type=\"text/javascript\" src=\"/img/wz_tooltip.js\"></script>
<span id=\"hlpno\" style=\"display:none\">ŷΧΪ1~65535,СĹƥ</span>
<span id=\"hlpdir\" style=\"display:none\">\"\"ʾ,\"\"ʾ</span>
<span id=\"hlprate\" style=\"display:none\">IPֻIPЧ,0ʾ</span>
<span id=\"hlpnext\" style=\"display:none\">(1)\"ƥ\"ʾһƥƥĲ<br>(2)\"ֹͣƥ\"ʾƥĲ<br>(3)Ϊ\"\"ʱѡЧ</span>
<span id=\"hlplevel\" style=\"display:none\">1ǿ,10ǿС</span>
<span id=\"hlptos\" style=\"display:none\">DSCPʱֻӵĵһƥ䣬ӺİDSCPֵ͵һһ</span>
<span id=\"hlppri\" style=\"display:none\">ԽСȼԽ;0ʾŶֱͨ</span>
<span id=\"hlpnatip\" style=\"display:none\">ͨIPСû0ʾ</span>
"; 
policyname=`${FLOWEYE} policy listgrp | grep "^${CGI_policy} " | awk '{print $2}'`
cgi_show_title "->->Ӳ" 
tblexists=`${FLOWEYE} table list`

echo -n "
<br>
<form method=post onsubmit=\"return beforeAddRule(this)\" action=\"${myself}\">
<table width=600 border=0 cellspacing=0 cellpadding=3 bgcolor=\"#ffffff\">
<tr id=row1>
	<td width=100></td>
        <td width=120 align=left></td>
	<td width=130 align=left>${policyname}</td>
	<td width=* align=left></td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>Աʶ</td>
	<td align=left><input align=right type=text name=polno style=\"width:100%\" value=\"${CGI_polno}\"></input></td>
	<td width=* align=left><a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlpno')\" onmouseout=\"UnTip()\">(1~65535)</a></td>
</tr>
</table>
<br>
<table style=\"width:600; border-bottom:1px #787882 solid; color:#000000\">
<tr><td align=left style=\"font-size:11px\"><b>ƥ</b></td></tr>
</table>
<br>
<table width=600 border=0 cellspacing=0 cellpadding=3 bgcolor=\"#ffffff\">
<tr id=row1>
	<td width=100></td>
        <td width=120 align=left>·</td>
	<td width=130 align=left>
		<select name=path style=\"width:100%\" value=\"${CGI_bridge}.${CGI_dir}\" onchange=\"onPathChanged(this)\">
			<option value=\"0.both\">·</option>
			<option value=\"0.out\">·</option>
			<option value=\"0.in\">·</option>
	"; 	for bdg in  `${FLOWEYE} bridge list`; do
			for dir in "both" "in" "out"; do
				selit=""
				[ "${CGI_bridge}" = "${bdg}" -a "${CGI_dir}" = "${dir}" ] && selit="selected"
				bdgname=""
				[ ${bdg} -ne 0 ] && bdgname="${bdg}->"
				if [ "${dir}" = "in" ]; then
					dname=""
				elif [ "${dir}" = "out" ]; then
					dname=""
				else
					dname="˫"
				fi
				echo "<option value=\"${bdg}.${dir}\" ${selit}>${bdgname}${dname}</option>"
			done
		done
		${FLOWEYE} nat listproxy | while read name theothers; do
			for dir in "both" "in" "out"; do
				selit=""
				[ "${CGI_bridge}" = "PROXY-${name}" -a "${CGI_dir}" = "${dir}" ] && selit="selected"
				if [ "${dir}" = "in" ]; then
					dname=""
				elif [ "${dir}" = "out" ]; then
					dname=""
				else
					dname="˫"
				fi
				echo "<option value=\"PROXY-${name}.${dir}\" ${selit}>PROXY-${name}${dname}</option>"
			done
		done
	
echo -n "</select></td>
	<td width=* align=left><a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlpdir')\" onmouseout=\"UnTip()\">[]</a></td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>ַ</td>
        <td align=left>
		<select name=intype style=\"width:100%\" value=\"any\" onchange=\"onIntypeChanged(this)\">
			<option value=\"any\" selected>ַ</option>
			<option value=\"net\">xxx.xxx.xxx.xxx/nn</option>
			<option value=\"range\">n.n.n.n-m.m.m.m</option>
		";
			if [ "${tblexists}" != "" ]; then
				echo "<option value=\"table\">IPȺ</option>"
			fi
		
echo -n "
		</select>
	</td>
	<td width=* align=left>
		<input type=text name=inipnet style=\"width:120px;display:none\"></input>
		<input type=text name=iniprng style=\"width:160px;display:none\"></input>
		<select name=iniptbl style=\"width:120px;display:none\">
		";
			${FLOWEYE} table list | while read tblid tblname
			do
				echo "<option value=\"${tblid}\">${tblname}</option>"
			done
		
echo -n "
		</select>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>ַ</td>
        <td align=left>
		<select name=outtype style=\"width:100%\" value=\"any\" onchange=\"onOuttypeChanged(this)\">
			<option value=\"any\" selected>ַ</option>
			<option value=\"net\">xxx.xxx.xxx.xxx/nn</option>
			<option value=\"range\">n.n.n.n-m.m.m.m</option>
		";
			if [ "${tblexists}" != "" ]; then
				echo "<option value=\"table\">IPȺ</option>"
			fi
		
echo -n "
		</select>
	</td>
	<td width=* align=left>
		<input type=text name=outipnet style=\"width:120px;display:none\"></input>
		<input type=text name=outiprng style=\"width:160px;display:none\"></input>
		<select name=outiptbl style=\"width:120px;display:none\">
		";
			${FLOWEYE} table list | while read tblid tblname
			do
				echo "<option value=\"${tblid}\">${tblname}</option>"
			done
		
echo -n "
		</select>
	</td>
</tr>
";
[ "${CGI_appid}" = "" ] && CGI_appid="any"
appname=`${FLOWEYE} app name ${CGI_appid}`

echo -n "
<tr id=row1>
	<td></td>
        <td align=left>ӦЭ</td>
        <td align=left>
		<input type=hidden name=appid value=\"${CGI_appid}\"></input>
		<input type=text name=appname value=\"${appname}\" disabled style=\"width:100%\">
	</td>
	<td width=* class=cssTDArial align=left>
	  <input type=button name=tmp value=\"ѡЭ...\" style=\"width:80px\" onclick=\"selectApp('${CGI_appid}')\"></input>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>û()</td>
        <td><input type=text name=natip value=\"${CGI_natip}\" style=\"width:100%\"></input></td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlpnatip')\" onmouseout=\"UnTip()\">()</a>
	</td>
</tr>
</table>
<br>
<table style=\"width:600; border-bottom:1px #787882 solid; color:#000000\">
<tr><td align=left style=\"font-size:11px\"><b>ִж</b></td></tr>
</table>
<br>
<table width=600 border=0 cellspacing=0 cellpadding=3 bgcolor=\"#ffffff\">
<tr id=row1>
	<td width=100></td>
        <td width=120 align=left>/ͨ</td>
        <td width=130><select name=action value=\"${CGI_action}\" style=\"width:100%\" onchange=\"onActionChanged(this)\">
		<option value=\"permit\"></option>
		<option value=\"deny\"></option>
	</select></td>
	<td width=* class=cssTDArial align=left></td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>IP</td>
        <td><input type=text name=iprate ${ipratedis} value=\"${CGI_iprate}\" style=\"width:100%\"></input></td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlprate')\" onmouseout=\"UnTip()\">(kbits/s)</a>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>Զ˷</td>
        <td><select name=prclevel value=\"${CGI_prclevel}\" style=\"width:100%\"> ";
		for level in 1 2 3 4 5 6 7 8 9 10 0; do
			if [ ${level} -eq 0 ]; then
				title=""
			else
				title="${level}ǿ"
			fi
			if [ "${level}" = "${CGI_prclevel}" ]; then
				echo "<option value=${level} selected>${title}</option>"
			else
				echo "<option value=${level}>${title}</option>"
			fi
		done 
echo -n "
	</td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlplevel')\" onmouseout=\"UnTip()\">[]</a>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>DSCP</td>
        <td><input type=text name=tos value=\"${CGI_tos}\" style=\"width:100%\"></input></td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlptos')\" onmouseout=\"UnTip()\">[0~63,0ʾ]</a>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left>ȼ</td>
	<td><input type=text name=priority value=${CGI_priority} style=\"width:100%\"></input></td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlppri')\" onmouseout=\"UnTip()\">[0~${MAXPRI}]</a>
	</td>
</tr>
<tr id=row1>
	<td></td>
        <td align=left></td>
        <td><select name=matchact ${ipratedis} value=${CGI_matchact} style=\"width:100%\">
	";
		if [ "${CGI_matchact}" = "stop" ]; then
			echo "<option value=stop selected>ֹͣƥ</option>"
			echo "<option value=next>ƥ</option>"
		else
			echo "<option value=stop>ֹͣƥ</option>"
			echo "<option value=next selected>ƥ</option>"
		fi
	
echo -n "</select></td>
	<td width=* align=left>
		<a style=\"color:#0000ff\" onmouseover=\"TagToTip('hlpnext')\" onmouseout=\"UnTip()\">[]</a>
	</td>
</tr>
</table>
<table style=\"width:600; border-bottom:1px #787882 solid; color:#0000ff\">
<tr><td align=right>&nbsp;</td></tr>
</table>
<table style=\"width:600\"> 
<tr>
        <td align=right>
		<input type=submit style=\"width:80\" value=\"ύ\"></input>
		<input type=button style=\"width:80\" value=\"ȡ\" onclick=\"onCancel('${CGI_policy}')\"></input>
		<input type=hidden name=policy value=\"${CGI_policy}\"></input>
	</td>
</tr>
</table>
</form>
</body>
</html>
";