#!/bin/sh
# Usage: StartFRM [-d] [-f] [-p] [-t] [-x]

# Where: -d turns on debugging
#        -f forces the start irrespective of the hold file or status, if any.
#        -p starts only the purge     daemon
#        -t types the start commands and does not execute them
#        -x starts only the transfer  daemon
# No option cause everything to be started.

# Set defaults
#******************************************************************************#
#*                              D e f a u l t s                               *#
#******************************************************************************#
  
TEST=
EXITRC=0
FORCE=
DOALL=1
ONLYP=0
ONLYX=0

# Source he config file to set additional options
#
. `dirname $0`/StartXRD.cf


#******************************************************************************#
#*                           S u b r o u t i n e s                            *#
#******************************************************************************#

Emsg () {
    echo StartFRM: $1
    }

isOK () {
        thePGM=$1
        theHLD=$2
        if [ -z "$1" -o -z "$2" ]; then
           REASON="$1 not configured."
           return 0;
        fi
        if [ ! -x $1 ]; then
           REASON="$1 missing."
           return 0
        fi
        if [ ! -z "$FORCE" ]; then
           rm -f $theHLD
        elif [ -f $theHLD  ]; then
           REASON="$theHLD exists."
           return 0
        fi
        xPID $thePGM
        if [ $? -ne 0 ]; then
           return 0
        fi
        return 1
        }

xPID () {
        pidPGM=$1
        set -- ''
        set -- `ps -e -o pid -o args | grep $pidPGM | awk '$0 !~ /grep/ {print $1}'`

        if [ -z "$1" ]; then
           return 0
        else
            REASON="already running as pid $1."
        fi
        return 1
       }

Xeq () {
       if [ $DOSU -eq 1 ]; then
          $TEST /bin/su $XRDUSER -c "$* &"
       else
          $TEST $* &
       fi
       if [ $? -ne 0 ]; then
          EXITRC=1
       fi
       }
  
#******************************************************************************#
#*                                  M a i n                                   *#
#******************************************************************************#
  
# Pick up options
#
while test -n "$1"; do
     if [ "$1" = "-d" ]; then
        set -x
        OPTS="-d $OPTS"
   elif [ "$1" = "-f" ]; then
        FORCE=1
   elif [ "$1" = "-p" ]; then
        DOALL=0
        ONLYP=1
   elif [ "$1" = "-t" ]; then
        TEST=echo
   elif [ "$1" = "-x" ]; then
        DOALL=0
        ONLYX=1
   else
        Emsg "Invalid option - $1."
        echo 'Usage: StartFRM [-d] [-f] [-p] [-t] [-x]'
        exit 1
     fi
   shift
   done

# Determine hostname and username
#
MYHOST=`/bin/hostname`

if   [ -x /usr/bin/whoami ]; then
     MYNAME=`/usr/bin/whoami`
elif [ -x /usr/ucb/whoami ]; then
     MYNAME=`/usr/ucb/whoami`
else
     Emsg "Unable to determine username."
     exit 1
fi

# See if we should su to the right user for the frm component
#
SFXMSG=
  if [ "$XRDUSER" = "$MYNAME" ]; then
     DOSU=0
elif [ "$MYNAME" = "root" ]; then
     DOSU=1
else
     Emsg "$MYNAME cannot start $XRDUSER subsystems!"
     exit 4
fi

# Now set the LD_LIBRARY_PATH variable
#
  if [ -z "$LD_LIBRARY_PATH" ]; then
     LD_LIBRARY_PATH=$LDLIBPATH
     else
     LD_LIBRARY_PATH=$LDLIBPATH:$LD_LIBRARY_PATH
  fi
  export LD_LIBRARY_PATH

# Now start up the purge daemon
#
if [ ! -z "$START_PURGE" -a "$DOALL" = "1" -o "$ONLYP" = "1" ]; then
   isOK $START_PURGE $HFILE_PURGE
   if [ $? -eq 1 ]; then
      Emsg "Starting $XRDUSER purge daemon. . ."
      $TEST cd $HOMED_PURGE
      Xeq "$START_PURGE $OPTS $PARMS_PURGE"
   else
      Emsg "$XRDUSER purge daemon cannot be started on $MYHOST; $REASON"
      EXITRC=1
   fi
fi

# Now start up the transfer daemon
#
if [ "$DOALL" = "1" -o "$ONLYX" = "1" ]; then
   isOK $START_TRANSFER $HFILE_TRANSFER
   if [ $? -eq 1 ]; then
      Emsg "Starting $XRDUSER transfer daemon. . ."
      $TEST cd $HOMED_TRANSFER
      Xeq "$START_TRANSFER $OPTS $PARMS_TRANSFER"
   else
      Emsg "$XRDUSER transfer daemon cannot be started on $MYHOST; $REASON"
      EXITRC=1
   fi
fi

exit $EXITRC
