Skip to content
Snippets Groups Projects

Port missing features from release-7.3 branch

Merged Erik Karlsson requested to merge erik-from-release-7.3 into devel
Yalu Zhang
Last comment by Yalu Zhang
@@ -109,10 +109,10 @@ configure_sip_options() {
config_get useragent sip_options useragent "$USERAGENT"
config_get externhost sip_options externhost
config_get bindintf sip_options bindintf
config_get bindport sip_options bindport 5060
config_get bindport sip_options bindport "5060"
config_get tos_sip sip_options tos_sip
config_get rtpstart sip_options rtp_start 10000
config_get rtpend sip_options rtp_end 20000
config_get rtpstart sip_options rtp_start "10000"
config_get rtpend sip_options rtp_end "20000"
config_get rtcpinterval sip_options rtcpinterval
config_get blindxfer sip_options blindxfer
config_get localnet sip_options localnet
@@ -126,8 +126,8 @@ configure_sip_options() {
config_get tls_private_key sip_options tls_private_key
config_get tls_certfile sip_options tls_certfile
config_get tls_cipher sip_options tls_cipher
config_get accept_proxy_req_only sip_options accept_proxy_req_only 0
config_get allow_tx_hash_in_uri sip_options allow_tx_hash_in_uri 0
config_get accept_proxy_req_only sip_options accept_proxy_req_only "0"
config_get allow_tx_hash_in_uri sip_options allow_tx_hash_in_uri "0"
ast_conf_replace_esc "|USERAGENT|" "$useragent" $WORK_DIR/pjsip.conf
@@ -211,34 +211,36 @@ mailbox_get_boxnumber() {
[ -n "$mailbox" ] || return
config_get boxnumber $mailbox boxnumber
config_get boxnumber "$mailbox" boxnumber
[ -n "$boxnumber" ] && echo "$boxnumber"
}
#Configure Message waiting indication, musiconhold and call_waiting features
configure_mwi_moh_cw() {
local line=$1
local sp=$2
local user=$3
local server_uri=$4
local calling_features
local mwi_enable
local provider
local messages_waiting
local mwi_dialtone_state
local user=$3
local server_uri=$4
local moh_passthrough
local call_waiting_enable
config_get calling_features $1 calling_features
config_get provider $1 provider
config_get calling_features "$line" calling_features
config_get provider "$line" provider
if [ -n "$calling_features" ]; then
config_get mwi_enable $calling_features mwi_enable "0"
config_get messages_waiting $calling_features messages_waiting "no"
config_get mwi_dialtone_state $calling_features mwi_dialtone_state "on"
config_get moh_passthrough $calling_features moh_passthrough
config_get call_waiting_enable $calling_features call_waiting_enable "0"
config_get mwi_enable "$calling_features" mwi_enable "0"
config_get messages_waiting "$calling_features" messages_waiting "no"
config_get mwi_dialtone_state "$calling_features" mwi_dialtone_state "on"
config_get moh_passthrough "$calling_features" moh_passthrough
config_get call_waiting_enable "$calling_features" call_waiting_enable "0"
fi
if [ -n "$provider" -a "$provider" = "$2" ]; then
if [ -n "$provider" -a "$provider" = "$sp" ]; then
if [ "$mwi_enable" = "1" ]; then
ast_conf_replace_esc "|MAILBOX|" "${user}@${server_uri}" $WORK_DIR/pjsip_endpoint
ast_conf_replace_esc "|MESSAGES|" "$messages_waiting" $WORK_DIR/pjsip_endpoint
@@ -276,11 +278,13 @@ get_country_code() {
}
configure_sip_provider() {
local provider=$1
local enabled
local profile_enabled
local outbound_proxy
local outbound_proxy_port
local domain
local host
local user
local authuser
local secret
@@ -296,49 +300,49 @@ configure_sip_provider() {
local registerattempts
local server_uri
local port
local failover_max_retries
local failover_interval1
local failover_interval2
config_get profile_enabled general profile_enable "1"
config_get enabled $1 enable "0"
config_get outbound_proxy $1 outbound_proxy
config_get outbound_proxy_port $1 outbound_proxy_port
config_get domain $1 domain
config_get user $1 user
config_get authuser $1 authuser
config_get secret $1 secret
config_get support_fax $1 support_fax "0"
config_get transport $1 transport "udp"
config_get encryption $1 encryption "0"
config_get mediasec $1 mediasec "0"
config_get realm $1 realm
config_get enabled "$provider" enable "0"
config_get outbound_proxy "$provider" outbound_proxy
config_get outbound_proxy_port "$provider" outbound_proxy_port
config_get domain "$provider" domain
config_get host "$provider" host "$domain"
config_get user "$provider" user
config_get authuser "$provider" authuser
config_get secret "$provider" secret
config_get support_fax "$provider" support_fax "0"
config_get transport "$provider" transport "udp"
config_get encryption "$provider" encryption "0"
config_get mediasec "$provider" mediasec "0"
config_get realm "$provider" realm
config_get dtmf_mode sip_options dtmf_mode "rfc4733"
config_get tos_audio $1 tos_audio
config_get tos_video $1 tos_video
config_get defaultexpiry $1 defaultexpiry "3600"
config_get registertimeout $1 registertimeout
config_get registerattempts $1 registerattempts
config_get tos_audio "$provider" tos_audio
config_get tos_video "$provider" tos_video
config_get defaultexpiry "$provider" defaultexpiry "3600"
config_get registertimeout "$provider" registertimeout
config_get registerattempts "$provider" registerattempts
config_get failover_max_retries "$provider" failover_max_retries "-1"
config_get failover_interval1 "$provider" failover_interval1 "10"
config_get failover_interval2 "$provider" failover_interval2 "60"
# This is a hack to fix security issue #14962
user=${user//"'"/}
authuser=${authuser//"'"/}
if [ "$profile_enabled" == "0" -o "$enabled" == "0" ] ; then
echo "SIP provider $1 or the profile is not enabled"
echo "SIP provider '$provider' or the profile is not enabled"
return
fi
if [ -z "$user" ] ; then
echo "SIP provider $1 has no user configured, ignored"
echo "SIP provider '$provider' has no user configured, ignored"
return
fi
if [ -z "$outbound_proxy" ] ; then
server_uri=$domain;
if [ "$transport" == "udp" -o "$transport" == "tcp" ] ; then
port=5060;
elif [ "$transport" == "tls" ] ; then
port=5061;
fi
else
if [ -z "$host" ] ; then
server_uri=$outbound_proxy;
if [ -z "$outbound_proxy_port" ] ; then
if [ "$transport" == "udp" -o "$transport" == "tcp" ] ; then
@@ -349,20 +353,33 @@ configure_sip_provider() {
else
port=$outbound_proxy_port;
fi
else
server_uri=$host;
if [ "$transport" == "udp" -o "$transport" == "tcp" ] ; then
port=5060;
elif [ "$transport" == "tls" ] ; then
port=5061;
fi
fi
# Generating pjsip_aors.conf
cp "$TEMPLATE_DIR/pjsip_aor" "$WORK_DIR/pjsip_aor"
ast_conf_replace_esc "|NAME|" "$1" $WORK_DIR/pjsip_aor
ast_conf_replace_esc "|NAME|" "$provider" $WORK_DIR/pjsip_aor
ast_conf_replace_esc "|SERVER_URI|" "$server_uri" $WORK_DIR/pjsip_aor
ast_conf_replace_esc "|PORT|" "$port" $WORK_DIR/pjsip_aor
ast_conf_replace_esc "|USER|" "$user" $WORK_DIR/pjsip_aor
if [ -z "$outbound_proxy" ] ; then
ast_conf_replace "outbound_proxy = sip:|OUTBOUND_PROXY|.*" ";outbound_proxy =" $WORK_DIR/pjsip_aor
else
ast_conf_replace_esc "|OUTBOUND_PROXY|" "$outbound_proxy" $WORK_DIR/pjsip_aor
fi
cat $WORK_DIR/pjsip_aor >> $WORK_DIR/pjsip_aors.conf
# Generating pjsip_auths.conf
cp "$TEMPLATE_DIR/pjsip_auth" "$WORK_DIR/pjsip_auth"
ast_conf_replace_esc "|NAME|" "$1" $WORK_DIR/pjsip_auth
ast_conf_replace_esc "|NAME|" "$provider" $WORK_DIR/pjsip_auth
ast_conf_replace_esc "|AUTHUSER|" "$authuser" $WORK_DIR/pjsip_auth
ast_conf_replace_esc "|SECRET|" "$secret" $WORK_DIR/pjsip_auth
ast_conf_replace_esc "|REALM|" "$realm" $WORK_DIR/pjsip_auth
@@ -370,9 +387,15 @@ configure_sip_provider() {
# Generating pjsip_endpoints.conf
cp "$TEMPLATE_DIR/pjsip_endpoint" "$WORK_DIR/pjsip_endpoint"
ast_conf_replace_esc "|NAME|" "$1" $WORK_DIR/pjsip_endpoint
ast_conf_replace_esc "|NAME|" "$provider" $WORK_DIR/pjsip_endpoint
ast_conf_replace_esc "|DTMFMODE|" "$dtmf_mode" $WORK_DIR/pjsip_endpoint
if [ -z "$outbound_proxy" ] ; then
ast_conf_replace "outbound_proxy = sip:|OUTBOUND_PROXY|.*" ";outbound_proxy =" $WORK_DIR/pjsip_endpoint
else
ast_conf_replace_esc "|OUTBOUND_PROXY|" "$outbound_proxy" $WORK_DIR/pjsip_endpoint
fi
if [ -z "$tos_audio" ] ; then
ast_conf_replace "tos_audio = |TOS_AUDIO|" ";tos_audio = " $WORK_DIR/pjsip_endpoint
else
@@ -385,10 +408,10 @@ configure_sip_provider() {
ast_conf_replace_esc "|TOS_VIDEO|" "$tos_video" $WORK_DIR/pjsip_endpoint
fi
if [ -z "$domain" ] ; then
if [ -z "$host" ] ; then
ast_conf_replace_esc "|DOMAIN|" "$outbound_proxy" $WORK_DIR/pjsip_endpoint
else
ast_conf_replace_esc "|DOMAIN|" "$domain" $WORK_DIR/pjsip_endpoint
ast_conf_replace_esc "|DOMAIN|" "$host" $WORK_DIR/pjsip_endpoint
fi
ast_conf_replace_esc "|USER|" "$user" $WORK_DIR/pjsip_endpoint
@@ -397,7 +420,7 @@ configure_sip_provider() {
if [ "$support_fax" == "1" ] ; then
ast_conf_replace "|ALLOW|" "allow = ulaw\nallow = alaw" $WORK_DIR/pjsip_endpoint
else
ast_conf_replace "|ALLOW|" "$(read_codecs $1)" $WORK_DIR/pjsip_endpoint
ast_conf_replace "|ALLOW|" "$(read_codecs $provider)" $WORK_DIR/pjsip_endpoint
fi
ast_conf_replace_esc "|TRANSPORT|" "$transport" $WORK_DIR/pjsip_endpoint
@@ -414,7 +437,7 @@ configure_sip_provider() {
ast_conf_replace "|MEDIASEC|" "1" $WORK_DIR/pjsip_endpoint
fi
config_foreach configure_mwi_moh_cw line $1 $user $server_uri
config_foreach configure_mwi_moh_cw line "$provider" "$user" "$server_uri"
# Generating pjsip_endpoints.conf
cat $WORK_DIR/pjsip_endpoint >> $WORK_DIR/pjsip_endpoints.conf
@@ -422,7 +445,7 @@ configure_sip_provider() {
# Generating pjsip_identifies.conf
cp "$TEMPLATE_DIR/pjsip_identify" "$WORK_DIR/pjsip_identify"
ast_conf_replace_esc "|USER|" "${user}" $WORK_DIR/pjsip_identify
ast_conf_replace_esc "|NAME|" "$1" $WORK_DIR/pjsip_identify
ast_conf_replace_esc "|NAME|" "$provider" $WORK_DIR/pjsip_identify
local country_code=$(get_country_code)
local userid
@@ -440,10 +463,17 @@ configure_sip_provider() {
# Generating pjsip_registrations.conf
cp "$TEMPLATE_DIR/pjsip_registration" "$WORK_DIR/pjsip_registration"
ast_conf_replace_esc "|NAME|" "$1" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|NAME|" "$provider" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|USER|" "$user" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|SERVER_URI|" "$server_uri" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|PORT|" "$port" $WORK_DIR/pjsip_registration
if [ -z "$outbound_proxy" ] ; then
ast_conf_replace "outbound_proxy = sip:|OUTBOUND_PROXY|.*" ";outbound_proxy =" $WORK_DIR/pjsip_registration
else
ast_conf_replace_esc "|OUTBOUND_PROXY|" "$outbound_proxy" $WORK_DIR/pjsip_registration
fi
ast_conf_replace_esc "|DEFAULTEXPIRY|" "$defaultexpiry" $WORK_DIR/pjsip_registration
if [ -z "$registertimeout" ] ; then
@@ -458,6 +488,10 @@ configure_sip_provider() {
ast_conf_replace_esc "|REGISTERATTEMPTS|" "$registerattempts" $WORK_DIR/pjsip_registration
fi
ast_conf_replace_esc "|FAILOVERREGISTERATTEMPTS|" "$failover_max_retries" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|FAILOVERREGISTERINTERVAL1|" "$failover_interval1" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|FAILOVERREGISTERINTERVAL2|" "$failover_interval2" $WORK_DIR/pjsip_registration
ast_conf_replace_esc "|TRANSPORT|" "$transport" $WORK_DIR/pjsip_registration
if [ "$mediasec" == "0" ] ; then
@@ -471,27 +505,30 @@ configure_sip_provider() {
# Encrypt passwords if voicesec is used, remove cleartext password from config
encrypt_password() {
local provider=$1
local secret
config_get secret $1 secret
config_get secret "$provider" secret
if [ -n "$secret" ] ; then
if [ -e "/usr/bin/voicesec" ] ; then
echo "Encrypting password for $1"
/usr/bin/voicesec -e $secret > /usr/lib/asterisk/voicesec_$1
fsync /usr/lib/asterisk/voicesec_$1
echo "Encrypting password for $provider"
/usr/bin/voicesec -e "$secret" > /usr/lib/asterisk/voicesec_$provider
fsync /usr/lib/asterisk/voicesec_$provider
fi
fi
}
# Configure mailbox
configure_mailbox() {
local mailbox=$1
local pin
local boxnumber
local enabled
config_get pin $1 pin
config_get boxnumber $1 boxnumber
config_get enabled $1 enable "0"
config_get pin "$mailbox" pin
config_get boxnumber "$mailbox" boxnumber
config_get enabled "$mailbox" enable "0"
[ "$enabled" = "0" ] && return
@@ -501,17 +538,18 @@ configure_mailbox() {
}
configure_ivr() {
local ivr="$1"
local name
local enabled
local extension
local sound_file
local opening_hours_profile
config_get name $1 name
config_get enabled $1 enable "0"
config_get extension $1 extension
config_get sound_file $1 sound_file
config_get opening_hours_profile $1 opening_hours_profile
config_get name "$ivr" name
config_get enabled "$ivr" enable "0"
config_get extension "$ivr" extension
config_get sound_file "$ivr" sound_file
config_get opening_hours_profile "$ivr" opening_hours_profile
[ "$enabled" = "0" ] && return
@@ -520,8 +558,8 @@ configure_ivr() {
opening_hours_profile_macro="GoSub(sub-check-$opening_hours_profile,s,1)"
fi
echo "[sub-$1]" >> $WORK_DIR/macros
echo "exten => $extension,1,GoSub(sub-$1,s,1)" >> $WORK_DIR/extensions_local
echo "[sub-$ivr]" >> $WORK_DIR/macros
echo "exten => $extension,1,GoSub(sub-$ivr,s,1)" >> $WORK_DIR/extensions_local
echo "exten => $extension,n,Hangup()" >> $WORK_DIR/extensions_local
get_tone_selection() {
@@ -529,25 +567,25 @@ configure_ivr() {
local owner=$2
local ts_owner ts_enabled ts_user ts_number ts_extension
config_get ts_owner $section owner
config_get ts_owner "$section" owner
[ "$ts_owner" = "$owner" ] || return
config_get ts_enabled $section enable "0"
config_get ts_enabled "$section" enable "0"
[ "$ts_enabled" != "0" ] || return
config_get ts_user $section user
config_get ts_user "$section" user
[ -n "$ts_user" ] || return
config_get ts_extension $ts_user extension
config_get ts_extension "$ts_user" extension
[ -n "$ts_extension" ] || return
config_get ts_number $section number
config_get ts_number "$section" number
echo "exten => s,n,GotoIf(\$[\"\${digit}\"=\"$ts_number\"]?local_extensions,$ts_extension,1)"
}
# Find all tone selections belonging to the IVR being configured
local tone_selections=$(config_foreach get_tone_selection tone_selection $1)
local tone_selections=$(config_foreach get_tone_selection tone_selection "$ivr")
echo "exten => s,1,Set(OPEN=1)" >> $WORK_DIR/macros
echo "exten => s,n,$opening_hours_profile_macro" >> $WORK_DIR/macros
@@ -571,11 +609,11 @@ configure_ivr() {
echo "exten => s,n(closed),NoOp()" >> $WORK_DIR/macros
# check for mailbox
config_get mailbox $1 mailbox
config_get mailbox "$ivr" mailbox
if [ -n "$mailbox" -a "$mailbox" != "-" ] ; then
local boxnumber=$(mailbox_get_boxnumber $mailbox)
if [ -n "$boxnumber" ] ; then
echo "Enabling mailbox $boxnumber for IVR $1"
echo "Enabling mailbox $boxnumber for IVR $ivr"
echo "exten => s,n,VoiceMail($boxnumber)" >> $WORK_DIR/macros
fi
fi
@@ -584,21 +622,22 @@ configure_ivr() {
}
configure_queue() {
local q=$1
local name enabled strategy extension members
config_get name $1 name
config_get enabled $1 enable "0"
config_get strategy $1 strategy
config_get extension $1 extension
config_get members $1 members
config_get name "$q" name
config_get enabled "$q" enable "0"
config_get strategy "$q" strategy
config_get extension "$q" extension
config_get members "$q" members
[ "$enabled" = "0" ] && return
echo "exten => $extension,1,GoSub(sub-$1,s,1)" >> $WORK_DIR/extensions_local
echo "exten => $extension,1,GoSub(sub-$q,s,1)" >> $WORK_DIR/extensions_local
echo "exten => $extension,n,Hangup()" >> $WORK_DIR/extensions_local
cp "$TEMPLATE_DIR/queue" "$WORK_DIR/queue"
ast_conf_replace_esc "|SECTION|" "$1" $WORK_DIR/queue
ast_conf_replace_esc "|SECTION|" "$q" $WORK_DIR/queue
ast_conf_replace_esc "|STRATEGY|" "$strategy" $WORK_DIR/queue
for member in $members
@@ -610,7 +649,7 @@ configure_queue() {
out="$CHANNELNAME/$num"
else
local sip_user
config_get sip_user $member user
config_get sip_user "$member" user
if [ -n "$sip_user" ] ; then
out="PJSIP/$sip_user"
fi
@@ -622,13 +661,13 @@ configure_queue() {
cat $WORK_DIR/queue >> $WORK_DIR/queues.conf
echo "[sub-$1]" >> $WORK_DIR/macros
echo "[sub-$q]" >> $WORK_DIR/macros
echo "exten => s,1,Answer()" >> $WORK_DIR/macros
# Workaround to fix no ringback issue for incoming SIP calls
echo "exten => s,n,Playback(silence/1)" >> $WORK_DIR/macros
echo "exten => s,n,Queue($1,R)" >> $WORK_DIR/macros
echo "exten => s,n,Queue($q,R)" >> $WORK_DIR/macros
echo "exten => s,n,Return()" >> $WORK_DIR/macros
echo "" >> $WORK_DIR/macros
}
@@ -648,25 +687,26 @@ configure_cdr() {
}
configure_call_filter() {
configure_call_filter_helper $1 "incoming"
echo "" >> $WORK_DIR/macros
configure_call_filter_helper $1 "outgoing"
echo "" >> $WORK_DIR/macros
local f=$1
configure_call_filter_helper "$f" "incoming"
echo "" >> $WORK_DIR/macros
configure_call_filter_helper "$f" "outgoing"
echo "" >> $WORK_DIR/macros
}
configure_call_filter_helper() {
local f=$1
local direction=$2
local block_outgoing
local block_incoming
[ "$#" -ge 2 ] || return
config_get block_outgoing $1 block_outgoing
config_get block_incoming $1 block_incoming
config_get block_outgoing "$f" block_outgoing
config_get block_incoming "$f" block_incoming
local direction=$2
[ "$direction" = "incoming" ] || [ "$direction" = "outgoing" ] || return
echo "[sub-$1-$direction]" >> $WORK_DIR/macros
echo "[sub-$f-$direction]" >> $WORK_DIR/macros
echo "exten => s,1,NoOp()" >> $WORK_DIR/macros
# Do nothing if blocking of outgoing calls is disabled
@@ -687,13 +727,13 @@ configure_call_filter_helper() {
local regexp cmd
local owner rule_extension rule_enabled
config_get owner $section owner
config_get owner "$section" owner
[ "$owner" = "$filter" ] || return
config_get rule_enabled $section enable "0"
config_get rule_enabled "$section" enable "0"
[ "$rule_enabled" != "0" ] || return
config_get rule_extension $section extension
config_get rule_extension "$section" extension
# Regular expression for matching calling or called number
regexp=$(echo "$rule_extension" | sed 's/#.*/\[0-9\]*/')
@@ -709,7 +749,7 @@ configure_call_filter_helper() {
echo "exten => s,n,$cmd" >> $WORK_DIR/macros
}
config_foreach configure_call_filter_rule "call_filter_rule_$direction" $1
config_foreach configure_call_filter_rule "call_filter_rule_$direction" "$f"
echo "exten => s,n,Return()" >> $WORK_DIR/macros
if [ "$direction" = "incoming" ] ; then
@@ -732,7 +772,7 @@ get_call_filter() {
fi
local call_filter
config_get call_filter $provider call_filter "call_filter0"
config_get call_filter "$provider" call_filter "call_filter0"
if [ -n "$call_filter" -a "$call_filter" != "-" ] ; then
macro="GoSub(sub-$call_filter-$direction,s,1)"
fi
@@ -740,12 +780,13 @@ get_call_filter() {
}
configure_opening_hours_profile() {
local p=$1
local invert label
echo "[sub-check-$1]" >> $WORK_DIR/macros
echo "[sub-check-$p]" >> $WORK_DIR/macros
echo "exten => s,1,NoOp()" >> $WORK_DIR/macros
config_get invert $1 invert
config_get invert "$p" invert
if [ "$invert" == "1" ] ; then
label="closed"
else
@@ -759,26 +800,26 @@ configure_opening_hours_profile() {
local owner
local t_range w_days m_days months
config_get owner $section owner
config_get owner "$section" owner
[ "$owner" = "$profile" ] || return
config_get t_range $section time_range
config_get w_days $section days_of_week
config_get m_days $section days_of_month
config_get months $section months
config_get t_range "$section" time_range
config_get w_days "$section" days_of_week
config_get m_days "$section" days_of_month
config_get months "$section" months
echo "exten => s,n,GotoIfTime($t_range,$w_days,$m_days,$months,?$label)" >> $WORK_DIR/macros
}
config_foreach configure_opening_timespan timespan $1
config_foreach configure_opening_timespan timespan "$p"
if [ "$invert" == "0" ] ; then
echo "exten => s,n,Goto(closed)" >> $WORK_DIR/macros
echo "exten => s,n,Goto(closed)" >> $WORK_DIR/macros
fi
echo "exten => s,n(open),Set(OPEN=1)" >> $WORK_DIR/macros
echo "exten => s,n(open),Set(OPEN=1)" >> $WORK_DIR/macros
echo "exten => s,n,Return()" >> $WORK_DIR/macros
echo "exten => s,n(closed),Set(OPEN=0)" >> $WORK_DIR/macros
echo "" >> $WORK_DIR/macros
echo "exten => s,n(closed),Set(OPEN=0)" >> $WORK_DIR/macros
echo "" >> $WORK_DIR/macros
}
configure_extensions() {
@@ -831,7 +872,7 @@ configure_extensions() {
echo "exten => $test_echo_extension,1,Echo()" >> $WORK_DIR/extensions_local
echo "exten => $test_echo_extension,n,Hangup()" >> $WORK_DIR/extensions_local
fi
if [ -n "$record_message" ] ; then
echo "exten => $record_message,1,Playback(beep)" >> $WORK_DIR/extensions_local
echo "exten => $record_message,n,Record(\"/usr/lib/asterisk/recordings/user-recording\${STRFTIME(\${EPOCH},,%C%y%m%d-%T)}.gsm\")" >> $WORK_DIR/extensions_local
@@ -842,6 +883,53 @@ configure_extensions() {
echo "" >> $WORK_DIR/extensions.conf
}
configure_line_selector() {
local line=$1
local selector
local provider
local enabled
local name
config_get enabled "$line" enable
[ "$enabled" = "1" ] || return
config_get selector "$line" selector
[ -n "$selector" ] || return
config_get provider "$line" provider
[ -n "$provider" ] || return
name="${provider}_${line}"
line_selectors="${line_selectors:+${line_selectors} }$name"
local wsec=$((dialoutmsec/1000))
# make extens for selecting provider
echo "[${name}]" >>$WORK_DIR/extensions.conf
echo "exten => _${selector}!,1, GotoIf(\${EXTEN:${#selector}}?${provider},\${EXTEN:${#selector}},1)" >>$WORK_DIR/extensions.conf
echo " same => n, WaitExten($wsec)" >>$WORK_DIR/extensions.conf
echo >>$WORK_DIR/extensions.conf
}
configure_extensions_outgoing_map() {
if [ -n "$clir_on" ] ; then
local wsec=$((dialoutmsec/1000))
echo "[clir]" >>$WORK_DIR/extensions.conf
echo "exten => _${clir_on}!,1, Set(CALLERID(num-pres)=prohib_not_screened)" >>$WORK_DIR/extensions.conf
echo " same => n, Set(CALLERID(name-pres)=prohib_not_screened)" >>$WORK_DIR/extensions.conf
echo " same => n, GotoIf(\${EXTEN:${#clir_on}}?,\${EXTEN:${#clir_on}},1)" >>$WORK_DIR/extensions.conf
echo " same => n, WaitExten($wsec)" >>$WORK_DIR/extensions.conf
echo >>$WORK_DIR/extensions.conf
fi
# get context and calling_featires of all extensions
config_foreach get_line_contexts extension
# add rule for each line selector
config_foreach configure_line_selector line
}
configure_voicemail_incoming() {
local line=$1
local boxnumber=$2
@@ -853,20 +941,21 @@ configure_voicemail_incoming() {
[ -n "$boxnumber" ] || return
config_get calling_features $line calling_features
[ -n "$calling_features" ] || return
config_get calling_features "$line" calling_features
[ -n "$calling_features" ] || return
config_get voice_mail_enable $calling_features voice_mail_enable
[ "$voice_mail_enable" = "1" ] || return
config_get voice_mail_enable "$calling_features" voice_mail_enable
[ "$voice_mail_enable" = "1" ] || return
config_get provider_l $line provider
[ "$provider_l" = "$provider" ] || return
config_get provider_l "$line" provider
[ "$provider_l" = "$provider" ] || return
echo "Enabling mailbox $boxnumber for IVR $boxnumber"
echo "exten => $provider,n,VoiceMail($boxnumber)" >> $file
echo "Enabling mailbox $boxnumber for IVR $boxnumber"
echo "exten => $provider,n,VoiceMail($boxnumber)" >> $file
}
configure_outgoing_prefix() {
local p=$1
local enabled
local maxdigits
local prefix
@@ -874,10 +963,10 @@ configure_outgoing_prefix() {
local pattern
local outgoing_ext
config_get enabled $1 prefixenable
config_get action $1 facilityaction
config_get prefix $1 prefixrange
config_get maxdigits $1 prefixmaxdigits
config_get enabled "$p" prefixenable
config_get action "$p" facilityaction
config_get prefix "$p" prefixrange
config_get maxdigits "$p" prefixmaxdigits
# prefixinfo without facilityaction is for outgoingcalls
[ "$enabled" = "1" ] && [ -z "$action" ] && [ -n "$prefix" ] || return
@@ -905,18 +994,16 @@ configure_extensions_provider() {
local displayname
local user
local custom_outgoing
local congestiontone
local maxnumdigits
local prefixfound
local speed_dial
local section
# check if SIP Provider is disabled
config_get enabled $provider enable "0"
config_get enabled "$provider" enable "0"
[ "$enabled" = "0" ] && return
# check that SIP Provider has a configured user
config_get user $provider user
config_get user "$provider" user
[ -z "$user" ] && return
get_speed_dial() {
@@ -924,8 +1011,8 @@ configure_extensions_provider() {
local tone
local number
config_get tone $section tone
config_get number $section number
config_get tone "$section" tone
config_get number "$section" number
tone=$(escape_sed "$tone")
number=$(escape_sed "$number")
@@ -937,7 +1024,7 @@ configure_extensions_provider() {
# add speed dial options
speed_dial=$(config_foreach get_speed_dial speed_dial)
config_get displayname $provider displayname "$user"
config_get displayname "$provider" displayname "$user"
config_get enabled custom_dialplan custom_outgoing_enable "0"
if [ "$enabled" = "0" ] ; then
custom_outgoing="NoOp()"
@@ -948,9 +1035,6 @@ configure_extensions_provider() {
# check call filters for outgoing calls
local call_filter_macro=$(get_call_filter $provider outgoing)
# set congestion tone (default to congestion)
config_get congestiontone sip_options congestiontone "congestion"
# create tempfile for outgoing, transfer and callforwarding contexts
cp $TEMPLATE_DIR/extensions_provider $WORK_DIR/extensions_provider
@@ -959,20 +1043,13 @@ configure_extensions_provider() {
# if no prefix info found set the default dialplan
if [ -z "$prefixfound" ] ; then
local outgoing_ext="exten => _[*#0-9].,1,\tSet(DIAL_EXTEN=$\{EXTEN:0:|MAXDIGITS|\})"
local outgoing_ext="exten => _[*#0-9].,1,\tSet(DIAL_EXTEN=$\{EXTEN:0:$maxnumdigits\})"
sed -i "/\[|PROVIDER|-outgoing\]/{n; a $outgoing_ext
}" $WORK_DIR/extensions_provider
fi
# setting of the numbering plan value
config_get maxnumdigits numberingplan maxnumdigits "15"
ast_conf_replace_esc "|MAXDIGITS|" "$maxnumdigits" $WORK_DIR/extensions_provider
#configure outgoing map
config_foreach configure_outgoingmap outgoing_map $provider $user
#set default to empty if not present
ast_conf_replace "|PROVIDER|" "" $WORK_DIR/extensions_provider
configure_provider_outgoingmap "$provider"
#common settings
ast_conf_replace_esc "|USERNAME|" "$user" $WORK_DIR/extensions_provider
@@ -982,6 +1059,16 @@ configure_extensions_provider() {
ast_conf_replace_esc "|DISPLAYNAME|" "$displayname" $WORK_DIR/extensions_provider
ast_conf_replace_esc "|CONGESTIONTONE|" "$congestiontone" $WORK_DIR/extensions_provider
ast_conf_replace_esc "|PROVIDER|" "$provider" $WORK_DIR/extensions_provider
#check if local extensions enabled
config_get enabled general local_extensions_enable "1"
if [ "$enabled" = "1" ] ; then
ast_conf_replace "|LOCAL_EXTENSIONS|" "include => local_extensions" $WORK_DIR/extensions_provider
else
ast_conf_replace "|LOCAL_EXTENSIONS|" "" $WORK_DIR/extensions_provider
fi
echo "" >> $WORK_DIR/extensions_provider
cat $WORK_DIR/extensions_provider >> $WORK_DIR/extensions.conf
@@ -1011,11 +1098,11 @@ configure_extensions_provider() {
# check if it is external call back
echo "exten => $1,n,GoSub(sub-$1-ccbs-external,s,1)" >> $tmp
# read a list of lines that should be dialled on incoming calls
config_get call_queue $provider call_queue
config_get call_ivr $provider call_ivr
config_get call_queue "$provider" call_queue
config_get call_ivr "$provider" call_ivr
#configure incomingmap details are present to set line
local line_list=$(config_foreach get_incomingmap_extensions incoming_map $provider)
local line_list=$(config_foreach get_incomingmap_lines incoming_map "$provider")
line_list=${line_list//$'\n'/&&}
if [ -z "$line_list" ] ; then
echo "exten => $1,n,Hangup()" >> $tmp
@@ -1050,96 +1137,113 @@ configure_extensions_provider() {
rm -f $tmp
}
get_map_line() {
local map=$1
local extension=$2
get_group_extensions() {
local group=$1
local enabled
local line
local group
local extension_list
local extensions
local ext
config_get enabled $map enable
[ "$enabled" = "1" ] || return
config_get line $map line
[ -n "$line" ] || return
config_get enabled $line enable
config_get enabled "$group" enable "1"
[ "$enabled" = "1" ] || return
config_get group $map extension
[ -n "$group" ] || return
config_get extension_list $group extensions
if [ -z "$extension_list" ]; then
config_get extensions "$group" extensions
if [ -z "$extensions" ]; then
for ext in $(db get hw.board.VoicePortOrder); do
extension_list=${extension_list}"$LINENAME${ext: -1},"
extensions="${extensions}$LINENAME${ext: -1},"
done
fi
for ext in ${extension_list//,/ } ; do
echo "$extensions"
}
get_extension_outgoing_line() {
local map=$1
local extension=$2
local type=$3
local enabled
local line
local group
local provider
local extensions
local ext
config_get enabled "$map" enable
config_get line "$map" line
config_get group "$map" extension
[ "$enabled" = "1" ] && [ -n "$line" ] && [ -n "$group" ] || return
config_get enabled "$line" enable
config_get provider "$line" provider
[ "$enabled" = "1" ] && [ -n "$provider" ] || return
extensions=$(get_group_extensions "$group")
for ext in ${extensions//,/ } ; do
[ "$ext" = "$extension" ] || continue
echo "$line"
[ "$type" = "PROVIDER" ] && echo "${provider}_${line}"
[ "$type" = "LINE" ] && echo "$line"
break;
done
}
get_line_providers() {
get_line_contexts() {
local extension=$1
local context
local feature
local lines
local line
local providers
local provider
local enabled
local user
lines=$(config_foreach get_map_line outgoing_map $extension | sort -u | xargs)
lines=$(config_foreach get_extension_outgoing_line outgoing_map "$extension" "LINE" | sort -u | xargs)
for line in $lines ; do
if [ -z "$calling_features" ] ; then
config_get calling_features $line calling_features
fi
[ -z "$features" ] && {
config_get feature "$line" calling_features
}
config_get provider $line provider
[ -z "$provider" ] || [ "$provider" = "-" ] && continue
[ -z "$context" ] && {
local provider
local enabled
local user
config_get enabled $provider enable
[ "$enabled" = "1" ] || continue
config_get provider "$line" provider
config_get user $provider user
[ -n "$user" ] || continue
[ -n "$provider" ] && [ "$provider" != "-" ] && {
config_get enabled "$provider" enable
config_get user "$provider" user
providers="${providers:+${providers} }${provider}"
[ "$enabled" = "1" ] && [ -n "$user" ] && {
context=$provider
}
}
}
[ -n "$feature" ] && [ -n "$context" ] && break
done
line_providers="${providers:-local_extensions}"
[ -n "$context" ] && line_contexts="${line_contexts:+${line_contexts} }|$extension|$context|"
[ -n "$feature" ] && line_features="${line_features:+${line_features} }|$extension|$feature|"
}
get_prefixinfo() {
local info=$1
local type=$2
local enabled
local action
local prefix
config_get enabled $info prefixenable
config_get enabled "$info" prefixenable
[ "$enabled" = "1" ] || return
config_get action $info facilityaction
config_get prefix $info prefixrange
[ "$type" = "EMERGENCY" ] && {
[ "$action" = "EMERGENCY" ] && emergency="$prefix"
return
}
[ "$type" = "FAC" ] || return
channel_fac="${channel_fac:+${channel_fac} }$prefix"
config_get action "$info" facilityaction
config_get prefix "$info" prefixrange
case $action in
EMERGENCY)
emergency="$prefix";
;;
CLIR_ACTIVATE)
clir_on="$prefix";
;;
CFU_ACTIVATE)
cfim_on="$prefix"
;;
@@ -1182,11 +1286,19 @@ get_prefixinfo() {
CALLRETURN)
call_return="$prefix"
;;
*)
return
;;
esac
# EMERGENCY prefix was not considered as FAC.
[ "$action" != "EMERGENCY" ] && channel_fac="${channel_fac:+${channel_fac} }$prefix"
}
#Set the features for each line
configure_feature_set() {
configure_line_feature_set() {
local line=$1
local featureset
local provider
local call_forward_unconditional
@@ -1197,20 +1309,6 @@ configure_feature_set() {
local cbbs_retrytime
local cbbs_waittime
local ccbs_enable
local cfim_on="cfimon"
local cfim_off="cfimoff"
local cfbs_on="cfbson"
local cfbs_off="cfbsoff"
local cfb_on="cfbon"
local cfb_off="cfboff"
local call_return="callreturn"
local redial="redial"
local cw_on="cwon"
local cw_off="cwoff"
local cw_status="cwstatus"
local dnd_on="dndon"
local dnd_off="dndoff"
local dnd_status="dndstatus"
local internal_service
local direct_dial
local do_not_disturb
@@ -1219,19 +1317,19 @@ configure_feature_set() {
local redial_enabled
#get the feature set frome extension
config_get featureset $1 calling_features
config_get provider $1 provider
config_get featureset "$line" calling_features
config_get provider "$line" provider
if [ -n "$featureset" ]; then
config_get call_forward_unconditional $featureset call_forward_unconditional
config_get call_forward_on_busy $featureset call_forward_on_busy
config_get call_forward_on_no_answer $featureset call_forward_on_no_answer
config_get ccbs_enable $featureset ccbs_enable
config_get callreturn_enabled $featureset callreturn_enable
config_get redial_enabled $featureset redial_enable
config_get internal_service $featureset internal_service
config_get do_not_disturb $featureset dnd_enable "0"
config_get mwi_enabled $featureset mwi_enable "0"
config_get call_forward_unconditional "$featureset" call_forward_unconditional
config_get call_forward_on_busy "$featureset" call_forward_on_busy
config_get call_forward_on_no_answer "$featureset" call_forward_on_no_answer
config_get ccbs_enable "$featureset" ccbs_enable
config_get callreturn_enabled "$featureset" callreturn_enable
config_get redial_enabled "$featureset" redial_enable
config_get internal_service "$featureset" internal_service
config_get do_not_disturb "$featureset" dnd_enable "0"
config_get mwi_enabled "$featureset" mwi_enable "0"
# load cbbs settings if enabled
cbbs_maxretry="0"
@@ -1240,18 +1338,12 @@ configure_feature_set() {
# load cbbs settings if enabled
if [ "$ccbs_enable" = "1" -a "$internal_service" = "1" ]; then
config_get cbbs_key $featureset cbbs_key
config_get cbbs_maxretry $featureset cbbs_maxretry
config_get cbbs_retrytime $featureset cbbs_retrytime
config_get cbbs_waittime $featureset cbbs_waittime
config_get cbbs_key "$featureset" cbbs_key
config_get cbbs_maxretry "$featureset" cbbs_maxretry
config_get cbbs_retrytime "$featureset" cbbs_retrytime
config_get cbbs_waittime "$featureset" cbbs_waittime
fi
# load featurecodes from prefixinfo
local channel_fac
config_foreach get_prefixinfo prefixinfo "FAC"
# Convert whitespace to commas
channel_fac=$(echo "$channel_fac" | tr -s ' ' ',')
ast_conf_replace_esc "|FAC|" "$channel_fac" $WORK_DIR/chan_telephony.conf
fi
@@ -1336,7 +1428,7 @@ configure_feature_set() {
if [ -n "$featureset" ]; then
# create direct dial extensions, if any are defined
config_get direct_dial $featureset direct_dial
config_get direct_dial "$featureset" direct_dial
if [ -z "$direct_dial" ] ; then
# Use global direct dial extensions instead
config_get direct_dial 'direct_dial' direct_dial
@@ -1412,23 +1504,23 @@ configure_tel_line_extension() {
local intenal_service
local mailbox
config_get number $extension extension_number
config_get enabled $extension enable
config_get number "$extension" extension_number
config_get enabled "$extension" enable
[ -n "$number" -a "$enabled" = "1" ] || return
config_get calling_features $extension calling_features
config_get calling_features "$extension" calling_features
if [ -n "$calling_features" ]; then
config_get ccbs_enable $calling_features ccbs_enable
config_get internal_service $calling_features internal_service
config_get ccbs_enable "$calling_features" ccbs_enable
config_get internal_service "$calling_features" internal_service
fi
# load cbbs settings if enabled
if [ -n "$calling_features" -a "$ccbs_enable" = "1" -a "$intenal_service" = "1" ] ; then
config_get cbbs_key $calling_features cbbs_key
config_get cbbs_maxretry $calling_features cbbs_maxretry
config_get cbbs_retrytime $calling_features cbbs_retrytime
config_get cbbs_waittime $calling_features cbbs_waittime
config_get cbbs_key "$calling_features" cbbs_key
config_get cbbs_maxretry "$calling_features" cbbs_maxretry
config_get cbbs_retrytime "$calling_features" cbbs_retrytime
config_get cbbs_waittime "$calling_features" cbbs_waittime
fi
cp $TEMPLATE_DIR/extensions_local_line $WORK_DIR/extensions_local_line
@@ -1444,7 +1536,7 @@ configure_tel_line_extension() {
ast_conf_replace_esc "|CONGESTIONTONE|" "$congestiontone" $WORK_DIR/extensions_local_line
# check for mailbox
config_get mailbox $extension mailbox
config_get mailbox "$extension" mailbox
local voicemail="NoOp()"
if [ -n "$mailbox" ] ; then
local boxnumber=$(mailbox_get_boxnumber $extension)
@@ -1459,14 +1551,15 @@ configure_tel_line_extension() {
}
configure_sip_user_extension() {
local u=$1
local enabled
local user
local extension
local mailbox
config_get enabled $1 enable "0"
config_get user $1 user
config_get extension $1 extension
config_get enabled "$u" enable "0"
config_get user "$u" user
config_get extension "$u" extension
[ "$enabled" = "0" ] && return
@@ -1478,11 +1571,11 @@ configure_sip_user_extension() {
echo "exten => $extension,n,GotoIf(\$[\"\${DIALSTATUS}\"=\"ANSWER\"]?endcall)" >> $WORK_DIR/extensions_local
# check for mailbox
config_get mailbox $1 mailbox
config_get mailbox "$u" mailbox
if [ -n "$mailbox" -a "$mailbox" != "-" ] ; then
local boxnumber=$(mailbox_get_boxnumber $mailbox)
if [ -n "$boxnumber" ] ; then
echo "Enabling mailbox $boxnumber for SIP User $1"
echo "Enabling mailbox $boxnumber for SIP User $u"
echo "exten => $extension,n,VoiceMail($boxnumber)" >> $WORK_DIR/extensions_local
fi
fi
@@ -1496,34 +1589,23 @@ configure_tel_options() {
local jbforce
local jbmaxsize
local jbimpl
local dialoutmsec
local fac
local echocancel
local hold_target_before_refer
local calleridtype
local tel_event_pt
local interdigitopenmsec
local minimumnumberdigits
local terminationdigit
local packet_loss_concealment
local flash_spec
local country
config_get jbenable tel_options jb_enable
config_get jbforce tel_options jb_force
config_get jbmaxsize tel_options jb_maxsize
config_get jbimpl tel_options jb_impl
config_get dialoutmsec numberingplan interdigitstdmsec "15000"
config_get echocancel tel_options echo_cancel
config_get hold_target_before_refer tel_options hold_target_before_refer
config_get calleridtype tel_options calleridtype
config_get tel_event_pt tel_options tel_event_pt "101"
config_get interdigitopenmsec numberingplan interdigitopenmsec "3000"
config_get minimumnumberdigits numberingplan minimumnumberdigits "1"
config_get terminationdigit numberingplan terminationdigit
config_get packet_loss_concealment tel_options packet_loss_concealment "1"
config_get flash_spec tel_options flash_spec
config_get country tel_options country "se"
if [ -n "$terminationdigit" ] ; then
sed -i "/|DIALOUTMSEC|/a terminationdigit =$(escape_sed "$terminationdigit")" $WORK_DIR/chan_telephony.conf
@@ -1566,10 +1648,13 @@ configure_tel_options() {
ast_conf_replace "|FLASH_SPEC|" "uk" $WORK_DIR/chan_telephony.conf
fi
local provider=$(echo "$line_contexts" | xargs -n1 | grep "|${LINENAME}0|" | cut -d'|' -f3)
[ -z "$provider" ] && provider=sip0
local codec_list
local codec
local codec_to_list
config_get codec_list sip0 "codecs"
config_get codec_list $provider "codecs"
if [ -z "$codec_list" ] ; then
codec_to_list="alaw,ulaw\\n"
@@ -1582,64 +1667,57 @@ configure_tel_options() {
ast_conf_replace_esc "|CODEC_LIST|" "$codec_to_list" $WORK_DIR/chan_telephony.conf
ast_conf_replace_esc "|LANGUAGE|" "$country" $WORK_DIR/chan_telephony.conf
ast_conf_replace_esc "|EMERGENCY_NUMBERS|" "$emergency" $WORK_DIR/chan_telephony.conf
}
configure_outgoingmap() {
local outgoingmap=$1
local line
local extension
local enabled
local provider
local user
configure_provider_outgoingmap() {
local provider=$1
local extensions
local lines
local line
local ext
config_get enabled $outgoingmap enable
[ "$enabled" = "1" ] || return
if [ -n "$clir_on" ] ; then
sed -i "/\[|PROVIDER|\]/{n; a include => clir
}" $WORK_DIR/extensions_provider
fi
config_get line $outgoingmap line
[ -n "$line" ] || return
# Include line selectors only on the provider which is context of an extension
extensions=$(echo "$line_contexts" | xargs -n1 | grep "|$provider|" | cut -d'|' -f2 | sort -u)
[ -n "$extensions" ] || return
config_get extension $outgoingmap extension
[ -n "$extension" ] || return
for ext in $extensions ; do
local ext_lines=$(config_foreach get_extension_outgoing_line outgoing_map "$ext" "PROVIDER")
config_get enabled $line enable
[ "$enabled" = "1" ] || return
lines="${lines:+${lines} }${ext_lines}"
done
config_get provider "line${line: -1}" provider
[ -n "$provider" ] || return
for line in $(echo $lines | xargs -n1 | sort -ru) ; do
local selector=$(echo "$line_selectors" | xargs -n1 | grep "$line")
#replace the values in the extensions_provider
config_get user $provider user
if [ -n "$user" -a "$user" = "$3" ]; then
ast_conf_replace_esc "|PROVIDER|" "$provider" $WORK_DIR/extensions_provider
fi
#check if local extensions enabled
config_get enabled general local_extensions_enable "1"
if [ "$enabled" = "1" ] ; then
ast_conf_replace "|LOCAL_EXTENSIONS|" "include => local_extensions" $WORK_DIR/extensions_provider
else
ast_conf_replace "|LOCAL_EXTENSIONS|" "" $WORK_DIR/extensions_provider
fi
}
[ -n "$selector" ] || continue
get_group_extensions() {
local group=$1
local extensions
local enabled
local ext
sed -i "/\[|PROVIDER|\]/{n; a include => $(escape_sed "$selector")
}" $WORK_DIR/extensions_provider
done
}
config_get extensions $group extensions
get_group_lines() {
local group=$1
local extensions
local enabled
local ext
[ -z "$extensions" ] && extensions=$(db get hw.board.VoicePortOrder)
extensions=$(get_group_extensions "$group")
for ext in ${extensions//,/ }; do
config_get enabled "extension${ext: -1}" enable
for ext in ${extensions//,/ }; do
config_get enabled "extension${ext: -1}" enable
[ "$enabled" = "1" ] && echo "TELCHAN\/${ext: -1}"
done
[ "$enabled" = "1" ] && echo "TELCHAN\/${ext: -1}"
done
}
get_incomingmap_extensions() {
get_incomingmap_lines() {
local map=$1
local sp=$2
local group
@@ -1647,67 +1725,68 @@ get_incomingmap_extensions() {
local enabled
local provider
config_get enabled $map enable
config_get enabled "$map" enable
[ "$enabled" = "1" ] || return
config_get line $map line #line0, line1 and etc.
config_get group $map extension #group1, group2 and etc.
config_get line "$map" line #line0, line1 and etc.
config_get group "$map" extension #group1, group2 and etc.
[ -n "$line" ] && [ -n "$group" ] || return
config_get enabled $line enable
config_get enabled "$line" enable
[ "$enabled" = "1" ] || return
config_get provider $line provider #sip0 or sip1
config_get provider "$line" provider #sip0 or sip1
[ -n "$provider" ] && [ "$provider" = "$sp" ] || return
get_group_extensions $group
get_group_lines "$group"
}
# Configure settings for individual line in chan_telephony.conf
configure_tel_line() {
local extension=$1
local name
local context
local enabled
local autodial
local autodial_timeout
local dialtone_timeout
local offhook_nu_timeout
local offhook_silence_timeout
local line_providers
local calling_features
local caller_id
local caller_id_enable
local caller_name_enable
local anonymous_call_enable
config_get enabled $extension enable "1"
config_get autodial $extension autodial
config_get autodial_timeout $extension autodial_timeout "60000"
config_get dialtone_timeout $extension dialtone_timeout "20000"
config_get offhook_nu_timeout $extension offhook_nu_timeout "60000"
config_get offhook_silence_timeout $extension offhook_silence_timeout "180000"
cp $TEMPLATE_DIR/tel_line $WORK_DIR/tel_line
config_get enabled "$extension" enable "1"
config_get name "$extension" name
config_get autodial "$extension" autodial
config_get autodial_timeout "$extension" autodial_timeout "60000"
config_get dialtone_timeout "$extension" dialtone_timeout "20000"
config_get offhook_nu_timeout "$extension" offhook_nu_timeout "60000"
config_get offhook_silence_timeout "$extension" offhook_silence_timeout "180000"
#configure the settings of sip context
get_line_providers $extension
ast_conf_replace_esc "|CONTEXT|" "${line_providers%% *}" $WORK_DIR/tel_line
context=$(echo "$line_contexts" | xargs -n1 | grep "|$extension|" | cut -d'|' -f3)
calling_features=$(echo "$line_features" | xargs -n1 | grep "|$extension|" | cut -d'|' -f3)
if [ -n "$calling_features" ]; then
config_get caller_id $extension extension_number
config_get anonymous_call_enable $calling_features anonymous_call_enable
config_get caller_id_enable $calling_features caller_id_enable
config_get caller_name_enable $calling_features caller_name_enable
config_get caller_id "$extension" extension_number
config_get anonymous_call_enable "$calling_features" anonymous_call_enable
config_get caller_id_enable "$calling_features" caller_id_enable
config_get caller_name_enable "$calling_features" caller_name_enable
fi
cp $TEMPLATE_DIR/tel_line $WORK_DIR/tel_line
ast_conf_replace_esc "|CONTEXT|" "${context:-local_extensions}" $WORK_DIR/tel_line
ast_conf_replace_esc "|CALLERIDENABLE|" "$caller_id_enable" $WORK_DIR/tel_line
ast_conf_replace_esc "|CALLERNAMEENABLE|" "$caller_name_enable" $WORK_DIR/tel_line
ast_conf_replace_esc "|ANONYMOUSCALLENABLE|" "$anonymous_call_enable" $WORK_DIR/tel_line
ast_conf_replace_esc "|CALLERID|" "$caller_id" $WORK_DIR/tel_line
ast_conf_replace_esc "|SECTION|" "$extension" $WORK_DIR/tel_line
ast_conf_replace_esc "|ENABLED|" "$enabled" $WORK_DIR/tel_line
ast_conf_replace_esc "|DIALTONE_EXTENSION_HINT|" "$1" $WORK_DIR/tel_line
ast_conf_replace_esc "|DIALTONE_EXTENSION_HINT|" "$extension" $WORK_DIR/tel_line
ast_conf_replace_esc "|AUTODIAL|" "$autodial" $WORK_DIR/tel_line
ast_conf_replace_esc "|AUTODIAL_TIMEOUT|" "$autodial_timeout" $WORK_DIR/tel_line
ast_conf_replace_esc "|DIALTONE_TIMEOUT|" "$dialtone_timeout" $WORK_DIR/tel_line
@@ -1715,18 +1794,21 @@ configure_tel_line() {
ast_conf_replace_esc "|OFFHOOK_SILENCE_TIMEOUT|" "$offhook_silence_timeout" $WORK_DIR/tel_line
ast_conf_replace_esc "|LINE_NAME|" "$LINENAME" $WORK_DIR/tel_line
echo >> $WORK_DIR/chan_telephony.conf
echo "; Configuration for line '$name'" >> $WORK_DIR/chan_telephony.conf
cat $WORK_DIR/tel_line >> $WORK_DIR/chan_telephony.conf
}
configure_voicemail() {
local line=$1
local extension
local enabled
local featureset
config_get featureset $1 calling_features
config_get featureset "$line" calling_features
[ -n "$featureset" ] || return
config_get enabled $featureset voice_mail_enable
config_get enabled "$featureset" voice_mail_enable
[ "$enabled" = "1" ] || return
config_get extension voicemail extension
@@ -1769,8 +1851,8 @@ configure_conference() {
local section=$1
local id enabled
config_get id $section id
config_get enabled $section enabled
config_get id "$section" id
config_get enabled "$section" enabled
[ "$enabled" = "1" ] || return
@@ -1793,16 +1875,17 @@ configure_conference() {
#Create an extension "hint" to allow dialtone to be set according to sip provider reg status
create_extensions_dialtone() {
local sip_provider
local e=$1
local provider
local enabled
config_get sip_provider $1 provider
[ -n "$sip_provider" -a "$sip_provider" != "-" ] || return
config_get provider "$e" provider
[ -n "$provider" -a "$provider" != "-" ] || return
config_get enabled $sip_provider enable
config_get enabled "$provider" enable
[ "$enabled" = "1" ] || return
echo "exten => $1,hint,PJSIP/$sip_provider" >> $WORK_DIR/extensions_dialtone
echo "exten => $e,hint,PJSIP/$provider" >> $WORK_DIR/extensions_dialtone
}
# Calculate a name for each $LINENAME line, depending on port type and number. The name is used to make UI look better.
@@ -1813,12 +1896,12 @@ set_line_name() {
local name name_ix ix
# Return if the line name exists
config_get name $tel_line name
config_get name "$tel_line" name
[ -n "$name" ] && return
# Delete non-existing lines from config and return
if [[ "$tel_line" =~ "^${LINENAME}[0-9]$" ]] && [ "$line_num" -ge "$maxlinenum" ] ; then
uci -q delete $VOICE_UCI_CONFIG.$tel_line
uci -q delete "$VOICE_UCI_CONFIG.$tel_line"
echo uci_modified
return
fi
@@ -1874,10 +1957,8 @@ configure_logger() {
}
configure_indications() {
local country
local country_code
config_get country tel_options country
country_code=$(escape_sed "$country" | tr 'A-Z' 'a-z')
ast_conf_replace "^country=.*" "country=${country_code}" $WORK_DIR/indications.conf
}
@@ -1928,15 +2009,56 @@ create_temp_files() {
echo "enabled = no" >> $file
}
configure_emergency_numbers() {
local emergency
# load common configs which are shared by more modules
ast_load_common_configs() {
config_foreach get_prefixinfo prefixinfo "EMERGENCY"
# tel_options
config_get country tel_options country "se"
ast_conf_replace_esc "|EMERGENCY_NUMBERS|" "$emergency" $WORK_DIR/chan_telephony.conf
# sip_options
config_get congestiontone sip_options congestiontone "congestion"
# numberingplan
config_get dialoutmsec numberingplan interdigitstdmsec "15000"
config_get interdigitopenmsec numberingplan interdigitopenmsec "3000"
config_get minimumnumberdigits numberingplan minimumnumberdigits "1"
config_get maxnumdigits numberingplan maxnumdigits "15"
config_get terminationdigit numberingplan terminationdigit
# load featurecodes from prefixinfo
config_foreach get_prefixinfo prefixinfo
channel_fac=$(echo "$channel_fac" | tr -s ' ' ',')
}
generate_asterisk_config_files() {
local line_contexts
local line_features
local line_selectors
local country
local emergency
local channel_fac
local cfim_on="cfimon"
local cfim_off="cfimoff"
local cfbs_on="cfbson"
local cfbs_off="cfbsoff"
local cfb_on="cfbon"
local cfb_off="cfboff"
local call_return="callreturn"
local redial="redial"
local cw_on="cwon"
local cw_off="cwoff"
local cw_status="cwstatus"
local dnd_on="dndon"
local dnd_off="dndoff"
local dnd_status="dndstatus"
local clir_on
local dialoutmsec
local interdigitopenmsec
local minimumnumberdigits
local maxnumdigits
local terminationdigit
local congestiontone
WORK_DIR=$(mktemp -p /tmp -d)
mkdir -p $ASTERISK_CONF_DIR
@@ -1973,21 +2095,21 @@ generate_asterisk_config_files() {
config_set "$CONFIG_SECTION" "$option" "$new_value"
config_get len "$CONFIG_SECTION" "${option}_LENGTH" 1
# remove the "invalid" value from the list
config_set "$CONFIG_SECTION" "${option}_LENGTH" $((len-1))
config_set "$CONFIG_SECTION" "${option}_LENGTH" "$((len-1))"
config_unset "$CONFIG_SECTION" "${option}_ITEM$len"
fi
}
# Load config file
echo "Loading UCI config $VOICE_UCI_CONFIG"
config_load $VOICE_UCI_CONFIG
config_load "$VOICE_UCI_CONFIG"
# Set line names according to board parameters and delete non-existing lines from $VOICE_UCI_CONFIG config
local maxlinenum=$(db get hw.board.VoicePorts)
local uci_modified=$(config_foreach set_line_name extension $maxlinenum)
local uci_modified=$(config_foreach set_line_name extension "$maxlinenum")
[ -n "$uci_modified" ] && {
uci_commit $VOICE_UCI_CONFIG
config_load $VOICE_UCI_CONFIG
uci_commit "$VOICE_UCI_CONFIG"
config_load "$VOICE_UCI_CONFIG"
}
# reset all uci callback functions to avoid issues in later config_load
@@ -1997,6 +2119,9 @@ generate_asterisk_config_files() {
echo "Create temporary files"
create_temp_files
# Load common configuations
ast_load_common_configs
# Call Detail Record
echo "Configuring CDR"
configure_cdr
@@ -2008,6 +2133,7 @@ generate_asterisk_config_files() {
# Dialplan
echo "Configuring extenstions"
configure_extensions
configure_extensions_outgoing_map
# SIP Provider
echo "Configuring global SIP options"
@@ -2016,7 +2142,6 @@ generate_asterisk_config_files() {
config_foreach configure_sip_provider sip_service_provider
config_foreach encrypt_password sip_service_provider
config_foreach configure_extensions_provider sip_service_provider
configure_emergency_numbers
# SIP User
echo "Configuring SIP users"
@@ -2029,7 +2154,7 @@ generate_asterisk_config_files() {
echo "Configuring telephony lines"
config_foreach configure_tel_line extension
config_foreach configure_tel_line_extension extension
config_foreach configure_feature_set line
config_foreach configure_line_feature_set line
config_foreach create_extensions_dialtone extension
# Voicemail
@@ -2081,3 +2206,52 @@ generate_asterisk_config_files() {
echo "Asterisk configuration files have been generated sucessfully"
}
add_default_extension() {
local port=$1
local type=$2
local name=$3
local group=$4
local extension="extension${port}"
local config="$VOICE_UCI_CONFIG.$extension"
uci batch <<-EOF
set $config='extension'
set $config.extension_number="${port}${port}${port}${port}"
set $config.name="$name"
set $config.type="$type"
set $config.enable='1'
set $config.calling_features='set1'
set $config.txgain='0'
set $config.rxgain='0'
set $config.comfort_noise='0'
set $config.echo_cancel='1'
set $group='group'
add_list $group.extensions=$extension
commit "$VOICE_UCI_CONFIG"
EOF
}
default_asterisk_config() {
local portNum=$(db get hw.board.VoicePorts)
local portOrder=$(db get hw.board.VoicePortOrder)
local portNames=$(db get hw.board.VoicePortNames)
local group="$VOICE_UCI_CONFIG.group1"
uci -q delete "$group.extensions"
for port in $(seq 1 "$portNum") ; do
local type=$(echo "$portOrder" | awk '{ print $p }' "p=$port")
local name=$(echo "$portNames" | awk '{ print $p }' "p=$port" | tr '_' ' ')
if [ "${type#*DECT}" != "$type" ]; then
type="dect"
else
type="fxs"
fi
add_default_extension "$(($port-1))" "$type" "$name" "$group"
done
}
Loading