. /usr/share/libubox/jshn.sh
. /lib/functions.sh


config_apply()
{
    test -z "$1" && return 1
	if [ -e "/dev/appfilter" ];then
    	echo "$1" >/dev/appfilter
	fi
}

clean_rule()
{
    json_init
    json_add_int "op" 3
    json_add_object "data"
    json_str=`json_dump`
    config_apply "$json_str"
    json_cleanup
}

load_rule()
{          
    json_init
    json_add_int "op" 1
    json_add_object "data"
    json_add_array "apps" 
    config_get appid_list rule app_list
    if ! test -z "$appid_list";then    
        for appid in $appid_list:  
        do                         
            json_add_int "" $appid
        done                      
    fi                            
    json_str=`json_dump`
    config_apply "$json_str"
    json_cleanup               
}
              
load_whitelist_mac()                          
{                                             
    json_init                          
    config_load appfilter            
    json_add_int "op" 5                             
    json_add_object "data"
    json_add_array "mac_list"
                      
    config_foreach add_mac_to_array_callback whitelist
             
    json_str=`json_dump`
    config_apply "$json_str"             
    json_cleanup         
}                                            
       


add_mac_to_array_callback() {
    local section="$1"
    local mac
    config_get mac "$section" "mac"
    if [ -n "$mac" ]; then
        json_add_string "" "$mac"
    fi
}

load_mac_list()
{
    json_init
    config_load appfilter
    json_add_int "op" 4
    json_add_object "data"
    json_add_array "mac_list"
    
    local user_mode=`uci get appfilter.global.user_mode`
    if [ x"1" == x"$user_mode" ];then
        config_foreach add_mac_to_array_callback af_user
    fi

    json_str=`json_dump`
    config_apply "$json_str"
    json_cleanup
}



reload_rule(){
    config_load appfilter
    clean_rule
    load_rule
    load_mac_list
	load_whitelist_mac
}

reload_base_config(){
	! test -d /proc/sys/oaf && return
    config_load appfilter 
    config_get work_mode "global" "work_mode"
    config_get lan_ifname "global" "lan_ifname"
    config_get user_mode "global" "user_mode"
    config_get record_enable "global" "record_enable" 0
    config_get tcp_rst "global" "tcp_rst" 1

    echo "$tcp_rst" >/proc/sys/oaf/tcp_rst
    echo "$work_mode" >/proc/sys/oaf/work_mode
    echo "$user_mode" >/proc/sys/oaf/user_mode
    echo "$record_enable" >/proc/sys/oaf/record_enable
      
    if [ x"" != x"$lan_ifname" ];then
        echo "$lan_ifname" >/proc/sys/oaf/lan_ifname
    fi                   
}       

case $1 in
"reload")
    reload_base_config
	reload_rule
;;
esac
