Add Inzone handling - routing icoming calls based on dialed number and callerid.

Use _[0-9*+#]. in place of _. to avoid warnings in the log.

Fix some errors with quotes

Change default call type to macro for lastdialedtype.
This commit is contained in:
Michael Geddes 2009-01-14 01:42:06 +00:00
parent 642032dfe8
commit 66b15da9be

View file

@ -25,6 +25,8 @@ init_dialplanconf() {
return 0 return 0
} }
match_all="_[0-9*+#]."
dialplangeneral_list="static writeprotect canreinvite clearglobalvars" dialplangeneral_list="static writeprotect canreinvite clearglobalvars"
dialplangeneral_list_ex="lastdialed lastdialedtype voiceboxext answerfirst dialtimeout allowtransfer international internationalout" dialplangeneral_list_ex="lastdialed lastdialedtype voiceboxext answerfirst dialtimeout allowtransfer international internationalout"
@ -137,25 +139,73 @@ add_dialplan_goto() {
append dialplan_context_${context} "exten => $2,1,Goto($3,\${EXTEN},1)" "${N}" append dialplan_context_${context} "exten => $2,1,Goto($3,\${EXTEN},1)" "${N}"
} }
handle_inzone() { dialplan_inzone_list="match caller goto"
# TODO - Incoming zones.
return 0 valid_dialplan_inzone() {
is_in_list $1 ${valid_inzone_list}
return $?
} }
#generate_inzone() { check_append_inzone() {
#[local_Vista] local context="${1}"
#exten => _X.,1,Ringing() eval "local isadded=\"\${dialplan_add_inzone_${context}-0}\""
#exten => _X.,n,Dial(SIP/Nokia,5) if [ "$isadded" != "1" ] ; then
#exten => _X.,n,Answer eval "dialplan_add_inzone_${check}=1"
#exten => _X.,n,wait(1) append inzone_contexts "$context"
#exten => _X.,n,Set(EXITCONTEXT=xyzzy) return 0
#exten => _X.,n,Dial(SIP/Nokia,15,rd) else
#exten => _X.,n,Hangup return 1
#[xyzzy] fi
#exten => 1,1,Noop(xyzzy) }
#exten => 1,n,SayAlpha(b)
#exten => 1,n,Hangup handle_inzone() {
#}
context_name=${1}
check_append_inzone ${context_name}
option_cb(){
case $1 in
goto) eval "inzone_${context_name}_goto=\"\$2\"" ;;
match_ITEM*|match) append inzone_${context_name}_match "$2" " " ;;
caller_ITEM*|caller) append inzone_${context_name}_caller "$2" " " ;;
include_ITEM*|include) append inzone_${context_name}_include "$2" " " ;;
match_LENGTH|caller_LENGTH|include_LENGTH) ;;
*) logerror "Invalid Dialplan inzone option: $1" ;;
esac
}
}
append_dialplan_inzone() {
local file=$1
for context in ${inzone_contexts} ; do
for i in goto match caller include ; do
eval "iz_$i=\"\${inzone_${context}_${i}}\""
done
if [ -z "${iz_goto}" ] ; then
logerror "Missing goto for inzone: ${context}"
elif [ -z "${iz_match}" -a -z "${iz_caller}" ] ; then
logerror "Missing match for inzone: ${context}"
else
echo "${N}[${context}]" >> ${file}
for curmatch in ${iz_include} ; do
echo "include => ${curmatch}" >> $file
done
local gotoline="Goto(${iz_goto},\${EXTEN},1)"
[ -z "${iz_match}" ] && iz_match=${match_all}
for curmatch in ${iz_match} ; do
if [ -z "${iz_caller}" ] ; then
echo "exten => ${curmatch},1,${gotoline}" >> $file
else
for curcaller in ${iz_caller} ; do
echo "exten => ${curmatch}/${curcaller},1,${gotoline}" >> $file
done
fi
done
fi
done
}
append_dialplan_dialzone() { append_dialplan_dialzone() {
local file=$1 local file=$1
@ -199,24 +249,25 @@ append_dialplan_dialzone() {
if [ ! -z "${diallist}" ] ; then if [ ! -z "${diallist}" ] ; then
logdebug 2 "International: ${diallist}" logdebug 2 "International: ${diallist}"
while [ ! -z "$diallist" ] ; do while [ ! -z "$diallist" ] ; do
cur=${diallist%%,*} cur="${diallist%%,*}"
nvar=${diallist#*,} nvar="${diallist#*,}"
local curlen=`expr length ${cur}` local curlen=`expr length "${cur}"`
if [ "$alwaysinternational" = "yes" ] ; then if [ "$alwaysinternational" = "yes" ] ; then
echo "exten => _${cur},1,Goto(${dialz}_dial,${addprefix}\${EXTEN:${curlen}},1)" >> $file echo "exten => _${cur},1,Goto(${dialz}_dial,${addprefix}\${EXTEN:${curlen}},1)" >> $file
else else
echo "exten => _${cur}.,1,Goto(${zonename}_check,${addprefix}\${EXTEN:${curlen}},1)" >> $file echo "exten => _${cur}.,1,Goto(${zonename}_check,${addprefix}\${EXTEN:${curlen}},1)" >> $file
fi fi
[ "$nvar" == "$diallist" ] && break [ "$nvar" == "$diallist" ] && break
diallist=${nvar} diallist="${nvar}"
done done
if [ "$alwaysinternational" != "yes" ] ; then if [ "$alwaysinternational" != "yes" ] ; then
logdebug 2 "Not Always International:"
# Check for local country code # Check for local country code
echo "[${zonename}_check]" >> $file echo "[${zonename}_check]" >> $file
local locallen=`expr length ${countrycode}` local locallen=`expr length "${countrycode}"`
echo "exten => _${countrycode}X.,1,Goto(${localzone-default},${localprefix-0}\${EXTEN:${locallen}},1)" >> $file echo "exten => _${countrycode}X.,1,Goto(${localzone-default},${localprefix-0}\${EXTEN:${locallen}},1)" >> $file
echo "exten => _X.,1,Goto(${dialz}_dial,${internationalprefix}\${EXTEN},1)" >> $file echo "exten => _X.,1,Goto(${dialz}_dial,${internationalprefix}\${EXTEN},1)" >> $file
fi fi
@ -269,7 +320,7 @@ append_dialplan_dialzone_out(){
local lastparam="\${EXTEN}" local lastparam="\${EXTEN}"
local lastmacro=${lastdialed} local lastmacro=${lastdialed}
local lastmacrotype=${lastdialedtype} local lastmacrotype=${lastdialedtype}
[ -z ${lastdialedtype} ] && lastdialedtype=goto [ -z ${lastdialedtype} ] && lastdialedtype=macro
local jumpmacroline= local jumpmacroline=
gen_jumpmacro jumpmacroline "${ext}${en}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}" gen_jumpmacro jumpmacroline "${ext}${en}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}"
@ -375,7 +426,7 @@ append_dialplan_incoming(){
enable_module func_callerid enable_module func_callerid
local lastparam="\${CALLERID(num)}" local lastparam="\${CALLERID(num)}"
local lastmacrotype="${iz_lastcalltype}" local lastmacrotype="${iz_lastcalltype}"
[ -z "${iz_lastcalltype}" ] && lastmacrotype=goto [ -z "${iz_lastcalltype}" ] && lastmacrotype=macro
local lastmacro=${iz_lastcall} local lastmacro=${iz_lastcall}
append_jumpmacro "${context}" "${ext}${item}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}" append_jumpmacro "${context}" "${ext}${item}" "" "${lastmacrotype}" "${lastmacro}" "${lastparam}"
item="n," item="n,"
@ -383,7 +434,7 @@ append_dialplan_incoming(){
if [ ! -z "${iz_missed}" ] ; then if [ ! -z "${iz_missed}" ] ; then
enable_module func_callerid enable_module func_callerid
local missedparam="\${CALLERID(num)}" local missedparam="\${CALLERID(num)}"
[ -z "${iz_missedtype}" ] && iz_missedtype=goto [ -z "${iz_missedtype}" ] && iz_missedtype=macro
append_dialplan_context ${context} "${ext}${item}Set(lcsMissed=\${CALLERID(num)})" append_dialplan_context ${context} "${ext}${item}Set(lcsMissed=\${CALLERID(num)})"
item="n," item="n,"
@ -504,8 +555,11 @@ create_dialplanconf() {
append_dialplan_extensions "$file" append_dialplan_extensions "$file"
append_dialplan_inzone "$file"
append_dialplan_incoming "$file" append_dialplan_incoming "$file"
# append_dialplan_lastcall "$file" # append_dialplan_lastcall "$file"
# Add all the contexts # Add all the contexts