#!/bin/sh
#
# bluetooth    Bluetooth subsystem
#
# chkconfig: 345 35 90
# description: Bluetooth subsystem
#

# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

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

DESC="Bluetooth subsystem"

HCID_NAME=hcid
SDPD_NAME=sdpd
HIDD_NAME=hidd
HID2HCI_NAME=hid2hci
RFCOMM_NAME=rfcomm
PAND_NAME=pand
DUND_NAME=dund

HCID_EXEC="/usr/sbin/$HCID_NAME"
HCID_LOCKFILE="/var/lock/subsys/$HCID_NAME"

SDPD_EXEC="/usr/sbin/$SDPD_NAME"
SDPD_LOCKFILE="/var/lock/subsys/$SDPD_NAME"

HIDD_EXEC="/usr/bin/$HIDD_NAME"
HIDD_LOCKFILE="/var/lock/subsys/$HIDD_NAME"

HID2HCI_EXEC="/usr/sbin/$HID2HCI_NAME"
RFCOMM_EXEC="/usr/bin/$RFCOMM_NAME"

PAND_EXEC="/usr/bin/$PAND_NAME"
PAND_LOCKFILE="/var/lock/subsys/$PAND_NAME"
PAND_PIDFILE="/var/run/$PAND_NAME.pid"

DUND_EXEC="/usr/bin/$DUND_NAME"
DUND_LOCKFILE="/var/lock/subsys/$DUND_NAME"

# Source service configuration.
if [ -f /etc/sysconfig/bluetooth ]; then
    . /etc/sysconfig/bluetooth
else
    echo "${0##*/}: configfile /etc/sysconfig/bluetooth does NOT exist!"
    exit 1
fi

RETVAL=0

start()
{
    echo "Starting $DESC"
    
    if $HCID_ENABLE && [ -x "$HCID_EXEC" -a -f "$HCID_CONFIG" ] ; then
        start_daemon --lockfile "$HCID_LOCKFILE" -- "$HCID_EXEC" -f "$HCID_CONFIG"
    fi
        
    if $SDPD_ENABLE && [ -x "$SDPD_EXEC" ] ; then
        start_daemon --lockfile "$SDPD_LOCKFILE" -- "$SDPD_EXEC"
    fi
    
    if $HIDD_ENABLE && [ -x "$HIDD_EXEC" -a -n "$HIDD_OPTIONS" ] ; then
        start_daemon --lockfile "$HIDD_LOCKFILE" -- "$HIDD_EXEC" "$HIDD_OPTIONS"
    fi
    
    if $HID2HCI_ENABLE && [ -x "$HID2HCI_EXEC" ] ; then
        start_daemon -- "$HID2HCI_EXEC" -q "$HID2HCI_OPTIONS"
    fi
    
    if $RFCOMM_ENABLE && [ -x "$RFCOMM_EXEC" -a -f "$RFCOMM_CONFIG" ] ; then
        sleep 1
        action "Binding RFCOMM connections:" "$RFCOMM_EXEC" -f "$RFCOMM_CONFIG" bind all
    fi
    
    if $DUND_ENABLE && [ -x "$DUND_EXEC" -a -n "$DUND_OPTIONS" ] ; then
        start_daemon --lockfile "$DUND_LOCKFILE" -- "$DUND_EXEC" "$DUND_OPTIONS"
    fi
    
    if $PAND_ENABLE && [ -x "$PAND_EXEC" -a -n "$PAND_OPTIONS" ] ; then
        start_daemon --lockfile "$PAND_LOCKFILE" --pidfile "$PAND_PIDFILE" -- \
            "$PAND_EXEC" "$PAND_OPTIONS" -P "$PAND_PIDFILE"
    fi

    echo ""
}

stop()
{
    echo "Stopping $DESC"
        
    if $PAND_ENABLE && [ -x "$PAND_EXEC" -a -n "$PAND_OPTIONS" ] ; then
#        msg_stopping "PAND connections"
#        start_daemon --no-announce -- "$PAND_EXEC" --killall
        stop_daemon --lockfile "$PAND_LOCKFILE" --pidfile "$PAND_PIDFILE" "$PAND_NAME"
    fi
        
    if $DUND_ENABLE && [ -x "$DUND_EXEC" -a -n "$DUND_OPTIONS" ] ; then
#        msg_stopping "DUND connections"
#        start_daemon --no-announce -- "$DUND_EXEC" --killall
        stop_daemon --lockfile "$DUND_LOCKFILE" "$DUND_NAME"
    fi
        
    if $RFCOMM_ENABLE && [ -x "$RFCOMM_EXEC" -a -f "$RFCOMM_CONFIG" ] ; then
        action "Unbinding RFCOMM connections:" "$RFCOMM_EXEC" -f "$RFCOMM_CONFIG" release all
    fi

    if $HIDD_ENABLE && [ -x "$HIDD_EXEC" ] ; then
        stop_daemon --lockfile "$HIDD_LOCKFILE" "$HIDD_NAME"
    fi
    
    stop_daemon --lockfile "$SDPD_LOCKFILE" "$SDPD_NAME"
    stop_daemon --lockfile "$HCID_LOCKFILE" "$HCID_NAME"
        
#	RETVAL=$?
#	killall -9 krfcommd ||:
#	rmmod rfcomm l2cap ||:
    echo ""
}

restart()
{
	stop
	start
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
        reload|restart)
		restart
                ;;
        condstop)
	        if [ -e "$LOCKFILE" ]; then
		        stop
		fi
		;;
	condrestart)
		if [ -e "$LOCKFILE" ]; then
		        restart
		fi
		;;
	status)
		status "$HCID_EXEC"
                status "$SDPD_EXEC"
                status "$HIDD_EXEC"
                status "$DUND_EXEC"
                status "$PAND_EXEC"
		;;
	*)
		echo "Usage: ${0##*/} {start|stop|reload|restart|condstop|condrestart|status}"
		RETVAL=1
		;;
esac

exit $RETVAL
