#!/sbin/runscript
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

opts="${opts} reload fetch flush"

depend() {
	use net
}

processOpts() {
	local retVal=1

	DNETPATH="/opt/distributed.net"
	DNETBIN="${DNETPATH}/dnetc"

	STARTOPTS="--start --chuid dnetc:dnetc --quiet \
		--exec ${DNETBIN}"

	DNETOPTS="-quiet"

	if [ -e /etc/dnetc.ini ] ; then
		retVal=0
		DNETOPTS="${DNETOPTS} -ini /etc/dnetc.ini"
	elif [ -e ${DNETPATH}/dnetc.ini ]; then
		retVal=0
		DNETOPTS="${DNETOPTS} -ini ${DNETPATH}/dnetc.ini"
	elif [ ! -z ${EMAIL} ]; then
		retVal=0
	fi

	# override ini settings with values in /etc/conf.d/dnetc

	DNETOPTS="${DNETOPTS} ${EMAIL:+-e ${EMAIL}}"
	if [ ! -z ${BUFFER_BASE_DIR} ] ; then
		local buff_in="${BUFFER_BASE_DIR:+${BUFFER_BASE_DIR}/}buff-in"
		local buff_out="${BUFFER_BASE_DIR:+${BUFFER_BASE_DIR}/}buff-out"
		DNETOPTS="${DNETOPTS} -inbase ${buff_in}"
		DNETOPTS="${DNETOPTS} -outbase ${buff_out}"
	fi
	DNETOPTS="${DNETOPTS} ${KEYSERVER_ADDRESS:+-a ${KEYSERVER_ADDRESS}}"

	# fair group cpu scheduler
	uidpath="/sys/kernel/uids/`id -u dnetc`"
	[ -d $uidpath ] && echo 2 >$uidpath/cpu_share
	unset uidpath

	if [ ${retVal} -ne 0 ] ; then
		eerror "Need some sort of configuration.  Check /etc/conf.d/dnetc."
	fi

	return ${retVal}
}

start() {
	processOpts || return 1
	ebegin "Starting distributed.net client"
	start-stop-daemon ${STARTOPTS} -- ${DNETOPTS}
	eend ${?}
}

stop() {
	processOpts || return 1
	ebegin "Stopping distributed.net client"
	start-stop-daemon --stop --quiet --exec ${DNETBIN} --
	eend ${?}
}

reload() {
	processOpts || return 1
	ebegin "Reloading distributed.net client"
	start-stop-daemon --stop --quiet --signal HUP --exec ${DNETBIN}
	eend ${?}
}

fetch() {
	processOpts || return 1
	ebegin "Fetching distributed.net client buffers"
	${DNETBIN} ${DNETOPTS} -fetch
	eend ${?}
}

flush() {
	processOpts || return 1
	ebegin "Flushing distributed.net client buffers"
	${DNETBIN} ${DNETOPTS} -flush
	eend ${?}
}
