#!/bin/sh
#
# startup script for firebird with tcpserver
#
# chkconfig: 2345 80 20
# description: Start firebird through tcpserver.
# Written by NONO http://www.asahi-net.or.jp/~aa4t-nngk/

MYPROGPATH=/opt/firebird/bin/
MYPROG=fb_inet_server
NICKNAME=firebird
SVCNAME=gds_db
TESTCHAR=tcpserver
TEST2CHAR=$SVCNAME
PIDFILE=/var/run/${NICKNAME}.pid
LOCKFILE=/var/lock/subsys/$NICKNAME
RETRY=5

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Check if main binary is exectable
[ -x ${MYPROGPATH}$MYPROG ] || exit 1

# Read firebird-tcpserver options ($OPT variable) from file.
if [ -r /etc/tcp-firebird.conf ]; then
  . /etc/tcp-firebird.conf
fi

# See how we were called.
start() {
	# Start daemons.
	PATH="$MYPROGPATH:/usr/local/bin:$PATH"
	echo -n $"Starting $NICKNAME: "

	# See if it is already running.
	if [ -f $LOCKFILE ]; then
		failure
		echo
		return 1
	fi

	tcpserver -H -R -l 0 $OPT -u firebird -g firebird \
 -x /etc/service/tcp.firebird.cdb 0 $SVCNAME \
 $MYPROG 2>&1 | logger -p daemon.info -t $NICKNAME &
	RETVAL=$?
	if [ $RETVAL -ne 0 ] ; then
		failure
		echo
		return 1
	fi

	# Create lock and pid file.
	COUNT=0
	while :; do
		[ -s $PIDFILE ] && break
		if [ $COUNT -gt $RETRY ] ; then
			echo $"$NICKNAME started BUT could NOT create PIDFILE" >&2
			return 0
		fi
		{ detectpid $TESTCHAR $TEST2CHAR >$PIDFILE; } 2>/dev/null
		: $((COUNT+=1))
	done
	touch $LOCKFILE
	success
	echo
	return 0
}

stop() {
	# Stop daemons. Killproc always removes pid file.
	PATH="$MYPROGPATH:/usr/local/bin:$PATH"
	echo -n $"Stopping $NICKNAME: "
	if [ "$1" = "-force" ]; then
		killproc $NICKNAME &>/dev/null
		rm -f $LOCKFILE
		RETVAL=$?
		PIDVAL=$(detectpid $TESTCHAR $TEST2CHAR)
		[ $RETVAL -eq 0 -a -z "$PIDVAL" ] && success
	else
		killproc $NICKNAME
		RETVAL=$?
		if [ $RETVAL -eq 0 ]; then
			rm -f $LOCKFILE
		fi
	fi
	echo
	return $RETVAL
}

case "$1" in
  start)
        start
        RETVAL=$?
        ;;
  stop)
        stop
        RETVAL=$?
        ;;
  forcestop)
        stop -force
        RETVAL=$?
        ;;
  restart)
        stop
        start
        RETVAL=$?
        ;;
  forcerestart)
        stop -force
        start
        RETVAL=$?
        ;;
  *)
        echo "Usage: $NICKNAME {start|stop|forcestop|restart|forcerestart}"
        exit 1
esac

exit $RETVAL
