iopsys-feed/voice-client/files/sbin/voice-monitor
2018-11-21 10:08:12 +01:00

72 lines
1.7 KiB
Bash
Executable file

#!/bin/sh
if [ -f /tmp/voice-monitor.pid ]; then
kill -9 $(cat /tmp/voice-monitor.pid) 2>/dev/null
rm -f /tmp/voice-monitor.pid
fi
[ "$1" == "stop" ] && exit
ACCOUNTENABLED=0
for peer in $(uci show voice_client | grep sip_service_provider | awk -F[.,=] '{print$2}'); do
[ "$(uci -q get voice_client.$peer.enabled)" == "1" ] && ACCOUNTENABLED=1
done
if [ $ACCOUNTENABLED -eq 0 ]; then
ubus call led.voice1 set '{"state":"off"}'
exit
fi
. /usr/share/libubox/jshn.sh
OFFHOOK=0
REGISTERED=0
asterisk -x 'sip show registry' | grep -q "Registered" && REGISTERED=1
ubus call endpt status | grep -q "OFFHOOK" && OFFHOOK=1
if [ $OFFHOOK -eq 1 ]; then
ubus call led.voice1 set '{"state":"notice"}'
elif [ $REGISTERED -eq 1 ]; then
ubus call led.voice1 set '{"state":"ok"}'
else
ubus call led.voice1 set '{"state":"error"}'
fi
ubus listen asterisk.registry asterisk.endpoint | \
while read event ; do
#echo "voice-monitor got event: $event" >/dev/console
json_load "$event"
if json_select asterisk.registry >/dev/null; then
json_get_var status status
if [ "$status" == "Registered" ]; then
REGISTERED=1
[ $OFFHOOK -eq 0 ] && ubus call led.voice1 set '{"state":"ok"}'
else
REGISTERED=0
[ $OFFHOOK -eq 0 ] && ubus call led.voice1 set '{"state":"error"}'
fi
elif json_select asterisk.endpoint >/dev/null; then
json_get_var event event
case $event in
OFFHOOK)
OFFHOOK=1
ubus call led.voice1 set '{"state":"notice"}'
;;
ONHOOK)
OFFHOOK=0
if [ $REGISTERED -eq 1 ]; then
ubus call led.voice1 set '{"state":"ok"}'
else
ubus call led.voice1 set '{"state":"error"}'
fi
;;
*)
# Do nothing for other events.
;;
esac
fi
done &
echo $(($!-1)) $! >/tmp/voice-monitor.pid