diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2009-01-07 23:27:28 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2009-01-07 23:27:28 +0000 |
commit | deabf41b3fee0bf019c541c7418ec6120ff99279 (patch) | |
tree | 1218abbd16d0392e060b67ae525e5b1092a7eb30 /contrib/asterisk-xip/files/uci/asteriskuci | |
parent | c8a2a3031b20c41222b95c3ab08f0bb45baafd90 (diff) |
contrib/package: add asterisk14-xip package to prepare Asterisk/LuCI/UCI integration
Diffstat (limited to 'contrib/asterisk-xip/files/uci/asteriskuci')
-rwxr-xr-x | contrib/asterisk-xip/files/uci/asteriskuci | 365 |
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 |