#! /bin/sh
#
# Author:	Jaakko Niemi <liiwi@iki.fi>
# Modified from skeleton file in sarge

### BEGIN INIT INFO
# Provides:          tftp-hpa
# Required-Start:    $local_fs $remote_fs $syslog $network
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      1
# Short-Description: HPA's tftp client 
# Description:       tftp server to allow booting clients which support
#                    the PXE protocol.
### END INIT INFO

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="HPA's tftpd"
NAME=in.tftpd-hpa
SCRIPTNAME=/etc/init.d/tftpd-hpa

# Read config file if it is present.
if [ -r /etc/default/tftpd-hpa ]
then
	. /etc/default/tftpd-hpa
fi

DAEMON=/usr/sbin/$NAME
PIDFILE=/var/run/$NAME.pid

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

if [ "$RUN_DAEMON" != "yes" ] ; then
         echo "tftpd-hpa disabled in /etc/default/tftpd-hpa"
	 exit 0
fi

#
#	Function that starts the daemon/service.
#
d_start() {
	start-stop-daemon --start --quiet --exec $DAEMON -- $OPTIONS
}

#
#	Function that stops the daemon/service.
#
d_stop() {
	start-stop-daemon --stop --quiet --name $NAME
}

#
#	Function that sends a SIGHUP to the daemon/service.
#
d_reload() {
	start-stop-daemon --stop --quiet --name $NAME --signal 1
}

case "$1" in
  start)
	echo  "Starting $DESC: $NAME"
	d_start
	echo "."
	;;
  stop)
	echo  "Stopping $DESC: $NAME"
	d_stop
	echo "."
	;;
  #reload)
	#
	#	If the daemon can reload its configuration without
	#	restarting (for example, when it is sent a SIGHUP),
	#	then implement that here.
	#
	#	If the daemon responds to changes in its config file
	#	directly anyway, make this an "exit 0".
	#
	# echo -n "Reloading $DESC configuration..."
	# d_reload
	# echo "done."
  #;;
  restart|force-reload)
	#
	#	If the "reload" option is implemented, move the "force-reload"
	#	option to the "reload" entry above. If not, "force-reload" is
	#	just the same as "restart".
	#
	echo "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	echo "."
	;;
  *)
	# echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0
