#!/bin/bash
# squid-homol	This shell script takes care of starting and stopping
#		Squid Internet Object Cache
#
# chkconfig: - 90 25
# description: Squid - Internet Object Cache. Internet object caching is \
# 	a way to store requested Internet objects (i.e., data available \
# 	via the HTTP, FTP, and gopher protocols) on a system closer to the \
#	requesting site than to the source. Web browsers can then use the \
#	local Squid cache as a proxy HTTP server, reducing access time as \
#	well as bandwidth consumption.
# pidfile: /var/run/squid-homol.pid
# config: /etc/squid/squid-homol.conf

PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH

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

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

# don't raise an error if the config file is incomplete
# set defaults instead:
SQUID_OPTS=${SQUID_OPTS:-"-D"}
SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

# determine the name of the squid binary
[ -f /usr/sbin/squid ] && SQUID=squid

prog="$SQUID-homol"

# determine which one is the cache_swap directory
CACHE_SWAP=`sed -e 's/#.*//g' /etc/squid/squid-homol.conf | \
	grep cache_dir |  awk '{ print $3 }'`
[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/var/spool/squid-homol

RETVAL=0

start() {

        #check if the squid conf file is present
        if [ ! -f /etc/squid/squid-homol.conf ]; then
            echo "Configuration file /etc/squid/squid-homol.conf missing" 1>&2
            exit 6
        fi
        . /etc/sysconfig/squid-homol

        # don't raise an error if the config file is incomplete.
        # set defaults instead:
        SQUID_OPTS=${SQUID_OPTS:-"-D"}
        SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20}
        SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

        if [ -z "$SQUID" ]; then
                echo "Insufficient privilege" 1>&2
                exit 4
        fi

        for adir in $CACHE_SWAP; do
        if [ ! -d $adir/00 ]; then
	     echo -n "init_cache_dir $adir... "
	     $SQUID -f /etc/squid/squid-homol.conf -z -F -D >> /var/log/squid-dev/squid.out 2>&1
	fi
    done
    echo -n $"Starting $prog: "
    $SQUID $SQUID_OPTS >> /var/log/squid-homol/squid.out 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
       timeout=0;
       while : ; do
          [ ! -f /var/run/squid-homol.pid ] || break
	  if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then
	     RETVAL=1
	     break
	  fi
	  sleep 1 && echo -n "."
	  timeout=$((timeout+1))
       done
    fi
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID-homol
    [ $RETVAL -eq 0 ] && echo_success
    [ $RETVAL -ne 0 ] && echo_failure
    echo
    return $RETVAL
}

stop() {
    . /etc/sysconfig/squid-homol

    # don't raise an error if the config file is incomplete.
    # set defaults instead:
    SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100}

    echo -n  $"Stopping $prog: "
    $SQUID -f /etc/squid/squid-homol.conf -k check >> /var/log/squid-dev/squid.out 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
        $SQUID -f /etc/squid/squid-homol.conf -k shutdown &
    	rm -f /var/lock/subsys/$SQUID-homol
	timeout=0
 	while : ; do
		[ -f /var/run/squid-homol.pid ] || break
		if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then
		    echo
		    return 1
		fi
		sleep 2 && echo -n "."
		timeout=$((timeout+2))
    	done
	echo_success
	echo
    else
    	echo_failure
	if [ ! -e /var/lock/subsys/$SQUID-homol ]; then
		RETVAL=0
	fi
	echo
    fi
    return $RETVAL
}

reload() {
    . /etc/sysconfig/squid-homol
    # don't raise an error if the config file is incomplete.
    # set defaults instead:
    SQUID_OPTS=${SQUID_OPTS:-"-D"}

    $SQUID $SQUID_OPTS -k reconfigure
}

restart() {
    stop
    start
}

condrestart() {
    [ -e /var/lock/subsys/squid-homol ] && restart || :
}

rhstatus() {
    status $SQUID && $SQUID -k check
}

probe() {
    return 0
}

case "$1" in
start)
    start
    ;;

stop)
    stop
    ;;

reload)
    reload
    ;;

restart)
    restart
    ;;

condrestart)
    condrestart
    ;;

status)
    rhstatus
    ;;

probe)
    exit 0
    ;;

*)
    echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
    exit 2
esac

exit $?