#!/bin/sh

NAME="urbackup_client"
PREFIX=/usr/local
DAEMON=$PREFIX/sbin/urbackup_client
if ! test -x $DAEMON
then
    PREFIX=/usr
    DAEMON=$PREFIX/sbin/urbackup_client
fi

DAEMON_DIR="/usr/local/var"
if ! test -e $DAEMON_DIR/urbackup/backup_client.db.template
then
    DAEMON_DIR="/var"
    if ! test -e $DAEMON_DIR/urbackup/backup_client.db.template
    then
	DAEMON_DIR="/usr/var"
    fi
fi

DAEMON_LIBS="$PREFIX/lib"
if ! test -e $DAEMON_LIBS/liburbackupclient_fileservplugin.so
then
	DAEMON_LIBS="$PREFIX/lib64"
	if ! test -e $DAEMON_LIBS/liburbackupclient_fileservplugin.so
	then
		DAEMON_LIBS="/lib"
	fi
fi

DAEMON_PLUGINS="--plugin $DAEMON_LIBS/liburbackupclient_fileservplugin.so --plugin $DAEMON_LIBS/liburbackupclient_fsimageplugin.so --plugin $DAEMON_LIBS/liburbackupclient_cryptoplugin.so --plugin $DAEMON_LIBS/liburbackupclient.so --workingdir $DAEMON_DIR --server false --no-server"
S_DAEMON="--daemon"

print_help()
{
	echo "UrBackup Client wrapper script. Starts UrBackup Client daemon process."
	echo "Parameters:"
	echo "--logfile {file}	Specifies the log file name. Default: urbackup_client.log"
	echo "--loglevel {debug|info|warn|error}	Specifies the log level. Possible values: debug, info, warn, error. Default: warn"
	echo "--no_daemon	Do not start as a daemon"
	echo "--pidfile {file}		Save pid of daemon in file"
	echo ""
	echo "Have a nice day!"
	exit 0
}

print_version()
{
	echo "UrBackup Client v1.4.11"
	echo "Copyright (C) 2011-2015 Martin Raiber"
	echo "This is free software; see the source for copying conditions. There is NO"
	echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
	exit 0
}

RUN_IN_GDB=0
RUN_IN_VALGRIND=0

GETOPT=getopt

if test -x $PREFIX/bin/getopt
then
	GETOPT=$PREFIX/bin/getopt
fi

if `$GETOPT -T > /dev/null 2>&1`; [ $? = 4 ]; then
	LOGFILE="urbackup_client.log"
	LOGLEVEL="warn"
	PIDFILE="/var/run/urbackup_client.pid"
	INTERNETONLY=""
	TEMP=`$GETOPT -o f:h:l:v -n start_urbackup_client --long version,no_daemon,help,logfile:,loglevel:,pidfile:,run_in_gdb,run_in_valgrind,internetonly -- "$@"`
	eval set -- "$TEMP"
	while true ; do
		case "$1" in
			-l|--logfile) LOGFILE="$2"; shift 2 ;;
			-v|--loglevel) LOGLEVEL="$2"; shift 2 ;;
			--pidfile) PIDFILE="$2"; shift 2 ;;
			--no_daemon) S_DAEMON=""; shift ;;
			--run_in_gdb) RUN_IN_GDB=1; shift ;;
			--run_in_valgrind) RUN_IN_VALGRIND=1; shift ;;
			--internetonly) INTERNETONLY="--internet_only_mode true"; shift ;;
			--help) print_help ;;
			--version) print_version ;;
			--) shift; break ;;
			*) echo "error!" ; exit 1 ;;
		esac
	done
	
	if [ "x$RUN_IN_GDB" = "x1" ]
	then
		S_DAEMON=""
	fi
	
	if [ "x$RUN_IN_VALGRIND" = "x1" ]
	then
		S_DAEMON=""
	fi
	
	DAEMON_ARGS="--logfile /var/log/$LOGFILE --loglevel $LOGLEVEL --pidfile $PIDFILE $INTERNETONLY"
else
	DAEMON_ARGS="$*"
fi


# Exit if the package is not installed
if [ ! -x $DAEMON ]
then
    echo "Client binary not found"
fi

ulimit -n 10000 > /dev/null 2>&1

DAEMON_ARGS="$DAEMON_PLUGINS $DAEMON_ARGS"

cd $DAEMON_DIR
if [ "x$RUN_IN_GDB" = "x1" ]
then
	gdb --args $DAEMON $S_DAEMON $DAEMON_ARGS
elif [ "x$RUN_IN_VALGRIND" = "x1" ]
then
	valgrind --leak-check=full --track-origins=yes $DAEMON $S_DAEMON $DAEMON_ARGS --leak_check true
else
	exec $DAEMON $S_DAEMON $DAEMON_ARGS
fi
