2ac8296d60324e63acdaa76db90c2ec04e3dfedf
[project/luci.git] / contrib / package / asterisk-xip / files / uci / queueconf
1 #!/bin/bash
2 # Queues.conf
3
4 ast_add_conf queue
5
6 init_queueconf() {
7         ast_add_reload queue
8
9         ast_enable_type callqueue
10         ast_enable_type callqueuegeneral
11 }
12
13 create_queueconf() { 
14         # Construct the file
15         file=${DEST_DIR}/queues.conf
16         get_checksum queue_conf $file
17         local isempty=1
18         logdebug 0 "Generating Queues.conf: ${callqueue_contexts}"
19         if [ -z "${callqueue_contexts}" ] ; then
20                 isempty=2
21                 rm -f $file
22         else
23                 logdebug 0 "General section"
24                 echo "${asteriskuci_gen}[general]" > "$file"
25                 [ -z "${callqueue_gen_autofill}" ] && callqueue_gen_autofill=yes
26                 for i in ${callqueuegeneral_list} ; do
27                         local opt=${i//-/}
28                         eval "local val=\"\${callqueue_gen_${opt}}\""
29                         [ -z "${val}" ] || echo "${i}=${val}" >> "$file"
30                 done
31
32                 logdebug 0 "Add queues"
33                 for i in ${callqueue_contexts} ; do
34                         eval "local queuename=\${callqueue_opt_${i}_name}"
35                         logdebug 0 "Add queue ${queuename}"
36                         echo "${N}[${queuename}]" >> "$file"
37                         local queueopts=
38                         local has_moh=0
39                         for j in ${callqueue_list} ; do
40                                 local opt=${j//-/}
41                                 eval "local val=\"\${callqueue_opt_${i}_${opt}}\""
42                                 if [ ! -z "${val}" ]; then
43                                         echo "${j}=${val}" >> "$file"
44                                         case "${opt}" in
45                                                 musicclass) has_moh=1
46                                         esac
47                                 fi
48                         done
49
50                         eval "local memberlist=\"\${callqueue_opt_${i}_members}\""
51                         for j in ${memberlist} ; do
52                                 echo "member => ${j}" >> "$file"
53                         done
54
55                         [ "${has_moh}" = 0 ] && queueopts=${queueopts}r
56                         eval "local queuetimeout=\"\${callqueue_opt_${i}_queuetimeout}\""
57                         if [ "${queuetimeout-0}" = 0 ] ; then
58                                 queuetimeout=
59                         else
60                                 queueopts=${queueopts}n
61                         fi
62
63                         # Now add call dialplan
64                         if check_add_context "${i}" ; then
65                                 append_dialplan_context "${i}" "exten = ${match_all_s},1,Queue(${queuename}|${queueopts}|||${queuetimeout})"
66                                 #TODO Add voicemail? fallthrough option?
67                         fi
68
69                 done
70         fi
71
72         check_checksum "$queue_conf" "$file" || ast_queue_restart=$isempty
73 }
74
75 reload_queue() astcmd "module reload app_queue.so"
76 unload_queue() astcmd "module unload app_queue.so"
77
78
79 callqueuegeneral_list="persistentmembers autofill monitor-type"
80 valid_callqueuegeneral() {
81         is_in_list $1 ${callqueuegeneral_list//-/}
82         return $?
83 }
84
85 handle_callqueue_general() {
86         option_cb() {
87                 if valid_callqueuegeneral "$1" ; then
88                         eval "callqueue_gen_$1=\"\${2}\""
89                 else
90                         [ "${1:0:1}" = "_" ] || logerror "Invalid callqueuegeneral option: $1"
91                 fi
92         }
93 }
94
95 callqueue_list="musicclass announce strategy context timeout wrapuptime \
96 autofill maxlen announce-holdtime announce-frequency periodic-announce-frequency ringinuse"
97
98 valid_callqueue() {
99         is_in_list $1 ${callqueue_list//-/} queuetimeout
100         return $?
101 }
102
103 handle_callqueue() {
104         cur_context="$1"
105         callqueue_opt_name="$1" # Name in queue.conf
106         [ -z "${callqueue_contexts}" ] && enable_module app_queue
107         append "callqueue_contexts" "$1" " "
108
109         option_cb() {
110                 case "$1" in
111                 name) eval "callqueue_opt_${cur_context}_name=\"\$2\"" ;;
112                 member|member_ITEM*)
113                         local member_type=
114                         local member_ext=
115                         if ! split_targettype member_type member_ext "${2}" ; then
116                                 logerror "No extension type specified for queue ${cur_context} member ${2}"
117                         else
118                                 append callqueue_opt_${cur_context}_members "${member_type}/${member_ext}" " "
119                         fi
120                 ;;
121                 member_LENGTH) ;;
122                 _*) ;; # ignore
123                 *)
124                         if valid_callqueue "$1" ; then
125                                 eval "callqueue_opt_${cur_context}_$1=\"\${2}\""
126                         else
127                                 logerror "Invalid callqueue option: $1"
128                         fi ;;
129                 esac
130         }
131 }
132
133