#!/bin/sh /etc/rc.common

. $IPKG_INSTROOT/lib/functions/network.sh

START=90
USE_PROCD=1
NAME=tunneldigger-broker

PIDPATH=/var/run
CONFIGFILE=/var/etc/tunneldigger-broker.cfg
HOOKPATH=/usr/lib/tunneldigger-broker/hooks

missing() {
	echo "Not starting tunneldigger-broker - missing $1" >&2
	exit 1
}

cfg_append() {
	local value="$1"
	echo "$value" >> $CONFIGFILE
}

cfg_append_section() {
	local name="$1"
	cfg_append "[${name}]"
}

cfg_append_kv() {
	local key="$1"
	local value="$2"
	cfg_append "${key}=${value}"
}

cfg_append_option() {
	local cfg="$1"
	local option="$2"
	local key="$3"
	config_get value "$cfg" "${option}"
	[ -z "${value}" ] && missing ${option}
	cfg_append_kv "${key}" "${value}"
}

parse_broker() {
	local section="$1"
	cfg_append_section broker		
	config_get interface "$section" interface

	[ ! -z "${interface}" ] && {
		# Resolve logical interface name.
		unset _interface address
		network_get_device _interface "${interface}" || _interface="${interface}"
		cfg_append_kv interface "${_interface}"
		network_get_ipaddr address "${interface}"
		cfg_append_kv address "${address}"
	}

	OPTIONS="max_cookies max_tunnels port_base tunnel_id_base tunnel_timeout namespace connection_rate_limit pmtu"
	for option in ${OPTIONS}; do
		cfg_append_option "$section" "${option}" "${option}"
	done

	config_get port "$section" port
	cfg_append_kv "port" "${port// /,}"

	cfg_append_section hooks
	cfg_append_kv "session.up" "${HOOKPATH}/setup"
	cfg_append_kv "session.pre-down" "${HOOKPATH}/teardown"
	cfg_append_kv "session.mtu-changed" "${HOOKPATH}/mtu-changed"
}

parse_log() {
	local section="$1"
	cfg_append_section log
	
	OPTIONS="filename verbosity"
	for option in ${OPTIONS}; do
		cfg_append_option "$section" "${option}" "${option}"
	done

	config_get_bool log_ip_addresses "$section" log_ip_addresses 1
	if [ "${log_ip_addresses}" -eq 1 ]; then
		cfg_append_kv "log_ip_addresses" "true"
	else
		cfg_append_kv "log_ip_addresses" "false"
	fi
}

start_service() {
	# Prepare the configuration file from UCI settings.
	rm -f ${CONFIGFILE}
	config_load tunneldigger-broker
	config_foreach parse_broker broker
	config_foreach parse_log log
	
	# Start the service using procd.
	procd_open_instance
	procd_set_param command "/usr/bin/python"
	procd_append_param command -m tunneldigger_broker.main
	procd_append_param command "${CONFIGFILE}"
	procd_set_param respawn
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}
