#!/bin/sh
# @(#) $RCSfile: SERVER,v $: $Revision: #20 $, $Date: 2006/11/17 $ 
# @(#) Copyright (c), 1987, 2006 Insightful Corp.  All rights reserved.
# S-PLUS Server options

SUsage()
{
        echo " $0 -client [-helpoff] [-nojit]" >&2
        echo " $0 -factory [-limit session_count] [-logfile filepath] [-rotate] [portnumber]" >&2
        echo " $0 -factoryoff [portnumber]" >&2
        echo " $0 -killsession [-p portnumber] session_id..." >&2
        echo " $0 -list [portnumber]" >&2
        echo " $0 -rmioff [portnumber]" >&2
        echo " $0 -servertools [portnumber]" >&2
}

# Omitting unsupported [-ssl] flag from usage info for -client and -factory.
# This relates to experimental functionality currently under development.

# get hostname (including domain and extension in the form
# host.domain.extension)
SUNOS_HOST_QUERY_STRING="nslookup -query=a `hostname` | grep 'Name:' | awk '{print \$2}'"
OTHER_HOST_QUERY_STRING="host `hostname` | awk '{print \$1}'"
LINUX_HOST_QUERY_STRING="hostname"
OS_TYPE=`uname`

# we need the hostname found by this script to match the hostname generated
# in java.  so, all platforms except linux must find a hostname that follows
# the format: hostname.domain.xxx
#      for AIX: host `hostname` | awk '{print \$1}'
#      for other UNIX: nslookup -query=a `hostname` | grep 'Name:' | awk '{print \$2}'
#
# on linux, java retrieves only the hostname.  so, we need this script to 
# only retrieve the hostname as well.
#      for LINUX: hostname
#
case "$OS_TYPE" in
       Linux )
           MY_HOSTNAME=`eval $LINUX_HOST_QUERY_STRING`
           ;;
       AIX )
           MY_HOSTNAME=`eval $OTHER_HOST_QUERY_STRING`
           ;;
       SunOS | HP-UX | OSF1 )
           MY_HOSTNAME=`eval $SUNOS_HOST_QUERY_STRING`
           ;;
       * )
           echo 1>&2 "$0: Unrecognized uname: $OS_TYPE"
           MY_HOSTNAME=`eval $SUNOS_HOST_QUERY_STRING`
           ;;
esac


# Get JAVA_OPTIONS from the environment.
SJAVA="${SHOME}/java/jre/bin/java -classpath ${CLASSPATH} -Dsplus.shome=${SHOME} ${JAVA_OPTIONS}"

if [ $# -ge 1 ]; then
	case $1 in
	-client)
		shift
                NO_JIT=
		while [ $# -gt 0 ]
		do
			case $1 in
			-helpoff)
				GUI_HELP_OFF='-Dsplus.help.off=true'
				shift
			;;
			-nojit)
				NO_JIT=$JIT_OFF
				shift
			;;
			-ssl)
			# FIXME:  Should this be in the login dialog?
				TRUST_FILE="$HOME/.SplusClientTrust"
				S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
				S_SSL_OPTION='-Dsplus.use.ssl=true'
				shift
			;;
			-jit) # default is JIT enabled
				shift
			;;
			-*)
				echo "$S_PROG_NAME $0: unrecognized option $1" >&2
				echo "Usage:" >&2
				echo " $0 -client [-helpoff] [-nojit]" >&2
				exit 1
			;;
			*)
				break
			;;
			esac
		done
		${SJAVA} -Dsplus.client.mode=true ${GUI_HELP_OFF} ${NO_JIT} \
			${S_SSL_OPTION} ${S_TRUST} \
			com.insightful.splus.SplusExecGui
		exit 0
	;;
	-session)
		shift
		if [ "$S_SSL_ACCESS" = true ]; then
			HOSTNM=$MY_HOSTNAME
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
				if [ ! -f $TRUST_FILE ]; then
					echo "Trust file not found"
					exit 1
				fi
			fi
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		CLIENT_CLASS="com.insightful.splus.SplusRemoteSessionStart"
		NO_JIT=$JIT_OFF
		EXTRA_D_ARGS=""
		EXTRA_ARGS=""
		while [ $# -gt 0 ]
		do
			case $1 in
			-jit)
				NO_JIT=
				shift
			;;
			-nojit)
				shift
			;;
			-bigdata)
				shift
				S_LOAD_BIGDATA=yes ; export S_LOAD_BIGDATA
			;;
			-nobigdata)
				shift
				S_LOAD_BIGDATA=no ; export S_LOAD_BIGDATA
			;;
			-workbench)
				CLIENT_CLASS="com.insightful.splus.eclipse.SplusRemoteEclipseSessionImpl"
				shift
			;;
			-jit)
			-D*)
				EXTRA_D_ARGS="$EXTRA_D_ARGS $1"
				shift
			;;
			*)
				EXTRA_ARGS="$EXTRA_ARGS $1"
				shift
			;;
			esac
		done
		ALWAYS_PROMPT=T; export ALWAYS_PROMPT
		S_DISPLAY_MODE="s+java"; export S_DISPLAY_MODE
		S_INTERACTIVE_STATES=yes; export S_INTERACTIVE_STATES
		DISPLAY=${S_DISPLAY_SET}; export DISPLAY
		if [ "X${S_WORKING_DIR}" != "X" ] ; then
			if [ -d ${S_WORKING_DIR} ] ; then
				cd ${S_WORKING_DIR}
			fi
		fi
		${SHOME}/java/jre/bin/java ${S_JAVA_OPTIONS} ${NO_JIT} \
			-classpath ${CLASSPATH} -Dsplus.shome=${SHOME}\
			-Dsplus.session.id=${S_REMOTE_SESSION_ID} \
			-Dsplus.server.rmiport=${S_RMI_PORT} \
			-Dsplus.help.host=${S_HELP_HOST} \
			-Dsplus.use.ssl=${S_USE_SSL} \
			-Dsplus.ssl.access=${S_SSL_ACCESS} \
			${EXTRA_D_ARGS} \
			${S_TRUST} \
			${CLIENT_CLASS} \
			${EXTRA_ARGS}
		exit 0
	;;
	-factory)
		shift
		S_SSL_OVERRIDE="false"

		while [ $# -gt 0 ]
		do
			case $1 in
			-logfile)
				shift
				S_LOG_NAME=$1
				shift
			;;
			-rotate)
				S_LOG_ROTATE='-Dsplus.factory.rotate=true'
				shift
			;;
			-limit)
				shift
				S_SESSION_LIMIT=$1
				shift
			;;
			-ssl)
				S_SSL_OVERRIDE="true"
				shift
			;;
			-*)
				echo "$S_PROG_NAME $0: unrecognized option $1" >&2
				echo "Usage:" >&2
				echo " $0 -factory [-limit session_count] [-logfile filepath] [-rotate] [portnumber]" >&2
				exit 1
			;;
			*)
				break
			;;
			esac
		done

		#  Now auto-detect SSL configuration - assume yes
		#  and over-ride if keyfile is not found or if flag is set.

		S_RMI_PORT=1099
		if [ $# -gt 0 ]; then
			S_RMI_PORT=$1
		fi

		S_SSL_OPTION=''
		if [ "$S_SSL_OVERRIDE" = "true" ]; then
			S_SSL_OPTION='-Dsplus.use.ssl=true'
			echo "Running with encryption" >&2

			HOSTNM=$MY_HOSTNAME
			KEY_FILE="$SHOME/adm/spkey.$HOSTNM.$S_RMI_PORT"
			if [ ! -f $KEY_FILE ]; then
				KEY_FILE="$SHOME/adm/spkey.$HOSTNM"
				if [ ! -f $KEY_FILE ]; then
					S_SSL_OPTION=''
				fi
			fi

			# if using SSL, find the associated truststore
			if [ "$S_SSL_OPTION" = "-Dsplus.use.ssl=true" ]; then
				TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
				if [ ! -f $TRUST_FILE ]; then
					TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
					if [ ! -f $TRUST_FILE ]; then
						echo "Trust file not found"
						exit 1
					fi
				fi
				S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
			fi
		fi

		${SJAVA} -Dsplus.factory.log=${S_LOG_NAME} ${S_LOG_ROTATE} \
			-Dsplus.factory.limit=${S_SESSION_LIMIT} ${S_SSL_OPTION} \
			${S_TRUST} \
			com.insightful.splus.SplusSessionFactoryStart $1
		exit 0
	;;
	-killsession)
		HOSTNM=$MY_HOSTNAME
		TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
		if [ ! -f $TRUST_FILE ]; then
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE=""
			fi
		fi
		if [ "$TRUST_FILE" != "" ]; then
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		shift
		S_RMI_PORT=1099
		if [ $# -ge 1 ]
		then
			case $1 in
			-p)
				shift
				S_RMI_PORT=$1
				shift
			;;
			-*)
				echo "$S_PROG_NAME $0: unrecognized option $1" >&2
				echo "Usage:" >&2
				echo " $0 -killsession [-p portnumber] session_id" >&2
			;;
			esac
		fi
		if [ $# -eq 0 ]
		then
			echo "$S_PROG_NAME $0: session ID missing" >&2
			echo "Usage:" >&2
			echo " $0 -killsession [-p portnumber] session_id" >&2
			exit 1
                fi
		${SJAVA} ${S_TRUST} com.insightful.splus.KillSession ${S_RMI_PORT} "$@" &
		exit 0
	;;
	-list)
		HOSTNM=$MY_HOSTNAME
		TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
		if [ ! -f $TRUST_FILE ]; then
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE=""
			fi
		fi
		if [ "$TRUST_FILE" != "" ]; then
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		shift
		${SJAVA} ${S_TRUST} com.insightful.splus.PrintSessions $1
		exit 0
	;;
	-factoryoff)
		HOSTNM=$MY_HOSTNAME
		TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
		if [ ! -f $TRUST_FILE ]; then
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE=""
			fi
		fi
		if [ "$TRUST_FILE" != "" ]; then
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		shift
		${SJAVA} ${S_TRUST} com.insightful.splus.FactoryStop $1
		exit 0
	;;
	-rmioff)
		HOSTNM=$MY_HOSTNAME
		TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
		if [ ! -f $TRUST_FILE ]; then
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE=""
			fi
		fi
		if [ "$TRUST_FILE" != "" ]; then
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		shift
		${SJAVA} ${S_TRUST} com.insightful.splus.RMIStop $1
		exit 0
	;;
	-servertools)
		HOSTNM=$MY_HOSTNAME
		TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM.$S_RMI_PORT"
		if [ ! -f $TRUST_FILE ]; then
			TRUST_FILE="$SHOME/adm/sptrust.$HOSTNM"
			if [ ! -f $TRUST_FILE ]; then
				TRUST_FILE=""
			fi
		fi
		if [ "$TRUST_FILE" != "" ]; then
			S_TRUST="-Djavax.net.ssl.trustStore=${TRUST_FILE}"
		fi
		shift
		${SJAVA} ${S_TRUST} com.insightful.splus.SplusServerToolsDialog $1
		exit 0
	;;
	-helpviewer)
		shift
                echo "executing HELPSTART $@"
                exec $S_PROG_NAME HELPSTART "$@"
		exit 0
	;;
        -mkhelptar)
                shift
                echo "executing MKHELPTAR $@"
                exec $S_PROG_NAME MKHELPTAR "$@"
                exit 0
        ;;
        -help|-h)
                echo "$S_PROG_NAME $0 usage:" >&2
                SUsage
                exit 0
        ;;
        *)
                echo "$S_PROG_NAME $0: unrecognized option $1" >&2
                SUsage
                exit 1
        ;;
	esac
fi
echo "$S_PROG_NAME $0: No option supplied" >&2
SUsage
exit 1
