#!/bin/bash

########################################################################
#
#PROJECT:      Unified Sessions Manager
#AUTHOR:       Arno-Can Uestuensoez - acue@UnifiedSessionsManager.org
#MAINTAINER:   Arno-Can Uestuensoez - acue_sf1@sourceforge.net
#SHORT:        ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE:      GPL3
#VERSION:      01_02_007a17
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################

_myPKGNAME_GENERIC="${BASH_SOURCE}"
_myPKGVERS_GENERIC="01.02.001b01"
hookInfoAdd $_myPKGNAME_GENERIC $_myPKGVERS_GENERIC

_myPKGBASE_GENERIC="`dirname ${_myPKGNAME_GENERIC}`"
_BASE_GENERIC="${_myPKGBASE_GENERIC}hook"


#FUNCBEG###############################################################
#NAME:
#  clientServerSplitSupportedGENERIC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Checks whether the split of client and server is supported.
#  This is just a hardcoded attribute and controls the application 
#  matrix of following attribute values of option "-L" locality:
#
#   - ConnectionForwarding
#   - DisplayForwarding
#   - ServerOnly
#   - LocalOnly
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
#  RETURN:
#    0: If supported
#    1: else
#
#  VALUES:
#
#FUNCEND###############################################################
function clientServerSplitSupportedGENERIC () {
    printVerboseDebug ${DBG_LVL_MAINT} $LINENO $_BASE_GENERIC "$FUNCNAME $1"
    case $1 in
	ENUMERATE)return 0;;
	LIST)return 0;;
	SHOW)return 0;;
	INFO)return 0;;
    esac
    return 1;
}


#
#Managed load of sub-packages which are required in almost any case.
#On-demand-loads will be performed within requesting action.
#
hookPackage "${_myPKGBASE_GENERIC}/LIST/list"
hookPackage "${_myPKGBASE_GENERIC}/ENUMERATE/enumerate"



#FUNCBEG###############################################################
#NAME:
#  handleGENERIC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Main dispatcher for current plugin. It manages specific actions and
#  context-specific sets of suboptions.
#
#  It has to follow defined interfaces for main framework, due its dynamic
#  detection, load, and initialization.
#  Anything works by naming convention, for files, directories, and function 
#  names so don't alter it.
#
#  Arbitrary subpackages could be defined and chained-loaded. This is due 
#  design decision of plugin developers. Just the entry point is fixed by 
#  common framework.
#
#EXAMPLE:
#
#PARAMETERS:
#
#
#OUTPUT:
#  RETURN:
#
#  VALUES:
#
#FUNCEND###############################################################
function handleGENERIC () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_BASE_GENERIC "${FUNCNAME}:$*"
  local OPMODE=$1;shift
  local ACTION=$1;shift

  case ${ACTION} in


      LIST)
	  case ${OPMODE} in
              CHECKPARAM)
                  listCheckParam
		  ;;
	      ACTION)
		  if [ -z "${CTRL_EXECLOCAL}" ];then
		      assembleExeccall
		  else
                      if [ -n "${R_TEXT}" ];then
			  echo "${R_TEXT}"|sed 's/-T//'
                      fi
                      EXECCALL="listMySessions ${CTRL_MODE_ARGS}"
		  fi
		  ;;
	  esac
          ;;


      ENUMERATE)
          #Not critical, thus just pass args, there is anyway not so much to be pre-checked.
	  case ${OPMODE} in
              CHECKPARAM)
		  ;;
	      ACTION)
		  if [ -z "${CTRL_EXECLOCAL}" ];then
		      assembleExeccall
		  else
                      if [ -n "${R_TEXT}" ];then
			  echo "${R_TEXT}"|sed 's/-T//'
                      fi
                      EXECCALL="enumerateMySessions ${CTRL_MODE_ARGS}"
		  fi
		  ;;
	  esac
          ;;



      SHOW|INFO)
	  case ${OPMODE} in
              CHECKPARAM)
		  ;;
	      ACTION)
		  if [ -z "${CTRL_EXECLOCAL}" ];then
		      assembleExeccall
		  else
                      if [ -n "${R_TEXT}" ];then
			  echo "${R_TEXT}"|sed 's/-T//'
                      fi

  		      MYHOOK=${_myPKGBASE_GENERIC}/${ACTION}/${MYOS}
		      printVerboseDebug ${DBG_LVL_UID} $LINENO $_BASE_GENERIC "${FUNCNAME}:${MYHOOK}"
                      if [ -d "${MYHOOK}" ];then
			  MYHOOK=${MYHOOK}/${MYOS}
			  if [ -f "${MYHOOK}" ];then
			      hookPackage "${MYHOOK}"
			      ${ACTION}${MYOS}
			  else
			      ABORT=1
			      printERR $LINENO $BASH_SOURCE ${ABORT} "Missing:${MYHOOK}"
			      gotoHell ${ABORT}
			  fi
		      else
			  printWNG $LINENO $BASH_SOURCE 0 "OS=\"${MYOS}\" not supported for ACTION=${ACTION} OPMODE=${OPMODE}"
		      fi
		      gotoHell 0
		  fi
		  ;;
          esac
          ;;

      *)
          ABORT=1;
          printERR $LINENO $_BASE_GENERIC ${ABORT} "System Error, unexpected GENERIC:OPMODE=${OPMODE} ACTION=${ACTION}"
          ;;
  esac
}



#FUNCBEG###############################################################
#NAME:
#  initGENERIC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#
#
#OUTPUT:
#  RETURN:
#
#  VALUES:
#
#FUNCEND###############################################################
function initGENERIC () {
  local _curInit=$1
  printVerboseDebug ${DBG_LVL_SUPPORT} $LINENO $_BASE_GENERIC "$FUNCNAME ${_curInit}"

  case $_curInit in
      0);;#NOP - Done by shell
      1)
          #add own help to searchlist for options
	  MYOPTSFILES="${MYOPTSFILES} ${MYPKGPATH}/GENERIC/help/${MYLANG}/010_generic"
	  ;;
      2);;#Curently nothing todo.
      3);;#Curently nothing todo.
      4);;#Curently nothing todo.
      5);;#Curently nothing todo.
  esac
}

