3 # Author: Michael Geddes <michael at frog dot wheelycreek dot net>
4 # Copyright 2008 Michael Geddes
10 # Calling of Macros in dialplan
18 asteriskuci_gen="; Generated by Openwrt AstriskUCI script version ${Version}$N"
27 if [ $(expr $1 "<=" ${debuglevel-0}) == 1 ] ; then
36 [ $i == $val ] && return 0
41 split_append() { # {list} {prefix} {item} {func call}
45 while [ ! -z "$rhs" ] ; do
48 [ -z "$5" ] || eval "$5 ${cur}"
49 append $1 "${lhs}${cur}" "$4"
50 [ "$nvar" == "$rhs" ] && break
57 local sum=`md5sum $2 | cut -d " " -f 1`
62 #eval "logdebug 1 \"Checksum $2 : \${$1}\""
67 local sum=`md5sum $2 | cut -d " " -f 1`
71 #logdebug 1 "Compare $1 checksum $2 with new checksum $sum "
76 # Add config module to initialise list
77 ast_add_conf() append asterisk_conf_list $1 " "
78 # Add module to initialise list
80 append asterisk_module_list $1 " "
81 eval "createdialplan_$1() return 0"
83 # Add to 'reload' list.
84 ast_add_reload() append asterisk_load_list $1 " "
86 # Enable a top-level type
87 ast_enable_type() eval "enabled_section_${1}=1"
89 # Is a top-level type enabled?
91 eval "local res=\${enabled_section_${1}}"
92 if [ "$res" != 1 ] ; then
98 # For use in sections - make sure that the last section is processed
100 logdebug 1 "Check add $1"
101 if [ ! -z "${last_added_checked}" ] ; then
102 logdebug 1 "Eval check-add ${last_added_checked}"
103 eval "check_add_${last_added_checked}"
105 last_added_checked=$1
108 # Process the section yet to be checked.
109 check_all_added() check_add ""
111 # Create static links for stuff we dont want to configure yet.
112 create_staticlinks() {
113 logdebug 1 "Link in a few mostly static configurations"
114 linkconfigs="codecs.conf say.conf sip_notify.conf udptl.conf logger.conf"
115 module_enabled res_indications && append linkconfigs indications.conf " "
116 for i in ${linkconfigs} ; do
117 [ -e $DEST_DIR/$i ] || ln -s $DEST/etc/asterisk/$i $DEST_DIR
120 logdebug 1 "Link in #include directories"
121 for i in include inc libs lib library macro macros ; do
122 if [ -e $DEST/etc/asterisk/$i -a ! -d "$DEST_DIR/$i" -a ! -e "$DEST_DIR/$i" ] ; then
123 ln -s $DEST/etc/asterisk/$i $DEST_DIR
135 DEST_DIR=/tmp/asterisk
138 if [ "$2" == "testonly" ] ; then
140 elif [ "$2" == "test" ] ; then
141 DEST_DIR=/tmp/asterisk.tmp
142 echo Using Test dir: $DEST_DIR
146 [ -z "$3" ] || debuglevel=$3
148 logdebug 1 "Loading Asterisk Config"
149 . ${UCILIB}/asteriskconf
150 logdebug 2 "Loading Module Config"
151 . ${UCILIB}/moduleconf
152 logdebug 2 "Loading Dialplan Config"
153 . ${UCILIB}/dialplanconf
155 for f in ${DEST}/etc/asterisk/conf.d/* ; do
156 logdebug 1 "Loading Module $f"
167 for i in ${asterisk_module_list} ; do
168 logdebug 1 "Init $i module"
172 for i in ${asterisk_conf_list} ; do
173 logdebug 1 "Init $i config"
179 logdebug 2 "Load $1/$2"
180 eval "local val=\"\${dups_$2}\""
181 if [ "${val}" == "" ] ; then
184 logerror "Duplicate Section Name: $2 (type $1)"
187 if ast_type_enabled $1 ; then
189 elif [ ! -z "$1" ] ; then
191 logerror "Unknown section: $1/$2"
193 logerror "Invalid option '$1' for invalid section"
200 if [ "$testing_mode" != "1" ] ; then
204 for i in ${asterisk_conf_list} ; do
205 logdebug 1 "Create $i config"
206 eval "create_${i}conf"
209 for i in ${asterisk_module_list} ; do
210 logdebug 1 "Create Dialplan for module $i"
211 eval "createdialplan_${i}"
216 # Link in a few mostly static configurations
219 [ "$testing_mode" == "2" ] && reload_check_asterisk
224 ASTCMD="${DEST%/}/usr/sbin/asterisk -C /tmp/asterisk/asterisk.conf "
225 logdebug 1 "Command: $1"
226 if [ -z "${2-}" ] ; then
227 ${ASTCMD} -r -x "$1" 2>&- 1>&-
229 eval "$2=`${ASTCMD} -r -x \"$1\"`"
235 # while [ -d /proc/$1 ] ; do
240 restart_gracefully() {
241 stop_uci_asterisk "$DEST"
242 startup_asterisk "$DEST"
244 #echo "Check for pid"
245 #if [ -r /var/run/asterisk.ctl ] ; then
246 # astcmd "stop gracefully"
248 # [ ${ret} = 0 ] || return $ret
249 # waitfor `cat /var/run/asterisk.pid`
251 #startup_asterisk ${DEST}
255 while [ ! -z "$1" ] ; do
261 reload_check_asterisk() {
262 logdebug 1 "Check Reloading"
264 if [ "${ast_restart-}" == 1 ] ; then
265 logdebug 1 "Restarting Gracefully"
268 for i in ${asterisk_load_list} ; do
269 logdebug 1 "Checking ${i} reload"
270 eval "local doload=\${ast_${i}_restart}"
272 1) logdebug 1 "Reloading ${i}" ;;
273 2) logdebug 1 "Unloading ${i}" ;;
277 [ ${reboot} = 1 ] && logdebug 1 "reboot hardware"
281 logdebug 1 "Reloading"
283 if [ "${ast_restart-}" == 1 ] ; then
284 logdebug 2 "Restarting Gracefully"
288 for i in ${asterisk_load_list} ; do
289 logdebug 3 "Checking ${i} reload"
290 eval "local doload=\${ast_${i}_restart}"
292 1) logdebug 1 "Reloading ${i}"
293 eval "reload_${i}" || reboot=1 ;;
294 2) logdebug 1 "Unloading ${i}"
295 eval "unload_${i}" || reboot=1 ;;
300 if [ ${reboot} = 1 ] ; then
301 ( sleep 5; reboot_hardware ) &
307 DEFAULT=$DEST/etc/default/asterisk
308 [ -f $DEFAULT ] && . $DEFAULT
309 [ -d /var/run ] || mkdir -p /var/run
310 [ -d ${asterisk_logdir} ] || mkdir -p ${asterisk_logdir}
311 [ -d ${asterisk_spooldir} ] || mkdir -p ${asterisk_spooldir}
312 [ -d /var/spool/asterisk ] || mkdir -p /var/spool/asterisk
313 [ -h $DEST/usr/lib/asterisk/astdb ] || ln -sf /var/spool/asterisk/astdb $DEST/usr/lib/asterisk/astdb
314 [ -e /dev/zappseudo ] && [ ! -d /dev/zap -o ! -e /dev/zap/pseudo ] && mkdir -p /dev/zap && ln -s /dev/zappseudo /dev/zap/pseudo
316 $DEST/usr/sbin/asterisk -C /tmp/asterisk/asterisk.conf $UCIOPTIONS -f 2>&1 > ${asterisk_logdir}/asterisk_proc &
317 # Wait a bit then reboot the hardware
318 ( sleep 5; reboot_hardware ) &
321 # Init.d start() handler
322 start_uci_asterisk() {
325 if setup_asterisk $DEST ; then
326 startup_asterisk "$DEST"
330 restart_uci_asterisk() {
332 if setup_asterisk $DEST ; then
333 echo "Trying to Restart gracefully"
334 if [ -r /var/run/asterisk.ctl ] ; then
335 # if astcmd "restart gracefully" ; then
336 echo "Sending restart"
337 if restart_gracefully ; then
338 echo "Restarting gracefully"
342 stop_uci_asterisk "$DEST"
343 startup_asterisk "$DEST"
351 # init.d stop() handler
352 stop_uci_asterisk() {
354 if [ -r /var/run/asterisk.ctl ] ; then
358 [ -f /var/run/asterisk.pid ] && kill $(cat /var/run/asterisk.pid) >/dev/null 2>&1
361 reload_uci_asterisk() {
363 DEFAULT=$DEST/etc/default/asterisk
365 if [ -r /var/run/asterisk.ctl ] ; then
367 [ -e /dev/zappseudo ] && [ ! -d /dev/zap -o ! -e /dev/zap/pseudo ] && mkdir -p /dev/zap && ln -s /dev/zappseudo /dev/zap/pseudo
368 if setup_asterisk "$DEST" ; then
369 # Selective reload modules.
373 start_uci_asterisk "$1"
377 # vim: ts=2 sw=2 noet foldmethod=indent