#!/bin/sh -e

### BEGIN INIT INFO
# Provides:          minissdpd
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $local_fs $network $time
# Should-Stop:       $local_fs $network $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: keep memory of all UPnP devices that announced themselves
# Description:       MiniSSDPd is a small daemon used by MiniUPnPc (a UPnP control point for IGD
#                    devices) to speed up device discoveries. MiniSSDPd keep memory of all UPnP
#                    devices that announced themselves on the network through SSDP NOTIFY packets.
#                    MiniSSDPd also has the ability to handle all SSDP traffic recieved on a
#                    computer via the multicast group 239.255.255.250:1900.
### END INIT INFO

DESC="UPnP devices daemon"
NAME="MiniSSDPd"

. /lib/lsb/init-functions
if [ -r /lib/init/vars.sh ] ; then
	. /lib/init/vars.sh
fi

# Exit if package is removed but not purged
if ! [ -x /usr/sbin/minissdpd ] ; then
	exit 0
fi

case "$1" in
start)
	if [ -f "/etc/default/minissdpd" ] ; then
		. /etc/default/minissdpd
	else
		log_daemon_msg "MiniSSDPd: Default file not found: exiting"
		log_end_msg 1
		exit 1
	fi

	if ! [ "${START_DAEMON}" = "1" ] ; then
		log_daemon_msg "MiniSSDPd: /etc/default/minissdpd isn't set to START_DAEMON=1: exiting"
		log_end_msg 1
		exit 1
	fi

	if [ -z ${MiniSSDPd_INTERFACE_ADDRESS} ] ; then
		log_daemon_msg "MiniSSDPd: no interface defined: exiting"
		log_end_msg 1
		exit 1
	fi

	log_daemon_msg "Starting ${DESC}" ${NAME}

	listening_ip=
	for ip_or_iface in ${MiniSSDPd_INTERFACE_ADDRESS} ; do
		listening_ip="${listening_ip} -i ${ip_or_iface}"
	done

	start-stop-daemon --start --pidfile /var/run/minissdpd.pid --exec "/usr/sbin/minissdpd" -- ${listening_ip} ${MiniSSDPd_OTHER_OPTIONS}
	RET=$?
	if [ ${RET} = 0 -o ${RET} = 1 ] ; then
		log_end_msg 0
	else
		log_end_msg 1
		exit 1
	fi
;;
stop)
	log_daemon_msg "Stopping ${DESC}" ${NAME}
	start-stop-daemon --stop --oknodo --pidfile /var/run/minissdpd.pid
	RET=$?
	if [ ${RET} = 0 -o ${RET} = 1 ] ; then
		log_end_msg $?
	else
		log_end_msg 1
		exit 1
	fi
;;
status)
	status_of_proc "/usr/sbin/minissdpd" ${NAME}
	exit $?
;;
restart|reload|force-reload)
	$0 stop
	sleep 1
	$0 start
;;
*)
	echo "Usage: ${0} {start|stop|status|restart|reload}"
	exit 1
esac

exit 0
