#!/bin/sh

### BEGIN INIT INFO
# Provides:          onioncat
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $named tor
# Should-Stop:       tor
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: IP-Transparent Tor hidden service connector
# Description:       OnionCat creates a transparent IP layer on top of Tor hidden
#                    services.
### END INIT INFO

# Do NOT "set -e"

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/ocat
NAME=ocat
NAMEL=onioncat
DESC="OnionCat Tor hidden service connector"
SCRIPTNAME=/etc/init.d/$NAMEL
PIDDIR=/var/run/$NAME
PIDFILE=$PIDDIR/pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

# Default options - overriden by /etc/default/onioncat
DAEMON_OPTS=""
DIETIME=10
STARTTIME=1
DAEMON_USER="onioncat"
ENABLED=no

if [ -f /etc/default/$NAMEL ] ; then
   . /etc/default/$NAMEL
fi

is_true() {
   [ "$1" = "true" ] || [ "$1" = "yes" ] || [ "$1" = "0" ]
}

check_piddir() {
   if test ! -d $PIDDIR; then
      mkdir -m 02700 "$PIDDIR"
      chown onioncat:onioncat "$PIDDIR"

      if ! [ -x $IDDIR ]; then
	 echo "Cannot access '$PIDDIR' directory, are you root?" >&2
	 exit 1
      fi
   fi
}

do_start() {
   if is_true "$ENABLED"; then
      check_piddir
      start-stop-daemon --start --quiet --pidfile $PIDFILE \
         --exec $DAEMON -- -u $DAEMON_USER -P $PIDFILE -C $DAEMON_OPTS \
	 || return 2
   else
      log_warning_msg " $NAMEL disabled, edit /etc/default/$NAMEL to enable."
      exit 0
   fi
}

do_stop() {
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred
   start-stop-daemon --stop --quiet --retry=INT/30/KILL/5 \
      --user $DAEMON_USER --pidfile $PIDFILE --name $NAME
   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   return "$RETVAL"
}

case "$1" in
   start)
	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
	do_start
	case "$?" in
		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
	esac
      ;;

   stop)
      [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
      do_stop
      case "$?" in
	 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
	 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
      esac
      ;;

   restart|force-reload)
      log_daemon_msg "Restarting $DESC" "$NAME"
      do_stop
      case "$?" in
	 0|1)
	    do_start
	    case "$?" in
	       0) log_end_msg 0 ;;
	       1) log_end_msg 1 ;; # Old process is still running
	       *) log_end_msg 1 ;; # Failed to start
	    esac
	    ;;
	 *)
	    # Failed to stop
	    log_end_msg 1
	    ;;
      esac
      ;;

   status)
      if is_true "$ENABLED" ; then
         status_of_proc -p "${PIDFILE}" "${DAEMON}" "${NAME}"
      else
	 echo ""
	 echo "$NAMEL not configured to start"
      fi
      ;;

   *)
      echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
      exit 3
      ;;
esac

exit 0
