#!/bin/sh
#
# avahi-daemon: Starts the Avahi mDNS/DNS-SD Stack
#
# chkconfig:   345 24 02
# description: This is a daemon which runs on client machines to \
#              perform Zeroconf service discovery on a \
#              network. avahi-daemon must be running on systems that \
#              use Avahi for service discovery. Avahi-daemon should \
#              not be running otherwise.
# processname: avahi-daemon
# pidfile:     @localstatedir@/run/avahi-daemon/pid

### BEGIN INIT INFO
# Required-Start:    messagebus
# Required-Stop:     messagebus
# Should-Start:      $syslog $network $local_fs
# Should-Stop:       $syslog $local_fs
# Default-Start:     3 4 5
# Default-Stop:      0 1 2 6
# Short-Description: Starts the Avahi Daemon
# Description:       This is a daemon which runs on client machines to
#                    perform Zeroconf service discovery on a
#                    network. avahi-daemon must be running on systems
#                    that use Avahi for service discovery.
#                    Avahi-daemon should not be running otherwise.
### END INIT INFO

AVAHI_BIN=@sbindir@/avahi-daemon
AVAHI_OPTS="-D"

if [ "$1" = 'status' ]; then
    test -x $AVAHI_BIN || exit 4
else
    test -x $AVAHI_BIN || exit 5
fi

# Source function library.
. /etc/init.d/functions
. /etc/sysconfig/network

LOCKFILE=@localstatedir@/lock/subsys/avahi-daemon
PIDFILE=@localstatedir@/run/avahi-daemon/pid
RETVAL=0

base=${0##*/}

start() {
    # Check that networking is configured.
    [ ${NETWORKING} = "no" ] && exit 1

	echo -n $"Starting Avahi daemon... "
	if [ -s /etc/localtime ]; then
	    cp -fp /etc/localtime /etc/avahi/etc >/dev/null 2>&1
	fi;
        daemon --pidfile=${PIDFILE} $AVAHI_BIN $AVAHI_OPTS
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch ${LOCKFILE}
	return $RETVAL
}

stop() {
        echo -n $"Shutting down Avahi daemon: "
        killproc -p ${PIDFILE} $AVAHI_BIN
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
        echo
	return $RETVAL
}

reload() {
        echo -n $"Reloading Avahi daemon... "
        killproc -p ${PIDFILE} $AVAHI_BIN -HUP
	RETVAL=$?
	echo
	return $RETVAL
}

restart() {
	stop
	start
}

RETVAL=0

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
	status -p ${PIDFILE} $AVAHI_BIN
        RETVAL=$?
	;;
  restart)
	restart
	;;
  reload)
        reload
	;;
  condrestart)
  	if [ -f $LOCKFILE ]; then
		restart
	fi
	;;
  *)
	echo $"Usage: $0 {start|stop|status|restart|condrestart}"
	exit 2
        ;;
esac

exit $RETVAL
