#!/usr/sbin/openrc-run

description="Simple network aid daemon"

PROG=/usr/sbin/snetaid
CONFIGFILE=/etc/simple-netaid/snetaid.conf
PIDFILE=/run/snetaid/snetaid.pid
PIPE="/var/log/netaid_events.pipe"
UBUS_PID="/var/run/snetaid_ubus.pid"

WIRED_IF=eth0
WIRELESS_IF=wlan0

extra_started_commands="reload"

depend() {
	need ubus
	use logger net
	after rsyslog
}

source_ini_file() {
	local FILE_PATH line KEY VALUE

	FILE_PATH=$1
	/bin/cat "$FILE_PATH" | /bin/sed "s/.*\[.*\].*//g" |
	while read -r line; do
		KEY=$(echo "$line" | /bin/sed "s/\(^.*\)=.*/\1/g")
		VALUE=$(echo "$line" | /bin/sed "s/^.*=\(.*\)$/\1/g")
		if [ -n "$KEY" ]; then
			echo "${KEY}=${VALUE}"
		fi
	done
}

load_config() {
	if [ -f "$CONFIGFILE" ]; then
		eval "$(source_ini_file "$CONFIGFILE")"
	fi
	WIRED_IF=${wired_interface:-${WIRED_IF:-eth0}}
	WIRELESS_IF=${wireless_interface:-${WIRELESS_IF:-wlan0}}
	PIDFILE=${pidfile:-/run/snetaid/snetaid.pid}
}

start() {
	load_config
	[ -x "$PROG" ] || return 1

	ebegin "Starting snetaid"
	[ -p "$PIPE" ] || mkfifo "$PIPE"
	start-stop-daemon -S -x "$PROG" -- \
		-b -a "$CONFIGFILE" -p "$PIDFILE" -e "$WIRED_IF" -w "$WIRELESS_IF" || {
		eend 1
		return 1
	}
	start-stop-daemon -S -b \
		-m -p "$UBUS_PID" \
		-x /bin/sh -- -c "ubus listen network.log > $PIPE"
	eend 0
}

stop() {
	load_config
	ebegin "Stopping snetaid"
	start-stop-daemon -K -p "$UBUS_PID" -R TERM/5/KILL/5
	rm -f "$UBUS_PID"
	if [ -s "$PIDFILE" ]; then
		start-stop-daemon -K -p "$PIDFILE" -x "$PROG" -R TERM/5/KILL/5
	else
		start-stop-daemon -K -x "$PROG" -R TERM/5/KILL/5
	fi
	# ubus listen child can linger on the fifo
	pkill -f "ubus listen network.log" 2>/dev/null || true
	eend 0
}

status() {
	load_config
	"$PROG" --check -p "$PIDFILE"
}

restart() {
	ebegin "Restarting snetaid and refreshing network state"
	stop || true
	if ifquery --version >/dev/null 2>&1; then
		ifreload -a
	fi
	sleep 1
	start
	eend $?
}

reload() {
	load_config
	ebegin "Reloading snetaid"
	start-stop-daemon -K -s HUP -x "$PROG"
	eend $?
}
