#!/bin/bash
# VERSION=8
# CHANGES="beroAvahi enabled by default"

if [ -x /usr/local/bin/beroconf ]; then
	BEROCONF=/usr/local/bin/beroconf
else
	BEROCONF=/usr/fallback/beroconf
fi

BEROAVAHI=/usr/local/sbin/beroAvahi
BEROAVAHI_UPD=/usr/local/sbin/beroAvahi-update-service
RUNPATH=/var/run/beroAvahi
PUBPATH=${RUNPATH}/publish
BRWSPATH=${RUNPATH}/browse

PIDFILE=${RUNPATH}/beroAvahi.pid
PUBFILE=${PUBPATH}/services

BROWSE_SERVICES="_workstation._tcp;_ssh._tcp;_beroFOG._udp;"

PREFIX="[init_beroAvahi]"

function create_dirs {

	if [ ! -d ${RUNPATH} ]; then
		mkdir -p ${RUNPATH}
	fi

	if [ ! -d ${PUBPATH} ]; then
		mkdir -p ${PUBPATH}
	fi

	if [ ! -d ${BRWSPATH} ]; then
		mkdir -p ${BRWSPATH}
	fi

	chmod -R 0777 ${RUNPATH}
}

function remove_dirs {

	if [ -d ${BRWSPATH} ]; then
		rm -rf "${BRWSPATH}/*"
	fi

	rm -f ${PIDFILE}
}

function init_services {

	touch ${PUBFILE}
	chmod 0666 ${PUBFILE}

	# announce HTTP per default
	${BEROAVAHI_UPD} add "beroGUI" "_http._tcp" 80 "path=/;"

	# announce SIP per default
	if [ -f /usr/conf/isgw.sip ]; then
		sip_port=$(expr match "$(cat /usr/conf/isgw.sip)" ".*sip_address=.*:\([0-9]\{0,5\}\)")
	else
		sip_port=5060
	fi
	${BEROAVAHI_UPD} add "beroSIP" "_sip._udp" ${sip_port}

	# and then retrieve the list of services to be published
	services_list="$(${BEROCONF} get root beroAvahi-services | grep -v failed)"

	# publish ssh if it's in list
	if [ ! -z $(expr match "${services_list}" "\(.*ssh\)") ]; then
		${BEROAVAHI_UPD} add "beroSSH" "_ssh._tcp" 22
	fi

	# publish sftp if it's in list
	if [ ! -z $(expr match "${services_list}" "\(.*sftp\)") ]; then
		${BEROAVAHI_UPD} add "beroSFTP" "_sftp-ssh._tcp" 22
	fi
}

function deinit_services {

	${BEROAVAHI_UPD} rem "beroGUI" "_http._tcp" 80 "path=/;"
	${BEROAVAHI_UPD} rem "beroSSH" "_ssh._tcp" 22
	${BEROAVAHI_UPD} rem "beroSFTP" "_sftp-ssh._tcp" 22
	${BEROAVAHI_UPD} rem "beroSIP" "_sip._udp" 5060
}

case "${1}" in
	start)
		avahi_enabled=$(${BEROCONF} get root beroAvahi-enabled | grep -v failed)
		if [ "${avahi_enabled}" != "1" ] && [ "${avahi_enabled}" != "yes" ]; then
		 	echo "${PREFIX} disabled in root.db, leaving."
		 	exit 0
		fi

		if [ -f ${PIDFILE} ]; then
			echo "${PREFIX} beroAvahi seems to be running, maybe you should delete ${PIDFILE}."
			exit 1
		fi

		echo "${PREFIX} starting..."
		/sbin/ifconfig eth0 multicast > /dev/null
		create_dirs
		init_services
		sleep 2
		/sbin/start-stop-daemon --start -b -m -p ${PIDFILE} -x ${BEROAVAHI} -- -s ${BROWSE_SERVICES}
		;;
	stop)
		echo "${PREFIX} stopping..."
		/sbin/start-stop-daemon --stop -p ${PIDFILE} -x ${BEROAVAHI}
		sleep 2
		killall -9 beroAvahi 2> /dev/null
		deinit_services
		remove_dirs
		/sbin/ifconfig eth0 -multicast > /dev/null
		;;
	restart)
		${0} stop
		${0} start
		;;
	restart-only)
		/sbin/start-stop-daemon --stop -p ${PIDFILE} -x ${BEROAVAHI}
		killall -9 beroAvahi 2> /dev/null
		rm -f "${PIDFILE}"
		rm -rf "${BRWSPATH}"
		/sbin/start-stop-daemon --start -b -m -p ${PIDFILE} -x ${BEROAVAHI} -- -s ${BROWSE_SERVICES}
		;;
	*)
		echo "Usage: ${0} {start|stop|restart|restart-only}" >&2
		exit 1
		;;
esac
