#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
	LANG003="Delete_Route6_Policy"	#ɾIPv6·
	LANG004="Disable_Route6_Policy"	#IPv6·
	LANG005="Enable_Route6_Policy"	#IPv6·
	LANG006="Disable_Route6_Policy"	#IPv6·
	LANG007="Enable_Route6_Policy"	#IPv6·
	LANG008="Delete_Route6_Policy"	#ɾIPv6·
	LANG009="Edit_Route6_Policy"	#༭IPv6·
	LANG010="Add_Route6_Policy"		#IPv6·
fi


list_route6_policy()
{
	${FLOWEYE} route6 list | grep -i "${CGI_keyword}" | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		gsub("%20", " ", $27);

		col = 1;
		printf "%s", dot;
		printf "{";
		printf "\"id\":\"%s\",", $(col++);
		printf "\"iniftype\":\"%s\",", $(col++);
		printf "\"inif\":\"%s\",", $(col++);
		printf "\"proto\":\"%s\",", $(col++);
		printf "\"appid\":\"%s\",", $(col++);
		printf "\"appname\":\"%s\",", $(col++);
		printf "\"srctype\":\"%s\",", $(col++);
		printf "\"srcip\":\"%s\",", $(col++);
		printf "\"srcport\":\"%s\",", $(col++);
		printf "\"dsttype\":\"%s\",", $(col++);
		printf "\"dstip\":\"%s\",", $(col++);
		printf "\"dstport\":\"%s\",", $(col++);
		printf "\"disabled\":\"%s\",", $(col++);
		printf "\"vlan\":\"%s\",", $(col++);
		printf "\"ttl\":\"%s\",", $(col++);
		printf "\"action\":\"%s\",", $(col++);
		printf "\"pxytype\":\"%s\",", $(col++);
		printf "\"proxy\":\"%s\",", $(col++);
		printf "\"nextype\":\"%s\",", $(col++);
		printf "\"nexthop\":\"%s\",", $(col++);
		printf "\"state\":\"%s\",", $(col++);
		printf "\"pkts\":\"%s\",", $(col++);
		printf "\"rtptimeid\":\"%s\",", $(col++);
		printf "\"rtptimename\":\"%s\",", $(col++);
		printf "\"active\":\"%s\",", $(col++);
		printf "\"standby\":\"%s\",", $(col++);
		printf "\"pid\":\"%s\",", $(col++);
		printf "\"pname\":\"%s\",", $(col++);
		printf "\"newdstip\":\"%s\",", $(col++);
		printf "\"natip\":\"%s\",", $(col++);
		printf "\"desc\":\"%s\"", $(col++);
		printf "}";
		if(dot == "") dot = ",";
	}END{
		printf "]";
	}'
}


rmv_route6_policy()
{
	errmsg=`${FLOWEYE} route6 remove id=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
		sync_floweye "route6 remove id=${CGI_id}"
		WEB_LOGGER "${LANG003:=ɾIPv6·}" "id=${CGI_id}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


disable_route6_policy()
{
	errmsg=`${FLOWEYE} route6 disable id=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
		sync_floweye "route6 disable id=${CGI_id}"
		WEB_LOGGER "${LANG004:=IPv6·}" "id=${CGI_id}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


enable_route6_policy()
{
	errmsg=`${FLOWEYE} route6 enable id=${CGI_id}`

	if [ "$?" != "0" ]; then
		retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
		sync_floweye "route6 enable id=${CGI_id}"
		WEB_LOGGER "${LANG005:=IPv6·}" "id=${CGI_id}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


btndisable_route6_policy()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} route6 disable id=${id}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
		sync_floweye "route6 disable id=${id}"
	done

	WEB_LOGGER "${LANG006:=IPv6·}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


btnenable_route6_policy()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} route6 enable id=${id}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
		sync_floweye "route6 enable id=${id}"
	done

	WEB_LOGGER "${LANG007:=IPv6·}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


btnremove_route6_policy()
{
	for id in `echo ${CGI_items} | tr ";" " "`
	do
		errmsg=`${FLOWEYE} route6 remove id=${id}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
		sync_floweye "route6 remove id=${id}"
	done

	WEB_LOGGER "${LANG008:=ɾIPv6·}" "ids=${CGI_items}"
	retjson 0 "${LANG002:=ɹ}"
}


get_nat_policy()
{
	${FLOWEYE} route6 get id=${CGI_id} | awk -F "=" \
	'BEGIN{
		dot = "";
		printf "{";
	}{
		gsub("%20", " ", $2);

		printf "%s", dot;
		printf "\"%s\":\"%s\"", $1, $2;
		if (dot == "") dot = ",";
	}END{
		printf "}";
	}'
}


load_addrule_env()
{
	. ../common/ajax_object_lib

	printf "{"
	printf "\"interface\":`lib_interface_list`"
	printf ",\"wangroup\":`lib_wangroup_list`"
	printf ",\"ippool\":`lib_ippool_list`"
	printf ",\"proxy\":`lib_proxy_list`"
	printf ",\"iptab_list\":`lib_iptable_list`"
	printf ",\"rtptime_list\":`lib_rtptime_list`"
	printf ",\"bridge_list\":`lib_bridge_list`"
	printf ",\"dnsgrp_list\":`lib_dnsgrp_list`"

	if [ "${CGI_id}" != "" ]; then
		printf ",\"policy\":`get_nat_policy`"
	fi

	printf "}"
}


add_route6_policy()
{
	if [ "${CGI_action}" != "add_route6_policy" ]; then
		LOG_MSG="${LANG009:=༭IPv6·}"
		cmdargs="set id=${CGI_old_id} newid=${CGI_id} inif=${CGI_inif}"
	else
		LOG_MSG="${LANG010:=IPv6·}"
		cmdargs="add id=${CGI_id} inif=${CGI_inif}"
	fi

	case "${CGI_srctype}" in
		"net")
			CGI_inip="${CGI_inipnet}"
			;;

		"iprange")
			CGI_inip="${CGI_iniprng}"
			;;

		"table")
			CGI_inip="${CGI_iniptbl}"
			;;
		*)
			CGI_inip="any"
	esac

	if [ "${CGI_srcport}" != "" -a "${CGI_srcport}" != "0" ]; then
		CGI_inip="${CGI_inip}.${CGI_srcport}"
	fi

	cmdargs="${cmdargs} src=${CGI_inip}"

	case "${CGI_dsttype}" in
		"net")
			CGI_outip="${CGI_outipnet}"
			;;

		"iprange")
			CGI_outip="${CGI_outiprng}"
			;;

		"table")
			CGI_outip="${CGI_outiptbl}"
			;;
		*)
			CGI_outip="any"
			;;
	esac

	if [ "${CGI_dstport}" != "" -a "${CGI_dstport}" != "0" ]; then
		CGI_outip="${CGI_outip}.${CGI_dstport}"
	fi

	[ "${CGI_vlan}" = "" ] && CGI_vlan="0-0"
	cmdargs="${cmdargs} dst=${CGI_outip} proto=${CGI_proto} app=${CGI_appid} vlan=${CGI_vlan}"

	if [ "${CGI_act}" = "nat" ]; then
		[ "${CGI_nexthop}" = "" ] && CGI_nexthop="_NULL_"
		[ "${CGI_newdstip}" = "" ] && CGI_newdstip="::"
		cmdargs="${cmdargs} action=nat-${CGI_actpxyname}"
		cmdargs="${cmdargs} nexthop=${CGI_nexthop} natip=${CGI_natip} newdstip=${CGI_newdstip}"
	else
		[ "${CGI_route_nexthop}" = "" ] && CGI_route_nexthop="::"
		cmdargs="${cmdargs} action=route-${CGI_route_pxyname}"
		cmdargs="${cmdargs} nexthop=${CGI_route_nexthop}"
	fi

	[ "${CGI_ttl}" != "" ] && cmdargs="${cmdargs} ttl=${CGI_ttl}"

	if [ "${CGI_desc}" = "" ]; then
		cmdargs="${cmdargs} desc=NULL"
	else
		CGI_desc=`echo ${CGI_desc} | sed -r 's/ /\%20/g'`
		cmdargs="${cmdargs} desc=${CGI_desc}"
	fi

	[ "${CGI_schtime}" = "" ] && CGI_schtime=0
	cmdargs="${cmdargs} schtime=${CGI_schtime}"

	[ "${CGI_pool}" = "" ] && CGI_pool=0
	cmdargs="${cmdargs} pool=${CGI_pool} wanbw=${CGI_wanbw} wanbwout=${CGI_wanbwout}"
	errmsg=`${FLOWEYE} route6 ${cmdargs}`

	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}:${errmsg}"
	else
		sync_floweye "route6 ${cmdargs}"
		WEB_LOGGER "${LOG_MSG}" "${cmdargs}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


case "${CGI_action}" in
	"list_route6_policy")
		retjson 0 "OK" "`list_route6_policy`"
		;;

	"rmv_route6_policy")
		action_check
		rmv_route6_policy
		;;
	
	"disable_route6_policy")
		action_check
		disable_route6_policy
		;;

	"enable_route6_policy")
		action_check
		enable_route6_policy
		;;
	
	"btndisable_route6_policy")
		action_check
		btndisable_route6_policy
		;;

	"btnenable_route6_policy")
		action_check
		btnenable_route6_policy
		;;

	"btnremove_route6_policy")
		action_check
		btnremove_route6_policy
		;;

	"load_addrule_env")
		retjson 0 "OK" "`load_addrule_env`"
		;;

	"add_route6_policy"|"edit_route6_policy")
		action_check
		add_route6_policy
		;;

	*)
		retjson 1 "UNKNOW_ACTION"
		;;
esac
