#!/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