#!/bin/sh

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

logger() {
	command logger -t wifi-eventd "$@"
}

ssid_of_device() {
	local DEVICE=${1}
	ubus call uci state "{\"config\":\"wireless\",\"type\":\"wifi-iface\",\"match\":{\"ifname\":\"${DEVICE}\"}}" | jsonfilter  -e '$.values.*.ssid'
}

iw_event() {
	local a
	acfg_tool -e | while : ;do
		read a
		MAC=$(echo ${a} | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | tr [a-z] [A-Z])
		case "$a" in
		*"Event disassoc"*|\
		*"Event deauth"*)
			if [ "${MAC}" != "FF:FF:FF:FF:FF:FF" ]; then
				echo " del station"
				/usr/sbin/update_wifi_client_list.sh disassoc "${MAC}"
			fi
			;;
		*"Event assoc"*)
			if [ "${MAC}" != "FF:FF:FF:FF:FF:FF" ]; then
				echo " new station"
				DEVICE=$(echo ${a} | awk -F: '{print $1}')
				RADIO=${DEVICE:3:1}
				SSID=$(ssid_of_device ${DEVICE})
				/usr/sbin/update_wifi_client_list.sh assoc "${MAC}" "${RADIO}" "${SSID}"
			fi
			;;
		esac
	done
}

trap 'trap - TERM INT; kill 0; exit' TERM INT
iw_event &
wait
exit 0