#!/bin/sh

### BEGIN INIT INFO
# Provides:          sw-cp-server
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     1 2 3 4 5
# Default-Stop:      0 6
# Short-Description: SWsoft control panels server
# Description:       HTTP server for SWsoft control panels based on lighttp
### END INIT INFO

sw_cpserver_start () {
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMONARGS
}

sw_cpserver_stop () {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --signal $1
}

sw_rc_status ()
{
    if [ $? -eq 0 ]; then
	echo ok
    else
	echo failed
	return 1
    fi
}
DAEMON=/usr/sbin/sw-cp-serverd
test -x $DAEMON || exit 5

DESC="SWsoft control panels server"

PIDFILE=/var/lib/sw-cp-server/sw-cp-server.pid

CONFIGFILE=/etc/sw-cp-server/config
DAEMONARGS="-f $CONFIGFILE"

# defines sw_check_pid_result
# one of NONE, OK, STALE
sw_check_pid()
{
    pid=`cat "$PIDFILE" 2>/dev/null`
    if [ $? -ne 0 ]; then
	sw_check_pid_result=NONE
	return
    fi

    if ps -o comm -p "$pid"|tail -n +1|grep -q sw-cp-serverd; then
        sw_check_pid_result=OK
    else
        sw_check_pid_result=STALE
    fi
}

sw_stop_wait()
{
    local i=0
    while [ $i -lt 10 ]; do
	sw_check_pid
	case $sw_check_pid_result in
	OK) ;;
	NONE) return 0;;
	STALE)
	    echo -n " stale pidfile. "
	    rm -f "$PIDFILE"
	    return 0
	    ;;
	esac
	sleep 1
	i=`expr $i + 1`
    done
    echo -n " still running. "
    return 1
}

case "$1" in
    start)
        echo -n "Starting $DESC..."
        sw_cpserver_start
        sw_rc_status
        ;;
    stop)
        echo -n "Stoppping $DESC..."
        sw_cpserver_stop TERM
	sw_stop_wait
        sw_rc_status
        ;;
    restart|reload|force-reload)
        echo -n "Restarting $DESC..."
	sw_cpserver_stop TERM
	if sw_stop_wait; then
	    sw_cpserver_start
	else
	    false
	fi
        sw_rc_status
        ;;
    *)
        echo "Usage: $0 (start|stop|reload|force-reload|restart)"
        exit 1
esac

