#!/bin/sh
#
# pingcntl: echolot control + wrapper
# Written by admin@arancio.net, peter@palfrader.org

set -e

################################################################
# You perhaps want to change those items

USER=pinger
VERBOSE=0
BASEDIR="/home/pinger/echolot"
PINGD="$BASEDIR/pingd"
PIDFILE="$BASEDIR/pingd.pid"

# You probably don't want to mess with stuff below this line
################################################################

CHECKULIMIT=1
CHECKUID=1


wait_for_deaddaemon () {
	PID=$1
	sleep 3
	if test -n "$PID"
	then
		if kill -0 $PID 2>/dev/null
		then
			echo -n "Waiting for pid $PID ."
			cnt=0
			while kill -0 $PID 2>/dev/null
			do
				cnt=`expr $cnt + 1`
				if [ $cnt -gt 30 ]
				then
					echo " Failed.. "
					exit 1;
				fi
				sleep 2
				echo -n "."
			done
			rm -f $PIDFILE
		else
			rm -f $PIDFILE
		fi
	fi
}


# Check for evil ulimits
if [ "$CHECKULIMIT" -gt "0" ]; then
	FDs=`ulimit -n`
	HFDs=`ulimit -H -n`
	if [ "$FDs" -lt "512" ]; then
		if [ "$HFDs" -lt "512" ]; then
			echo "Hardlimit for open File Descriptors is less than 512." >&2
			echo "Please consider raising it." >&2
			if [ "$FDs" -lt "$HFDs" ]; then
				echo "Raising it to $HFDs" >&2
				ulimit -n $HFDs
			fi
		else
			if [ "$HFDs" -lt "1024" ]; then
				FDs=$HFDs
			else
				FDs=1024
			fi
			echo "Softlimit for open File Descriptors is less than 512." >&2
			echo "Raising it to $FDs" >&2
			ulimit -n $FDs
		fi
	fi
fi


# Check for right User
SU=""
if [ "$CHECKUID" -gt "0" ]; then
	CUID=`id -u`
	CUIDNAME=`id -nu`
	if [ "$CUIDNAME" = "$USER" ]; then
		SU=""
	elif [ "$CUID" = "0" ]; then
		SU="su $USER -c"
	else
		echo "You are neither $USER nor root. Aborting." >&2
		exit 1;
	fi
fi

# set VERBOSE
if [ $VERBOSE -gt 0 ]; then
	VERBOSE="--verbose"
else
	VERBOSE=""
fi


case $1 in

start)
	if [ -f $PIDFILE ] ; then
		PID=`cat $PIDFILE 2>/dev/null` || true
		if kill -0 $PID 2>/dev/null
		then
			echo "pingd already running."
			exit 0
		else
			echo -n "Removing stale pid file: "
			rm -f $PIDFILE
			echo "$PIDFILE."
		fi
	fi
	echo -n "Starting Echolot: pingd" 
	if [ ! -z "$SU" ]; then
		$SU "$PINGD --detach $VERBOSE start"
	else
		$PINGD --detach $VERBOSE start
	fi
	echo "."
	;;

stop)
	echo -n "Stopping Echolot: pingd" 
	if [ ! -z "$SU" ]; then
 		$SU "$PINGD stop"
	else
 		$PINGD stop
	fi
	echo "."
	;;

reload|force-reload|restart)
	PID=`cat $PIDFILE 2>/dev/null` || true
	$0 stop
	wait_for_deaddaemon $PID
	$0 start
	;;
*)
	echo "Usage: $0 (start|stop|reload|force-reload|restart)" >&2
	exit 1
	;;
esac

exit 0

# vim:set ts=2:
# vim:set shiftwidth=2: