#!/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_LABELS="${BASH_SOURCE}"
_myPKGVERS_LABELS="01.02.002c01"
hookInfoAdd "$_myPKGNAME_LABELS" "$_myPKGVERS_LABELS"
_myPKGBASE_LABELS="`dirname ${_myPKGNAME_LABELS}`"

_LABELS="${_myPKGNAME_LABELS}"

#Cache for current running sessions on local host
#normally(almost never) not as big as becoming criticall
CACHE1=""




#FUNCBEG###############################################################
#NAME:
#  fetchID4Label
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  fetchs the ID for a given session label on local host.
#  first match will win.
#
#  Therefore the following input format for records is required:
#    "<hostname>:<label>:<id>[:<pid>:<user>:<group>:<type>]"
#
#  The internal usage of the PLUGIN-dispatch function
#
#    listMySessions
#
#  assures the standard format by calling specific interfaces
#  for generation of required record format.
#
#  This is generated at the CLI by the usage of:
#
#    ${MYCALLNAME} -X -a enum=all,full ${MYHOST}
#
#     The current host is the "localhost" but must be 
#     addressed by it's DNS name as filter criteria for
#     search key.
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <label>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <ID>
#FUNCEND###############################################################
function fetchID4Label () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions TERSE,MACHINE,FULLPATH`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=\"${CACHE1}\""
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "MYHOST=\"${MYHOST}\""
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "\$1=\"$1\""
  for i in ${CACHE1}; do
    local MATCH=`echo $i|awk -F';' -v _h=${MYHOST} -v _s=${1} '$1~_h&&$3==_s{print $4;}'`
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=\"${i}\" =>MATCH=\"${MATCH}\""
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}






#FUNCBEG###############################################################
#NAME:
#  fetchLabel4ID
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  fetchs the label for the session given by ID on local host.
#  first match will win.
#
#  Therefore the following input format for records is required:
#    "<hostname>:<label>:<id>[:<pid>:<user>:<group>:<type>]"
#
#  This is generated for current host by the usage of:
#    ${MYCALLNAME} -X -a enum=all,full ${MYHOST}
#
#     The current host is the "localhost" but must be 
#     addressed by it's DNS name as filter criteria for
#     search key.
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <ID>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <LABEL>
#
#FUNCEND###############################################################
function fetchLabel4ID () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions TERSE,MACHINE,FULLPATH`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=${CACHE1}"
  for i in ${CACHE1}; do
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=${i}"
    local MATCH=`echo $i|awk -F';' -v _h=${MYHOST} -v _s=${1} '$1~_h&&$4~_s{print $3;}'`
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}



#FUNCBEG###############################################################
#NAME:
#  fetchLabel4PID
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Fetches the LABEL for the session given by PID on local host.
#
#  Therefore "ctys-wizzard" listMySessions will be utilized.
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <PID>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <LABEL>
#
#FUNCEND###############################################################
function fetchLabel4PID () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions BOTH,TERSE,FULLPATH,LABEL,PID`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=${CACHE1}"
  for i in ${CACHE1}; do
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=${i}"
    local MATCH=`echo $i|awk -F';'  -v _pid=${1} '$2~_pid{print $1;}'`
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}

#FUNCBEG###############################################################
#NAME:
#  fetchID4PID
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Fetches the ID for the session given by PID on local host.
#
#  Therefore "ctys-wizzard" listMySessions will be utilized.
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <PID>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <ID>
#
#FUNCEND###############################################################
function fetchID4PID () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions BOTH,TERSE,FULLPATH,ID,PID`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=${CACHE1}"
  for i in ${CACHE1}; do
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=${i}"
    local MATCH=`echo $i|awk -F';' -v _pid=${1} '$2~_pid{print $1;}'`
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}


#FUNCBEG###############################################################
#NAME:
#  fetchDisplay4Label
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  fetchs the display number for client of a given session label on local host.
#  first match will win.
#
#  The internal usage of the PLUGIN-dispatch function
#
#    listMySessions
#
#  assures the standard format by calling specific interfaces
#  for generation of required record format.
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <label>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <ID>
#FUNCEND###############################################################
function fetchDisplay4Label () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions TERSE,MACHINE,FULLPATH`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=${CACHE1}"
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "MYHOST=${MYHOST} - \$1=\"${1}\""
  for i in ${CACHE1}; do
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=${i}"
    local MATCH=`echo $i|awk -F';' -v _h=${MYHOST} -v _s=${1// } '$1~_h&&$3==_s{print $7;}'`
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}





#FUNCBEG###############################################################
#NAME:
#  fetchCport4Label
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  fetchs the access port for client of a given session label on local host.
#  first match will win.
#
#  The internal usage of the PLUGIN-dispatch function
#
#    listMySessions
#
#  assures the standard format by calling specific interfaces
#  for generation of required record format.
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <label>
#
#OUTPUT:
#  RETURN:
#    0: success
#    1: failure
#  VALUES:
#    <ID>
#FUNCEND###############################################################
function fetchCport4Label () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"
  if [ -z "$CACHE1" ];then CACHE1=`listMySessions TERSE,MACHINE,FULLPATH`;fi
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "CACHE1=${CACHE1}"
  printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "MYHOST=${MYHOST} - \$1=\"${1}\""
  for i in ${CACHE1}; do
    printVerboseDebug ${DBG_LVL_HAYSTACK} $LINENO $_LABELS "i=${i}"
    local MATCH=`echo $i|awk -F';' -v _h=${MYHOST} -v _s=${1// } '$1~_h&&$3==_s{print $8;}'`
    if [ -n "${MATCH}" ];then
      echo ${MATCH};
      return 0;
    fi
  done 
  return 1;
}





#FUNCBEG###############################################################
#NAME:
#  checkUniqueness4Label
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
# $1: <label>
#
#OUTPUT:
#  RETURN:
#    0:  Label not yet present.
#    1:  Label already in use.
#  VALUES:
#
#FUNCEND###############################################################
function checkUniqueness4Label () {
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME ${1}"

  if [ -z "`fetchID4Label ${1}`" ];then
    printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME Label available:${1}"
    return 0;
  fi
  printVerboseDebug ${DBG_LVL_UID} $LINENO $_LABELS "$FUNCNAME Label already in use:${1}"
  return 1;
}




