icwmp/scripts/functions/voice_service
2013-10-03 13:08:06 +02:00

795 lines
28 KiB
Bash

#!/bin/sh
# Copyright (C) 2012 Luka Perkov <freecwmp@lukaperkov.net>
# Copyright (C) 2013 Inteno Broadband Technology AB
# Author Ahmed Zribi <ahmed.zribi@pivasoftware.com>
voice_service_save_instance_config() {
local i="$1" #line number
local j="$2" #line profile
local k="$3" #profile number
local line_name="$4"
local instances=""
t=1
while [ $t -lt $j ];do
if [ "$instances" != "" ];then
instances=$instances:"0"
else
instances="0"
fi
let t++
done
if [ "$instances" != "" ];then
instances=$instances:"$i"
else
instances="$i"
fi
while [ $t -lt $k ];do
instances=$instances:"0"
let t++
done
$UCI_SET voice_client.$line_name.instances="$instances"
$UCI_COMMIT
}
load_voice() {
local max_profile_number=`$UCI_SHOW voice_client|grep "voice_client.sip"|grep -v sip_service_provider|awk -F '.' '{print $2}'|sort -u|sed 's/sip//g'|sort -n|tail -1`
let max_profile_number++
for sip in `/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q show voice_client|grep "voice_client.sip"|grep -v sip_service_provider|awk -F '.' '{print $2}'|sort -u`;do
sip_number=`echo $sip|sed 's/sip//g'`
let profile_number=$sip_number+1
# Line
local line_number="0"
for line_name in `$UCI_SHOW voice_client|grep sip_account|grep sip$sip_number|awk -F '.' '{print$2}'`;do
let line_number++
if [ "`$UCI_GET voice_client.$line_name.instances`" = "" ];then
voice_service_save_instance_config "$line_number" "$profile_number" "$max_profile_number" "$line_name"
else
local instances=`$UCI_GET voice_client.$line_name.instances`
length=`echo $instances|tr -d -c [0-9] |wc -c`
new_length=`get_voice_profile_max_instance`
for r in `seq $length $new_length`;do
instances=$instances:0
done
$UCI_SET voice_client.$line_name.instances="$instances"
$UCI_COMMIT
instances=""
fi
done
done
}
# under InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}.
get_voice_profile_enable() {
local num="$1"
val=`$UCI_GET voice_client.sip$num.enabled`
if [ "$val" = "0" ]; then
val="Disabled"
else
val="Enabled"
fi
echo $val
}
set_voice_profile_enable() {
local num="$1"
local val="$2"
if [ "$val" = "Enabled" ]; then
val="1"
else
val="0"
fi
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.enabled="$val"
}
set_voice_profile_reset() {
local num="$1"
local val="$2"
if [ "$val" = "1" ];then
/etc/init.d/asterisk reload
fi
}
set_voice_profile_signaling_protocol() {
local num="$1"
local val="$2"
}
get_voice_profile_max_sessions() {
local num="$1"
local val=""
local number_line=`/usr/sbin/asterisk -rx "brcm show status"|grep "Subchannel:"|sort -u|wc -l`
local sub_channel=`/usr/sbin/asterisk -rx "brcm show status"|grep -c "Default context : sip$num"`
let val=$number_line*$sub_channel
echo $val
}
get_voice_profile_number_of_lines() {
local num="$1"
local val=""
val=`/usr/sbin/asterisk -rx "brcm show status"|grep -c "Default context : sip$num"`
echo $val
}
#under InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}.SIP.
set_sip_proxy_server() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.sip_proxy="$val"
}
set_sip_proxy_server_port() {
local num="$1"
local val="$2"
}
get_sip_proxy_server_transport() {
local num="$1"
local val=""
val=`/usr/sbin/asterisk -rx "sip show settings"|grep "Outbound transport"|awk -F' ' '{print $3}'`
echo $val
}
set_sip_proxy_server_transport() {
local num="$1"
local val="$2"
}
set_sip_registrar_server() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.host="$val"
}
set_sip_registrar_server_port() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.port="$val"
}
get_sip_registrar_server_transport() {
local num="$1"
local val=""
val=`/usr/sbin/asterisk -rx "sip show settings"|grep "Outbound transport"|awk -F' ' '{print $3}'`
echo $val
}
set_sip_registrar_server_transport() {
local num="$1"
local val="$2"
}
set_sip_user_agent_domain() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.domain="$val"
}
set_sip_user_agent_port() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.bindport="$val"
}
get_sip_user_agent_transport() {
local num="$1"
local val=""
val=`/usr/sbin/asterisk -rx "sip show settings"|grep "Allowed transports"|awk -F' ' '{print $3}'`
echo $val
}
set_sip_user_agent_transport() {
local num="$1"
local val="$2"
}
set_sip_outbound_proxy() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.outboundproxy="$val"
}
set_sip_outbound_proxy_port() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.outboundport="$val"
}
set_sip_organization() {
local num="$1"
local val="$2"
}
set_sip_registration_period() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.registertimeout="$val"
}
set_sip_invite_expires() {
local num="$1"
local val="$2"
}
set_sip_re_invite_expires() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.registertimeout="$val"
}
set_sip_register_expires() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.registertimeout="$val"
}
set_sip_registers_min_expires() {
local num="$1"
local val="$2"
}
set_sip_register_retry_interval() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.SIP.registertimeout="$val"
}
set_sip_inbound_auth() {
local num="$1"
local val="$2"
}
set_sip_inbound_auth_username() {
local num="$1"
local val="$2"
}
set_sip_inbound_auth_password() {
local num="$1"
local val="$2"
}
set_sip_x_002207_call_lines() {
local num="$1"
local val="$2"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.call_lines="$val"
}
#under InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}.Line.{i}.
get_line_enable() {
local num="$1"
local line_name="$2"
local line_num=""
local val=""
val=`$UCI_GET voice_client.sip$num.enabled 2> /dev/null`
let num=$num+1
line_num=`$UCI_GET voice_client.$line_name.instances|cut -d : -f$num`
if [ "$val" = "0" ]; then
val="Disabled"
else
val="Enabled"
fi
echo $val
}
set_line_enable() {
local num="$1"
local line_name="$2"
local val="$3"
if [ "$val" = "Enabled" ]; then
val="1"
else
val="0"
fi
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.enabled="$val"
}
set_line_directory_number() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.$line_name.extension="$val"
}
get_line_status() {
local num="$1"
local line_name="$2"
local val=""
val1="/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state get asterisk.sip$num.sip_registry_registered"
val2="/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q -P /var/state get asterisk.sip$num.sip_registry_request_sent"
if [ "$val1" = "yes" ];then
val="Up"
else
if [ "$val2" = "yes" ];then
val="Registering"
else
val="Disabled"
fi
fi
echo $val
}
get_line_call_state() {
local num="$1"
local line_name="$2"
local val=""
state=`/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -P /var/state -q get chan_brcm.$line_name.subchannel_0`
if [ "$state" = "ONHOOK" ];then
val="Idle"
elif [ "$state" = "OFFHOOK" ];then
val="Disconnecting"
elif [ "$state" = "DIALING" ];then
val="Calling"
elif [ "$state" = "INCALL" ];then
val="InCall"
elif [ "$state" = "RINGING" ];then
val="Ringing"
fi
echo $val
}
set_line_calling_features_caller_id_name() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.displayname="$val"
}
get_line_x_002207_line_profile() {
local num="$1"
local line_name="$2"
local val=""
let val=$num+1
echo $val
}
set_line_x_002207_line_profile() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
delete_line $line_name
i=`echo $line_name|sed 's/brcm//g'`
let sip_id=$val-1
add_line "$i" "$sip_id"
instance=`$UCI_GET voice_client.$line_name.instances|cut -f $val -d :`
if [ "$instance" = "0" ];then
max_line_instance=`$UCI_SHOW voice_client|grep instances|awk -F '=' '{print$2}'|cut -f $val -d:|sort -un|tail -1`
let instance=$max_line_instance+1
local j=0
for k in `$UCI_GET voice_client.$line_name.instances|sed 's/:/ /g'`;do
let j++
if [ "$j" != "$val" ];then
if [ "$instances" = "" ];then
instances=$k
else
instances=$instances:$k
fi
else
if [ "$instances" = "" ];then
instances=$instance
else
instances=$instances:$instance
fi
fi
done
$UCI_SET voice_client.$line_name.instances="$instances"
fi
call_lines=`$UCI_GET voice_client.sip$sip_id.call_lines`
if [ "$call_lines" != "" ];then
$UCI_SET voice_client.sip$sip_id.call_lines="$call_lines $i"
else
$UCI_SET voice_client.sip$sip_id.call_lines="$i"
fi
}
#under InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}.Line.{i}.SIP.
set_line_sip_username() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.authuser="$val"
}
set_line_sip_password() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
$UCI_SET voice_client.sip$num.secret="$val"
}
get_line_sip_uri() {
local num="$1"
local line_name="$2"
local domain=""
local username=""
domain=`$UCI_GET voice_client.sip$num.domain 2> /dev/null`
username=`$UCI_GET voice_client.sip$num.user 2> /dev/null`
echo "$username@$domain"
}
set_line_sip_uri() {
local num="$1"
local line_name="$2"
local val="$3"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
local authuser=${val%@*}
local domain=${val#*@}
if [ "$authuser" != "" -a "$domain" != "" ]; then
$UCI_SET voice_client.sip$num.user="$authuser"
$UCI_SET voice_client.sip$num.domain="$domain"
fi
}
# Global SET/GET functions
get_voice_service_max_profile() {
local val=`$UCI_SHOW voice_client|grep -c sip_service_provider`
let val=$val-1
eval "export -- \"$1=$val\""
}
get_voice_service_max_line() {
local val=`/usr/sbin/asterisk -rx "brcm show status"|grep -c "Line id"`
let val=$val-1
eval "export -- \"$1=$val\""
}
get_services_voice_service_generic() {
local profile_num="$1"
local sip_id="$2"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num." "1" "1"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Enable" "1" "get_voice_profile_enable $sip_id" "set_voice_profile_enable $sip_id \$val" "" "xsd:boolean"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Reset" "1" "echo 0" "set_voice_profile_reset $sip_id \$val" "" "xsd:boolean"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Name" "0" "$UCI_GET voice_client.sip$sip_id.name"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SignalingProtocol" "1" "echo SIP" "set_voice_profile_signaling_protocol $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.MaxSessions" "0" "get_voice_profile_max_sessions $sip_id" "" "" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.NumberOfLines" "0" "get_voice_profile_number_of_lines $sip_id" "" "" "xsd:unsignedInt"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP." "0" "1"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.ProxyServer" "1" "$UCI_GET voice_client.SIP.sip_proxy" "set_sip_proxy_server $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.ProxyServerPort" "1" "" "set_sip_proxy_server_port $sip_id \$val" "" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.ProxyServerTransport" "1" "get_sip_proxy_server_transport $sip_id" "set_sip_proxy_server_transport $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegistrarServer" "1" "$UCI_GET voice_client.sip$sip_id.host" "set_sip_registrar_server $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegistrarServerPort" "1" "$UCI_GET voice_client.sip$sip_id.port" "set_sip_registrar_server_port $sip_id \$val" "" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegistrarServerTransport" "1" "get_sip_registrar_server_transport $sip_id" "set_sip_registrar_server_transport $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.UserAgentDomain" "1" "$UCI_GET voice_client.sip$sip_id.domain" "set_sip_user_agent_domain $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.UserAgentPort" "1" "$UCI_GET voice_client.SIP.bindport" "set_sip_user_agent_port $sip_id \$val" "" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.UserAgentTransport" "1" "get_sip_user_agent_transport $sip_id" "set_sip_user_agent_transport $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.OutboundProxy" "1" "$UCI_GET voice_client.sip$sip_id.outboundproxy" "set_sip_outbound_proxy $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.OutboundProxyPort" "1" "$UCI_GET voice_client.sip$sip_id.outboundport" "set_sip_outbound_proxy_port $sip_id \$val" "" "xsd:unsignedInt"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.Organization" "1" "" "set_sip_organization $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegistrationPeriod" "1" "$UCI_GET voice_client.SIP.registertimeout" "set_sip_registration_period $sip_id \$val" "" "xsd:unsignedInt"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.InviteExpires" "1" "" "set_sip_invite_expires $sip_id \$val" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.ReInviteExpires" "1" "$UCI_GET voice_client.SIP.registertimeout" "set_sip_re_invite_expires $sip_id \$val" "" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegisterExpires" "1" "$UCI_GET voice_client.SIP.registertimeout" "set_sip_register_expires $sip_id \$val" "" "xsd:unsignedInt"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegistersMinExpires" "1" "" "set_sip_registers_min_expires $sip_id \$val" "xsd:unsignedInt"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.RegisterRetryInterval" "1" "$UCI_GET voice_client.SIP.registertimeout" "set_sip_register_retry_interval $sip_id \$val" "" "xsd:unsignedInt"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.InboundAuth" "1" "" "set_sip_inbound_auth $sip_id \$val"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.InboundAuthUsername" "1" "" "set_sip_inbound_auth_username $sip_id \$val"
# get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.InboundAuthPassword" "1" "" "set_sip_inbound_auth_password $sip_id \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.SIP.X_002207_CallLines" "1" "$UCI_GET voice_client.sip$sip_id.call_lines" "set_sip_x_002207_call_lines $sip_id \$val"
}
get_services_voice_service_line_generic() {
local profile_num="$1"
local sip_id="$2"
local line_num="$3"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num." "1" "1"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.Enable" "1" "get_line_enable $sip_id $line_name" "set_line_enable $sip_id $line_name \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.DirectoryNumber" "1" "$UCI_GET voice_client.$line_name.extension" "set_line_directory_number $sip_id $line_name \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.Status" "0" "get_line_status $sip_id $line_name" ""
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.CallState" "0" "get_line_call_state $sip_id $line_name" ""
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.CallingFeatures." "0"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.CallingFeatures.CallerIDName" "1" "$UCI_GET voice_client.sip$sip_id.displayname" "set_line_calling_features_caller_id_name $sip_id $line_name \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.X_002207_LineProfile" "1" "get_line_x_002207_line_profile $sip_id $line_name" "set_line_x_002207_line_profile $sip_id $line_name \$val"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.SIP." "0" "1"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.SIP.AuthUserName" "1" "$UCI_GET voice_client.sip$sip_id.authuser" "set_line_sip_auth_username $sip_id $line_name \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.SIP.AuthPassword" "1" "" "set_line_sip_password $sip_id $line_name \$val"
get_param_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.$profile_num.Line.$line_num.SIP.URI" "1" "get_line_sip_uri $sip_id $line_name" "set_line_sip_uri $sip_id $line_name \$val"
}
get_cache_InternetGatewayDevice_Services() {
local max_line
# load instance numbers
load_voice
get_voice_service_max_line max_line
get_object_cache_generic "InternetGatewayDevice.Services." "1" "0"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService." "1" "0"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1." "1" "0"
get_object_cache_generic "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile." "1" "0"
for sip_id in `$UCI_SHOW voice_client|grep "voice_client.sip"|grep -v sip_service_provider|awk -F '.' '{print $2}'|sed 's/sip//g'|sort -un`;do
let profile_num=$sip_id+1
get_services_voice_service_generic "$profile_num" "$sip_id"
# Line
for line_name in `$UCI_SHOW voice_client|grep sip_account|grep sip$sip_id$|awk -F'.' '{print$2}'`;do
line_id=`echo $line_name|sed 's/brcm//g'`
if [ $line_id -gt $max_line ];then
continue
fi
line_num=`$UCI_GET voice_client.$line_name.instances|cut -d : -f$profile_num`
get_services_voice_service_line_generic "$profile_num" "$sip_id" "$line_num"
done
done
}
get_voice_profile_max_instance() {
local max=`$UCI_SHOW voice_client|grep sip_service_provider|awk -F '.' '{print $2}'|awk -F '=' '{print $1}'|sed 's/sip//g'|sort -n|tail -1`
for i in `seq 0 $max`;do
if [ "`$UCI_GET voice_client.sip$i`" = "" ];then
let j=$i-1
echo $j
return 0
fi
done
if [ "$max" = "" ];then
echo -1
else
echo $max
fi
}
get_line_max_instance() {
local line_number=`/usr/sbin/asterisk -rx "brcm show status"|grep -c "Line id"`
for i in `seq 0 $line_number`;do
if [ "`$UCI_GET voice_client.brcm$i.sip_account`" = "-" ];then
echo $i
break
fi
done
}
add_voice_profile() {
local i="$1"
let j=$i+1
/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q batch << EOF 2>&1 >/dev/null
set voice_client.sip$i=sip_service_provider
set voice_client.sip$i.name='Account $j'
set voice_client.sip$i.enabled='0'
set voice_client.sip$i.codec0='ulaw'
set voice_client.sip$i.codec1='alaw'
set voice_client.sip$i.codec2='g729'
set voice_client.sip$i.codec3='g726'
set voice_client.sip$i.cfim_on='*21*'
set voice_client.sip$i.cfim_off='#21#'
set voice_client.sip$i.cfbs_on='*61*'
set voice_client.sip$i.cfbs_off='#61#'
set voice_client.sip$i.call_return='*69'
set voice_client.sip$i.redial='*66'
set voice_client.sip$i.cbbs_key='5'
set voice_client.sip$i.cbbs_maxretry='5'
set voice_client.sip$i.cbbs_retrytime='300'
set voice_client.sip$i.cbbs_waittime='30'
EOF
}
delete_voice_profile() {
local i="$1"
/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q delete voice_client.sip$i
}
add_line() {
local i="$1"
local j="$2"
/sbin/uci ${UCI_CONFIG_DIR:+-c $UCI_CONFIG_DIR} -q batch << EOF 2>&1 >/dev/null
set voice_client.brcm$i.sip_account="sip$j"
EOF
}
delete_line() {
local line_name="$1"
local call_lines_exist=""
sip_id=`$UCI_GET voice_client.$line_name.sip_account|sed 's/sip//g'`
line_id=`echo $line_name|sed 's/brcm//g'`
$UCI_SET voice_client.$line_name.sip_account='-'
call_lines_exist=`$UCI_GET voice_client.sip$sip_id.call_lines|wc -w`
if [ $call_lines_exist -gt 1 ];then
call_lines="`$UCI_GET voice_client.sip$sip_id.call_lines|sed "s/ *$line_id */ /g"`"
else
call_lines=""
fi
$UCI_SET voice_client.sip$sip_id.call_lines="$call_lines"
}
get_line_instances_list() {
local i=$1
local j=$1
local instances
let j--
for line in `$UCI_SHOW voice_client|grep sip_account|awk -F '.' '{print $2}'`;do
if [ "`$UCI_GET voice_client.$line.sip_account`" = "sip$j" ];then
local instance=`$UCI_GET voice_client.$line.instances|cut -f $i -d:`
if [ "$instance" != "0" ];then
instances="$instances $instance"
fi
fi
done
echo $instances
}
delete_associated_line_instances() {
local i=$1
for line in `$UCI_SHOW voice_client|grep sip_account|awk -F '.' '{print $2}'`;do
if [ "`$UCI_GET voice_client.$line.sip_account`" = "sip$i" ];then
$UCI_SET voice_client.$line.sip_account="-"
fi
done
}
add_object_InternetGatewayDevice_Services() {
local filename="$2"
case $1 in
InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.[1-9]*.Line.)
freecwmp_parse_formated_parameter "$1" "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}.Line." "rc" "num"
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
let sip_id=$num-1
local exist=`$UCI_GET voice_client.sip$sip_id`
if [ "$exist" = "" ];then
return $FAULT_CPE_INVALID_PARAMETER_NAME
fi
local i=`get_line_max_instance`
if [ "$i" = "" ];then
return $FAULT_CPE_RESOURCES_EXCEEDED
fi
add_line "$i" "$sip_id"
local instance=`$UCI_GET voice_client.brcm$i.instances|cut -f $num -d :`
if [ "$instance" = "0" ];then
max_line_instance=`$UCI_SHOW voice_client|grep instances|awk -F '=' '{print$2}'|cut -f $num -d:|sort -un|tail -1`
let instance=$max_line_instance+1
local j=0
for k in `$UCI_GET voice_client.brcm$i.instances|sed 's/:/ /g'`;do
let j++
if [ "$j" != "$num" ];then
if [ "$instances" = "" ];then
instances=$k
else
instances=$instances:$k
fi
else
if [ "$instances" = "" ];then
instances=$instance
else
instances=$instances:$instance
fi
fi
done
$UCI_SET voice_client.brcm$i.instances="$instances"
fi
call_lines=`$UCI_GET voice_client.sip$sip_id.call_lines`
if [ "$call_lines" != "" ];then
$UCI_SET voice_client.sip$sip_id.call_lines="$call_lines $i"
else
$UCI_SET voice_client.sip$sip_id.call_lines="$i"
fi
freecwmp_set_parameter_notification "$1$instance." "0"
$UCI_COMMIT
let profile_num=$sip_id+1
get_services_voice_service_line_generic "$profile_num" "$sip_id" "$instance" >> $cache_path/$filename
freecwmp_output "" "" "" "" "" "" "1" "$instance"
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
return $FAULT_CPE_NO_FAULT
;;
InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.)
local instance=`get_voice_profile_max_instance`
let instance++
add_voice_profile "$instance"
$UCI_COMMIT
let instance++
freecwmp_output "" "" "" "" "" "" "1" "$instance"
freecwmp_set_parameter_notification "$1$instance." "0"
get_services_voice_service_generic "$instance" "$sip_id" >> $cache_path/$filename
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
return $FAULT_CPE_NO_FAULT
;;
InternetGatewayDevice.Services.VoiceService.)
return $FAULT_CPE_RESOURCES_EXCEEDED
;;
esac
return $FAULT_CPE_INVALID_PARAMETER_NAME
}
delete_object_InternetGatewayDevice_Services() {
local param="$1"
local filename="$2"
local profile_object=${param%%Line.*}
freecwmp_parse_formated_parameter "$profile_object" "InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.{i}." "rc" "num"
if [ "$rc" != "0" ]; then return $FAULT_CPE_INVALID_PARAMETER_NAME; fi
let sip_id=$num-1
exist=`$UCI_GET voice_client.sip$sip_id`
if [ "$exist" = "" ];then
return $FAULT_CPE_INVALID_PARAMETER_NAME
fi
line_instances_list=`get_line_instances_list $num`
case $1 in
InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.[1-9]*.Line.[1-9]*.)
local num1=$num
freecwmp_parse_formated_parameter "${param#$profile_object}" "Line.{i}." "rc" "num"
local num2=$num
if [ $rc -eq 0 ];then
local l_inst_found=0
for line_instance in $line_instances_list;do
if [ "$line_instance" = "$num2" ];then
l_inst_found=1
break
fi
done
if [ "$l_inst_found" = "0" ];then
return $FAULT_CPE_INVALID_PARAMETER_NAME
fi
for line in `$UCI_SHOW voice_client|grep brcm|grep instances`;do
if [ "`echo $line|awk -F '=' '{print $2}'|cut -d: -f $num1`" = "$num2" ];then
line_name=`echo $line|awk -F '.' '{print $2}'`
break
fi
done
delete_line $line_name
$UCI_COMMIT
freecwmp_output "" "" "" "" "" "" "1"
sed -i "/$1/d" $cache_path/$filename
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
return $FAULT_CPE_NO_FAULT
fi
return $FAULT_CPE_INVALID_PARAMETER_NAME
;;
InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.[1-9]*.)
delete_voice_profile $sip_id
delete_associated_line_instances $sip_id
$UCI_COMMIT
freecwmp_output "" "" "" "" "" "" "1"
sed -i "/$1/d" $cache_path/$filename
delay_service_restart "voice_client" "5"
delay_service_restart "asterisk" "6"
return $FAULT_CPE_NO_FAULT
;;
esac
return $FAULT_CPE_INVALID_PARAMETER_NAME
}
get_dynamic_InternetGatewayDevice_Services() {
return $FAULT_CPE_NO_FAULT
}