#!/usr/bin/env watchman
# Two warnings:
# 1) This script uses a script to run cjdroute and feed it
#    the config. It can be found in the main cjdns repo:
#    contrib/sh/run-cjdroute.sh
#    Or here: http://ix.io/fYT
# 2) service_respawn is disabled by default because you need
#    "noBackground":1 in cjdroute.conf for it to actually work.
#    Barely.

unset reload

#service_respawn=true
service_command='/usr/bin/run-cjdroute'
cjdroute_admin_port='11234'

cjdroute.check_tun_module() {
	[[ -e '/dev/net/tun' ]] || {
		modprobe tun || {
			watchman.err "Could not load module tun!"
			return 1
		}
	}
}

start() {
	cjdroute.check_tun_module || { return 1; }
	watchman.start
}

get_control_pid() {
	lsof -i :"$cjdroute_admin_port" | tail -1 | cut -d ' ' -f 2
}

status() {
	# Check the actual cjdroute process and not the watchdog
	cjdroute_control_pid=$( get_control_pid )

	counter=0
	until kill -0 "$cjdroute_control_pid"; do
		cjdroute_control_pid=$( get_control_pid )
		(( counter >= 5 )) && {
			watchman.msg "cjdroute is down"
			return 1
		}
		(( counter++ ))
		sleep 1
	done

	watchman.msg "cjdroute is running ($cjdroute_control_pid)"
}

stop() {
	[[ "$service_respawn" == 'true' ]] && { watchman.stop; } # stopping the watchdog

	# Stopping the actual s-o-b daemon that won't die properly.
	cjdroute_control_pid=$( get_control_pid )
	watchman.pid_check "$cjdroute_control_pid" && {
		kill "$cjdroute_control_pid"
		watchman.pid_wait "$cjdroute_control_pid"
	}
}