luci/contrib/package/asterisk-xip/files/uci/queueconf
2009-01-27 02:28:35 +00:00

133 lines
3.3 KiB
Bash

#!/bin/bash
# Queues.conf
ast_add_conf queue
init_queueconf() {
ast_add_reload queue
ast_enable_type callqueue
ast_enable_type callqueuegeneral
}
create_queueconf() {
# Construct the file
file=${DEST_DIR}/queues.conf
get_checksum queue_conf $file
local isempty=1
logdebug 0 "Generating Queues.conf: ${callqueue_contexts}"
if [ -z "${callqueue_contexts}" ] ; then
isempty=2
rm -f $file
else
logdebug 0 "General section"
echo "${asteriskuci_gen}[general]" > "$file"
[ -z "${callqueue_gen_autofill}" ] && callqueue_gen_autofill=yes
for i in ${callqueuegeneral_list} ; do
local opt=${i//-/}
eval "local val=\"\${callqueue_gen_${opt}}\""
[ -z "${val}" ] || echo "${i}=${val}" >> "$file"
done
logdebug 0 "Add queues"
for i in ${callqueue_contexts} ; do
eval "local queuename=\${callqueue_opt_${i}_name}"
logdebug 0 "Add queue ${queuename}"
echo "${N}[${queuename}]" >> "$file"
local queueopts=
local has_moh=0
for j in ${callqueue_list} ; do
local opt=${j//-/}
eval "local val=\"\${callqueue_opt_${i}_${opt}}\""
if [ ! -z "${val}" ]; then
echo "${j}=${val}" >> "$file"
case "${opt}" in
musicclass) has_moh=1
esac
fi
done
eval "local memberlist=\"\${callqueue_opt_${i}_members}\""
for j in ${memberlist} ; do
echo "member => ${j}" >> "$file"
done
[ "${has_moh}" = 0 ] && queueopts=${queueopts}r
eval "local queuetimeout=\"\${callqueue_opt_${i}_queuetimeout}\""
if [ "${queuetimeout-0}" = 0 ] ; then
queuetimeout=
else
queueopts=${queueopts}n
fi
# Now add call dialplan
if check_add_context "${i}" ; then
append_dialplan_context "${i}" "exten = ${match_all_s},1,Queue(${queuename}|${queueopts}|||${queuetimeout})"
#TODO Add voicemail? fallthrough option?
fi
done
fi
check_checksum "$queue_conf" "$file" || ast_queue_restart=$isempty
}
reload_queue() astcmd "module reload app_queue.so"
unload_queue() astcmd "module unload app_queue.so"
callqueuegeneral_list="persistentmembers autofill monitor-type"
valid_callqueuegeneral() {
is_in_list $1 ${callqueuegeneral_list//-/}
return $?
}
handle_callqueue_general() {
option_cb() {
if valid_callqueuegeneral "$1" ; then
eval "callqueue_gen_$1=\"\${2}\""
else
[ "${1:0:1}" = "_" ] || logerror "Invalid callqueuegeneral option: $1"
fi
}
}
callqueue_list="musicclass announce strategy context timeout wrapuptime \
autofill maxlen announce-holdtime announce-frequency periodic-announce-frequency ringinuse"
valid_callqueue() {
is_in_list $1 ${callqueue_list//-/} queuetimeout
return $?
}
handle_callqueue() {
cur_context="$1"
callqueue_opt_name="$1" # Name in queue.conf
[ -z "${callqueue_contexts}" ] && enable_module app_queue
append "callqueue_contexts" "$1" " "
option_cb() {
case "$1" in
name) eval "callqueue_opt_${cur_context}_name=\"\$2\"" ;;
member|member_ITEM*)
local member_type=
local member_ext=
if ! split_targettype member_type member_ext "${2}" ; then
logerror "No extension type specified for queue ${cur_context} member ${2}"
else
append callqueue_opt_${cur_context}_members "${member_type}/${member_ext}" " "
fi
;;
member_LENGTH) ;;
_*) ;; # ignore
*)
if valid_callqueue "$1" ; then
eval "callqueue_opt_${cur_context}_$1=\"\${2}\""
else
logerror "Invalid callqueue option: $1"
fi ;;
esac
}
}