#!/bin/bash
#
# cca This shell script takes care of starting the CCA server activator
# (c) 2009 Dirk O. Kaar <dok@dok-net.net>
#
### BEGIN INIT INFO
# Provides: ccad
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Lauching CCA server activator
### END INIT INFO

. /lib/lsb/init-functions
RETVAL=0

PROGBASENAME=ccad
PROGNAME=/usr/bin/${PROGBASENAME}
test -x ${PROGNAME} || exit 0
PIDFILE=/var/run/${PROGBASENAME}.pid

USERNAME=nobody
CCAD_PORT=9088

pidfileofproc() {
	local base=${1##*/}
	if [ -f /var/run/$base.pid ] ; then
		local line p pid=
		read line < /var/run/$base.pid
		for p in $line ; do
			[ -z "${p//[0-9]/}" -a -d /proc/$p ] && pid="$pid $p"
		done
		if [ -n "$pid" ]; then
			echo $pid
			return 0
		fi
	fi
	return 1
}

case "$1" in

start)
	echo -n "Starting CCA server activator"
	if pidfileofproc ${PROGBASENAME} &>/dev/null; then
		echo
		exit 1
	fi
	echo -n > ${PIDFILE}
	chown ${USERNAME} ${PIDFILE}
	chmod 644 ${PIDFILE}
	su - ${USERNAME} -c "${PROGNAME} \
		-ORBendPoint giop:::${CCAD_PORT} \
		--serveractivator \
		-p ${PIDFILE} &"
	for s in 1 2 4 8 16 32 32 32; do
		usleep 100000
		if test -s "${PIDFILE}"; then
			log_success_msg
			echo
			exit 0
		else
			sleep $s
		fi
	done
	log_failure_msg
	echo
	exit 1
    ;;

stop)
	echo -n "Stopping CCA server activator"
	PID=$(pidfileofproc ${PROGBASENAME} 2>/dev/null)
	if test $? -ne 0; then
		echo
		exit 1
	fi
	for s in 1 2 4 8 16 32 32 32; do
		kill -TERM ${PID} &>/dev/null
		usleep 100000
		if pidfileofproc ${PROGBASENAME} &>/dev/null; then
			sleep $s
		else
			break
		fi
	done
	pidfileofproc ${PROGBASENAME} &>/dev/null && kill -KILL ${PID} &>/dev/null
	rm -f ${PIDFILE}
	log_success_msg
	echo
	exit 0
    ;;

try-restart)
	$0 status
	RETVAL=$?
	if test $RETVAL = 0; then
		$0 restart
		RETVAL=$?
	else
		RETVAL=0 # Not running is not a failure.
	fi
	exit $RETVAL
    ;;

restart|reload)
	$0 stop
	$0 start
	RETVAL=$?
	exit $RETVAL
    ;;

status)
	pidfileofproc ${PROGBASENAME} &>/dev/null
	RETVAL=$?
	exit $RETVAL
    ;;

*)
	echo "Usage: $0 {start|stop|try-restart|restart|reload|status}"
	exit 1
	;;
esac
exit $?
