#!/bin/sh
# Copyright (c) 2000-2012 Synology Inc. All rights reserved.

# customized items of package
if [ -z "$SYNOPKG_PKGNAME" ]; then
	# prior DSM 3.2, start script will be run without environment variable
	#  at boot time, thus we need a workaround to gather name and version info
	PACKAGE_NAME="DHCPServer"
	PACKAGE_VER=`get_key_value "/var/packages/${PACKAGE_NAME}/INFO" "version"`
else
	PACKAGE_NAME=$SYNOPKG_PKGNAME
	PACKAGE_VER=$SYNOPKG_PKGVER
fi
PRIVATE_LOCATION="/var/packages/DHCPServer/target"
PACKAGE_LIMIT_KEY="synodhcp_limit"
DHCPD_SERVER=${PRIVATE_LOCATION}/scripts/dhcpd-server.sh

PKG_APP_PATH="${PRIVATE_LOCATION}/app"
PKG_INDEXDB_PATH="${PRIVATE_LOCATION}/indexdb"
APP_PATH="/usr/syno/synoman/webman/3rdparty/DHCPServer"

# general routines
DSM_CONFIG="/etc.defaults/synoinfo.conf"
DSM_INDEX_ADD="/usr/syno/bin/pkgindexer_add"
DSM_INDEX_DEL="/usr/syno/bin/pkgindexer_del"
PACKAGE_ENABLED="/var/packages/${PACKAGE_NAME}/enabled"
PACKAGE_LIMIT=`get_key_value ${DSM_CONFIG} ${PACKAGE_LIMIT_KEY}`

PACKAGE_CONFIG_MIGRATE_SH="/usr/syno/bin/package_config_migrate.sh"
DELETE_SYNOINFO_KEYS="pxeenable"

start()
{
	# index help and add help to dsm
	${DSM_INDEX_ADD} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
	${DSM_INDEX_ADD} ${PKG_APP_PATH}/helptoc.conf ${PKG_INDEXDB_PATH}/helpindexdb

	# start dhcp server
	${DHCPD_SERVER} start
}

stop()
{
	# remove index and help entry
	${DSM_INDEX_DEL} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
	${DSM_INDEX_DEL} ${PKG_APP_PATH}/helptoc.conf ${PKG_INDEXDB_PATH}/helpindexdb
	$PACKAGE_CONFIG_MIGRATE_SH del "/etc/synoinfo.conf" "$DELETE_SYNOINFO_KEYS"

	#stop dhcp server
	${DHCPD_SERVER} stop
}

check_version_older() # $1 base version $2 target version
{
	BASE_VER=$1
	TARGET_VER=$2

	# if no base ver, always reture false
	if [ -z "${BASE_VER}" ]; then
		return 0;
	fi

	# getting major, minor, build
	base_major=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\1/'`
	base_minor=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\2/'`
	base_build=`echo ${BASE_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\3/'`
	target_major=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\1/'`
	target_minor=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\2/'`
	target_build=`echo ${TARGET_VER} | sed 's/^\([0-9]*\)[.-]\([0-9]*\)[.-]\([0-9]*\).*/\3/'`

	# compare major, version must equal or above limitation
	if [ $target_major -lt $base_major ]; then
		return 1;
	elif [ $target_major -gt $base_major ]; then
		return 0;
	fi
	# compare minor
	if [ $target_minor -lt $base_minor ]; then
		return 1;
	elif [ $target_minor -gt $base_minor ]; then
		return 0;
	fi
	# compare build
	if [ $target_build -lt $base_build ]; then
		return 1;
	else
		return 0;
	fi
}

case $1 in
	start)
		# check enabled
		if [ ! -f $PACKAGE_ENABLED ]; then
			exit 0;
		fi

		# check version
		check_version_older $PACKAGE_LIMIT $PACKAGE_VER
		if [ $? -eq "1" ]; then
			echo "package version [$PACKAGE_VER] is older than limit [$PACKAGE_LIMIT], abort"
			exit 1;
		fi

		# start routine
		start

		exit 0
	;;
	stop)
		stop
		exit 0
	;;
	status)
		if [ -e ${APP_PATH} ]; then
			exit 0
		else
			exit 1
		fi
	;;
	killall)
        ;;
	log)
		exit 0
	;;
esac

