#
# Give Usage Information
#
usage() {
    echo "Usage: $0 [ -q ] [ -v ] [ -n ] [ start|stop|clear|reset|refresh|restart|status|version ]"
    exit $1
}
################################################################################
# E X E C U T I O N    B E G I N S   H E R E				       #
################################################################################
#
# Start trace if first arg is "debug" or "trace"
#
if [ $# -gt 1 ] && [ "x$1" = "xdebug" -o "x$1" = "xtrace" ]; then
    set -x
    shift
fi

initialize

finished=0

while [ $finished -eq 0 -a $# -gt 0 ]; do
    option=$1
    case $option in
	-*)
	    option=${option#-}

	    [ -z "$option" ] && usage 1

	    while [ -n "$option" ]; do
		case $option in
		    v*)
			VERBOSE=$(($VERBOSE + 1 ))
			option=${option#v}
			;;
		    q*)
			VERBOSE=$(($VERBOSE - 1 ))
			option=${option#q}
			;;
		    n*)
			NOROUTES=Yes
			option=${option#n}
			;;
		    *)
			usage 1
			;;
		esac
	    done
	    shift
	    ;;
	*)
	    finished=1
            ;;
    esac
done

if [ $# -ne 1 ]; then
    usage 2
else
    COMMAND="$1"
fi

[ -n "${PRODUCT:=Shorewall}" ]

case "$COMMAND" in
    start)
	if shorewall_is_started; then
	    error_message "$PRODUCT is already Running"
	    status=0
	else
	    progress_message3 "Starting $PRODUCT...."
	    define_firewall
	    status=$?
	    [ -n "$SUBSYSLOCK" -a $status -eq 0 ] && touch $SUBSYSLOCK
	    progress_message3 "done."
	fi
	;;
    stop)
	progress_message3 "Stopping $PRODUCT...."
	stop_firewall
	status=0
	[ -n "$SUBSYSLOCK" ] && rm -f $SUBSYSLOCK
	progress_message3 "done."
	;;
    reset)
	if ! shorewall_is_started ; then
	    error_message "$PRODUCT is not running"
	    status=2
	else
	    $IPTABLES -Z
	    $IPTABLES -t nat -Z
	    $IPTABLES -t mangle -Z
	    date > ${VARDIR}/restarted
	    status=0
	    progress_message3 "$PRODUCT Counters Reset"
	fi
	;;
    restart)
	if shorewall_is_started; then
	    progress_message3 "Restarting $PRODUCT...."
	else
	    error_message "$PRODUCT is not running"
	    progress_message3 "Starting $PRODUCT...."
	fi

	define_firewall
	status=$?
	if [ -n "$SUBSYSLOCK" ]; then
 	    [ $status -eq 0 ] && touch $SUBSYSLOCK || rm -f $SUBSYSLOCK
        fi
	progress_message3 "done."
	;;
    refresh)
	if shorewall_is_started; then
	    progress_message3 "Refreshing $PRODUCT...."
	    refresh_firewall
	    status=$?
	    progress_message3 "done."
	else
	    echo "$PRODUCT is not running" >&2
	    status=2
	fi
	;;
    restore)
	restore_firewall
	status=$?
	if [ -n "$SUBSYSLOCK" ]; then
 	    [ $status -eq 0 ] && touch $SUBSYSLOCK || rm -f $SUBSYSLOCK
        fi
	;;
    clear)
	progress_message3 "Clearing $PRODUCT...."
	clear_firewall
	status=0
	[ -n "$SUBSYSLOCK" ] && rm -f $SUBSYSLOCK
	progress_message3 "done."
	;;
    status)
	echo "$PRODUCT-$VERSION Status at $HOSTNAME - $(date)"
	echo
	if shorewall_is_started; then
	    echo "$PRODUCT is running"
	    status=0
	else
	    echo "$PRODUCT is stopped"
	    status=4
	fi

	if [ -f ${VARDIR}/state ]; then
	    state="$(cat ${VARDIR}/state)"
	    case $state in
		Stopped*|Clear*)
		    status=3
		    ;;
	    esac
	else
	    state=Unknown
	fi
	echo "State:$state"
	echo
	;;
    version)
	echo $VERSION
	status=0
	;;
    help)
	usage 0
	;;
    *)
	usage 2
	;;
esac

exit $status
