/[smecontribs]/rpms/smeserver-freepbx/contribs8/smeserver-freepbx-0.1-genzaptelconf.patch
ViewVC logotype

Annotation of /rpms/smeserver-freepbx/contribs8/smeserver-freepbx-0.1-genzaptelconf.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (hide annotations) (download)
Tue Feb 26 15:16:15 2013 UTC (11 years, 9 months ago) by slords
Branch: MAIN
CVS Tags: smeserver-freepbx-0_1-32_el5_sme, smeserver-freepbx-0_1-33_el5_sme, HEAD
Changes since 1.1: +0 -0 lines
* Thu Oct 20 2011 Daniel B. <daniel@firewall-services.com> 0.1-32.sme
- Protect by locations (so other alias can be defined to protect with LL::NG for example)

1 unnilennium 1.1 diff -Nur -x '*.orig' -x '*.rej' smeserver-freepbx-0.1/root/var/lib/asterisk/bin/genzaptelconf mezzanine_patched_smeserver-freepbx-0.1/root/var/lib/asterisk/bin/genzaptelconf
2     --- smeserver-freepbx-0.1/root/var/lib/asterisk/bin/genzaptelconf 1970-01-01 01:00:00.000000000 +0100
3     +++ mezzanine_patched_smeserver-freepbx-0.1/root/var/lib/asterisk/bin/genzaptelconf 2008-11-05 19:38:16.000000000 +0100
4     @@ -0,0 +1,570 @@
5     +#! /bin/bash
6     +
7     +# genzaptelconf: generate as smartly as you can:
8     +# /etc/zaptel.conf
9     +# /etc/asterisk/zapata-channels.conf (to be #include-d into zapata.conf)
10     +# update:
11     +# /etc/default/zaptel (list of modules to load)
12     +#
13     +# $Id:$
14     +#
15     +
16     +# The script uses a number of bash-specific features
17     +# TODO: either ditch them or convert to perl
18     +
19     +# /etc/default/zaptel may override the following variables
20     +lc_country=us
21     +#method=ls
22     +#method=ks
23     +base_exten=6000
24     +
25     +
26     +ZAPCONF_FILE=/etc/zaptel.conf
27     +ZAPATA_FILE=/etc/asterisk/zapata-auto.conf
28     +ZAPTEL_BOOT=/etc/sysconfig/zaptel
29     +exten_base_dir=/etc/asterisk/extensions-phones.d
30     +exten_defs_file=/etc/asterisk/extensions-defs.conf
31     +ztcfg_cmd=ztcfg
32     +
33     +# a temporary directory. Created when the switch -r is parsed on getopts
34     +# and deleted in the end on update_extensions_defs
35     +tmp_dir=
36     +
37     +# read default configuration from /etc/default/zaptel
38     +if [ -r $ZAPTEL_BOOT ]; then . $ZAPTEL_BOOT; fi
39     +
40     +# work around a bug (that was already fixed) in the installer:
41     +if [ "$lc_country" = '' ]; then lc_country=us; fi
42     +
43     +ALL_MODULES="wctdm wcfxo wcfxs pciradio tor2 torisa wct1xxp wct4xxp wcte11xp wcusb ztd_eth ztdummy"
44     +force_stop_ast=yes
45     +do_detect=no
46     +do_unload=no
47     +verbose=no
48     +rapid_extens=''
49     +# global: current extension number in extensions list. Should only be
50     +# changed in print_pattern:
51     +rapid_cur_exten=1
52     +# set the TRUNK in extensidialplan dialplan defs file rapid_conf_mode=no
53     +
54     +die() {
55     + echo "$@" >&2
56     + exit 1
57     +}
58     +
59     +say() {
60     + if [ "$verbose" = no ]; then
61     + return
62     + fi
63     + echo "$@" >&2
64     +}
65     +
66     +run_ztcfg() {
67     + if [ "$verbose" = no ]; then
68     + $ztcfg_cmd "$@"
69     + else
70     + say "Reconfiguring identified channels"
71     + $ztcfg_cmd -vv "$@"
72     + fi
73     +}
74     +
75     +do_update() {
76     + sed -i.bak "s/^$1=.*\$/$1=\"$2\"/" ${ZAPTEL_BOOT}
77     + if ! grep -q "^$1=" ${ZAPTEL_BOOT}; then
78     + echo "$1=\"$2\"" >> ${ZAPTEL_BOOT}
79     + fi
80     +}
81     +
82     +update_extensions_defs() {
83     + if [ "$rapid_conf_mode" = 'yes' ]
84     + then
85     + say "DEBUG: Updating dialplan defs file $exten_defs_file"
86     + if [ "`echo $tmp_dir/fxo_* | grep -v '*'`" != '' ]
87     + then
88     + trunk_nums=`cat $tmp_dir/fxo_* | sort -n | xargs`
89     + say "Configuring TRUNK to be [first of] zaptel channels: $trunk_nums"
90     + trunk_dev=`echo $trunk_nums| sed -e 's/ /\\\\\\&/g' -e 's/[0-9a-zA-Z]\+/Zap\\\\\\/&/g'`
91     + echo >&2 sed -i "s/^TRUNK.*=>.*/TRUNK => $trunk_dev/" $exten_defs_file
92     + sed -i "s/^TRUNK.*=>.*/TRUNK => $trunk_dev/" $exten_defs_file
93     + if ! grep -q "^TRUNK =>" $exten_defs_file; then
94     + trunk_dev=`echo $trunk_nums| sed -e 's/ /&/g' -e 's/[0-9a-zA-Z]*/Zap\\/&/g'`
95     + echo "TRUNK => $trunk_dev" >> $exten_defs_file
96     + fi
97     + else
98     + say "Warning: No FXO channel for trunk. Moving on."
99     + fi
100     + if [ "`echo $tmp_dir/fxs_* | grep -v '*'`" != '' ]
101     + then
102     + fxs_nums=`cat $tmp_dir/fxs_* | sort -n | xargs`
103     + zap_nums=`grep '^[^;].*Zap/\${CHAN_ZAP_' $exten_base_dir/*.conf | \
104     + sed -e 's/.*Zap\/\${CHAN_ZAP_\([0-9]*\)}.*/\1/' | sort -u | xargs`
105     + say "Configuring channels: $fxs_nums as channel placeholders: $zap_nums"
106     + j=1
107     + for i in $zap_nums
108     + do
109     + chan=`echo $fxs_nums | awk "{print \\$$i}"`
110     + if [ "$chan" = '' ]
111     + then
112     + # if the result is empty, we probably got past the last one.
113     + # bail out.
114     + say "Warning: No FXS channel for CHAN_ZAP_$i. Moving on"
115     + break
116     + fi
117     + say "DEBUG: setting channel $chan to placeholder $i"
118     + if grep -q "^CHAN_ZAP_$i " $exten_defs_file
119     + then
120     + sed -i -e "s/^CHAN_ZAP_$i .*/CHAN_ZAP_$i => Zap\/$chan/" $exten_defs_file
121     + else
122     + echo "CHAN_ZAP_$i => Zap/$chan" >> $exten_defs_file
123     + fi
124     + done
125     + fi
126     + # cleaning up the temp dir
127     + if [ -d "$tmp_dir" ]; then rm -rf "$tmp_dir"; fi
128     + fi
129     +}
130     +
131     +usage() {
132     + program=`basename $0`
133     +
134     + echo >&2 "$program: generate zaptel.conf"
135     + echo >&2 "usage:"
136     + echo >&2 " $program [-v] [-m k|l|g] [-c <country_code>] [-r |-e <base_exten>] "
137     + echo >&2 " $program [-v] -l"
138     + echo >&2 " $program -u"
139     + echo >&2 " $program -h (this screen)"
140     + echo >&2 ""
141     + echo >&2 "Options:"
142     + echo >&2 " -c CODE: set the country code (default: $lc_country)"
143     + echo >&2 " -e NUM: set the base extension number (default: $base_exten)"
144     + echo >&2 " -m: set signalling method (gs/ks/ls, default: $method)"
145     + echo >&2 " -l: output a list of detected channels instead of zaptel.conf"
146     + echo >&2 " -u: Unload zaptel modules"
147     + echo >&2 " -v: verbose"
148     + echo >&2 " -r: rapid configuration mode: configure Zaptel FXS channels from "
149     + echo >&2 " existing Rapid extension files. FXOs will all be TRUNK "
150     +}
151     +
152     +# $1: channel number
153     +print_pattern() {
154     + local chan=$1
155     + local sig=$2 #fxs/fxo
156     + local mode=$3
157     + case "$mode" in
158     + zaptel) echo "${sig}$method=$chan" ;;
159     + list) echo $chan $sig;;
160     + zapata)
161     + echo "signalling=${sig}_$method"
162     + if [ "$sig" = 'fxo' ]
163     + then
164     + echo "; Note: this is an extension. Create a ZAP extension in AMP for Channel $chan"
165     + echo "context=from-internal"
166     + echo "group=1"
167     + # to preconfigure channel 1's extension to 550, set
168     + # chan_1_exten=550
169     + # in, e.g, /etc/default/zaptel
170     + var_name=`echo chan_${chan}_exten`
171     + cfg_exten=`echo ${!var_name} | tr -d -c 0-9`
172     + var_name=`echo chan_${chan}_vmbox`
173     + cfg_vmbox=`echo ${!var_name} | tr -d -c 0-9`
174     + var_name=`echo chan_${chan}_cntxt`
175     + cfg_cntxt=`echo ${!var_name} | tr -d -c 0-9`
176     +
177     + # if option -E was given, get configuration from current extension
178     + if [ "$rapid_conf_mode" = 'yes' ]
179     + then
180     + rap_exten=`echo $rapid_extens |awk "{print \\$$rapid_cur_exten}"`
181     + if [ "$rap_exten" != '' ]
182     + then
183     + rap_cfgfile="$exten_base_dir/$rap_exten.conf"
184     + if [ -r "$rap_exten" ]
185     + then
186     + cfg_exten=$rap_exten
187     + # the vmbox is the third parameter to stdexten
188     + rap_vmbox=`grep '^[^;].*Macro(stdexten' $rap_exten | cut -d, -f3 \
189     + | cut -d')' -f1 | tr -d -c '0-9@a-zA-Z'`
190     + if [ "$rap_vmbox" ]!= '' ; then cfg_vmbox=$rap_vmbox; fi
191     + fi
192     + fi
193     + rapid_cur_exten=$(($rapid_cur_exten + 1))
194     + fi
195     +
196     + if [ "$cfg_exten" = '' ]
197     + then # No extension number set for this channel
198     + exten=$(($chan+$base_exten))
199     + else # use the pre-configured extension number
200     + exten=$cfg_exten
201     + fi
202     + # is there any real need to set 'mailbox=' ?
203     + if [ "x$cfg_vmbox" = x ]
204     + then # No extension number set for this channel
205     + vmbox=$exten
206     + else # use the pre-configured extension number
207     + vmbox=$cfg_vmbox
208     + fi
209     + # echo "callerid=\"Channel $chan\" <$exten>"
210     + # echo "mailbox=$exten"
211     + else # we have may have set it. So reset it:
212     + echo "; Note: this is a trunk. Create a ZAP trunk in AMP for Channel $chan"
213     + echo "context=from-zaptel"
214     + echo "group=0"
215     + # echo "callerid=\"\" <0>"
216     + # echo "mailbox="
217     + fi
218     +
219     + echo "channel => $chan"
220     + echo ""
221     +
222     + # Keep a note of what channels we have identified
223     + say "DEBUG: adding to channels list: channel: $chan, sig: $sig"
224     + case "$sig" in
225     + fxs)
226     + echo $chan >$tmp_dir/fxo_$chan
227     + say "DEBUG: FXO list now contains: `cat $tmp_dir/fxo_* |xargs`"
228     + ;;
229     + fxo)
230     + echo $chan >$tmp_dir/fxs_$chan
231     + say "DEBUG: FXS list now contains: `cat $tmp_dir/fxs_* |xargs`"
232     + ;;
233     + esac
234     + ;;
235     + esac
236     +
237     +}
238     +
239     +# the number of channels from /proc/zaptel
240     +# must always print a number as its output.
241     +count_proc_zap_lines() {
242     + # if zaptel is not loaded there are 0 channels:
243     + if [ ! -d /proc/zaptel ]; then echo '0'; return; fi
244     +
245     + (
246     + for file in `echo /proc/zaptel/* |grep -v '\*'`
247     + do sed -e 1,2d $file # remove the two header lines
248     + done
249     + ) | wc -l # the total number of lines
250     +}
251     +
252     +load_modules() {
253     + say "Test Loading modules:"
254     + for i in zaptel $ALL_MODULES
255     + do
256     + if [ "$i" = ztdummy ]; then
257     + continue # No hardware to detect
258     + fi
259     + lines_before=`count_proc_zap_lines`
260     + args="${i}_args"
261     + eval "args=\$$args"
262     + # a module is worth listing if it:
263     + # a. loaded successfully, and
264     + # b. added channels lines under /proc/zaptel/*
265     + if /sbin/modprobe $i $args 2> /dev/null && \
266     + [ $lines_before -lt `count_proc_zap_lines` ]
267     + then
268     + probed_modules="$probed_modules $i"
269     + say " ok $i $args"
270     + else
271     + say " - $i $args"
272     + fi
273     + done
274     +}
275     +
276     +
277     +unload_modules() {
278     + if
279     + pids="$(pgrep asterisk)"
280     + [ "$pids" != '' ]
281     + then
282     + die "Before unloading -- STOP asterisk (pids=$pids)."
283     + fi
284     + say "Unloading zaptel modules:"
285     + modlist=''
286     + for i in $ALL_MODULES zaptel
287     + do
288     + if lsmod | grep "^$i *" > /dev/null; then
289     + modlist="$modlist $i"
290     + say -n "$i "
291     + fi
292     + done
293     + /sbin/modprobe -r $modlist
294     + say ''
295     +}
296     +
297     +detect() {
298     + unload_modules
299     + load_modules
300     + modlist="$probed_modules"
301     + #for i in $ALL_MODULES
302     + #do
303     + # if lsmod | grep "^$i *" > /dev/null; then
304     + # modlist="$modlist $i"
305     + # fi
306     + #done
307     + modlist="$(echo $modlist)" # clean spaces
308     + if [ "$modlist" = '' ]; then
309     + modlist=ztdummy # Fallback
310     + fi
311     + say "Updating '${ZAPTEL_BOOT}'"
312     + do_update ZAPTEL_MODS "$modlist"
313     +}
314     +
315     +check_tdm_sigtype() {
316     + chan_num=$1
317     + sig_type=$2
318     + mode=$3
319     +
320     + case "$sig_type" in
321     + fxs)chan_sig_type=fxo;;
322     + fxo)chan_sig_type=fxs;;
323     + esac
324     +
325     +# print_pattern $chan_num $chan_sig_type $mode
326     +
327     + $ztcfg_cmd -c <(print_pattern $chan_num $chan_sig_type zaptel) 2>/dev/null \
328     + || return 1
329     + if head -c1 /dev/zap/$chan_num >/dev/null 2>/dev/null
330     + then
331     + print_pattern $chan_num $chan_sig_type $mode
332     + return 0
333     + else
334     + return 1
335     + fi
336     +}
337     +
338     +# output a list of extensions that need a channel
339     +get_rapid_extens() {
340     + if [ "$rapid_conf_mode" = 'yes' ]
341     + then
342     + rapid_extens=`grep -l '^[^;].*Zap/\${CHAN_ZAP_' $exten_base_dir/*.conf 2>/dev/null | \
343     + rev | cut -d/ -f1 | cut -d. -f2- | rev | xargs`
344     + say "Need to configure extensions: $rapid_extens"
345     + fi
346     +}
347     +
348     +genconf() {
349     + local mode=$1
350     +
351     + # reset FXO list (global)
352     + say "DEBUG: resetting channels lists"
353     + rm -f $tmp_dir/fx{s,o}_*
354     +
355     + if [ "$mode" = 'zapata' ]
356     + then
357     + rem_char=';'
358     + else
359     + rem_char='#'
360     + fi
361     +
362     + spanlist=`echo /proc/zaptel/* | grep -v '\*'`
363     +
364     + #if [ "$spanlist" == "" ]; then
365     + # die "No zapata interfaces in /proc/zaptel"
366     + #fi
367     +
368     +
369     + case "$mode" in
370     + zaptel)
371     + cat <<EOF
372     +# Autogenerated by $0 -- do not hand edit
373     +# Zaptel Configuration File
374     +#
375     +# This file is parsed by the Zaptel Configurator, ztcfg
376     +#
377     +
378     +# It must be in the module loading order
379     +
380     +EOF
381     + ;;
382     + zapata)
383     + cat <<EOF
384     +; Autogenerated by $0 -- do not hand edit
385     +; Zaptel Channels Configurations (zapata.conf)
386     +;
387     +; This is not intended to be a complete zapata.conf. Rather, it is intended
388     +; to be #include-d by /etc/zapata.conf that will include the global settings
389     +;
390     +callerid=asreceived
391     +EOF
392     + ;;
393     + esac
394     +
395     + # For each line in the spanlist: see if it represents a channel.
396     + # if it does, test that the channel is usable.
397     + # we do that by configuring it (using ztcfg with a 1-line config file)
398     + # and then trying to read 1 byte from the device file.
399     + #
400     + # The '<(command)' syntax creates a temporary file whose content is is the
401     + # output of 'command'.
402     + #
403     + # This approach failed with the T1 card we have: the read operation simply
404     + # hung.
405     + #
406     + # Another problem with such an approach is how to include an existing
407     + # configuration file. For instance: how to include some default settings.
408     + #
409     + # Maybe an 'include' directive should be added to zaptel.conf ?
410     + #cat $spanlist |
411     + for procfile in $spanlist
412     + do
413     + # the first line is the title line. It states the model name
414     + # the second line is empty
415     + title=`head -n 1 $procfile`
416     + echo ""
417     + echo "$rem_char $title"
418     +
419     + # The rest of the lines are per-channel lines
420     + sed -e 1,2d $procfile | \
421     + while read line
422     + do
423     + # in case this is a real channel.
424     + chan_num=`echo $line |awk '{print $1}'`
425     + case "$line" in
426     + *WCT1/*) # we're yet to detect when a channel is active
427     + echo "$rem_char channel $chan_num, WCT1, unhandled for now"
428     + ;;
429     + *WCTDM/*)
430     + # this can be either FXS or FXO
431     + check_tdm_sigtype $chan_num fxs $mode || \
432     + check_tdm_sigtype $chan_num fxo $mode || \
433     + echo "$rem_char channel $chan_num, WCTDM, inactive."
434     + ;;
435     + *WRTDM/*)
436     + # this can be either FXS or FXO
437     + check_tdm_sigtype $chan_num fxs $mode || \
438     + check_tdm_sigtype $chan_num fxo $mode || \
439     + echo "$rem_char channel $chan_num, WRTDM, inactive."
440     + ;;
441     + *WCFXO/*)
442     + check_tdm_sigtype $chan_num fxo $mode || \
443     + echo "$rem_char channel $chan_num, WCFXO, inactive."
444     + ;;
445     + '') ;; # Empty line (after span header)
446     + *) echo "$rem_char ??: $line";;
447     + esac
448     + done
449     + done
450     +
451     + if [ "$mode" = 'zaptel' ]
452     + then
453     + cat <<EOF
454     +
455     +# Global data
456     +
457     +EOF
458     + echo "loadzone = $loadzone"
459     + echo "defaultzone = $defaultzone"
460     + fi
461     +
462     + if [ "$mode" = 'zapata' ]
463     + then
464     + update_extensions_defs
465     + fi
466     +}
467     +
468     +while getopts 'c:de:E:hlm:rsuv' arg
469     +do
470     + case "$arg" in
471     + e) # guarantee that it is a number:
472     + new_base_exten=`echo $OPTARG | tr -d -c 0-9`
473     + if [ "x$new_base_exten" != x ]; then base_exten=$new_base_exten; fi
474     + ;;
475     + c) lc_country=`echo $OPTARG | tr -d -c a-z` ;;
476     + u) do_unload=yes ;;
477     + v) verbose=yes ;;
478     + l) mode='list' ;;
479     + m)
480     + case "$OPTARG" in
481     + k|l|g)method=${OPTARG}s ;;
482     + *) echo >&2 "unknown signalling method ${OPTARG}s, defaulting to \"$method\"";;
483     + esac
484     + ;;
485     + r)
486     + rapid_conf_mode=yes
487     + tmp_dir=`mktemp -d` || die "$0: failed to create temporary directory. Aborting"
488     + ;;
489     + *) echo >&2 "unknown parameter -$arg, Aborting"; usage; exit 1;;
490     + esac
491     +done
492     +shift $(( $OPTIND-1 ))
493     +if [ $# != 0 ]; then
494     + echo >&2 "$0: too many parameters"
495     + usage
496     + exit 1
497     +fi
498     +
499     +case "$lc_country" in
500     + # the list was generated from the source of zaptel:
501     + #grep '{.*[0-9]\+,.*"[a-z][a-z]"' zonedata.c | cut -d'"' -f 2 | xargs |tr ' ' '|'
502     + us|au|fr|nl|uk|fi|es|jp|no|at|nz|it|gr|tw|cl|se|be|il)
503     + :;;
504     +*)
505     + lc_country=us
506     + echo >&2 "unknown country-code $lc_country, defaulting to \"us\"";;
507     +esac
508     +# any reason for loadzone and defaultzone to be different? If so, this is
509     +# the place to make that difference
510     +loadzone=$lc_country
511     +defaultzone=$loadzone
512     +
513     +# Choose reasonable default for signaling method (by country)
514     +if [ "" = "$method" ]; then
515     + case "$lc_country" in
516     + il) method=ls ;;
517     + *) method=ks ;;
518     + esac
519     +fi
520     +
521     +# make sure asterisk is not in our way
522     +if [ "$force_stop_ast" = 'yes' ]
523     +then
524     +# /etc/init.d/asterisk stop 1>&2
525     + /usr/sbin/amportal stop 1>&2
526     +else
527     + if ps auxww |grep asterisk | grep -v -- -r | grep -q -v grep
528     + then
529     + echo >&2 "Asterisk is already running. Configuration left untouched"
530     + echo >&2 "You can use the option -s to shut down Asterisk for the"
531     + echo >&2 "duration of the detection."
532     + exit 1
533     + fi
534     +fi
535     +
536     +if [ "$do_unload" = yes ]
537     +then
538     + unload_modules
539     + exit
540     +fi
541     +
542     +if [ "$do_detect" = yes ]
543     +then
544     + detect
545     +fi
546     +
547     +if [ "$mode" = list ]; then
548     + genconf list
549     +else
550     + get_rapid_extens
551     + echo "Generating '${ZAPCONF_FILE}'"
552     + mv "${ZAPCONF_FILE}" "${ZAPCONF_FILE}.bak"
553     + genconf zaptel > "${ZAPCONF_FILE}"
554     + echo "Generating '${ZAPATA_FILE}'"
555     + mv "${ZAPATA_FILE}" "${ZAPATA_FILE}.bak"
556     + genconf zapata > "${ZAPATA_FILE}"
557     + run_ztcfg
558     +fi
559     +
560     +if [ "$force_stop_ast" = 'yes' ]
561     +then
562     +# /etc/init.d/asterisk start 1>&2
563     + /etc/init.d/zaptel stop
564     + /etc/init.d/zaptel start
565     + /usr/sbin/amportal start 1>&2
566     +fi
567     +
568     +# if in verbose mode: verify that asterisk is running
569     +if [ "$verify" != 'no' ]
570     + then
571     + say "Checking channels configured in Asterisk:"
572     + sleep 1 # give it some time. This is enough on our simple test server
573     + /usr/local/sbin/ast-cmd cmd "zap show channels"
574     +fi

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed