#!/bin/sh

### BEGIN INIT INFO
# Provides:       mosquitto
# Required-Start: $remote_fs $syslog
# Required-Stop:  $remote_fs $syslog
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description: mosquitto MQTT 3.1/3.1.1/5.0 message broker
# Description:
#  This is a message broker that supports version 3.1 of the MQ Telemetry
#  Transport (MQTT) protocol.
#
#  MQTT provides a method of carrying out messaging using a publish/subscribe
#  model. It is lightweight, both in terms of bandwidth usage and ease of
#  implementation. This makes it particularly useful at the edge of the network
#  where a sensor or other simple device may be implemented using an arduino for
#  example.
### END INIT INFO

set -e

NAME=mosquitto
USER=mosquitto
DAEMON=/usr/sbin/mosquitto
PIDDIR=/run/mosquitto
PIDFILE="${PIDDIR}/mosquitto.pid"
LOGDIR=/var/log/mosquitto
CONFFILE=/etc/mosquitto/mosquitto.conf

# /etc/init.d/mosquitto: start and stop the mosquitto MQTT message broker

test -x "$DAEMON" || exit 0

umask 022

. /lib/lsb/init-functions

# Are we running from init?
run_by_init() {
    ([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ]
}

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

create_dirs() {
    mkdir -p "$PIDDIR"
    chown "$USER" "$PIDDIR"
    mkdir -p "$LOGDIR"
    chown "$USER" "$LOGDIR"
}

case "$1" in
    start)
        if init_is_upstart; then
            exit 1
        fi
        create_dirs
        log_daemon_msg "Starting network daemon" "$NAME"
        if start-stop-daemon --user "$USER" --chuid "$USER" --start --quiet --oknodo --background --pidfile "$PIDFILE" --exec "$DAEMON" -- -c "$CONFFILE" ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    stop)
        if init_is_upstart; then
            exit 0
        fi
        log_daemon_msg "Stopping network daemon" "$NAME"
        if start-stop-daemon --user "$USER" --chuid "$USER" --stop --quiet --oknodo --pidfile "$PIDFILE"; then
            log_end_msg 0
            rm -f "$PIDFILE"
        else
            log_end_msg 1
        fi
        ;;

    reload|force-reload)
        if init_is_upstart; then
            exit 1
        fi
        log_daemon_msg "Reloading network daemon configuration" "$NAME"
        if start-stop-daemon --user "$USER" --stop --signal HUP --quiet --oknodo --pidfile "$PIDFILE"; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    restart)
        if init_is_upstart; then
            exit 1
        fi
        log_daemon_msg "Restarting network daemon" "$NAME"
        if start-stop-daemon --user "$USER" --stop --quiet --oknodo --retry 30 --pidfile "$PIDFILE"; then
            rm -f "$PIDFILE"
        fi
        create_dirs
        if start-stop-daemon --user "$USER" --chuid "$USER" --start --quiet --oknodo --background --pidfile "$PIDFILE" --exec "$DAEMON" -- -c "$CONFFILE" ; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
        ;;

    try-restart)
        if init_is_upstart; then
            exit 1
        fi
        log_daemon_msg "Trying to restart network daemon" "$NAME"
        set +e
        start-stop-daemon --user "$USER" --stop --quiet --retry 30 --pidfile "$PIDFILE"
        RET="$?"
        set -e
        case "$RET" in
            0)
                # old daemon stopped
                rm -f "$PIDFILE"
                if start-stop-daemon --user "$USER" --chuid "$USER" --start --quiet --oknodo --background --pidfile "$PIDFILE" --exec "$DAEMON" -- -c "$CONFFILE" ; then
                    log_end_msg 0
                else
                    log_end_msg 1
                fi
                ;;
            1)
                # daemon not running
                log_progress_msg "(not running)"
                log_end_msg 0
                ;;
            *)
                # failed to stop
                log_progress_msg "(failed to stop)"
                log_end_msg 1
                ;;
        esac
        ;;

    status)
        if init_is_upstart; then
            exit 1
        fi
        status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit "$?"
        ;;

    *)
        log_action_msg "Usage: /etc/init.d/mosquitto {start|stop|reload|force-reload|restart|try-restart|status}"
        exit 1
esac

exit 0
