#!/bin/sh

WATCHDOG_NAME=wadmp_watchdog
MOD_NAME=wadmp_client
MOD_DEFAULTS=/opt/${MOD_NAME}/etc/defaults
MOD_SETTINGS=/opt/${MOD_NAME}/etc/settings
MOD_DATA_DIR=/var/data/${MOD_NAME}
MOD_WELCOME=/opt/${MOD_NAME}/www/welcome

# 'v2i-S1' platform has read-only /opt dir which contains a simlink rather than setting file.
[ -L "$MOD_SETTINGS" ] && MOD_SETTINGS=`readlink $MOD_SETTINGS`

function stop_app
{
	local app_name=$1
	local timeout_s=$2

	killall -9 ${WATCHDOG_NAME} 2>/dev/null
	killall ${app_name} 2>/dev/null

	time_waiting=0
	while pidof ${app_name} >/dev/null && [ "$time_waiting" -lt "$timeout_s" ]
	do
		sleep 1
		time_waiting=$((time_waiting+1))
		[ "$time_waiting" -eq "$timeout_s" ] && killall -9 ${app_name} && return 1
	done
}

function initialize_files
{
	# Create settings file from defaults if it does not exist
	[ -f "$MOD_SETTINGS" ] || cp ${MOD_DEFAULTS} ${MOD_SETTINGS}

	# Create a persistent directory in /var/data
	[ -d $MOD_DATA_DIR ] || mkdir ${MOD_DATA_DIR}

	# Create settings hash if this router requires it and it does not exist
	if [ -x "/sbin/hash_verify" ] && ! [ -f "$MOD_SETTINGS.hash" ]; then
		cp ${MOD_DEFAULTS}.hash ${MOD_SETTINGS}.hash
	fi
}

initialize_files

case "$1" in
	start)
		[ -x "/sbin/hash_verify" ] && ! hash_verify ${MOD_SETTINGS} && exit 1

		echo -n "Starting module ${MOD_NAME}: "
		. $MOD_SETTINGS

		[ "$MOD_WADMP_CLIENT_ENABLED" != "1" ] && echo "skipped" && exit 0

		/opt/${MOD_NAME}/bin/${MOD_NAME} &
		RETVAL=$?
		
		if [ $RETVAL -eq 0 ]; then 
			echo "${MOD_NAME} started"
		else
			# This is exit point. It is useless to start watchdog without module.
			echo "${MOD_NAME} failed"
			exit 1
		fi

		/opt/${MOD_NAME}/bin/${WATCHDOG_NAME} &
		RETVAL=$?

		if [ $RETVAL -eq 0 ]; then
			echo "${WATCHDOG_NAME} started"
		else
			# App should not run wihtout watchdog.
			echo "${WATCHDOG_NAME} failed"
			stop_app ${MOD_NAME} 10
		fi

		exit $RETVAL
		;;
	stop)
		echo -n "Stopping module ${MOD_NAME}: "
		stop_app ${MOD_NAME} 10
		echo "done"
		exit 0
		;;
	restart)
		$0 stop
		$0 start
		;;
	status)
		killall -0 ${MOD_NAME} 2>/dev/null
		RETVAL=$?
		if [ $RETVAL -eq 0 ]; then echo "running"; else echo "stopped"; fi
		exit $RETVAL
		;;
	defaults)
		cp ${MOD_DEFAULTS} ${MOD_SETTINGS} 2>/dev/null
		[ -f "$MOD_DEFAULTS.hash" ] && cp ${MOD_DEFAULTS}.hash ${MOD_SETTINGS}.hash
		mv ${MOD_WELCOME}_tmp.cgi ${MOD_WELCOME}.cgi 2> /dev/null
		rm -f ${MOD_DATA_DIR}/.welcome
		;;
	*)
	echo "Usage: $0 {start|stop|restart|status|defaults}"
	exit 1
esac
