#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
    LANG001="Error"			#ʧ
    LANG002="Success"		#ɹ
fi

PCAP="${FLOWEYE} pcap"

if [ "${NTM}" = "1" ]; then
    if [ "${CMCC}" = "1" -o "${PAC}" = "1" ]; then
        PCAP="${FLOWEYE} pcap"
    else
        PCAP="${NTMEYE} mempcap"
    fi
fi


load_pcap_stat()
{
    ${PCAP} stat | awk -F"=" \
    'BEGIN{
        dot = "";
        printf "{";
    }{
        printf "%s\"%s\":\"%s\"", dot, $1, $2;
        if(dot == "") dot = ",";
    }END{
        printf "}";
    }'
}


config_pcap_stat()
{
    [ "${CGI_stat}" != "start" -a "${CGI_stat}" != "stop" ] && retjson 1 "INV_STAT"

    errmsg=`${PCAP} config action=${CGI_stat}`

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


list_policy()
{
    printf "["

    ${PCAP} list

    printf "]"
}


get_policy()
{
    ${PCAP} get id=${CGI_id} | awk -F"=" \
    'BEGIN{
        dot = "";
        printf "{";
    }{
        printf "%s\"%s\":\"%s\"", dot, $1, $2;
        if(dot == "") dot = ",";
    }END{
        printf "}";
    }'
}


load_policy_env()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"interface_list\":`lib_interface_list`"

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

    printf "}"
}


add_policy()
{
    [ "${CGI_syn}"  = "on" ] && syn=1  || syn=0
    [ "${CGI_rst}"  = "on" ] && rst=1  || rst=0
    [ "${CGI_ipv4}" = "on" ] && ipv4=1 || ipv4=0
    [ "${CGI_ipv6}" = "on" ] && ipv6=1 || ipv6=0
    [ "${CGI_mpls}" = "on" ] && mpls=1 || mpls=0
    [ "${CGI_gre}"  = "on" ] && gre=1  || gre=0
    [ "${CGI_pppoe}" = "on" ] && pppoe=1 || pppoe=0
    [ "${CGI_nonip}" = "on" ] && nonip=1 || nonip=0

    [ "${CGI_action}" = "add_policy" ] && action="add" || action="set newid=${CGI_newid}"

    cmdargs="${action} id=${CGI_id} ifname=${CGI_ifname} dir=${CGI_dir}"
    cmdargs="${cmdargs} vlan=${CGI_vlan} proto=${CGI_proto} syn=${syn} rst=${rst}"
    cmdargs="${cmdargs} ipv4=${ipv4} ipv6=${ipv6} mpls=${mpls} gre=${gre} pppoe=${pppoe} nonip=${nonip}"
    cmdargs="${cmdargs} src=${CGI_submit_srcip} dst=${CGI_submit_dstip} sport=${CGI_sport} dport=${CGI_dport}"

    errmsg=`${PCAP} ${cmdargs}`

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


rmv_policy()
{
    [ "${CGI_id}" = "" ] && retjson 1 "NO_ID"

    errmsg=`${PCAP} remove id=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        WEB_LOGGER "ɾץ" "id=${CGI_id}"
        retjson 0 "${LANG002:=ɹ}"
    fi
}


clear_policy()
{
    for id in ${CGI_ids}
    do
        errmsg=`${PCAP} remove id=${id}`
        [ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}:${errmsg}"
    done

    WEB_LOGGER "ץ"
    retjson 0 "${LANG002:=ɹ}"
}


dump_pcap()
{
    file_name="`date +%Y%m%d%H%M%S`.pcap"
    file_size=`${PCAP} stat | grep bytes | cut -d"=" -f2`

	printf "Content-Description: File Transfer\r\n"
	printf "Content-Type: application/octet-stream\r\n"
	printf "Content-Disposition: attachment; filename=${file_name}\r\n"
	printf "Content-Transfer-Encoding: binary\r\n"
	printf "Expires: 0\r\n"
	printf "Cache-Control: must-revalidate, post-check=0, pre-check=0\r\n"
	printf "Pragma: public\r\n"
	printf "Content-Length: ${file_size}\r\n"
	printf "\r\n"

    ${PCAP} dump

    retjson 0 "${LANG002:=ɹ}"
}


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

    "config_pcap_stat")
        action_check
        config_pcap_stat
        ;;

    "list_policy")
        retjson 0 "OK" "`list_policy`"
        ;;

    "load_policy_env")
        retjson 0 "OK" "`load_policy_env`"
        ;;

    "add_policy"|"edit_policy")
        action_check
        add_policy
        ;;

    "rmv_policy")
        action_check
        rmv_policy
        ;;

    "clear_policy")
        action_check
        clear_policy
        ;;

    "dump_pcap")
        action_check
        dump_pcap
        ;;

    *)
        retjson 1 "UNKNOW_ACTION"
        ;;

esac
