#!/bin/sh /etc/rc.common
# Copyright (C) 2015 OpenWrt.org
# Copyright (C) 2020 Nishant Sharma <nishant@hopbox.in>

START=89
STOP=11

USE_PROCD=1
PROG=/usr/bin/udpspeeder

validate_udpspeeder_section() {
	uci_validate_section udpspeeder udpspeeder "${1}" \
		'enabled:bool:0'		\
		'server:bool:0' 		\
		'mode:integer:0' 		\
		'mtu:integer:1250' 		\
		'timeout:integer:8'		\
		'local:string'			\
		'remote:string'			\
		'key:string'			\
		'report:integer:10'		\
		'disable_obscure:bool:0'	\
		'interval:integer:0'		\
		'fec:string:20:10'		\
		'disable_fec:bool:0'		\
		'sock_buf:integer:1024'		\
		'log_level:integer:4'		\
		'decode_buf:integer:2000'	\
		'fix_latency:bool:0'		\
		'queue_len:integer:200'		
}

start_instance() {

	local section="$1"

	local server mode mtu timeout local remote key report disable_obscure fifo interval \
		fec disable_fec sock_buf queue_len decode_buf sock_buf log_level enabled

	fifo="/tmp/udpspeeder-${section}.fifo"

	validate_udpspeeder_section $section || {
		echo "validation failed"
		return 1
	}

	if [ "${enabled}" -ne 1 ]
	then
		return 1
	fi

	procd_open_instance
	procd_set_param respawn
	procd_set_param stderr 1
	procd_set_param stdout 1

	procd_set_param command "${PROG}"

	if [ "${server}" -eq 1 ]
	then
		procd_append_param command -s
	else
		procd_append_param command -c
	fi

	if [ "${disable_fec}" -eq 1 ]
	then
		procd_append_param command --disable-fec
	else
		procd_append_param command --fec "${fec}"
	fi

	if [ "${fix_latency}" -eq 1 ] && [ "${mode}" -eq 0 ]
	then
		procd_append_param command --fix-latency
	fi

	if [ "${disable_obscure}" -eq 1 ]
	then
		procd_append_param command --disable-obscure
	fi

	[ -z "${key}" ]  || procd_append_param command --key "${key}"

	procd_append_param command -l "${local}"
	procd_append_param command -r "${remote}"
	procd_append_param command --mode "${mode}"
	procd_append_param command --report "${report}"
	procd_append_param command --interval "${interval}"
	procd_append_param command --mtu "${mtu}"
	procd_append_param command --sock-buf "${sock_buf}"
	procd_append_param command --decode-buf "${decode_buf}"
	procd_append_param command --queue-len "${queue_len}"
	procd_append_param command --log-level "${log_level}"
	procd_append_param command --fifo "${fifo}"
	procd_append_param command --disable-color
	
#	procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
	procd_close_instance
}

start_service() {

	config_load 'udpspeeder'
	config_foreach start_instance 'udpspeeder'

}

stop_service()
{
	service_stop ${PROG}
}

service_triggers()
{
	procd_add_reload_trigger "udpspeeder"
	procd_add_validation validate_udpspeeder_section
}
