voice-client: Making voice-client scripts work for both Broadcom and Intel.

Ref: #345
This commit is contained in:
Kent Ekholm 2019-02-15 17:06:53 +01:00
parent ad25cf23a5
commit da63d95232
8 changed files with 218 additions and 92 deletions

View file

@ -6,3 +6,4 @@ event_log = no
console => |CONSOLE|
messages => |MESSAGES|
syslog.|SYSLOG_FACILITY| => |SYSLOG|
debug => debug,error,warning

View file

@ -6,6 +6,17 @@
#
. /lib/functions.sh
. /lib/functions/network.sh
if [ -e /proc/nvram ]; then
. /lib/voice/broadcom.sh
elif [ -n $(which fw_printenv) ] && [ $(fw_printenv -n uboot_version | sed 's/..*\(INTEL\)..*/\1/') = 'INTEL' ]; then
. /lib/voice/intel.sh
else
echo 'Warning: Could not detect platform'
echo 'Defaulting to Broadcom'
. /lib/voice/broadcom.sh
fi
HOOKS=/usr/lib/inithooks/voice_client
if [ -f "$HOOKS" ] ; then
. $HOOKS
@ -15,8 +26,8 @@ START=60
USE_PROCD=1
# Some global variables
SERIAL=$(cat /proc/nvram/SerialNumber)
BASEMAC=$(cat /proc/nvram/BaseMacAddr | sed 's/ //g')
SERIAL=$(getSerial)
BASEMAC=$(getBaseMAC)
MODULENAME=voice
USERAGENT="Inteno_${SERIAL}_${BASEMAC}"
@ -30,8 +41,8 @@ ASTERISKDIR=/etc/asterisk
WORKDIR=/tmp/$MODULENAME.$$
MD5SUMSFILE=/tmp/$MODULENAME-sums.$$
# Whitespace separated list of BRCM feature access codes
BRCM_FAC=
# Whitespace separated list of $(getChannelName) feature access codes
CHANNEL_FAC=
#TODO: go through templates, check usage
@ -80,8 +91,8 @@ TMPL_ACL=$TEMPLATEDIR/acl.conf.TEMPLATE
TMPL_CONFBRIDGE=$TEMPLATEDIR/confbridge.conf.TEMPLATE
TMPL_UDPTL=$TEMPLATEDIR/udptl.conf.TEMPLATE
TMPL_BRCM=$TEMPLATEDIR/brcm.conf.TEMPLATE
TMPL_BRCM_LINE=$TEMPLATEDIR/brcm_line.TEMPLATE
TMPL_CHANNEL=$TEMPLATEDIR/$(getLineName).conf.TEMPLATE
TMPL_CHANNEL_LINE=$TEMPLATEDIR/$(getLineName)_line.TEMPLATE
TMPL_MEETME=$TEMPLATEDIR/meetme.conf.TEMPLATE
@ -180,7 +191,7 @@ assemble_and_copy_config()
mv $WORKDIR/sip_registrations.tmp $WORKDIR/sip_registrations.conf
mv $WORKDIR/sip_providers.tmp $WORKDIR/sip_providers.conf
mv $WORKDIR/sip_users.tmp $WORKDIR/sip_users.conf
mv $WORKDIR/brcm.tmp $WORKDIR/brcm.conf
mv $WORKDIR/$(getLineName).tmp $WORKDIR/$(getLineName).conf
mv $WORKDIR/extensions.tmp $WORKDIR/extensions.conf
mv $WORKDIR/codecs.tmp $WORKDIR/codecs.conf
mv $WORKDIR/rtp.tmp $WORKDIR/rtp.conf
@ -251,7 +262,7 @@ read_codecs_ptime()
# in a Dial() command
#
# For backwards compatibility, if i is only a number (not prefixed by
# "SIP/" or "BRCM/") then add "BRCM/"
# "SIP/" or "CHANNEL/") then add "CHANNEL/"
#
read_lines()
{
@ -335,7 +346,7 @@ read_lines()
for i in $call_lines ; do
case $i in
''|*[!0-9]*) lines=$lines"$i&" ;;
*) lines=$lines"BRCM/$i&" ;;
*) lines=$lines"$(getChannelName)/$i&" ;;
esac
done
@ -1030,9 +1041,9 @@ configure_queue()
do
local out=""
re='^[0-9]+$'
num=${member#brcm}
num=${member#$(getLineName)}
if [ -z "${num##[0-9]*}" ] ; then
out="BRCM/$num"
out="$(getChannelName)/$num"
else
local sip_user
config_get sip_user $member user
@ -1159,7 +1170,7 @@ configure_cdr()
configure_call_filters()
{
local country
config_get country BRCM country
config_get country $(getChannelName) country
# Read the International Dialing Code and the Country Code from config
echo "Looking up IDC and CC for country $country"
@ -1437,7 +1448,7 @@ configure_extensions()
fi
if [ -n "$extension_all_ports" ] ; then
local all_lines="BRCM/0&BRCM/1&BRCM/2&BRCM/3&BRCM/4&BRCM/5&BRCM/6"
local all_lines=$(getAllLines)
echo "exten => $extension_all_ports,1,Dial($all_lines,,t)" >> $WORKDIR/extensions_local.tmp
echo "exten => $extension_all_ports,n,Hangup()" >> $WORKDIR/extensions_local.tmp
fi
@ -1465,7 +1476,7 @@ configure_extensions()
sed -i "s/|CLIR_FAC_SET|//" $WORKDIR/extensions.tmp
sed -i "s/|CLIR|/$clir/" $WORKDIR/extensions.tmp
sed -i "s/|CLIR_FAC_LEN|/${#clir}/" $WORKDIR/extensions.tmp
BRCM_FAC="$BRCM_FAC $clir."
CHANNEL_FAC="$CHANNEL_FAC $clir."
else
sed -i "s/|CLIR_FAC_SET|/;/" $WORKDIR/extensions.tmp
fi
@ -1724,9 +1735,9 @@ configure_extensions_provider()
}
#
# Create a local extension for a BRCM Line
# Create a local extension for a CHANNEL Line
#
configure_brcm_line_extension()
configure_tel_line_extension()
{
local line
local extension
@ -1736,8 +1747,9 @@ configure_brcm_line_extension()
local cbbs_retrytime
local cbbs_waittime
local mailbox
local line_name=$(getLineName)
line=${1:4}
line=${1:${#line_name}}
config_get extension $1 extension
if [ -z "$line" ] ; then
@ -1762,7 +1774,7 @@ configure_brcm_line_extension()
cp $TMPL_EXTENSIONS_LOCAL_LINE $WORKDIR/extensions_local_line.tmp
sed -i "s/|EXTEN|/$extension/g" $WORKDIR/extensions_local_line.tmp
sed -i "s/|LINE|/$line/g" $WORKDIR/extensions_local_line.tmp
sed -i "s/|LINE|/$(getLineIdx $line)/g" $WORKDIR/extensions_local_line.tmp
sed -i "s/|TIMEOUT|/$(get_voicemail_timeout)/g" $WORKDIR/extensions_local_line.tmp
#cbbs settings
@ -1835,16 +1847,16 @@ configure_codecs()
{
echo "Configuring codecs"
local genericplc
config_get genericplc BRCM genericplc
config_get genericplc $(getChannelName) genericplc
sed -i "s/|PLC|/$genericplc/" $WORKDIR/codecs.tmp
}
#
# Configure default settings for brcm.conf
# Configure default settings for $(getLineName).conf
#
configure_brcm()
configure_tel()
{
echo "Configuring BRCM"
echo "Configuring $(getChannelName)"
local jbenable
local jbforce
local jbmaxsize
@ -1853,43 +1865,44 @@ configure_brcm()
local dialoutmsec
local fac
config_get jbenable BRCM jbenable
config_get jbforce BRCM jbforce
config_get jbmaxsize BRCM jbmaxsize
config_get jbimpl BRCM jbimpl
config_get jbenable $(getChannelName) jbenable
config_get jbforce $(getChannelName) jbforce
config_get jbmaxsize $(getChannelName) jbmaxsize
config_get jbimpl $(getChannelName) jbimpl
config_get dtmfmode SIP dtmfmode
config_get dialoutmsec BRCM dialoutmsec
config_get fac BRCM fac
config_get dialoutmsec $(getChannelName) dialoutmsec
config_get fac $(getChannelName) fac
BRCM_FAC="$BRCM_FAC $fac"
CHANNEL_FAC="$CHANNEL_FAC $fac"
# Convert whitespace to commas
BRCM_FAC=$(echo $BRCM_FAC | sed -e 's/^ *//' -e 's/ *$//' | tr -s ' ' | tr ' ' ',')
CHANNEL_FAC=$(echo $CHANNEL_FAC | sed -e 's/^ *//' -e 's/ *$//' | tr -s ' ' | tr ' ' ',')
if [ -z "$dialoutmsec" ] ; then
dialoutmsec=4000
fi
sed -i "s/|JBENABLE|/$jbenable/" $WORKDIR/brcm.tmp
sed -i "s/|JBFORCE|/$jbforce/" $WORKDIR/brcm.tmp
sed -i "s/|JBMAXSIZE|/$jbmaxsize/" $WORKDIR/brcm.tmp
sed -i "s/|JBIMPL|/$jbimpl/" $WORKDIR/brcm.tmp
sed -i "s/|DIALOUTMSEC|/$dialoutmsec/" $WORKDIR/brcm.tmp
sed -i "s/|FAC|/$BRCM_FAC/" $WORKDIR/brcm.tmp
sed -i "s/|JBENABLE|/$jbenable/" $WORKDIR/$(getLineName).tmp
sed -i "s/|JBFORCE|/$jbforce/" $WORKDIR/$(getLineName).tmp
sed -i "s/|JBMAXSIZE|/$jbmaxsize/" $WORKDIR/$(getLineName).tmp
sed -i "s/|JBIMPL|/$jbimpl/" $WORKDIR/$(getLineName).tmp
sed -i "s/|DIALOUTMSEC|/$dialoutmsec/" $WORKDIR/$(getLineName).tmp
sed -i "s/|FAC|/$CHANNEL_FAC/" $WORKDIR/$(getLineName).tmp
sed -i "s/|CHANNELS|/$(db get hw.board.VoicePorts)/" $WORKDIR/$(getLineName).tmp
if [ "$dtmfmode" == "compatibility" ] ; then
dtmfcompatibility="1"
else
dtmfcompatibility="0"
fi
sed -i "s/|DTMFCOMPATIBILITY|/$dtmfcompatibility/" $WORKDIR/brcm.tmp
sed -i "s/|DTMFCOMPATIBILITY|/$dtmfcompatibility/" $WORKDIR/$(getLineName).tmp
}
#
# Configure settings for individual line in brcm.conf
# Configure settings for individual line in $(getLineName).conf
#
configure_brcm_line()
configure_tel_line()
{
echo "Configuring BRCM line $1"
echo "Configuring $(getChannelName) line $1"
local extension
local sip_provider
local codecs
@ -1935,30 +1948,30 @@ configure_brcm_line()
clir=0
fi
cp $TMPL_BRCM_LINE $WORKDIR/brcm_line.tmp
sed -i "s/|SECTION|/$1/" $WORKDIR/brcm_line.tmp
sed -i "s/|CALLERID|/$extension/g" $WORKDIR/brcm_line.tmp
sed -i "s/|CONTEXT|/$sip_provider/g" $WORKDIR/brcm_line.tmp
sed -i "s/|DIALTONE_EXTENSION_HINT|/$1/" $WORKDIR/brcm_line.tmp
sed -i "s/|AUTODIAL|/$autodial/" $WORKDIR/brcm_line.tmp
sed -i "s/|AUTODIAL_TIMEOUT|/$autodial_timeout/" $WORKDIR/brcm_line.tmp
sed -i "s/|DIALTONE_TIMEOUT|/$dialtone_timeout/" $WORKDIR/brcm_line.tmp
sed -i "s/|DTMFRELAY|/$dtmfmode/" $WORKDIR/brcm_line.tmp
sed -i "s/|CALLWAITING|/$callwaiting/" $WORKDIR/brcm_line.tmp
sed -i "s/|CLIR|/$clir/" $WORKDIR/brcm_line.tmp
cp $TMPL_CHANNEL_LINE $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|SECTION|/$1/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|CALLERID|/$extension/g" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|CONTEXT|/$sip_provider/g" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|DIALTONE_EXTENSION_HINT|/$1/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|AUTODIAL|/$autodial/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|AUTODIAL_TIMEOUT|/$autodial_timeout/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|DIALTONE_TIMEOUT|/$dialtone_timeout/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|DTMFRELAY|/$dtmfmode/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|CALLWAITING|/$callwaiting/" $WORKDIR/$(getLineName)_line.tmp
sed -i "s/|CLIR|/$clir/" $WORKDIR/$(getLineName)_line.tmp
#Configure BRCM line with codecs according to the SIP line settings
#Configure CHANNEL line with codecs according to the SIP line settings
# local is_fax
# config_get is_fax $sip_provider is_fax
# if [ -z "$is_fax" -o "$is_fax" = "1" ] ; then
# sed -i "s/|ALLOW|/allow = ulaw\nallow = alaw/" $WORKDIR/brcm_line.tmp
# sed -i "s/|ALLOW|/allow = ulaw\nallow = alaw/" $WORKDIR/$(getLineName)_line.tmp
# else
# sed -i "s/|ALLOW|/$(read_codecs $sip_provider)/" $WORKDIR/brcm_line.tmp
# sed -i "s/|ALLOW|/$(read_codecs $sip_provider)/" $WORKDIR/$(getLineName)_line.tmp
# fi
cat $WORKDIR/brcm_line.tmp >> $WORKDIR/brcm.tmp
rm -f $WORKDIR/brcm_line.tmp
cat $WORKDIR/$(getLineName)_line.tmp >> $WORKDIR/$(getLineName).tmp
rm -f $WORKDIR/$(getLineName)_line.tmp
}
#
@ -2057,14 +2070,16 @@ pbx_fix_ownership()
}
#
# Calculate a name for each brcm line, depending on port type
# Calculate a name for each $(getLineName) line, depending on port type
# and number. The name is used to make UI look better.
#
set_line_name()
{
local maxlinenum=$2
local curname name_ix ix item lnum
local brcm_line=$1
local line_name=$(getLineName)
line=${1:${#line_name}}
# delete non-existing lines from config #
case $brcm_line in
@ -2150,11 +2165,11 @@ start_service() {
config_load voice_client
########################################################
# Set line names according to whats reported by brcminfo
# Set line names according to board parameters
# and delete non-existing lines from voice_client config
########################################################
local maxlinenum=$(db get hw.board.VoicePorts)
config_foreach set_line_name brcm_line $maxlinenum
config_foreach set_line_name $(getLineName)_line $maxlinenum
uci_commit voice_client
#######################################
@ -2167,7 +2182,7 @@ start_service() {
cp $TMPL_SIP $WORKDIR/sip.tmp
cp $TMPL_RTP $WORKDIR/rtp.tmp
cp $TMPL_STUN $WORKDIR/res_stun_monitor.tmp
cp $TMPL_BRCM $WORKDIR/brcm.tmp
cp $TMPL_CHANNEL $WORKDIR/$(getLineName).tmp
cp $TMPL_CODECS $WORKDIR/codecs.tmp
cp $TMPL_VOICEMAIL $WORKDIR/voicemail.tmp
cp $TMPL_DNSMGR $WORKDIR/dnsmgr.tmp
@ -2211,12 +2226,12 @@ start_service() {
config_foreach configure_sip_user_extension sip_user
#####################
# BRCM configuration
# CHANNEL configuration
#####################
configure_brcm
config_foreach configure_brcm_line brcm_line
config_foreach configure_brcm_line_extension brcm_line
config_foreach create_extensions_dialtone brcm_line
configure_tel
config_foreach configure_tel_line $(getLineName)_line
config_foreach configure_tel_line_extension $(getLineName)_line
config_foreach create_extensions_dialtone $(getLineName)_line
configure_codecs
###########################
@ -2291,7 +2306,7 @@ reload_service() {
sleep 1
asterisk -rx "core reload"
asterisk -rx "dialplan reload"
asterisk -rx "brcm reload"
asterisk -rx "$(getLineName) reload"
}
service_triggers() {

View file

@ -1,5 +1,15 @@
#!/bin/sh
if [ -e /proc/nvram ]; then
. /lib/voice/broadcom.sh
elif [ -n $(which fw_printenv) ] && [ $(fw_printenv -n uboot_version | sed 's/..*\(INTEL\)..*/\1/') = 'INTEL' ]; then
. /lib/voice/intel.sh
else
echo 'Warning: Could not detect platform'
echo 'Defaulting to Broadcom'
. /lib/voice/broadcom.sh
fi
uci -q get voice_client.call_filter0 >/dev/null || {
uci -q batch <<-EOT
@ -27,24 +37,24 @@ EOT
}
# Default Broadcom phone volume for Iopsys 4.
# Default phone volume for Iopsys 4.
uci -q batch <<-EOT
set voice_client.brcm0.txgain=4
set voice_client.brcm0.rxgain=4
set voice_client.brcm1.txgain=4
set voice_client.brcm1.rxgain=4
set voice_client.brcm2.txgain=4
set voice_client.brcm2.rxgain=4
set voice_client.brcm3.txgain=4
set voice_client.brcm3.rxgain=4
set voice_client.brcm4.txgain=4
set voice_client.brcm4.rxgain=4
set voice_client.brcm5.txgain=4
set voice_client.brcm5.rxgain=4
set voice_client.brcm6.txgain=4
set voice_client.brcm6.rxgain=4
set voice_client.brcm7.txgain=4
set voice_client.brcm7.rxgain=4
set voice_client.$(getLineName)0.txgain=4
set voice_client.$(getLineName)0.rxgain=4
set voice_client.$(getLineName)1.txgain=4
set voice_client.$(getLineName)1.rxgain=4
set voice_client.$(getLineName)2.txgain=4
set voice_client.$(getLineName)2.rxgain=4
set voice_client.$(getLineName)3.txgain=4
set voice_client.$(getLineName)3.rxgain=4
set voice_client.$(getLineName)4.txgain=4
set voice_client.$(getLineName)4.rxgain=4
set voice_client.$(getLineName)5.txgain=4
set voice_client.$(getLineName)5.rxgain=4
set voice_client.$(getLineName)6.txgain=4
set voice_client.$(getLineName)6.rxgain=4
set voice_client.$(getLineName)7.txgain=4
set voice_client.$(getLineName)7.rxgain=4
commit voice_client
EOT

View file

@ -1,12 +1,22 @@
#! /bin/sh
if [ -e /proc/nvram ]; then
. /lib/voice/broadcom.sh
elif [ -n $(which fw_printenv) ] && [ $(fw_printenv -n uboot_version | sed 's/..*\(INTEL\)..*/\1/') = 'INTEL' ]; then
. /lib/voice/intel.sh
else
echo 'Warning: Could not detect platform'
echo 'Defaulting to Broadcom'
. /lib/voice/broadcom.sh
fi
if [ $2 != '?' ]; then
for brcm in `uci show voice_client | grep brcm | grep $1 | cut -d . -f 2`; do
sed -i "/\[$brcm\]/,/^\[/ s/\(callwaiting=\)[0-9]/\1$2/" /etc/asterisk/brcm.conf
for tel_line in `uci show voice_client | grep $(getLineName) | grep $1 | cut -d . -f 2`; do
sed -i "/\[$tel_line\]/,/^\[/ s/\(callwaiting=\)[0-9]/\1$2/" /etc/asterisk/$(getLineName).conf
done
else
for brcm in `uci show voice_client | grep brcm | grep $1 | cut -d . -f 2`; do
status=`sed -n "/\[$brcm\]/,/^\[/ s/callwaiting=\([0-9]\)/\1/p" /etc/asterisk/brcm.conf`
for tel_line in `uci show voice_client | grep $(getLineName) | grep $1 | cut -d . -f 2`; do
status=`sed -n "/\[$tel_line\]/,/^\[/ s/callwaiting=\([0-9]\)/\1/p" /etc/asterisk/$(getLineName).conf`
echo $status
exit 0
done

View file

@ -0,0 +1,29 @@
#! /bin/sh
getChipVendor() {
echo broadcom
}
getChannelName() {
echo BRCM
}
getLineName() {
echo brcm
}
getSerial() {
echo $(cat /proc/nvram/SerialNumber)
}
getBaseMAC() {
echo =$(cat /proc/nvram/BaseMacAddr | sed 's/ //g')
}
getAllLines() {
echo "BRCM/0&BRCM/1&BRCM/2&BRCM/3&BRCM/4&BRCM/5&BRCM/6"
}
getLineIdx() {
echo $1
}

View file

@ -0,0 +1,41 @@
#! /bin/sh
getChipVendor() {
echo intel
}
getChannelName() {
echo TAPI
}
getLineName() {
echo intel
}
getSerial() {
sernum=$(fw_printenv -n serial_number)
if [ $? ]; then
echo 0
else
echo $sernum
fi
}
getBaseMAC() {
echo $(fw_printenv -n ethaddr)
}
getAllLines() {
echo "TAPI/1&TAPI/2&TAPI/3&TAPI/4&TAPI/5&TAPI/6"
}
getLineIdx() {
echo $((1+1))
}
sed -i \
-e 's/brcm/lantiq/g' \
-e 's/BRCM/TAPI/g' \
-e 's/broadcom/lantiq/g' \
/etc/config/voice_client

View file

@ -23,6 +23,16 @@
# ./cbbs.sh BRCM 0 4444 BRCM/4 5 300 45
#####################################################
if [ -e /proc/nvram ]; then
. /lib/voice/broadcom.sh
elif [ -n $(which fw_printenv) ] && [ $(fw_printenv -n uboot_version | sed 's/..*\(INTEL\)..*/\1/') = 'INTEL' ]; then
. /lib/voice/intel.sh
else
echo 'Warning: Could not detect platform'
echo 'Defaulting to Broadcom'
. /lib/voice/broadcom.sh
fi
#Create temporary file
tempfile=$(mktemp)
@ -31,7 +41,7 @@ echo "Channel: $1/$2/$3" >> $tempfile
echo "MaxRetries: $5" >> $tempfile
echo "RetryTime: $6" >> $tempfile
echo "WaitTime: $7" >> $tempfile
echo "Set: BRCMLINE=$4" >> $tempfile
echo "Set: $(getChannelName)LINE=$4" >> $tempfile
#On answer
echo "Context: cbbs" >> $tempfile

View file

@ -2,6 +2,16 @@
. /usr/share/libubox/jshn.sh
if [ -e /proc/nvram ]; then
. /lib/voice/broadcom.sh
elif [ -n $(which fw_printenv) ] && [ $(fw_printenv -n uboot_version | sed 's/..*\(INTEL\)..*/\1/') = 'INTEL' ]; then
. /lib/voice/intel.sh
else
echo 'Warning: Could not detect platform'
echo 'Defaulting to Broadcom'
. /lib/voice/broadcom.sh
fi
case "$1" in
list)
echo '{ "status" : {}, "lines" : {}, "codecs" : {}, "call_log" : {} }'
@ -48,8 +58,8 @@ case "$1" in
done
json_select ..
json_add_object "brcm"
for line in $(uci show voice_client | grep brcm_line | awk -F[.,=] '{print$2}'); do
json_add_object "$(getLineName)"
for line in $(uci show voice_client | grep $(getLineName)_line | awk -F[.,=] '{print$2}'); do
json_add_object "$line"
linestate="ONHOOK"
linenum=${line:4}
@ -66,7 +76,7 @@ case "$1" in
;;
lines)
subchannels=$(asterisk -x 'brcm show status' 2>/dev/null | grep Subchannel | sort -u | wc -l)
subchannels=$(asterisk -x "$(getLineName) show status" 2>/dev/null | grep Subchannel | sort -u | wc -l)
[ $subchannels -eq 0 ] && subchannels=2
json_init
json_add_int num_subchannels $subchannels