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

USE_PROCD=1
START=99

NAME=mnh
PROG=/usr/bin/$NAME

_err() {
	echo "$*" >&2
	logger -p daemon.err -t "$NAME" "$*"
}

parse() {
	local name="$1"
	local type="$2"
	
	local disabled type server id port protocol mode service
	uci_validate_section "$NAME" "$type" "$name" \
		'disabled:bool:0' \
		'type:or("tcp","udp")' \
		'server:regex("[a-zA-Z0-9\-]*?(\.[a-zA-Z0-9\-]*)*(\:[0-9]*)?")' \
		'id:string' \
		'port:port:0' \
		'protocol:string:mnh' \
		'mode:string:proxy' \
		'service:regex("[a-zA-Z0-9\-]*?(\.[a-zA-Z0-9\-]*)*\:[0-9]*")' \
		|| return 1

	[ "$disabled" = 0 ] || return 1

	mkdir -p "/var/run/mnh"
	touch "/var/run/mnh/$name"
	chown nobody "/var/run/mnh/$name"

	if fw4 >/dev/null; then
		nft list chain inet fw4 "mnh" >/dev/null 2>&1 || fw4 reload
	else
		iptables -t "filter" -L "MNH" >/dev/null 2>&1 || fw3 reload
	fi

	local hook="/usr/share/mnh/hook.sh '$name' '$type' '%e' '%m' '%p' '%a'"

	procd_open_instance "$name"
	procd_set_param command "$PROG" "$type" --routerForward none --event-hook "$hook" --server "$server" --mode "$mode" --service "$service" --port "$port" --id "$id"
	procd_set_param stdout 1
	procd_set_param stderr 1
	# procd_set_param user "nobody"
	# [ $respawn -eq 1 ] && procd_set_param respawn
	procd_close_instance
}

start_service() {
	config_load "$NAME"
	config_foreach parse instance
}

service_triggers() {
	procd_add_reload_trigger "$NAME"
}

stop_service() {
	if fw4 >/dev/null; then
		nft flush chain inet fw4 "mnh" 2>/dev/null
	else
		iptables -t "filter" -F "MNH" 2>/dev/null
	fi
}

reload_service() {
	restart
}
