summaryrefslogtreecommitdiffhomepage
path: root/contrib/asterisk-xip/files/uci/asteriskuci
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2009-01-07 23:27:28 +0000
committerJo-Philipp Wich <jow@openwrt.org>2009-01-07 23:27:28 +0000
commitdeabf41b3fee0bf019c541c7418ec6120ff99279 (patch)
tree1218abbd16d0392e060b67ae525e5b1092a7eb30 /contrib/asterisk-xip/files/uci/asteriskuci
parentc8a2a3031b20c41222b95c3ab08f0bb45baafd90 (diff)
contrib/package: add asterisk14-xip package to prepare Asterisk/LuCI/UCI integration
Diffstat (limited to 'contrib/asterisk-xip/files/uci/asteriskuci')
-rwxr-xr-xcontrib/asterisk-xip/files/uci/asteriskuci365
1 files changed, 365 insertions, 0 deletions
diff --git a/contrib/asterisk-xip/files/uci/asteriskuci b/contrib/asterisk-xip/files/uci/asteriskuci
new file mode 100755
index 0000000000..1fd8f99b9d
--- /dev/null
+++ b/contrib/asterisk-xip/files/uci/asteriskuci
@@ -0,0 +1,365 @@
+#!/bin/sh
+
+# Author: Michael Geddes <michael at frog dot wheelycreek dot net>
+# Copyright 2008 Michael Geddes
+# Licensed under GPL
+Version=0.8
+
+
+# Todo
+# Calling of Macros in dialplan
+# Create a Menu
+# Incoming Zones
+
+debuglevel=0
+
+. /etc/functions.sh
+
+asteriskuci_gen="; Generated by Openwrt AstriskUCI script version ${Version}$N"
+
+# Utils
+
+logerror() {
+ echo "Error: $1"
+}
+
+logdebug() {
+ if [ $(expr $1 "<=" ${debuglevel-0}) == 1 ] ; then
+ echo "Log: $2"
+ fi
+}
+
+is_in_list(){
+ val=$1
+ shift
+ for i in $* ; do
+ [ $i == $val ] && return 0
+ done
+ return 1
+}
+
+split_append() {
+ local lhs="$2"
+ local rhs="$3"
+
+ while [ ! -z "$rhs" ] ; do
+ cur=${rhs%%,*}
+ nvar=${rhs#*,}
+ [ -z $4 ] || eval "$4 ${cur}"
+ append $1 "${lhs}${cur}" "$4"
+ [ "$nvar" == "$rhs" ] && break
+ rhs=${nvar}
+ done
+}
+
+get_checksum() {
+ if [ -r "$2" ] ; then
+ local sum=`md5sum $2 | cut -d " " -f 1`
+ eval "$1=\"$sum\""
+ else
+ eval "$1=NONE"
+ fi
+ #eval "logdebug 1 \"Checksum $2 : \${$1}\""
+}
+
+check_checksum() {
+ if [ -r "$2" ] ; then
+ local sum=`md5sum $2 | cut -d " " -f 1`
+ else
+ eval sum=NONE
+ fi
+ #logdebug 1 "Compare $1 checksum $2 with new checksum $sum "
+ [ "$sum" == "$1" ]
+ return $?
+}
+
+# Add config module to initialise list
+ast_add_conf() append asterisk_conf_list $1 " "
+# Add module to initialise list
+ast_add_module() append asterisk_module_list $1 " "
+# Add to 'reload' list.
+ast_add_reload() append asterisk_load_list $1 " "
+
+# Enable a top-level type
+ast_enable_type() eval "enabled_section_${1}=1"
+
+# Is a top-level type enabled?
+ast_type_enabled() {
+ eval "local res=\${enabled_section_${1}}"
+ if [ "$res" != 1 ] ; then
+ return 1 #Fail
+ fi
+ return 0
+}
+
+# For use in sections - make sure that the last section is processed
+check_add() {
+ logdebug 1 "Check add $1"
+ if [ ! -z "${last_added_checked}" ] ; then
+ logdebug 1 "Eval check-add ${last_added_checked}"
+ eval "check_add_${last_added_checked}"
+ fi
+ last_added_checked=$1
+}
+
+# Process the section yet to be checked.
+check_all_added() check_add ""
+
+# Create static links for stuff we dont want to configure yet.
+create_staticlinks() {
+ logdebug 1 "Link in a few mostly static configurations"
+ linkconfigs="codecs.conf say.conf sip_notify.conf udptl.conf logger.conf"
+ module_enabled res_indications && append linkconfigs indications.conf " "
+ for i in ${linkconfigs} ; do
+ [ -e $DEST_DIR/$i ] || ln -s $DEST/etc/asterisk/$i $DEST_DIR
+ done
+
+ logdebug 1 "Link in #include directories"
+ for i in include inc libs lib library macro macros ; do
+ if [ -e $DEST/etc/asterisk/$i -a ! -d "$DEST_DIR/$i" -a ! -e "$DEST_DIR/$i" ] ; then
+ ln -s $DEST/etc/asterisk/$i $DEST_DIR
+ fi
+ done
+}
+
+# default reboot
+reboot_hardware() {}
+
+
+# Top level handler
+setup_asterisk() {
+ DEST=${1%/}
+ DEST_DIR=/tmp/asterisk
+
+ testing_mode=0
+ if [ "$2" == "testonly" ] ; then
+ testing_mode=1
+ elif [ "$2" == "test" ] ; then
+ DEST_DIR=/tmp/asterisk.tmp
+ echo Using Test dir: $DEST_DIR
+ testing_mode=2
+ fi
+
+ [ -z "$3" ] || debuglevel=$3
+
+ logdebug 1 "Loading Asterisk Config"
+ . ${UCILIB}/asteriskconf
+ logdebug 2 "Loading Module Config"
+ . ${UCILIB}/moduleconf
+ logdebug 2 "Loading Dialplan Config"
+ . ${UCILIB}/dialplanconf
+
+ for f in ${DEST}/etc/asterisk/conf.d/* ; do
+ logdebug 1 "Loading Module $f"
+ [ -f $f ] && . $f
+ done
+
+ include /lib/network
+ scan_interfaces
+
+ init_asteriskconf
+ init_moduleconf
+ init_dialplanconf
+
+ for i in ${asterisk_module_list} ; do
+ logdebug 1 "Init $i module"
+ eval "init_${i}"
+ done
+
+ for i in ${asterisk_conf_list} ; do
+ logdebug 1 "Init $i config"
+ eval "init_${i}conf"
+ done
+
+ config_cb() {
+ cur_section=$1/$2
+ logdebug 2 "Load $1/$2"
+ eval "local val=\"\${dups_$2}\""
+ if [ "${val}" == "" ] ; then
+ eval "dups_$2=1"
+ else
+ logerror "Duplicate Section Name: $2 (type $1)"
+ fi
+
+ if ast_type_enabled $1 ; then
+ eval "handle_$1 \$2"
+ elif [ ! -z "$1" ] ; then
+
+ logerror "Unknown section: $1/$2"
+ option_cb() {
+ logerror "Invalid option '$1' for invalid section"
+ }
+ fi
+ }
+ config_load asterisk
+ check_all_added
+
+ if [ "$testing_mode" != "1" ] ; then
+ mkdir -p ${DEST_DIR}
+
+ create_asteriskconf
+ for i in ${asterisk_conf_list} ; do
+ logdebug 1 "Create $i config"
+ eval "create_${i}conf"
+ done
+ create_dialplanconf
+ create_moduleconf
+
+ # Link in a few mostly static configurations
+ create_staticlinks
+ fi
+ [ "$testing_mode" == "2" ] && reload_check_asterisk
+ return 0
+}
+
+astcmd() {
+ ASTCMD="${DEST%/}/usr/sbin/asterisk -C /tmp/asterisk/asterisk.conf "
+ logdebug 1 "Command: $1"
+ if [ -z "${2-}" ] ; then
+ ${ASTCMD} -r -x "$1" 2>&- 1>&-
+ else
+ eval "$2=`${ASTCMD} -r -x \"$1\"`"
+ fi
+ return $?
+}
+
+# waitfor() {
+# while [ -d /proc/$1 ] ; do
+# sleep 1
+# done
+# }
+
+restart_gracefully() {
+ stop_uci_asterisk "$DEST"
+ startup_asterisk "$DEST"
+ #ret=0
+ #echo "Check for pid"
+ #if [ -r /var/run/asterisk.ctl ] ; then
+ # astcmd "stop gracefully"
+ # local ret=$?
+ # [ ${ret} = 0 ] || return $ret
+ # waitfor `cat /var/run/asterisk.pid`
+ #fi
+ #startup_asterisk ${DEST}
+ return 0
+}
+astcmds() {
+ while [ ! -z "$1" ] ; do
+ astcmd "$1"
+ shift
+ done
+}
+
+reload_check_asterisk() {
+ logdebug 1 "Check Reloading"
+ local reboot=0
+ if [ "${ast_restart-}" == 1 ] ; then
+ logdebug 1 "Restarting Gracefully"
+ reboot=0
+ else
+ for i in ${asterisk_load_list} ; do
+ logdebug 1 "Checking ${i} reload"
+ eval "local doload=\${ast_${i}_restart}"
+ case $doload in
+ 1) logdebug 1 "Reloading ${i}" ;;
+ 2) logdebug 1 "Unloading ${i}" ;;
+ esac
+ done
+ fi
+ [ ${reboot} = 1 ] && logdebug 1 "reboot hardware"
+}
+
+reload_asterisk() {
+ logdebug 1 "Reloading"
+ local reboot=0
+ if [ "${ast_restart-}" == 1 ] ; then
+ logdebug 2 "Restarting Gracefully"
+ restart_gracefully
+ reboot=0
+ else
+ for i in ${asterisk_load_list} ; do
+ logdebug 3 "Checking ${i} reload"
+ eval "local doload=\${ast_${i}_restart}"
+ case $doload in
+ 1) logdebug 1 "Reloading ${i}"
+ eval "reload_${i}" || reboot=1 ;;
+ 2) logdebug 1 "Unloading ${i}"
+ eval "unload_${i}" || reboot=1 ;;
+ esac
+ done
+ fi
+
+ if [ ${reboot} = 1 ] ; then
+ ( sleep 5; reboot_hardware ) &
+ fi
+}
+startup_asterisk() {
+ DEST="${1%/}"
+ DEFAULT=$DEST/etc/default/asterisk
+ [ -f $DEFAULT ] && . $DEFAULT
+ [ -d /var/run ] || mkdir -p /var/run
+ [ -d ${asterisk_logdir} ] || mkdir -p ${asterisk_logdir}
+ [ -d ${asterisk_spooldir} ] || mkdir -p ${asterisk_spooldir}
+ [ -d /var/spool/asterisk ] || mkdir -p /var/spool/asterisk
+ [ -h $DEST/usr/lib/asterisk/astdb ] || ln -sf /var/spool/asterisk/astdb $DEST/usr/lib/asterisk/astdb
+
+ $DEST/usr/sbin/asterisk -C /tmp/asterisk/asterisk.conf $UCIOPTIONS -f 2>&1 > ${asterisk_logdir}/asterisk_proc &
+ # Wait a bit then reboot the hardware
+ ( sleep 5; reboot_hardware ) &
+}
+
+# Init.d start() handler
+start_uci_asterisk() {
+ DEST="${1%/}"
+
+ if setup_asterisk $DEST ; then
+ startup_asterisk "$DEST"
+ fi
+}
+
+restart_uci_asterisk() {
+ DEST="${1%/}"
+ if setup_asterisk $DEST ; then
+ echo "Trying to Restart gracefully"
+ if [ -r /var/run/asterisk.ctl ] ; then
+# if astcmd "restart gracefully" ; then
+ echo "Sending restart"
+ if restart_gracefully ; then
+ echo "Restarting gracefully"
+ return 0
+ fi
+ fi
+ stop_uci_asterisk "$DEST"
+ startup_asterisk "$DEST"
+ else
+ stop_uci_asterisk $1
+ echo "Setup Failed"
+ return 1
+ fi
+}
+
+# init.d stop() handler
+stop_uci_asterisk() {
+ DEST=${1%/}
+ if [ -r /var/run/asterisk.ctl ] ; then
+ astcmd "stop now"
+ sleep 1
+ fi
+ [ -f /var/run/asterisk.pid ] && kill $(cat /var/run/asterisk.pid) >/dev/null 2>&1
+}
+
+reload_uci_asterisk() {
+ DEST=${1%/}
+ DEFAULT=$DEST/etc/default/asterisk
+
+ if [ -r /var/run/asterisk.ctl ] ; then
+ if setup_asterisk "$DEST" ; then
+ # Selective reload modules.
+ reload_asterisk
+ fi
+ else
+ start_uci_asterisk "$1"
+ fi
+}
+
+# vim: ts=2 sw=2 noet foldmethod=indent