mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
709 lines
18 KiB
709 lines
18 KiB
#
|
|
# control tool for maintaining Kamailio
|
|
#
|
|
#===================================================================
|
|
|
|
##### ----------------------------------------------- #####
|
|
### path to useful tools
|
|
locate_tool() {
|
|
TOOLPATH=""
|
|
while [ -n "$1" ]
|
|
do
|
|
if [ -x /usr/bin/which ] ; then
|
|
TOOLPATH=`which $1`
|
|
if [ -n "$TOOLPATH" ]; then
|
|
return
|
|
fi
|
|
fi
|
|
# look in common locations
|
|
if [ -x "/usr/bin/$1" ] ; then
|
|
TOOLPATH="/usr/bin/$1"
|
|
return
|
|
fi
|
|
if [ -x "/bin/$1" ] ; then
|
|
TOOLPATH="/bin/$1"
|
|
return
|
|
fi
|
|
if [ -x "/usr/local/bin/$1" ] ; then
|
|
TOOLPATH="/usr/local/bin/$1"
|
|
return
|
|
fi
|
|
shift
|
|
done
|
|
return
|
|
}
|
|
|
|
if [ -z "$EGREP" ] ; then
|
|
locate_tool egrep
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
echo "error: 'egrep' tool not found: set EGREP variable to correct tool path"
|
|
exit
|
|
fi
|
|
EGREP="$TOOLPATH"
|
|
fi
|
|
if [ -z "$AWK" ] ; then
|
|
locate_tool awk
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
echo "error: 'awk' tool not found: set AWK variable to correct tool path"
|
|
exit
|
|
fi
|
|
AWK="$TOOLPATH"
|
|
fi
|
|
if [ -z "$GDB" ] ; then
|
|
locate_tool gdb
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
GDB=""
|
|
# echo "error: 'gdb' tool not found: set GDB variable to correct tool path"
|
|
# exit
|
|
else
|
|
GDB="$TOOLPATH"
|
|
fi
|
|
fi
|
|
if [ -z "$MD5" ]; then
|
|
locate_tool md5sum md5
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
echo "error: 'md5sum' or 'md5' tool not found: set MD5 variable to correct tool path"
|
|
exit
|
|
fi
|
|
MD5="$TOOLPATH"
|
|
fi
|
|
if [ -z "$LAST_LINE" ] ; then
|
|
locate_tool tail
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
echo "error: 'tail' tool not found: set LAST_LINE variable to correct tool path"
|
|
exit
|
|
fi
|
|
LAST_LINE="$TOOLPATH -n 1"
|
|
fi
|
|
if [ -z "$EXPR" ] ; then
|
|
locate_tool expr
|
|
if [ -z "$TOOLPATH" ] ; then
|
|
# now error, but we can look for alternative names if it is the case
|
|
echo "error: 'expr' tool not found: set EXPR variable to correct tool path"
|
|
exit
|
|
fi
|
|
EXPR="$TOOLPATH"
|
|
fi
|
|
|
|
##### ------------------------------------------------ #####
|
|
### configuration for starting/stopping kamailio
|
|
if [ -z "$PID_FILE" ] ; then
|
|
PID_FILE=/var/run/kamailio.pid
|
|
fi
|
|
if [ -z "$SYSLOG" ] ; then
|
|
SYSLOG=1 # 0=output to console, 1=output to syslog
|
|
fi
|
|
if [ -z "$STARTOPTIONS" ] ; then
|
|
STARTOPTIONS= # for example -dddd
|
|
fi
|
|
if [ -z "$DIR" ] ; then
|
|
DIR=`dirname $0`
|
|
fi
|
|
if [ -z "$OSERBIN" ] ; then
|
|
OSERBIN=$DIR/kamailio
|
|
fi
|
|
|
|
##### ------------------------------------------------ #####
|
|
### aliases configuration
|
|
#
|
|
ENABLE_ALIASES=0
|
|
if [ "$ALIASES_TYPE" = "UL" ] ; then
|
|
ENABLE_ALIASES=1
|
|
else
|
|
if [ "$ALIASES_TYPE" = "DB" ] ; then
|
|
ENABLE_ALIASES=2
|
|
fi
|
|
fi
|
|
|
|
##### ------------------------------------------------ #####
|
|
### ACL name verification
|
|
if [ -z "$VERIFY_ACL" ] ; then
|
|
VERIFY_ACL=1
|
|
fi
|
|
if [ -z "$ACL_GROUPS" ] ; then
|
|
ACL_GROUPS="local ld int voicemail free-pstn"
|
|
fi
|
|
|
|
##### ----------------------------------------------- #####
|
|
#### Defined values
|
|
ALL_METHODS=4294967295
|
|
USERNAME_RE="[-a-zA-Z0-9&=\+\$,;\?/_\.\!~\*'\(\)]+"
|
|
|
|
##### ----------------------------------------------- #####
|
|
#### database tables for SQL databases and DBTEXT
|
|
|
|
SRDB_LOAD_SER=$((1 << 0)) # The row should be loaded by SER
|
|
SRDB_DISABLED=$((1 << 1)) # The row is disabled
|
|
SRDB_CANON=$((1 << 2)) # Canonical entry (domain or uri)
|
|
SRDB_IS_TO=$((1 << 3)) # The URI can be used in To
|
|
SRDB_IS_FROM=$((1 << 4)) # The URI can be used in From
|
|
SRDB_FOR_SERWEB=$((1 << 5)) # Credentials instance can be used by serweb
|
|
SRDB_PENDING=$((1 << 6))
|
|
SRDB_DELETED=$((1 << 7))
|
|
SRDB_CALLER_DELETED=$((1 << 8)) # Accounting table
|
|
SRDB_CALLEE_DELETED=$((1 << 9)) # Accounting table
|
|
SRDB_MULTIVALUE=$((1 << 10)) # Attr_types table
|
|
SRDB_FILL_ON_REG=$((1 << 11)) # Attr_types table
|
|
SRDB_REQUIRED=$((1 << 12)) # Attr_types table
|
|
SRDB_DIR=$((1 << 13)) # Domain_settings table
|
|
|
|
# UsrLoc Table
|
|
if [ -z "$UL_TABLE" ] ; then
|
|
UL_TABLE=location
|
|
fi
|
|
USER_COLUMN=username
|
|
DOMAIN_COLUMN=domain
|
|
CALLID_COLUMN=callid
|
|
|
|
# subscriber table
|
|
if [ -z "$SUB_TABLE" ] ; then
|
|
SUB_TABLE=subscriber
|
|
fi
|
|
REALM_COLUMN=domain
|
|
HA1_COLUMN=ha1
|
|
HA1B_COLUMN=ha1b
|
|
PASSWORD_COLUMN=password
|
|
RPID_COLUMN=rpid
|
|
SUBSCRIBER_COLUMN='username'
|
|
PHP_LIB_COLUMN=phplib_id
|
|
|
|
if [ -z "$STORE_PLAINTEXT_PW" ] ; then
|
|
STORE_PLAINTEXT_PW=1
|
|
fi
|
|
|
|
# acl table
|
|
if [ -z "$ACL_TABLE" ] ; then
|
|
ACL_TABLE=grp
|
|
fi
|
|
ACL_USER_COLUMN=username
|
|
ACL_DOMAIN_COLUMN=domain
|
|
ACL_GROUP_COLUMN=grp
|
|
ACL_MODIFIED_COLUMN=last_modified
|
|
|
|
# aliases table
|
|
if [ -z "$ALS_TABLE" ] ; then
|
|
ALS_TABLE=aliases
|
|
fi
|
|
A_USER_COLUMN=username
|
|
A_CONTACT_COLUMN=contact
|
|
A_EXPIRES_COLUMN=expires
|
|
A_Q_COLUMN=q
|
|
A_CALLID_COLUMN=callid
|
|
A_CSEQ_COLUMN=cseq
|
|
A_LAST_MODIFIED_COLUMN=last_modified
|
|
|
|
# domain table
|
|
if [ -z "$DOMAIN_TABLE" ] ; then
|
|
DOMAIN_TABLE=domain
|
|
fi
|
|
DO_DOMAIN_COLUMN=domain
|
|
DO_LAST_MODIFIED_COLUMN=last_modified
|
|
|
|
# uid_domain table
|
|
if [ -z "$UID_DOMAIN_TABLE" ] ; then
|
|
UID_DOMAIN_TABLE=uid_domain
|
|
fi
|
|
UID_DO_DOMAIN_COLUMN=domain
|
|
UID_DO_DID_COLUMN=did
|
|
UID_DO_FLAGS_COLUMN=flags
|
|
|
|
# lcr tables
|
|
if [ -z "$LCR_TABLE" ] ; then
|
|
LCR_TABLE=lcr
|
|
fi
|
|
LCR_ID_COLUMN=lcr_id
|
|
LCR_PREFIX_COLUMN=prefix
|
|
LCR_GRPID_COLUMN=grp_id
|
|
|
|
# gw table
|
|
if [ -z "$GW_TABLE" ] ; then
|
|
GW_TABLE=gw
|
|
fi
|
|
|
|
# carrier_name table
|
|
if [ -z "$CARRIER_NAME_TABLE" ] ; then
|
|
CARRIER_NAME_TABLE=carrier_name
|
|
fi
|
|
CARRIERROUTE_CARRIER_NAME_ID_COLUMN=id
|
|
CARRIERROUTE_CARRIER_NAME_CARRIER_COLUMN=carrier
|
|
|
|
# domain_name table
|
|
if [ -z "$DOMAIN_NAME_TABLE" ] ; then
|
|
DOMAIN_NAME_TABLE=domain_name
|
|
fi
|
|
CARRIERROUTE_DOMAIN_NAME_ID_COLUMN=id
|
|
CARRIERROUTE_DOMAIN_NAME_DOMAIN_COLUMN=domain
|
|
|
|
# carrierroute table
|
|
if [ -z "$CARRIERROUTE_TABLE" ] ; then
|
|
CARRIERROUTE_TABLE=carrierroute
|
|
fi
|
|
CARRIERROUTE_CARRIERROUTE_PREFIX_COLUMN=id
|
|
CARRIERROUTE_CARRIERROUTE_CARRIER_COLUMN=carrier
|
|
CARRIERROUTE_CARRIERROUTE_SCAN_PREFIX_COLUMN=scan_prefix
|
|
CARRIERROUTE_CARRIERROUTE_DOMAIN_COLUMN=domain
|
|
CARRIERROUTE_CARRIERROUTE_PROB_COLUMN=prob
|
|
CARRIERROUTE_CARRIERROUTE_STRIP_COLUMN=strip
|
|
CARRIERROUTE_CARRIERROUTE_REWRITE_HOST_COLUMN=rewrite_host
|
|
CARRIERROUTE_CARRIERROUTE_REWRITE_PREFIX_COLUMN=rewrite_prefix
|
|
CARRIERROUTE_CARRIERROUTE_REWRITE_SUFFIX_COLUMN=rewrite_suffix
|
|
CARRIERROUTE_CARRIERROUTE_COMMENT_COLUMN=description
|
|
CARRIERROUTE_CARRIERROUTE_FLAGS_COLUMN=flags
|
|
CARRIERROUTE_CARRIERROUTE_MASK_COLUMN=mask
|
|
|
|
# URI table
|
|
if [ -z "$URI_TABLE" ] ; then
|
|
URI_TABLE=uri
|
|
fi
|
|
URIUSER_COLUMN=uri_user
|
|
MODIFIED_COLUMN=last_modified
|
|
|
|
# dbaliases table
|
|
if [ -z "$DA_TABLE" ] ; then
|
|
DA_TABLE=dbaliases
|
|
fi
|
|
DA_USER_COLUMN=username
|
|
DA_DOMAIN_COLUMN=domain
|
|
DA_ALIAS_USER_COLUMN=alias_username
|
|
DA_ALIAS_DOMAIN_COLUMN=alias_domain
|
|
|
|
# speeddial table
|
|
if [ -z "$SD_TABLE" ] ; then
|
|
SD_TABLE=speed_dial
|
|
fi
|
|
SD_USER_COLUMN=username
|
|
SD_DOMAIN_COLUMN=domain
|
|
SD_SD_USER_COLUMN=sd_username
|
|
SD_SD_DOMAIN_COLUMN=sd_domain
|
|
SD_NEW_URI_COLUMN=new_uri
|
|
SD_DESC_COLUMN=description
|
|
|
|
# avp table
|
|
if [ -z "$AVP_TABLE" ] ; then
|
|
AVP_TABLE=usr_preferences
|
|
fi
|
|
|
|
AVP_UUID_COLUMN=uuid
|
|
AVP_USER_COLUMN=username
|
|
AVP_DOMAIN_COLUMN=domain
|
|
AVP_ATTRIBUTE_COLUMN=attribute
|
|
AVP_VALUE_COLUMN=value
|
|
AVP_TYPE_COLUMN=type
|
|
AVP_MODIFIED_COLUMN=last_modified
|
|
|
|
# trusted table
|
|
if [ -z "$TRUSTED_TABLE" ] ; then
|
|
TRUSTED_TABLE=trusted
|
|
fi
|
|
|
|
TRUSTED_SRC_IP_COLUMN=src_ip
|
|
TRUSTED_PROTO_COLUMN=proto
|
|
TRUSTED_FROM_PATTERN_COLUMN=from_pattern
|
|
TRUSTED_TAG_COLUMN=tag
|
|
|
|
# address table
|
|
if [ -z "$ADDRESS_TABLE" ] ; then
|
|
ADDRESS_TABLE=address
|
|
fi
|
|
|
|
# dispatcher tables
|
|
if [ -z "$DISPATCHER_TABLE" ] ; then
|
|
DISPATCHER_TABLE=dispatcher
|
|
fi
|
|
DISPATCHER_ID_COLUMN=id
|
|
DISPATCHER_SETID_COLUMN=setid
|
|
DISPATCHER_DESTINATION_COLUMN=destination
|
|
DISPATCHER_FLAGS_COLUMN=flags
|
|
DISPATCHER_PRIORITY_COLUMN=priority
|
|
DISPATCHER_ATTRS_COLUMN=attrs
|
|
DISPATCHER_DESCRIPTION_COLUMN=description
|
|
|
|
# dialog tables
|
|
if [ -z "$DIALOG_TABLE" ] ; then
|
|
DIALOG_TABLE=dialog
|
|
fi
|
|
|
|
# dialplan tables
|
|
if [ -z "$DIALPLAN_TABLE" ] ; then
|
|
DIALPLAN_TABLE=dialplan
|
|
fi
|
|
DIALPLAN_ID_COLUMN=id
|
|
DIALPLAN_DPID_COLUMN=dpid
|
|
DIALPLAN_PR_COLUMN=pr
|
|
DIALPLAN_MATCH_OP_COLUMN=match_op
|
|
DIALPLAN_MATCH_EXP_COLUMN=match_exp
|
|
DIALPLAN_MATCH_LEN_COLUMN=match_len
|
|
DIALPLAN_SUBST_EXP_COLUMN=subst_exp
|
|
DIALPLAN_REPL_EXP_COLUMN=repl_exp
|
|
DIALPLAN_ATTRS_COLUMN=attrs
|
|
|
|
#
|
|
##### ------------------------------------------------ #####
|
|
### usage functions
|
|
#
|
|
|
|
usage_base() {
|
|
echo
|
|
mecho " -- command 'start|stop|restart|trap'"
|
|
echo
|
|
cat <<EOF
|
|
trap ............................... trap with gdb Kamailio processes
|
|
restart ............................ restart Kamailio
|
|
start .............................. start Kamailio
|
|
stop ............................... stop Kamailio
|
|
EOF
|
|
}
|
|
|
|
usage_tls() {
|
|
echo
|
|
mecho " -- command 'tls'"
|
|
echo
|
|
cat <<EOF
|
|
tls rootCA [<etcdir>] .......... creates new rootCA
|
|
tls userCERT <user> [<etcdir>] ... creates user certificate
|
|
default <etcdir> is $ETCDIR/tls
|
|
EOF
|
|
}
|
|
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_base"
|
|
|
|
usage_acl() {
|
|
echo
|
|
mecho " -- command 'acl' - manage access control lists (acl)"
|
|
echo
|
|
cat <<EOF
|
|
acl show [<username>] .............. show user membership
|
|
acl grant <username> <group> ....... grant user membership (*)
|
|
acl revoke <username> [<group>] .... grant user membership(s) (*)
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_acl"
|
|
|
|
usage_lcr() {
|
|
echo
|
|
mecho " -- command 'lcr' - manage least cost routes (lcr)"
|
|
echo
|
|
cat <<EOF
|
|
lcr show_gws....... show database gateways
|
|
lcr show_routes.... show database routes
|
|
lcr dump_gws....... show in memory gateways
|
|
lcr dump_routes.... show in memory routes
|
|
lcr reload ........ reload lcr gateways and routes
|
|
lcr eval_weights .. evaluates probability for given GW's weights
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_lcr"
|
|
|
|
usage_cr() {
|
|
echo
|
|
mecho " -- command 'cr' - manage carrierroute tables"
|
|
echo
|
|
cat <<EOF
|
|
cr show ....................................................... show tables
|
|
cr reload ..................................................... reload tables
|
|
cr dump ....................................................... show in memory tables
|
|
cr addcn <carrier id> <carrier name> .......................... add a carrier name
|
|
cr rmcn <carrier id> ......................................... rm a carrier name
|
|
cr adddn <domain id> <domain name> ............................ add a domain name
|
|
cr rmdn <domain id> .......................................... rm a domain name
|
|
cr addcarrier <carrier> <scan_prefix> <domain> <rewrite_host> ................
|
|
<prob> <strip> <rewrite_prefix> <rewrite_suffix> ...............
|
|
<flags> <mask> <comment> .........................add a carrier
|
|
(prob, strip, rewrite_prefix, rewrite_suffix,...................
|
|
flags, mask and comment are optional arguments) ...............
|
|
cr rmcarrier <carrier> <scan_prefix> <domain> ................ rm a carrier
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_cr"
|
|
|
|
usage_rpid() {
|
|
echo
|
|
mecho " -- command 'rpid' - manage Remote-Party-ID (RPID)"
|
|
echo
|
|
cat <<EOF
|
|
rpid add <username> <rpid> ......... add rpid for a user (*)
|
|
rpid rm <username> ................. set rpid to NULL for a user (*)
|
|
rpid show <username> ............... show rpid of a user
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_rpid"
|
|
|
|
usage_subscriber() {
|
|
echo
|
|
mecho " -- command 'add|passwd|rm' - manage subscribers"
|
|
echo
|
|
cat <<EOF
|
|
add <username> <password> .......... add a new subscriber (*)
|
|
show <username> .................... show subscriber attributes (*)
|
|
passwd <username> <passwd> ......... change user's password (*)
|
|
rm <username> ...................... delete a user (*)
|
|
sets <username> <attr> <val> ....... set string attribute (column value)
|
|
setn <username> <attr> <val> ....... set numeric attribute (column value)
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_subscriber"
|
|
|
|
usage_trusted() {
|
|
echo
|
|
mecho " -- command 'add|dump|reload|rm|show' - manage trusted"
|
|
echo
|
|
cat <<EOF
|
|
trusted show ...................... show db content
|
|
trusted dump ...................... show cache content
|
|
trusted reload .................... reload db table into cache
|
|
trusted add <src_ip> <proto> <from_pattern> <tag>
|
|
....................... add a new entry
|
|
....................... (from_pattern and tag are optional arguments)
|
|
trusted rm <src_ip> ............... remove all entries for the given src_ip
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_trusted"
|
|
|
|
usage_address() {
|
|
echo
|
|
mecho " -- command 'add|dump|reload|rm|show' - manage address"
|
|
echo
|
|
cat <<EOF
|
|
address show ...................... show db content
|
|
address dump ...................... show cache content
|
|
address reload .................... reload db table into cache
|
|
address add <grp> <ipaddr> <mask> <port> <tag>
|
|
....................... add a new entry
|
|
....................... (mask, port and tag are optional arguments)
|
|
address rm <grp> <ipaddr> ......... remove entries for given grp and ipaddr
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_address"
|
|
|
|
usage_dispatcher() {
|
|
echo
|
|
mecho " -- command 'dispatcher' - manage dispatcher"
|
|
echo
|
|
cat <<EOF
|
|
* Examples: dispatcher add 1 sip:1.2.3.1:5050 1 5 'prefix=123' 'gw one'
|
|
* dispatcher add 2 sip:1.2.3.4:5050 3 0
|
|
* dispatcher rm 4
|
|
dispatcher show ..................... show dispatcher gateways
|
|
dispatcher reload ................... reload dispatcher gateways
|
|
dispatcher dump ..................... show in memory dispatcher gateways
|
|
dispatcher add <setid> <destination> [flags] [priority] [attrs] [description]
|
|
.......................... add gateway
|
|
dispatcher rm <id> .................. delete gateway
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_dispatcher"
|
|
|
|
usage_dialog() {
|
|
echo
|
|
mecho " -- command 'dialog' - manage dialog records"
|
|
echo
|
|
cat <<EOF
|
|
* Examples: dialog show
|
|
* dialog showdb
|
|
dialog show ..................... show in-memory dialog records
|
|
dialog showdb ................... show database dialog records
|
|
EOF
|
|
}
|
|
USAGE_FUNCTIONS="$USAGE_FUNCTIONS usage_dialog"
|
|
|
|
usage_dialplan() {
|
|
echo
|
|
mecho " -- command 'dialplan' - manage dialplans"
|
|
echo
|
|
cat <<EOF
|
|
dialplan show <dpid> .............. show dialplan tables
|
|
dialplan reload ................... reload dialplan tables
|
|
dialplan addrule <dpid> <prio> <match_op> <match_exp>
|
|
<match_len> <subst_exp> <repl_exp> <attrs>
|
|
.................... add a rule
|
|
dialplan rm ....................... removes the entire dialplan table
|
|
dialplan rmdpid <dpid> ............ removes all the gived dpid entries
|
|
dialplan rmrule <dpid> <prio> ..... removes all the gived dpid/prio entries
|
|
EOF
|
|
}
|
|
|
|
##### ----------------------------------------------- #####
|
|
#### Common functions
|
|
|
|
|
|
mdbg() {
|
|
if [ "0$VERBOSE" -ne 0 ] ; then
|
|
if [ -t 1 -a -z "$NOHLPRINT" ] ; then
|
|
echo -e "\033[1m$1\033[0m"
|
|
else
|
|
echo "$1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
mwarn() {
|
|
if [ -t 1 -a -z "$NOHLPRINT" ] ; then
|
|
echo -e '\E[37;32m'"\033[1mWARNING: $1\033[0m"
|
|
else
|
|
echo "** WARNING: $1"
|
|
fi
|
|
}
|
|
|
|
minfo() {
|
|
if [ -t 1 -a -z "$NOHLPRINT" ] ; then
|
|
echo -e '\E[37;33m'"\033[1mINFO: $1\033[0m"
|
|
else
|
|
echo "** INFO: $1"
|
|
fi
|
|
}
|
|
|
|
mecho() {
|
|
if [ -t 1 -a -z "$NOHLPRINT" ] ; then
|
|
echo -e "\033[1m$1\033[0m"
|
|
else
|
|
echo "$1"
|
|
fi
|
|
}
|
|
|
|
merr() {
|
|
if [ -t 1 -a -z "$NOHLPRINT" ] ; then
|
|
echo -e '\E[37;31m'"\033[1mERROR: $1\033[0m"
|
|
else
|
|
echo "** ERROR: $1"
|
|
fi
|
|
}
|
|
|
|
|
|
# determine host name, typically for use in printing UAC
|
|
# messages; we use today a simplistic but portable uname -n way --
|
|
# no domain name is displayed ; fifo_uac expands !! to host
|
|
# address only for optional header fields; uname output without
|
|
# domain is sufficient for informational header fields such as
|
|
# From
|
|
#
|
|
get_my_host() {
|
|
if [ -z "$SIP_DOMAIN" ]; then
|
|
uname -n
|
|
else
|
|
echo "$SIP_DOMAIN"
|
|
fi
|
|
}
|
|
|
|
# calculate name and domain of current user
|
|
set_user() {
|
|
|
|
OSERUSER=`echo $1|$AWK -F@ '{print $1}'`
|
|
OSERDOMAIN=`echo $1|$AWK -F@ '{print $2}'`
|
|
|
|
if [ -z "$OSERDOMAIN" ] ; then
|
|
OSERDOMAIN="$SIP_DOMAIN"
|
|
fi
|
|
|
|
if [ -z "$OSERDOMAIN" ] ; then
|
|
merr "domain unknown: use usernames with domain or set default domain \
|
|
in SIP_DOMAIN"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# check the parameter if it is a valid address of record (user@domain)
|
|
check_aor() {
|
|
echo "$1" | $EGREP "^$USERNAME_RE@.*\..*" >/dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "error: invalid AoR: $1" > /dev/stderr
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# check the parameter if it is a valid address of record (user@domain)
|
|
is_aor() {
|
|
echo "$1" | $EGREP "^$USERNAME_RE@.*\..*" >/dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
false
|
|
else
|
|
true
|
|
fi
|
|
}
|
|
|
|
# check the parameter if it is a valid SIP address of record (sip:user@domain)
|
|
check_sipaor() {
|
|
echo "$1" | $EGREP "^sip(s)?:$USERNAME_RE@.*\..*" >/dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "error: invalid SIP AoR: $1" > /dev/stderr
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# check the parameter if it is a valid SIP URI
|
|
# quite simplified now -- it captures just very basic
|
|
# errors
|
|
check_uri() {
|
|
echo "$1" | $EGREP "^sip(s)?:($USERNAME_RE@)?.*\..*" > /dev/null
|
|
if [ $? -ne 0 ] ; then
|
|
echo "error: invalid SIP URI: $1" > /dev/stderr
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
print_status() {
|
|
echo $1 | $EGREP "^[1-6][0-9][0-9]" > /dev/null
|
|
if [ "$?" -eq 0 ] ; then
|
|
echo $1
|
|
else
|
|
echo "200 OK"
|
|
fi
|
|
}
|
|
|
|
# process output from FIFO/Unixsock server; if everything is ok
|
|
# skip the first "ok" line and proceed to returned
|
|
# parameters
|
|
filter_fl()
|
|
{
|
|
# tail +2
|
|
|
|
$AWK 'BEGIN {line=0;IGNORECASE=1;}
|
|
{line++}
|
|
NR == 1 && /^200 OK/ { next }
|
|
/^$/ { next }
|
|
{ print }'
|
|
}
|
|
|
|
# params: user, realm, password
|
|
# output: HA1
|
|
_gen_ha1()
|
|
{
|
|
HA1=`echo -n "$1:$2:$3" | $MD5 | $AWK '{ print $1 }'`
|
|
if [ $? -ne 0 ] ; then
|
|
echo "HA1 calculation failed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# params: user, realm, password
|
|
# output: HA1B
|
|
_gen_ha1b()
|
|
{
|
|
HA1B=`echo -n "$1@$2:$2:$3" | $MD5 | $AWK '{ print $1 }'`
|
|
if [ $? -ne 0 ] ; then
|
|
echo "HA1B calculation failed"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# params: user, realm, password
|
|
# output: PHPLIB_ID
|
|
_gen_phplib_id()
|
|
{
|
|
NOW=`date`;
|
|
PHPLIB_ID=`echo -n "$1$2:$3:$NOW" | $MD5 | $AWK '{ print $1 }'`
|
|
}
|
|
|
|
# params: user, password
|
|
# output: HA1, HA1B
|
|
credentials()
|
|
{
|
|
set_user $1
|
|
_gen_ha1 "$OSERUSER" "$OSERDOMAIN" "$2"
|
|
_gen_ha1b "$OSERUSER" "$OSERDOMAIN" "$2"
|
|
}
|