#!/bin/sh

user="p2p"
config="/opt/etc/rtorrent.conf"
options="-n -o import=/opt/etc/rtorrent.conf"
base="/tmp/harddisk/torrent"
srnname="rtorrent"
logfile="/opt/var/log/rtorrentInit.log"

PATH=/opt/bin:/opt/sbin:/usr/bin:/sbin:/bin:/usr/sbin
DESC="rtorrent"
NAME=rtorrent
DAEMON=$NAME
SCRIPTNAME=/etc/init.d/$NAME

# Do not proceed unless some apps are available.
test -x /opt/bin/screen || ( echo "screen not found." | tee -a "$logfile" >&2 ; exit 2 )
test -x /opt/bin/su -o -x /bin/su || ( echo "su not found." | tee -a "$logfile" >&2 ; exit 2 )

checkcnfg() {
exists=0
for i in `echo "$PATH" | tr ':' '\n'` ; do
if [ -f $i/$NAME ] ; then
exists=1
break
fi
done
if [ $exists -eq 0 ] ; then
echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
exit 3
fi
if ! [ -r "${config}" ] ; then 
echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
exit 3 
fi 
session=`getsession "$config"` 
if ! [ -d "${session}" ] ; then
echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
exit 3
fi
}

d_start() {
  session=`getsession "$config"`
  if [ -f "${session}/rtorrent.lock" ] ; then
    pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
    grep rtorrent /proc/${pid}/cmdline > /dev/null &&
      { echo "rtorrent is already running" | tee -a "$logfile" >&2 ; exit 4 ; } ||
      rm "${session}/rtorrent.lock"
  fi

#Sometimes after shutdown rpc socket file is not removed. If so rtorrent can't be started.
  socket_file=`getpar scgi_local`
  [ -n "$socket_file" -a -S "$socket_file" ] &&
    rm $socket_file

  [ -d "${base}" ] && cd "${base}"
  stty stop undef && stty start undef
  su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
  # this works for the screen command, but starting rtorrent below adopts screen session gid
  # even if it is not the screen session we started (e.g. running under an undesirable gid
  #su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | te
  su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user} | tee -a "$logfile" >&2
  su -c "screen -S "${srnname}" -p 0 -X kill" ${user} | tee -a "$logfile" >&2
}

d_stop() {
  session=`getsession "$config"`
  if ! [ -s ${session}/rtorrent.lock ] ; then
    return
  fi
  pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
# make sure the pid doesn't belong to another process
  grep rtorrent /proc/${pid}/cmdline > /dev/null && kill -s INT ${pid}
}

getsession() { 
session=`awk '/^[[:space:]]*session[[:space:]]*=[[:space:]]*/{print($3)}' "$config"`
echo $session
}

getpar() {
  par=`awk "/^[[:space:]]*$1[[:space:]]*=[[:space:]]*/{print(\\$3)}" "$config"`
  echo $par
}

checkcnfg

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart|force-reload)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 1
;;
esac

exit 0
