#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# guacd
#
# chkconfig:   2345 20 80
# description: Guacamole proxy daemon

### BEGIN INIT INFO
# Provides:          guacd
# Required-Start:    $network $syslog 
# Required-Stop:     $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Guacamole proxy daemon
# Description: The Guacamole proxy daemon, required to translate remote desktop protocols into the text-based Guacamole protocol used by the JavaScript application.
### END INIT INFO

prog="guacd"
exec="/usr/local/sbin/$prog"
pidfile="/var/run/$prog.pid"

# Returns PID of currently running process, if any
getpid() {

    if [ -f "$pidfile" ]
    then

        read PID < "$pidfile"

        # If pidfile contains PID and PID is valid
        if [ -n "$PID" ] && ps "$PID" > /dev/null 2>&1
        then
            echo "$PID"
            return 0
        fi

    fi

    # pidfile/pid not found, or process is dead
    return 1

}

start() {
    [ -x $exec ] || exit 5
    echo -n "Starting $prog: "

    getpid > /dev/null || $exec -p "$pidfile" 
    retval=$?

    case "$retval" in
        0)
            echo "SUCCESS"
            ;;
        *)
            echo "FAIL"
            ;;
    esac

    return $retval
}

stop() {
    echo -n "Stopping $prog: "
    
    PID=`getpid`
    retval=$?

    case "$retval" in
        0)
            if kill $PID > /dev/null 2>&1
            then
                echo "SUCCESS"
                return 0
            fi

            echo "FAIL"
            return 1
            ;;
        *)
            echo "SUCCESS (not running)"
            return 0
            ;;
    esac

}

restart() {
    stop && start
}

force_reload() {
    restart
}

status() {
    
    PID=`getpid`
    retval=$?

    case "$retval" in
        0)
            echo "$prog is running with PID=$PID."
            ;;
        *)
            echo "$prog is not running."
            ;;
    esac

    return $retval

}

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

