#!/bin/bash
#
# VERSION=6
# CHANGES="Check for AppFS-integrity before trying to start it."

# global variables #
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin:/usr/local/sbin:/usr/fallback"

BEROCONF=/usr/fallback/beroconf

# functions #
function log {
	prefix="[init_app]"

	if [ -z "${2}" ]; then
		echo "${prefix} ${1}"
	else
		echo "${prefix} ${1}" >> ${2}
	fi
}

function get_need_prod {

	np_info=$(${BEROCONF} get root need_prod)

	echo ${np_info} | grep "failed" > /dev/null
	if [ ${?} -eq 0 ]; then
		echo "0"
	else
		echo "${np_info}"
	fi

}

function set_app_status {
	${BEROCONF} set root app-status ${1}
	${BEROCONF} set root app-image ${2}
}

function check_app_integrity () {

	file_list="bin/isgw sbin/safe_isgw sbin/li-start sbin/li-stop init/S01berofix init/S10li-setup init/S50isgw init/rcK init/rcS lib/libsofia-sip-ua.so.0.6.0 lib/libssl.so.0.9.8 lib/libcrypto.so.0.9.8 modules/berofix.ko modules/csmencaps.ko www/index.php www/berogui/index.php www/berogui/includes/login.php"

	for item in ${file_list}; do
		if [ ! -f /usr/local/${item} ]; then
			echo 1 > /tmp/enable_recovery
		fi
	done
}

# main #
BOOT_UPDATE=$(${BEROCONF} get root boot_fwupdate | grep -v failed)
if [ "${BOOT_UPDATE}" = "1" ]; then
	echo 2 > /sys/class/beroNet_basicfunctions/led_mode
	log "Not starting AppFS-services cause of Firmware-Update-Boot."
	exit 0
fi

APP_IMG_VERS=$(cat /usr/local/FILENAME)
NEED_PROD=$(get_need_prod)

case "${1}" in
	start)
		check_app_integrity
		if [ -f /tmp/enable_recovery ]; then
			log "Integrity of AppFS is compromised, enabling Recovery-Mode."
			echo 2 > /sys/class/beroNet_basicfunctions/led_mode
			exit 0
		fi

		if [ -f /usr/local/FILENAME -a -x /usr/local/init/rcS ] && [ ${NEED_PROD} -eq 0 ]; then
			log "Starting AppFS-Services."
			set_app_status "running" "${APP_IMG_VERS}"
			/usr/local/init/rcS
		else
			log "Starting AppFS-Services disabled. (no app-image installed)"
			if [ -f /usr/local/modules/berofix.ko ] && [ ${NEED_PROD} -eq 0 ]; then
				insmod /usr/local/modules/berofix.ko
			fi
			set_app_status "stopped" ""
		fi
		;;
	stop)
		if [ -f /usr/local/FILENAME -a -x /usr/local/init/rcK ] && [ ${NEED_PROD} -eq 0 ]; then
			log "Stopping AppFS-Services."
			set_app_status "stopped" "${APP_IMG_VERS}"
			/usr/local/init/rcK
		else
			log "Stopping AppFS-Services disabled. (no app-image installed)"
			if [ -f /usr/local/modules/berofix.ko ] && [ ${NEED_PROD} -eq 0 ]; then
				rmmod berofix
			fi
			set_app_status "stopped" ""
		fi
		;;
	*)
		echo "Usage: ${0} [start|stop]" >&2
		exit 1
		;;
esac
