# -*-Shell-script-*-
#
# eyesdn     This file contains functions to be used by all other
#                     eyesdn shell scripts in the /etc/init.d directory.
#

# Source function library.
. /etc/rc.d/init.d/functions

test -x "${DAEMON}" || exit 0

pidfile=${PIDFILE-/var/run/${SRV_NAME}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${SRV_NAME}}

OMG_EYESDN_DISABLED_FILE=/data/eyesdnDisabled
OMG_CONFIG_FILE=/data/config.lua

STOP_TIMEOUT=${STOP_TIMEOUT-10}
USER=root

check_if_disabled()
{
    local RETVAL=1

    test -e "${OMG_EYESDN_DISABLED_FILE}" && RETVAL=0
    if test -r "${OMG_CONFIG_FILE}"; then
        grep -qi "bool  *EyesdnEnabled *= *false" "${OMG_CONFIG_FILE}" && RETVAL=0
    fi
    return ${RETVAL}
}

hard_kill()
{
    local RETVAL=0
    local pid=`ps -aefw | grep "${DAEMON}" | grep -v " grep " | awk '{print $2}'`
    if [ ! -z ${pid} ]; then
        logger -s -t eyesdn "Still found running ${DAEMON} (PID: ${pid}) -> killing it" 2>/dev/null
        kill -9 ${pid}
        RETVAL=$?
    fi
    return ${RETVAL}
}

do_start()
{
    local pid

    mkdir -p $(dirname ${lockfile})
    mkdir -p $(dirname ${pidfile})

    ulimit -c 1000000

    hard_kill

    echo -n $"Starting ${SRV_NAME}: "
    runuser -l "${USER}" -c "${DAEMON} >&/dev/null &" >&/dev/null && echo_success || echo_failure
    RETVAL=$?
    echo
    pid=`ps -aefw | grep "${DAEMON}" | grep -v " grep " | awk '{print $2}'`
    if [ -n "${pid}" ] ;then
        echo ${pid} >${pidfile}
    fi
    if [ ${RETVAL} -eq 0 -a -n "${pid}" ]; then
        logger -s -t eyesdn "Successfully started ${SRV_NAME} (PID: ${pid})" 2>/dev/null
    else
        if [ -n "${pid}" ] ;then
            logger -s -t eyesdn "Found a PID (${pid}) for ${SRV_NAME} although it did not start" 2>/dev/null
	    elif [ ${RETVAL} -eq 0 ]; then
            logger -s -t eyesdn "${SRV_NAME} started, but no PID was found" 2>/dev/null
	    else
            logger -s -t eyesdn "Could not start ${SRV_NAME}" 2>/dev/null
	    fi
    fi

    return ${RETVAL}
}

start()
{
    local RETVAL=0

    if check_if_disabled; then
        echo "${SRV_NAME} is disabled"
        logger -s -t eyesdn "${SRV_NAME} is disabled" 2>/dev/null
        RETVAL=1
    else
        local LOCKED=0
        for i in 1 2 3 4 5 6 7 8 9 0; do
            if [ ! -f "${lockfile}" ] ; then
                break
            else
                if [ ${LOCKED} -eq 0 ]; then
                    echo "${SRV_NAME} is still locked"
                    logger -s -t eyesdn "${SRV_NAME} still locked" 2>/dev/null
                    LOCKED=1
                fi
                sleep 1
            fi
        done
        if status -p ${pidfile} "${DAEMON}"  >/dev/null;then
            echo "already running with PID:$(cat ${pidfile})"
            logger -s -t eyesdn "${SRV_NAME} already running with PID:$(cat ${pidfile})" 2>/dev/null
        else
            touch ${lockfile}
            if ! do_start; then
                RETVAL=1
            fi
            rm -f ${lockfile}
        fi
    fi
    return ${RETVAL}
}

stop()
{
    echo -n $"Stopping ${SRV_NAME}: "
    killproc -p ${pidfile} -d ${STOP_TIMEOUT} "${DAEMON}" >&/dev/null && echo_success || echo_failure
    RETVAL=$?
    echo
    if [ $RETVAL -eq 0 ]; then
        rm -f ${pidfile}
        logger -s -t eyesdn "Stopped ${SRV_NAME}" 2>/dev/null
    else
        logger -s -t eyesdn "Could not stop ${SRV_NAME}" 2>/dev/null
    fi
    if hard_kill; then
        rm -f ${pidfile}
        logger -s -t eyesdn "Killed ${SRV_NAME}" 2>/dev/null
    fi
    rm -f ${lockfile}
}

# See how we were called.
case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    status)
        status -p ${pidfile} "${DAEMON}"
	RETVAL=$?
	;;
    restart)
	stop
	start
	;;
    condrestart|try-restart)
	if status -p ${pidfile} "${DAEMON}" >&/dev/null; then
	    stop
	    start
	fi
	;;
    *)
	echo $"Usage: ${SRV_NAME} {start|stop|restart|condrestart|try-restart|status|help}"
	RETVAL=2
esac
