telephony/net/rtpproxy/files/rtpproxy.init
Sebastian Kemper 3da92d2359 rtpproxy: add iface translation to init
rtpproxy expects IPs as parameters. Lots of OpenWrt devices use
connections where the IP is dynamically assigned. This commit adds shell
functions to convert an iface like 'wan' to an IP address before adding
the parameter to the rtpproxy command line.

Explanation is provided in /etc/config/rtpproxy. Some whitespace issues
were also fixed.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
2018-11-05 20:59:31 +01:00

134 lines
2.5 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2014 CESNET, z.s.p.o
# Copyright (C) 2018 OpenWrt.org
START=90
NAME=rtpproxy
COMMAND="/usr/bin/$NAME"
USE_PROCD=1
#PROCD_DEBUG=1
LOGGER="/usr/bin/logger -t $NAME"
LOG_ERR="$LOGGER -p user.err -s"
run_instance() {
procd_open_instance
procd_set_param command $COMMAND
procd_append_param command \
$1 \
-p "/var/run/$NAME-$2.pid" \
-f
# forward stderr to logd
procd_set_param stderr 1
procd_close_instance
$LOGGER instance $2 has started
}
check_ip() {
local tmp_addr
if [ "$1" = "ipaddr" ]; then
network_get_ipaddr tmp_addr "$2" || tmp_addr="$2"
else
network_get_ipaddr6 tmp_addr "$2" || tmp_addr="$2"
fi
echo "$tmp_addr"
}
check_ipaddr() {
local value="$1"
local type="$2"
local param="$3"
local one two
[ -z "$value" ] && {
$LOG_ERR empty $type entry
exit 1
}
# Bail if more than 1 slash.
[ $(echo "$value" | awk -F "/" '{print NF-1}') -gt 1 ] && {
$LOG_ERR init script does not understand $type entry \""$value"\"
exit 1
}
IFS="/" read one two << EOF
$value
EOF
one="$(check_ip "$type" "$one")"
if [ -n "$two" ]; then
two="$(check_ip "$type" "$two")"
rtpproxy_options=$rtpproxy_options" $param $one/$two"
else
rtpproxy_options=$rtpproxy_options" $param $one"
fi
}
check_param() {
local param="$1"
local value="$2"
local default_value="$3"
if [ "$value" != "" ]; then
rtpproxy_options=$rtpproxy_options" $param $value"
else
if [ "$default_value" != "" ]; then
rtpproxy_options=$rtpproxy_options" $param $default_value"
fi
fi
}
check_special_param() {
local param="$1"
if [ "$param" != "" ]; then
rtpproxy_options=$rtpproxy_options" $param"
fi
}
handle_instance() {
local site="$1"
local socket opts ipaddr ip6addr rtpproxy_options log_level
config_get socket "$site" socket
config_get opts "$site" opts
config_get ipaddr "$site" ipaddr
config_get ip6addr "$site" ip6addr
config_get user "$site" user
config_get log_level "$site" log_level
check_param "-s" "$socket"
check_param "-u" "$user" "nobody"
check_param "-d" "$log_level" "DBUG"
check_special_param "$opts"
[ -n "$ipaddr" ] && check_ipaddr "$ipaddr" ipaddr '-l'
[ -n "$ip6addr" ] && check_ipaddr "$ip6addr" ip6addr '-6'
run_instance "$rtpproxy_options" "$site"
}
start_service() {
local enabled
config_load $NAME
config_get_bool enabled global enabled 0
if [ "$enabled" -eq 1 ]; then
. /lib/functions/network.sh
config_foreach handle_instance instance
else
$LOG_ERR service not enabled
$LOG_ERR edit /etc/config/$NAME
fi
}