#!/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
}

