#!/bin/bash
#
# chkconfig: 3 98 14
# description: PED server service
# processname: PedServer
#
# Copyright (c) 2019 SafeNet, Inc. All rights reserved.
#
# All rights reserved.  This file contains information that is
# proprietary to SafeNet and may not be distributed
# or copied without written consent from SafeNet.
#

PEDSERVER_NAME="PedServer"

if [ -e /etc/debian_version ] ; then
LOCKFILE="/var/lock/$PEDSERVER_NAME"
. /lib/lsb/init-functions
else
LOCKFILE="/var/lock/subsys/$PEDSERVER_NAME"
. /etc/init.d/functions
fi

CONFIG_FILE="/etc/pedServer.conf"

PEDSERVER_CMD="/usr/safenet/lunaclient/bin/$PEDSERVER_NAME"

RETVAL=0
PROCCOUNT=0

check_proc()
{
    PEDSERVER_PROCESS=$(pgrep -f "$PEDSERVER_CMD")
    if [ "$PEDSERVER_PROCESS" = "" ] ; then
        PROCCOUNT=0
    else
        PROCCOUNT=1
    fi
}


start()
{
    echo -n $"Starting $PEDSERVER_NAME:"
    check_proc

    if [ "$PROCCOUNT" -eq 1 ]; then
        echo "OK"
        if [ "$LOCKFILE" != "" ] ; then
            touch "$LOCKFILE"
        fi
    else
        # Start PedServer
        "$PEDSERVER_CMD" -m start -configfile $CONFIG_FILE -logfilename /dev/null
        sleep 3
        check_proc

        if [ "$PROCCOUNT" -eq 1 ]; then
            echo "OK"
            if [ "$LOCKFILE" != "" ] ; then
                touch "$LOCKFILE"
            fi
        else
            echo "FAILED"
            RETVAL=1
        fi
    fi
}

stop()
{
    echo -n $"Stopping $PEDSERVER_NAME:"
    check_proc

    if [ "$PROCCOUNT" -ne 0 ]; then
        PEDSERVER_PROCESS=$(pgrep -f "$PEDSERVER_CMD")
        if [ "$PEDSERVER_PROCESS" != "" ] ; then
            "$PEDSERVER_CMD" -configfile $CONFIG_FILE -m stop -logfilename /dev/null

            for _ in {1..3} ; do
                # If it is still running we now force kill it
                PEDSERVER_PROCESS=$(pgrep -f "$PEDSERVER_CMD")
                if [ "$PEDSERVER_PROCESS" != "" ] ; then
                        # try three times just in case
                        kill -9 "$PEDSERVER_PROCESS" > /dev/null 2>&1
                fi
            done
        fi

        check_proc
        if [ "$PROCCOUNT" -eq 0 ]; then
            echo "OK"
            if [ "$LOCKFILE" != "" ] ; then
                rm -f "$LOCKFILE"
            fi
        else
            echo "FAILED"
            RETVAL=1
        fi

    else
	echo "OK"
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        PEDSERVER_PROCESS=$(pgrep -f "$PEDSERVER_CMD")
        if [ "$PEDSERVER_PROCESS" != "" ] ; then
            echo "$PEDSERVER_NAME (pid $PEDSERVER_PROCESS) is running..."
        else
            echo "$PEDSERVER_PROCESS is stopped"
        fi
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status}"
        RETVAL=1
        ;;
esac

exit $RETVAL

