#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Set_Vlink"	#·
	LANG003="Success"	#ɹ
	LANG004="Del_Vlink"	#ɾ·
	LANG005="Del_Vlink"	#ɾ·
fi


list_vlink()
{
    ${FLOWEYE} vlink list | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s{", dot;
        printf "\"id\":\"%s\",", $(col++);
        printf "\"name\":\"%s\",", $(col++);
        printf "\"from\":\"%s\",", $(col++);
        printf "\"intype\":\"%s\",", $(col++);
        printf "\"inip\":\"%s\",", $(col++);
        printf "\"to\":\"%s\",", $(col++);
        printf "\"outtype\":\"%s\",", $(col++);
        printf "\"outip\":\"%s\",", $(col++);
        printf "\"upbps\":\"%s\",", $(col++);
        printf "\"downbps\":\"%s\",", $(col++);
        printf "\"ifname\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}
list_glink()
{
    ${FLOWEYE} ilink list | awk \
    'BEGIN{
        dot = "";
        printf "[";
    }{
        col = 1;
        printf "%s{", dot;
        printf "\"name\":\"%s\",", $(col++);
        printf "\"groupId\":\"%s\",", $(col++);
        printf "\"groupName\":\"%s\",", $(col++);
        printf "\"net\":\"%s\",", $(col++);
        printf "\"inbps\":\"%s\",", $(col++);
        printf "\"outbps\":\"%s\"", $(col++);
        printf "}";
        if(dot == "") dot = ",";
    }END{
        printf "]";
    }'
}


load_addvlink_env()
{
    . ../common/ajax_object_lib

    printf "{"
    printf "\"iptab_list\":`lib_iptable_list`"
    printf ",\"interface_list\":`lib_interface_list`"
    printf "}"
}


add_vlink()
{
    case "${CGI_intype}" in
        "ip")
            CGI_inip="any"
            ;;

        "net")
            CGI_inip="${CGI_inipnet}"
            ;;

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

        "table")
            CGI_inip="${CGI_iniptab}"
            ;;
    esac

    case "${CGI_outtype}" in
        "ip")
            CGI_outip="any"
            ;;

        "net")
            CGI_outip="${CGI_outipnet}"
            ;;

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

        "table")
            CGI_outip="${CGI_outiptab}"
            ;;
    esac

    [ "${CGI_inip}"  = "" ] && retjson 1 "INV_INIP"
    [ "${CGI_outip}" = "" ] && retjson 1 "INV_OUTIP"

    cmdargs="name=${CGI_name} inip=${CGI_inip} outip=${CGI_outip}"
    if [ "${CGI_ifname}" != "" -a "${CGI_ifname}" != "any" ]; then
        cmdargs="${cmdargs} ifname=${CGI_ifname}"
    fi

    [ "${CGI_action}" = "add_vlink" ] && action="add" || action="set id=${CGI_id}"

	errmsg=`${FLOWEYE} vlink ${action} ${cmdargs}`

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


rmv_vlink()
{
    errmsg=`${FLOWEYE} vlink remove id=${CGI_id}`

    if [ $? -ne 0 ]; then
        retjson 1 "${LANG001:=ʧ}:${errmsg}"
    else
        WEB_LOGGER "${LANG004:=ɾ·}" "id=${CGI_id} name=${CGI_name}"
		retjson 0 "${LANG003:=ɹ}"
    fi
}


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

    WEB_LOGGER "${LANG005:=ɾ·}" "ids=${CGI_items}"
	retjson 0 "${LANG003:=ɹ}"
}

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

    "load_addvlink_env")
        retjson 0 "OK" "`load_addvlink_env`"
        ;;

    "add_vlink"|"edit_vlink")
        action_check
        add_vlink
        ;;

    "rmv_vlink")
        action_check
        rmv_vlink
        ;;

    "btnremove_vlink")
        action_check
        btnremove_vlink
        ;;
        
    *)
        retjson 1 "UNKNOW_ACTION"
        ;;
esac
