#!/bin/sh /etc/rc.common 
# Copyright (C) 2018 Jean-Michel Lacroix

USE_PROCD=1

START=60

APP=darkstat
RUN_D=/var/darkstat
PID_F=$RUN_D/$APP.pid
CONFIGNAME=darkstat
USER=nobody
GROUP=nogroup

CONFIGSTR=""
FILTERSTR=""

export_bool () {
	local option="$1"
	local section="$2"
	local _keystr="$3"
	local _loctmp
	config_get_bool _loctmp "$section" "$option"
	if [ -n "$_loctmp" ]; then
		if [ 1 -eq "$_loctmp" ]; then
			CONFIGSTR="$CONFIGSTR${_keystr} "
		fi
	fi
}

set_config_string(){
	mkdir -p $RUN_D
	. /lib/functions/network.sh
	config_load $CONFIGNAME
	config_foreach build_config_string darkstat
}

build_config_string() {
	local cfg="$1"                                 
	config_get interface $cfg interface
	network_get_device ifname "$interface"       
	CONFIGSTR=" -i $ifname "
	export_bool syslog $cfg "--syslog"
	export_bool verbose $cfg "--verbose"
	# We need the --no-daemon parameter as with PROCD the process has to run in the background
	CONFIGSTR="$CONFIGSTR--no-daemon "
	export_bool no_promisc $cfg "--no-promisc"
	export_bool no_dns $cfg "--no-dns"
	export_bool no_macs $cfg "--no-macs"
	export_bool no_lastseen $cfg "--no-lastseen"
	config_get httpaddr $cfg httpaddr
	CONFIGSTR="$CONFIGSTR${httpaddr:+-b "$httpaddr"} "
	config_get httpport $cfg httpport
	CONFIGSTR="$CONFIGSTR${httpport:+-p "$httpport"} "
	config_get network_netmask $cfg network_netmask
	CONFIGSTR="$CONFIGSTR${network_netmask:+-l "$network_netmask"} "
	export_bool local_only $cfg "--local-only"
	config_get hosts_max $cfg hosts_max
	CONFIGSTR="$CONFIGSTR${hosts_max:+--hosts-max "$hosts_max"} "
	config_get hosts_keep $cfg hosts_keep
	CONFIGSTR="$CONFIGSTR${ports_keep:+--ports-keep "$ports_keep"} "
	config_get highest_port $cfg highest_port
	CONFIGSTR="$CONFIGSTR${highest_port:+--highest-port "$highest_port"} "
	config_get export_file $cfg export_file
	CONFIGSTR="$CONFIGSTR${export_file:+--export "$export_file"} "
	config_get import_file $cfg import_file
	CONFIGSTR="$CONFIGSTR${import_file:+--import "$import_file"} "
	config_get daylog_file $cfg daylog_file
	CONFIGSTR="$CONFIGSTR${daylog_file:+--daylog "$daylog_file"} "
	CONFIGSTR="$CONFIGSTR--chroot $RUN_D --pidfile $PID_F"
	# Now that we have the configuration string (CONFIGSTR), let us get the filter (FILTERSTR)
	config_get network_filter $cfg network_filter
	FILTERSTR="${network_filter:+$network_filter}"
}

service_triggers() {
	procd_add_reload_trigger $CONFIGNAME
}

start_service() {
	set_config_string
	procd_open_instance
	procd_set_param command /usr/sbin/$APP
	procd_append_param command $CONFIGSTR
	# Let us check if we have a filter string and apply it if we do
	if [ "$FILTERSTR" != "" ]; then
		procd_append_param command "-f" "$FILTERSTR"
	fi
	procd_close_instance
}

stop_service() {
	rm -f $PID_F
}

reload_service() {
	stop
	start
}