#!/bin/sh

. /etc/PG.conf

LOGDIR="/usr/ramdisk/tmp/sac/kick"
kick_log="${LOGDIR}/kick.log"
kick_keep="${LOGDIR}/kick.keep"
roam_conf="/${PGETC}/App/sac/roam.conf"
FLOWEYE="/usr/ramdisk/bin/floweye"
ICONV="/usr/ramdisk/app/sac/bin/iconv"
[ "`uname`" = "Linux" ] && ICONV="/usr/bin/iconv"

[ ! -f "${roam_conf}" ] && exit 1
. ${roam_conf}
[ "${enable}" != "on" ] && exit 1

keep=$((${keep} * 60 ))

if [ "`uname`" = "FreeBSD" ]; then
	SED="sed -i '' "
else
	SED="sed"
fi

mkdir -p ${LOGDIR}
[ -f "${kick_log}" ] && rm ${kick_log}
[ -f "${kick_keep}" ] && rm ${kick_keep}
touch ${kick_log}
touch ${kick_keep}


kickable_check()
{
	ip=$1

	num=`grep "${ip} " ${kick_log} | cut -d" " -f2`

	if [ "${num}" = "" ]; then
		echo "${ip} 1" >> ${kick_log}.bak

	elif [ ${num} -le ${rate} ]; then
		num=$((${num}+1))
		echo "${ip} ${num}" >> ${kick_log}.bak
		return 0
	elif [ ${num} -gt ${rate} ]; then
		now=`date +%s`
		_start_keep=`grep "${ip} " ${kick_keep} | cut -d" " -f2`
		
		if [ "${_start_keep}" = "" ]; then
			echo "${ip} ${now}" >> ${kick_keep}
			return 1
		fi

		_keep_left=$((${now} - ${_start_keep}))
		if [ ${_keep_left} -lt ${keep} ]; then
			echo "${ip} ${num}" >> ${kick_log}.bak
			return 1
		else
			${SED} "/${ip} /d" ${kick_keep}
			echo "${ip} 1" >> ${kick_log}.bak
			return 0
		fi
	fi

	return 0
}


build_apid()
{
	apidstr=$1
	apid=$2
	
	exist=`echo ${apidstr} | grep ",${apid}" `
	
	if [ "${exist}" = "" ]; then
		echo "${apidstr},${apid}"
	else
		echo "${apidstr}"
	fi
}


while true
do
	sleep ${sleeps}

	[ -f "${kick_log}.bak" ] && rm ${kick_log}.bak

	debugstr=""
	apidstr=""
	
	${FLOWEYE} sacsta list liststa=1 | awk -v rssi=${rssi} \
	'{
		if($16 < -rssi){
			gsub("-", ":", $7);
			printf "%s %s %s %s %s\n", $2, $4, $7, $13, $14
		}
	}' | while read ip ridx mac apname ssid
	do
		kickable_check ${ip}
		[ $? -ne 0 ] && continue

		apname=`echo "${apname}" | ${ICONV} -s -f utf-8 -t gb2312`
		apid=`${FLOWEYE} sac list json=0 | grep " ${apname} " | cut -d" " -f3`
		
		for widx in `${FLOWEYE} sacssid list | awk -v ssid=${ssid} '{if($3==ssid) print $4}'`
		do
			if [ "${apidstr}" = "" ]; then
				apidstr=",${apid}"
			else
				apidstr=`build_apid ${apidstr} ${apid}`
			fi

			if [ "${debugstr}" = "" ]; then
				debugstr="pappiw&kicksta&ridx=${ridx}&widx=${widx}&sta=${mac}"
			else
				debugstr="${debugstr};pappiw&kicksta&ridx=${ridx}&widx=${widx}&sta=${mac};"
			fi
		done
	done

	${FLOWEYE} sactask add apidstr=${apidstr} debugstr=${debugstr}
	debugstr=""
	apidstr=""

	if [ -f "${kick_log}.bak" ]; then
		mv ${kick_log}.bak ${kick_log}
	fi
	
	if [ -f ${kick_keep} ]; then
		cat ${kick_keep} | while read ip start
		do
			exist=`grep "${ip} " ${kick_log}`
			if [ "${exist}" = "" ]; then
				echo "${ip} 4" >> ${kick_log}
			fi
		done
	fi
done
