X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=contrib%2Fpackage%2Fasterisk-xip%2Ffiles%2Fuci%2Fsipiaxconf;fp=contrib%2Fpackage%2Fasterisk-xip%2Ffiles%2Fuci%2Fsipiaxconf;h=0000000000000000000000000000000000000000;hb=39a48ea2699eeb51eefa8ed92de91258a04bc8a1;hp=eb88b7597a0325b124934033d769b57e76d11c7b;hpb=ce8855055915b91d6a388f9967c0244f8be8921b;p=project%2Fluci.git diff --git a/contrib/package/asterisk-xip/files/uci/sipiaxconf b/contrib/package/asterisk-xip/files/uci/sipiaxconf deleted file mode 100755 index eb88b7597..000000000 --- a/contrib/package/asterisk-xip/files/uci/sipiaxconf +++ /dev/null @@ -1,525 +0,0 @@ -#!/bin/sh -# Sip / IAX extensions - -# Add to internal extensions -add_extension() { - logdebug 1 "Adding $1/$2 extension to $3" - eval "local ext=\"\${dialplan_ext_$3}\"" - [ -z "${ext}" ] && append dialplan_exts "$3" " " - local lower=`echo $1|tr [A-Z] [a-z]` - eval "local ext=\"\${${lower}_last_extension}\"" - [ -z "${ext}" ] && eval "${lower}_last_extension=\"$3\"" - append dialplan_ext_$3 $1/${2} "&" -} - -check_append_local() { - local extension="${1}" - logdebug 3 "added local context for ${1}" - eval "local isadded=\"\${dialplan_add_local_${extension}-0}\"" - if [ "$isadded" != "1" ] ; then - logdebug 3 "Not added before - adding" - eval "dialplan_add_local_${extension}=1" - append dialplan_locals "$extension" - eval "dialplan_local_${1}_context=\"${2}\"" - eval "dialplan_local_${1}_selfmailbox=\"${3}\"" - eval "dialplan_local_${1}_mailbox=\"${4}\"" - eval "dialplan_local_${1}_displayname=\"${5}\"" - return 0 - else - return 1 - fi -} -append_dialplan_locals(){ - for i in ${dialplan_locals} ; do - local extension=$i - for x in context selfmailbox mailbox displayname ; do - eval "x_${x}=\${dialplan_local_${i}_${x}}" - done - local newcontext=local_${extension} - - if check_add_context ${newcontext} ; then - # add_dialplan_voice ${newcontext} ${x_last_extension} ${x_last_mailbox} - # Make sure as much is matched as possible - #add_dialplan_goto ${newcontext} _[0-9#*+]. ${x_last_context} - # add_dialplan_include ${newcontext} ${x_last_context} - - append_dialplan_context ${newcontext} "exten => ${match_all},1,Set(CALLERID(num)=${extension})" - local next=2 - if [ ! -z "${x_displayname}" ] ; then - append_dialplan_context ${newcontext} "exten => ${match_all},2,Set(CALLERID(name)=${x_displayname})" - local next=3 - fi - if [ ! -z "${x_mailbox}" ] ; then - [ "${x_selfmailbox}" = "yes" ] && append_dialplan_context ${newcontext} "exten => ${extension},${next},VoiceMailMain(${x_mailbox})" - [ ! -z "${dialplan_voiceboxext}" ] && append_dialplan_context ${newcontext} "exten => ${dialplan_voiceboxext},${next},VoiceMailMain(${x_mailbox})" - fi - append_dialplan_context ${newcontext} "exten => ${match_all},${next},Goto(${x_context},\${EXTEN},1)" - fi - done -} - -# Sip - -check_add_sipitems() { - if [ "${sip_doregister}" == "1" ] ; then - local line="register => ${sip_last_username}@${sip_last_fromdomain}:${sip_last_secret}:${sip_last_username}@${sip_sectionname}" - case ${sip_last_registerextension} in - -) line="$line/${sip_last_username}" ;; - .*) line="$line/${sip_last_registerextension}" ;; - esac - append sip_register "$line" "$N" - sip_doregister=0 - fi - do_check_add_items sip -} -check_add_iaxitems() { - do_check_add_items iax -} - -do_check_add_items(){ - - for i in type last_host last_context selfmailbox last_extension last_mailbox last_displayname ; do - eval "x_${i}=\"\${${1}_${i}-}\"" - done - - if [ ! -z "${x_last_context}" ] ; then - if [ ! -z "${x_last_extension}" ] ; then - [ "${x_last_context}" = "-" ] && eval "x_last_context=\"\${${1}_opt_context}\"" - check_append_local "${x_last_extension}" "${x_last_context}" "${x_selfmailbox}" "${x_last_mailbox}" "${x_last_displayname}" - x_last_context=local_${x_last_extension} - fi - if [ "${x_last_context}" != "-" ] ; then - append ${1}_sections "context=${x_last_context}" "$N" - fi - if [ "${x_type}" != "user" -a -z "${x_last_host}" ] ; then - append ${1}_sections "host=dynamic" "$N" - fi - fi - - for i in last_username last_fromdomain last_secret last_username \ - sectionname last_fromuser last_context last_extension last_mailbox \ - last_type last_host last_displayname ; do - eval unset $1_$i - done - - eval ${1}_selfmailbox=no - eval ${1}_last_registerextension=- -} - -reload_sip() { - astcmd "sip reload" - return 1 # reboot -} -unload_sip() astcmd "unload chan_sip.so" - -rtp_option_list="rtpstart rtpend rtpdtmftimeout rtcpinterval rtpchecksums" -# Validate RTP options -valid_rtp_option() { - is_in_list $1 ${rtp_option_list} -} - -# Validate sip options, depending on context. -valid_sipiax_option() { - local use_glob=1 - local use_glob_iax=1 - local use_glob_sip=1 - local use_user=1 - local use_peer=1 - local use_user_sip=1 - local use_user_iax=1 - local use_peer_sip=1 - local use_peer_iax=1 - case "$1" in - globalsip) - use_glob_sip=0 - use_glob=0 ;; - usersip) - use_glob_sip=0 - use_glob=0 - use_user=0 ;; - peersip|friendsip) - use_glob_sip=0 - use_glob=0 - use_user=0 - use_peer=0 - use_user_sip=0 - use_peer_sip=0 ;; - globaliax) - use_glob_iax=0 - use_glob=0 ;; - useriax) - use_glob_iax=0 - use_glob=0 - use_user=0 ;; - peeriax|friendiax) - use_glob_iax=0 - use_glob=0 - use_user=0 - use_peer=0 - use_user_iax=0 - use_peer_iax=0 ;; - esac - - case "$2" in - writeprotect|static) return ${use_glob_iax} ;; -# Integer - port|\ - maxexpirey|\ - rtptimeout|\ - rtpholdtimeout|\ - defaultexpirey|\ - registertimeout|\ - registerattempts|\ - call-limit) return ${use_glob_sip} ;; -# ip addr - bindaddr|\ - externip) return ${use_glob_sip} ;; -# net/mask - localnet) return ${use_glob_sip} ;; - permit|\ - deny) return ${use_user_sip} ;; -# Domain name - realm|\ - domain) return ${use_glob_sip} ;; -# valid context - context) return ${use_glob} ;; -# Mime type - notifymimetype) return ${use_glob_sip} ;; -# Yes/No - canreinvite) return ${use_glob} ;; - nat|allowoverlap|allowsubscribe|allowtransfer|\ - videosupport) return ${use_glob_sip} ;; - pedantic|\ - trustrpid|\ - promiscredir|\ - useclientcode) return ${use_user_sip} ;; -# Enums - dtmfmode) return ${use_glob_sip} ;; - type) return ${use_user} ;; - insecure|callingpres|\ - progressinband) return ${use_user_sip} ;; -# List - allow|\ - disallow) return ${use_glob_sip} ;; -# Register string - register) return ${use_glob_sip} ;; -# String - username|secret|md5secret|host|\ - mailbox) return ${use_user} ;; - auth) return ${use_user_iax} ;; - callgroup|pickupgroup|language|accountcode|\ - setvar|callerid|amaflags|subscribecontext|\ - maxcallbitrate|rfc2833compensate|\ - mailbox) return ${use_user_sip};; - template|fromdomain|regexten|fromuser|\ - qualify|defaultip|sendrpid|\ - outboundproxy) return ${use_peer_sip};; - extension) return 0;; - *) return 1;; - esac -} - -ast_add_conf sip -init_sipconf() { - ast_add_reload sip - ast_enable_type sipgeneral - ast_enable_type sip - ast_enable_type target - - sip_opt_port=5060 - sip_opt_bindaddr=0.0.0.0 - sip_opt_context=default - sip_opt_maxexpirey=3600 - sip_opt_defaultexpirey=3600 - sip_opt_notifymimetype=text/plain - sip_opt_rtptimeout=60 - sip_opt_rtpholdtimeout=300 - config_get WAN_IP wan ipaddr - # TODO check why the above does not work all the time - if [ -z "${WAN_IP}" ] ; then - config_get WAN_IF wan ifname - WAN_IP=$(ifconfig ${WAN_IF} | grep "inet addr:" | sed 's/^.*inet addr:\([^ ]*\) .*$/\1/') - fi - - sip_opt_externip=${WAN_IP} - - sip_opt_realm=asterisk - config_get LAN_MASK lan netmask - config_get LAN_IP lan ipaddr - local LAN_NET=$(/bin/ipcalc.sh $LAN_IP $LAN_MASK | grep NETWORK | cut -d= -f2) - sip_opt_localnet_def=$LAN_NET/$LAN_MASK - sip_opt_localip=${LAN_IP} - - # default to ulaw only - sip_opt_allow= - sip_opt_registertimeout=20 - sip_opt_registerattempts=10 - sip_opt_canreinvite=no - - sip_sections= -} - -sip_list="port bindaddr context maxexpirey defaultexpirey notifymimetype \ -rtptimeout rtpholdtimeout realm externip" - -create_sipconf() { - - append_dialplan_locals - - file=${DEST_DIR}/sip.conf - get_checksum sip_conf $file - local isempty=1 - if [ -z "${sip_sections}" ] ; then - rm -f $file - isempty=2 - else - [ -z "${sip_opt_domain}" ] && sip_opt_domain="domain=${sip_opt_realm}" - - echo "${asteriskuci_gen}[general]" > $file - echo "${sip_opt_domain}" >> "$file" - echo "domain=${sip_opt_localip}" >> "$file" - for i in ${sip_list} ; do - eval value=\$sip_opt_$i - [ ! -z "$value" ] && ( echo "$i=$value" >> $file ) - done - [ -z "${sip_opt_localnet}" ] && sip_opt_localnet="localnet=${sip_opt_localnet_def}" - echo "${sip_opt_localnet}" >> "${file}" - echo "disallow=all" >> $file - local rhs="${sip_opt_allow}" - [ -z "$rhs" ] && rhs=ulaw - while [ ! -z "$rhs" ] ; do - cur=${rhs%%,*} - nvar=${rhs#*,} - enable_format ${cur} - echo "allow=${cur}" >> $file - [ "$nvar" == "$rhs" ] && break - rhs=${nvar} - done - - echo "${N}${sip_register}${N}${N}${sip_sections}" >> $file - unset sip_register - unset sip_sections - fi - check_checksum "$sip_conf" "$file" || ast_sip_restart=$isempty -} - - -handle_sipgeneral() { - option_cb(){ - if [ "${1%_LENGTH}" = "${1}" ] ; then - local opt=${1%_ITEM*} - logdebug 4 "SipGeneral option ${opt} $2" - if valid_sipiax_option globalsip ${opt} "$2" ; then - case "${opt}" in - host) sip_opt_host="$2" - [ -z "${sip_opt_host}" ] && sip_opt_host=dynamic ;; - allow) append sip_opt_allow "$2" "," ;; - domain) split_append sip_opt_domain domain= "$2" "${N}" ;; - localnet) split_append sip_opt_localnet localnet= "$2" "${N}" ;; - *) eval "sip_opt_$1=\"\$2\"" ;; - esac - elif valid_rtp_option $1 "$2" ; then - eval "rtp_opt_$1=\"\$2\"" - else - logerror "Invalid SIP global option: $1" - fi - fi - } -} - -handle_sip() { - check_add sipitems - append sip_sections [$1] "$N$N" - enable_module chan_sip - sip_sectionname=${1#sip_} - sip_type=peer - sip_doregister=0 - sip_last_context=- - sip_last_doregister=- - sip_selfmailbox=no - option_cb() { - logdebug 3 "SIP/${sip_sectionname}: '$1' '$2'" - case $1 in - type) sip_type=$2 - append sip_sections "$1=$2" "$N" - ;; - register) [ "$2" == "yes" ] && sip_doregister=1 ;; - registerextension|displayname) eval sip_last_$1="$2";; - allow|allow_ITEM*) split_append sip_sections allow= "$2" "${N}" enable_format ;; - extension|extension_ITEM*) add_extension SIP ${sip_sectionname} "$2" ;; - - context) sip_last_context="$2" ;; - selfmailbox) sip_selfmailbox="$2" ;; - incoming|incoming_ITEM*) - add_incoming SIP ${sip_sectionname} "$2" ;; - timeout|prefix|internationalprefix|alwaysinternational|countrycode) - eval "target_$1_SIP_${sectionname}=\"$2\"" - ;; - *_LENGTH) ;; - _*) ;; - *) - eval sip_last_$1="$2" - local opt=${1%_ITEM*} - if valid_sipiax_option ${sip_type}sip ${opt} $2 ; then - append sip_sections "${opt}=$2" "$N" - else - logerror "Invalid SIP option for ${sip_type}: ${opt}" - fi - esac - } -} - -# rtp.conf - -ast_add_conf rtp -init_rtpconf() { - ast_add_reload rtp - rtp_opt_rtpstart=5000 - rtp_opt_rtpend=31000 - rtp_opt_rtpchecksums= - rtp_opt_rtpdtmftimeout= - rtp_opt_rtcpinterval=5000 -} - -create_rtpconf() { - file=${DEST_DIR}/rtp.conf - get_checksum rtp_conf $file - local isempty=1 - if module_enabled chan_sip ; then - echo "${asteriskuci_gen}[general]" > $file - for i in $rtp_option_list ; do - eval "local val=\"\$rtp_opt_$i\"" - if [ ! -z "$val" ] ; then - lhs=$i - case "$i" in - rtpdtmftimeout) lhs=dtmftimeout - esac - echo "$lhs=$val" >> $file - fi - done - else - rm -f $file - isempty=2 - fi - - check_checksum "$rtp_conf" "$file" || ast_rtp_restart=$isempty -} -reload_rtp() astcmd "rtp reload" -unload_rtp() astcmd "unload rtp" - - -# Iax - -ast_add_conf iax - -init_iaxconf() { - ast_add_reload iax - ast_enable_type iaxgeneral - ast_enable_type iax - - return 0 -} - -create_iaxconf() { - local file=$DEST_DIR/iax.conf - get_checksum iax_conf $file - local isempty=1 - if [ -z "${iax_sections}" ] ; then - rm -f $file - isempty=2 - else - echo "${asteriskuci_gen}${iax_general}$N$N${iax_sections}" > $file - fi - check_checksum "$iax_conf" "$file" || ast_iax_restart=${isempty} -} - -handle_iaxgeneral() { - iax_general="[general]" - option_cb() { - case $1 in - allow_LENGTH) ;; - allow|allow_ITEM*) split_append iax_general allow= "$2" "${N}" enable_format ;; - *) - if valid_sipiax_option globaliax $1 $2 ; then - eval "iax_opt_$1=\"$2\"" - append iax_general "$1=$2" "$N" - else - logerror "Invalid IAX global option: $1" - fi ;; - esac - } -} - -handle_iax() { - check_add iaxitems - iax_type=peer - iax_sectionname="${1#iax_}" - append iax_sections "[${iax_sectionname}]" "$N$N" - iax_last_context=- - iax_selfmailbox=no - enable_module chan_iax2 - option_cb() { - case $1 in - type) - iax_type=$2 - append iax_sections "type=$2" "$N" ;; - allow_LENGTH|incoming_LENGTH) ;; - allow|allow_ITEM*) - split_append iax_sections allow= "$2" "${N}" enable_format ;; - extension_LENGTH) ;; - extension|extension_ITEM*) add_extension IAX ${iax_sectionname} "$2" ;; - displayname) eval iax_last_$1="$2";; - context) - eval iax_last_context="$2" ;; - selfmailbox) - eval iax_selfmailbox="$2" ;; - incoming|incoming_ITEM*) - add_incoming IAX ${iax_sectionname} "$2" ;; - timeout|prefix|internationalprefix|alwaysinternational|countrycode) - eval "target_$1_IAX_${sectionname}=\"$2\"" ;; - *) - eval iax_last_$1="$2" - if valid_sipiax_option ${iax_type}iax $1 $2 ; then - append iax_sections "$1=$2" "$N" - else - logerror "Invalid IAX option for ${iax_type}: $1" - fi - esac - } -} - -reload_iax() { - astcmd "iax2 reload" - return 1 -} -unload_iax() astcmd "unload chan_iax2.so" - -handle_target() { - # Target name - if split_targettype targettype targetname "${1}" ; then - logdebug 4 "Handle target ${targettype}/${targetname} - ${1}" - handle_dialtarget "${targettype}" "${targetname}" - else - logerror "No target type specified for target $1" - fi -} - -# Set up options sip/iax targets for outgoing sip/iax -handle_dialtarget() { - # Dialzone target option - dt_areatype="$1" - dt_areaname="$2" - logdebug 1 "Dialzone Target for ${dt_areatype}/${dt_areaname}" - option_cb(){ - logdebug 3 "Option $1='$2' for dialzone target" - case $1 in - timeout|prefix|internationalprefix|alwaysinternational|countrycode) - eval "target_$1_${dt_areatype}_${dt_areaname}=\"$2\"" - ;; - *) - logerror "Invalid target for ${dt_areatype}/${dt_areaname}: ${1}" - esac - } -} - -# vim: ts=2 sw=2 noet foldmethod=indent