qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] vnc port selection


From: acue
Subject: Re: [Qemu-devel] vnc port selection
Date: Thu, 21 Aug 2008 16:34:29 +0200
User-agent: Mail/News (X11/20061101)

Anthony Liguori wrote:
Gerd Hoffmann wrote:
  Hi folks,

Xen's qemu-dm version has a '-vncunused' command line switch which asks
the internal vnc server to pick any unused tcp port to listen on.  The
actual port is communicated to the outside world via xenstore.

I'm looking for a reasonable way to implement that functionality in
upstream qemu.  First, I think it shouldn't be a separate command line
switch but an option for the existion -vnc switch.

Maybe something like a to=N option.  So you would have:

-vnc localhost:0,to=10

That would try from displays 0 to 10 and select the first one it could attach to.

  Second, we need a
way to communicate the port picked which isn't xen-specific.  Obvious
choice is a monitor info subcommand.

There's already an info vnc.  It can be added to that.

Regards,

Anthony Liguori

Comments?  Other suggestions?

cheers,
  Gerd





Hello Gerd,
Even though currently it is a bash+awk solution the algorithm could be of interest for you.

It works on Linux+OpenBSD+Solaris and accepts MIN and MAX value for the port. An aditional seed-value is added for slowly-released ports for immediate access.

I use different ranges particularly in order to distinguish displayforwarding and
"clientforwarding".
Thus one range for local vncviewer access by OpenSSH with "-X" option, another for
forwarded remote vncviewer access by OpenSSH tunnels with port-forwarding.

The files are available at http:/sourceforge.net/projects/ctys with the
directory path: ctys.01_07_001b04/plugins/VNC

Arno


--
----------------------------------------------------------------------------

                  Arno-Can Uestuensoez

               www.i4p.de  / www.i4p.com

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

function ptrace(inp){
    if(!d){
        print line ":" inp | "cat 1>&2"
    }
}


BEGIN{
    ptrace("awk:getFirstFreeVNCPort");
    ptrace("min ="min);
    ptrace("max ="max);
    ptrace("seed="seed);
    chk[0]="";
}

{
    gsub("^[0-9.]*:+","",$4);
}

$4>min&&$4<max{
    idx=$4-min;
    chk[idx]=$4;
}

END{
    l=max-min;
    for(i=0;i<l;i++){
        if(chk[i]==""){
            if(seed==0){break;}
            seed--;
            ptrace("skip("seed")="i);
        }
    }
    if(i<max){
        ptrace("result="i);
        printf("%d",min+i);
    }else{
        ptrace("result exceeds maximum("max")="i);
    }
}
########################################################################
#
#PROJECT:      Unified Sessions Manager
#AUTHOR:       Arno-Can Uestuensoez - address@hidden
#MAINTAINER:   Arno-Can Uestuensoez - address@hidden
#SHORT:        ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE:      GPL3
#VERSION:      01_06_001a10
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################

function ptrace(inp){
    if(!d){
        print line ":" inp | "cat 1>&2"
    }
}


BEGIN{
    ptrace("awk:getFirstFreeVNCPort");
    ptrace("min ="min);
    ptrace("max ="max);
    ptrace("seed="seed);
    chk[0]="";
}

{
    gsub("^[0-9.]*:+","",$4);
}

$4>min&&$4<max{
    idx=$4-min;
    chk[idx]=$4;
}

END{
    l=max-min;
    for(i=0;i<l;i++){
        if(chk[i]==""){
            if(seed==0){break;}
            seed--;
            ptrace("skip("seed")="i);
        }
    }
    if(i<max){
        ptrace("result="i);
        printf("%d",min+i);
    }else{
        ptrace("result exceeds maximum("max")="i);
    }
}
########################################################################
#
#PROJECT:      Unified Sessions Manager
#AUTHOR:       Arno-Can Uestuensoez - address@hidden
#MAINTAINER:   Arno-Can Uestuensoez - address@hidden
#SHORT:        ctys
#CALLFULLNAME: Commutate To Your Session
#LICENCE:      GPL3
#VERSION:      01_06_001a10
#
########################################################################
#
# Copyright (C) 2007 Arno-Can Uestuensoez (UnifiedSessionsManager.org)
#
########################################################################

function ptrace(inp){
    if(!d){
        print line ":" inp | "cat 1>&2"
    }
}


BEGIN{
    ptrace("awk:getFirstFreeVNCPort");
    ptrace("min ="min);
    ptrace("max ="max);
    ptrace("seed="seed);
    chk[0]="";
}

{
    gsub("^[0-9.]*:+","",$4);
}

$4>min&&$4<max{
    idx=$4-min;
    chk[idx]=$4;
}

END{
    l=max-min;
    for(i=0;i<l;i++){
        if(chk[i]==""){
            if(seed==0){break;}
            seed--;
            ptrace("skip("seed")="i);
        }
    }
    if(i<max){
        ptrace("result="i);
        printf("%d",min+i);
    }else{
        ptrace("result exceeds maximum("max")="i);
    }
}
#!/bin/bash

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

VNC_MAGIC=VNC_GENERIC;
VNC_VERSTRING=;
VNC_STATE=DISABLED;
VNCSERVER_OPT=;
VNCVIEWER_OPT=;
VNC_PREREQ=;


export VNC_BASEPORT=${VNC_BASEPORT:-5900}

_myPKGNAME_VNC="${BASH_SOURCE}"
_myPKGVERS_VNC="01.02.001b01"
hookInfoAdd $_myPKGNAME_VNC $_myPKGVERS_VNC
_myPKGBASE_VNC="${_myPKGNAME_VNC%/hook}"


VNC_VERSTRING=${_myPKGVERS_VNC};
VNC_PREREQ="HOST-CAPABILITY:VNC-${VNC_VERSTRING}-${MYARCH}";


if [ -d "${HOME}/.ctys" -a -d "${HOME}/.ctys/vnc" ];then
    if [ -f "${HOME}/.ctys/vnc/vnc.conf.${MYOS}" ];then
        . "${HOME}/.ctys/vnc/vnc.conf.${MYOS}"
    fi
fi

if [ -d "${MYCONFPATH}" -a -d "${MYCONFPATH}/vnc" ];then
    if [ -f "${MYCONFPATH}/vnc/vnc.conf.${MYOS}" ];then
        . "${MYCONFPATH}/vnc/vnc.conf.${MYOS}"
    fi
fi



_waitcVNC=${VNC_INIT_WAITC:-2}
_waitsVNC=${VNC_INIT_WAITS:-2}



#FUNCBEG###############################################################
#NAME:
#  getFirstFreeVNCPort
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Gets the first free port above a given base, thus multiple regions
#  could be managed
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <MIN>
#  $2: [<MAX>]
#
#OUTPUT:
#  RETURN:
#  VALUES:
#    <first-port>
#
#FUNCEND###############################################################
function getFirstFreeVNCPort () {
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:CALL=<${*}>"
    local MIN=${1:-$VNC_BASEPORT};
    local MAX=$2;
    [ -z "$MAX" ]&&let MAX=MIN+1000;
    local _seed=$((RANDOM%VNCPORTSEED));
    doDebug $S_XEN  ${D_MAINT} $LINENO $BASH_SOURCE
    local D=$?

    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:MIN=${MIN} 
MAX=${MAX} seed=${_seed}"
    case ${MYOS} in
        Linux)
            local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" 
-v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f 
${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
            ;;
        OpenBSD)
            local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" 
-v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f 
${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
            ;;
        SunOS)
            local localClientAccess=`${CTYS_NETSTAT} -n -l -t|awk -v d="${D}" 
-v min="${MIN}" -v max="${MAX}" -v seed="${_seed}" -f 
${_myPKGBASE_VNC}/getFirstFreeVNCPort.${MYOS}.awk`
            ;;
    esac
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE 
"$FUNCNAME:localClientAccess=<${localClientAccess}>"
    echo -n -e "${localClientAccess}";
}

#FUNCBEG###############################################################
#NAME:
#  getFirstFreeVNCDisplay
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Gets the first free display above a given base, thus multiple regions
#  could be managed
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <MIN>
#  $2: [<MAX>]
#
#OUTPUT:
#  RETURN:
#  VALUES:
#    <first-port>
#
#FUNCEND###############################################################
function getFirstFreeVNCDisplay () {
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:CALL=<${*}>"
    local MIN=${1:-$VNC_BASEPORT};
    local MAX=$2;
    [ -z "$MAX" ]&&let MAX=VNC_PORT+1000;
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:MIN=${MIN} 
MAX=${MAX}"
    local _myPort=`getFirstFreeVNCPort address@hidden
    local _myDisplay=$((_myPort-MIN));
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE 
"$FUNCNAME:_myPort=<${_myPort}>"
    printDBG $S_LIB ${D_BULK} $LINENO $BASH_SOURCE 
"$FUNCNAME:_myDisplay=<${_myDisplay}>"
    echo -n -e "${_myDisplay}";
}


#FUNCBEG###############################################################
#NAME:
#  serverRequireVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Reports whether a server component has to be called for the current
#  action.
#
#EXAMPLE:
#
#PARAMETERS:
# $*: ${EXECCALL}|<options-list>
#     Generally a string containing an <options-list>, where the
#     first match is choosen. So only one type option is allowed to
#     be contained.
#
#OUTPUT:
#  RETURN:
#    INPUT, where required changes for destination are set.
#  VALUES:
#    0: true, required - output is valid.
#    1: false, not required - output is not valid.
#
#FUNCEND###############################################################
function serverRequireVNC () {
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME address@hidden@"
    local _ret=1;
    local _res=;

    local _S=`getSessionType ${*}`;_S=${_S:-$C_SESSIONTYPE};
    local _A=`getActionResulting ${*}`;
    case $_A in
        GETCLIENTPORT)
            printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE 
"$FUNCNAME:_res=\"${*}\""
            printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE 
"$FUNCNAME:_ret=\"0\""
            echo -n "${*}";
            return 0
            ;;
    esac

    local _CS_SPLIT=${*};
    _CS_SPLIT=${_CS_SPLIT//CONNECTIONFORWARDING/SERVERONLY}
    _CS_SPLIT=${_CS_SPLIT//*LOCALONLY*/}
    _CS_SPLIT=${_CS_SPLIT//*CLIENTONLY*/}
    if [ -n "${_CS_SPLIT}" ];then
        _res="${_CS_SPLIT}";_ret=0;
    fi


    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_CS_SPLIT=\"${_CS_SPLIT}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_S=\"${_S}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_A=\"${_A}\""

    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_res=\"${_res}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_ret=\"${_ret}\""
    echo -n "${_res}";
    return ${_ret};  
}



#FUNCBEG###############################################################
#NAME:
#  clientRequireVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Reports whether a client component has to be called for the current
#  action.
#
#EXAMPLE:
#
#PARAMETERS:
# $*: ${EXECCALL}|<options-list>
#     Generally a string containing an <options-list>, where the
#     first match is choosen. So only one type option is allowed to
#     be contained.
#
#OUTPUT:
#  RETURN:
#    INPUT, where required changes for destination are set.
#  VALUES:
#    0: true, required - output is valid.
#    1: false, not required - output is not valid.
#
#FUNCEND###############################################################
function clientRequireVNC () {
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME address@hidden@"
    local _ret=1;
    local _res=;

    local _A=`getActionResulting ${*}`;

    local _S=`getSessionType ${*}`;_S=${_S:-$C_SESSIONTYPE};
    local _CS_SPLIT=${*};
    _CS_SPLIT=${_CS_SPLIT//*DISPLAYFORWARDING*/}
    _CS_SPLIT=${_CS_SPLIT//*SERVERONLY*/}
    if [ "${_CS_SPLIT}" == "${*}" ];then
        _res="${_CS_SPLIT}";_ret=0;
    fi
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_CS_SPLIT=\"${_CS_SPLIT}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_S=\"${_S}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "_A=\"${_A}\""

    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_res=\"${_res}\""
    printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:_ret=\"${_ret}\""
    echo -n "${_res}";
    return ${_ret};  
}






#FUNCBEG###############################################################
#NAME:
#  setVersionVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Sets defaults and MAGIC-ID for local vmware version.
#
#EXAMPLE:
#
#PARAMETERS:
#
#
#OUTPUT:
#  GLOBALS:
#    VNC_MAGIC:  {VNC_REAL412|VNC_TIGHT129|...}
#      Value to be checked.
#
#    VMW_DEFAULTOPTS
#      Appropriate defaults.
#
#      -RealVNC  - 4.1.2 
#      -TightVNC - 1.2.9
#
#  RETURN:
#
#  VALUES:
#
#FUNCEND###############################################################
function setVersionVNC () {
    local _checkonly=;
    local _ret=0;
    if [ "$1" == "NOEXIT" ];then
        local _checkonly=1;        
    fi

    local _verstrg=;
    if [ -z "${VNCSEXE}" ];then
        ABORT=2;
        printERR $LINENO $BASH_SOURCE ${ABORT} "Missing executable for 
VNCserver"
        printERR $LINENO $BASH_SOURCE ${ABORT} "can not find:"
        printERR $LINENO $BASH_SOURCE ${ABORT} " -> vncserv"
        printERR $LINENO $BASH_SOURCE ${ABORT} ""
        printERR $LINENO $BASH_SOURCE ${ABORT} "Check your PATH"
        printERR $LINENO $BASH_SOURCE ${ABORT} " -> PATH=${PATH}"
        printERR $LINENO $BASH_SOURCE ${ABORT} ""
        if [ "${C_SESSIONTYPE}" == "VNC" -a -z "${_checkonly}" ];then
            gotoHell ${ABORT}
        else
            return ${ABORT}
        fi
        _ret=${ABORT};
    else
        local _vsexe=`${VNCSEXE} --help 2>&1|egrep '(Usage:|usage:)'`
        ABORT=2;
        if [ -n "$_vsexe" ];then
            printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCSEXE} --help)\"` => [ 
`setSeverityColor INF OK` ]"
            _ret=0;
        else
            printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCSEXE} --help)\"` => [ 
`setSeverityColor ERR NOK` ]"
            _ret=${ABORT};
        fi
    fi

    if [ -z "${VNCVEXE}" ];then
        ABORT=2
        printERR $LINENO $BASH_SOURCE ${ABORT} "Missing executable for 
VNCviewer"
        printERR $LINENO $BASH_SOURCE ${ABORT} "can not find:"
        printERR $LINENO $BASH_SOURCE ${ABORT} " -> vncviewer"
        printERR $LINENO $BASH_SOURCE ${ABORT} ""
        printERR $LINENO $BASH_SOURCE ${ABORT} "Check your PATH"
        printERR $LINENO $BASH_SOURCE ${ABORT} " -> PATH=${PATH}"
        printERR $LINENO $BASH_SOURCE ${ABORT} ""
        if [ "${C_SESSIONTYPE}" == "VNC" -a -z "${_checkonly}" ];then
            gotoHell ${ABORT}
        else
            return ${ABORT}
        fi
        _ret=${ABORT};
    fi


    if [ -n "`${VNCVEXE} --help 2>&1|egrep '(RealVNC)'`" ];then
#       _verstrg=`${VNCVEXE} --help 2>&1|awk '/VNC 
[Vv]iewer/{printf("%s\n",$5);}'`
        _verstrg=`${VNCVEXE} --help 2>&1|sed -n 's/VNC 
[Vv]iewer[^0-9]*\([0-9]*.[0-9]*.[0-9]*\).*/\1/p'`
        ABORT=2;
        if [ -n "$_verstrg" ];then
            _verstrg="RealVNC-${_verstrg}"
            printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} -version)\"` => [ 
`setSeverityColor INF OK` ]"
            _ret=0;
        else
            printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} --version)\"` => [ 
`setSeverityColor ERR NOK` ]"
            _ret=${ABORT};
        fi
    else
        if [ -n "`${VNCVEXE} --help 2>&1|egrep '(TightVNC)'`" ];then
            _verstrg=`${VNCVEXE} --help 2>&1|awk -v a=${_allign} '/[vV]iewer 
[vV]ersion/{printf("%s\n",$4);}'`
            ABORT=2;
            if [ -n "$_verstrg" ];then
                _verstrg="TightVNC-${_verstrg}"
                printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} -version)\"` => [ 
`setSeverityColor INF OK` ]"
                _ret=0;
            else
                printDBG $S_LIB ${D_SYS} $LINENO "$BASH_SOURCE" 
"$FUNCNAME:`setSeverityColor TRY \"call(${VNCVEXE} --version)\"` => [ 
`setSeverityColor ERR NOK` ]"
                _ret=${ABORT};
            fi
        else
            if [ -n "`${VNCVEXE} --help 2>&1|egrep '(open display:)'`" ];then
                printWNG 1 $LINENO $BASH_SOURCE 0  "DISPLAY is not available"
                printWNG 1 $LINENO $BASH_SOURCE 0  " 1. One common cause is the 
call of \"ssh\" without the \"-X\""
                printWNG 1 $LINENO $BASH_SOURCE 0  "    option. Even for the 
utilized check by \"vncviewer --help\" "
                printWNG 1 $LINENO $BASH_SOURCE 0  "    option a display is 
required."
                _verstrg=GENERIC
                _ret=0;
            else
                printWNG 1 $LINENO $BASH_SOURCE 0  "Can not evaluate version 
for \"which-ed\" vncviewer."
                printWNG 1 $LINENO $BASH_SOURCE 0  "."
                printWNG 1 $LINENO $BASH_SOURCE 0  " 1. One common cause is the 
call of \"ssh\" without the \"-X\""
                printWNG 1 $LINENO $BASH_SOURCE 0  "    option. Even for the 
utilized check by \"vncviewer --help\" "
                printWNG 1 $LINENO $BASH_SOURCE 0  "    option a display is 
required."
                printWNG 1 $LINENO $BASH_SOURCE 0  " 2. Another common cause 
for the initial usage is the missing "
                printWNG 1 $LINENO $BASH_SOURCE 0  "    permission 
\"X11Forwarding yes\" in \"/etc/ssh/sshd_conf\"."
                _verstrg=GENERIC
                _ret=0;
            fi
        fi
    fi

    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "  _verstrg=${_verstrg}"


    #currently somewhat restrictive to specific versions.
    case ${_verstrg} in
        "TightVNC"*)
            VNC_MAGIC=VNCT;
            VNC_STATE=ENABLED;
            VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH} 
vncserver,vncviewer";
            VNCSERVER_OPT="${VNCSERVER_OPT_TightVNC}";
            VNCVIEWER_OPT="${VNCVIEWER_OPT_TightVNC}";
            _ret=0;
            ;;

        "RealVNC"*)
            VNC_MAGIC=VNCR;
            VNC_STATE=ENABLED;
            VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH} 
vncserver,vncviewer";
            VNCSERVER_OPT="${VNCSERVER_OPT_RealVNC}";
            VNCVIEWER_OPT="${VNCVIEWER_OPT_RealVNC}";
            _ret=0;
            ;;

         *)
            VNC_MAGIC=VNCG;
            VNCSERVER_OPT="${VNCSERVER_OPT_GENERIC}";
            VNCVIEWER_OPT="${VNCVIEWER_OPT_GENERIC}";
            VNC_PREREQ="${VNC_PREREQ}%${_verstrg}-${MYARCH}";
            _ret=2;
            ;;
    esac
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_MAGIC       = 
${VNC_MAGIC}"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_VERSTRING   = 
${VNC_VERSTRING}"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_STATE       = 
${VNC_STATE}"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNC_PREREQ      = 
${VNC_PREREQ}"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNCSERVER_OPT   = 
${VNCSERVER_OPT}"
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "VNCVIEWER_OPT   = 
${VNCVIEWER_OPT}"
    return $_ret;
}







#FUNCBEG###############################################################
#NAME:
#  noClientServerSplitSupportedMessageVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
#  RETURN:
#  VALUES:
#
#FUNCEND###############################################################
function noClientServerSplitSupportedMessageVNC () {
    ABORT=2
    printERR $LINENO $BASH_SOURCE ${ABORT} "Unexpected ERROR!!!"
    printERR $LINENO $BASH_SOURCE ${ABORT} "VNC perfectly supports 
ClientServerSplit!!!"
    printERR $LINENO $BASH_SOURCE ${ABORT} "Check for process ownership, 
probably just missing permissions."
    printERR $LINENO $BASH_SOURCE ${ABORT} "On grave slow machines just a 
timeout may have occured."
    printERR $LINENO $BASH_SOURCE ${ABORT} "Try a following connect, if so 
adapt TIMEOUT value, but for this target only."
}



#FUNCBEG###############################################################
#NAME:
#  clientServerSplitSupportedVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Checks whether the split of client and server is supported.
#  This is just a hardcoded attribute.
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
#  RETURN:
#    0: If supported
#    1: else
#
#  VALUES:
#
#FUNCEND###############################################################
function clientServerSplitSupportedVNC () {
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME $1"
    case $1 in
        CREATE)return 0;;
        CANCEL)return 0;;
    esac
    return 1;
}



#FUNCBEG###############################################################
#NAME:
#  enumerateMySessionsVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#  Not supported.
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
#  RETURN:
#  VALUES:
#
#FUNCEND###############################################################
function enumerateMySessionsVNC () {
    printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "$FUNCNAME:address@hidden@}"
}


#
#Managed load of sub-packages gwhich are required in almost any case.
#On-demand-loads will be performed within requesting action.
#
hookPackage "${_myPKGBASE_VNC}/session"
hookPackage "${_myPKGBASE_VNC}/list"
hookPackage "${_myPKGBASE_VNC}/info"

if [ -d "${HOME}/.ctys" -a -d "${HOME}/.ctys/vnc" ];then
    #Source pre-set environment from user
    if [ -f "${HOME}/.ctys/vnc/vnc.conf" ];then
        . "${HOME}/.ctys/vnc/vnc.conf"
    fi

    #Source pre-set environment from installation 
    if [ -f "${MYCONFPATH}/vnc/vnc/cli.conf" ];then
        . "${MYCONFPATH}/conf/vnc/vnc.conf"
    fi
fi



#FUNCBEG###############################################################
#NAME:
#  handleVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#  $1: <OPMODE>
#  $2: <ACTION>
#
#OUTPUT:
#  RETURN:
#
#  VALUES:
#
#FUNCEND###############################################################
function handleVNC () {
  printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "${FUNCNAME}:$*"
  local OPMODE=$1;shift
  local ACTION=$1;shift

  case ${ACTION} in

      CREATE) 
          case ${OPMODE} in
              PROLOGUE)
                  ;;
              EPILOGUE)
                  ;;
              CHECKPARAM|ASSEMBLE|EXECUTE)
                  hookPackage "${_myPKGBASE_VNC}/create"
                  createConnectVNC ${OPMODE} ${ACTION} 
                  ;;
          esac
          ;;

      CANCEL)
          case ${OPMODE} in
              PROLOGUE)
                  ;;
              EPILOGUE)
                  ;;
              CHECKPARAM|ASSEMBLE|EXECUTE)
                  hookPackage "${_myPKGBASE_VNC}/cancel"
                  cutCancelSessionVNC ${OPMODE} ${ACTION} 
                  ;;
          esac
          ;;


      GETCLIENTPORT)
          case ${OPMODE} in
              PROLOGUE)
                  ;;
              EPILOGUE)
                  ;;
              CHECKPARAM)
                  if [ -n "$C_MODE_ARGS" ];then
                      printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE 
"C_MODE_ARGS=$C_MODE_ARGS"
                      _C_GETCLIENTPORT=$C_MODE_ARGS
                  else
                      ABORT=1
                      printERR $LINENO $BASH_SOURCE ${ABORT} "Missing 
<session-label>|<session-id>"
                      gotoHell ${ABORT}
                  fi

                  ;;
              EXECUTE)
                  printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE "Remote 
command:C_MODE_ARGS=${C_MODE_ARGS}"
                  printDBG $S_VNC ${D_BULK} $LINENO $BASH_SOURCE 
"CLIENTPORT(VNC,${MYHOST},${_C_GETCLIENTPORT})=`getClientTPVNC 
${_C_GETCLIENTPORT}`"
                  echo 
"CLIENTPORT(VNC,${MYHOST},${_C_GETCLIENTPORT})=`getClientTPVNC 
${_C_GETCLIENTPORT}`"
                  gotoHell 0
                  ;;
              ASSEMBLE)
                  ;;
          esac
          ;;

      *)
          #SUSPEND|RESUME|RESET
          ABORT=1;
          printERR $LINENO $BASH_SOURCE ${ABORT} "System Error, unsupported 
ACTION for VNC:ACTION=${ACTION} OPMODE=${OPMODE}"
          ;;
  esac

}


#FUNCBEG###############################################################
#NAME:
#  initVNC
#
#TYPE:
#  bash-function
#
#DESCRIPTION:
#
#EXAMPLE:
#
#PARAMETERS:
#
#OUTPUT:
#  RETURN:
#
#  VALUES:
#
#FUNCEND###############################################################
function initVNC () {
  local _curInit=$1;shift
  local _initConsequences=$1
  local ret=0;


  local _raise=$((INITSTATE<_curInit));

  printDBG $S_VNC ${D_MAINT} $LINENO $BASH_SOURCE "$FUNCNAME:${INITSTATE} -> 
${_curInit} - ${_raise}"

  if [ "$_raise" == "1" ];then
      #for raise of INITSTATE do not touch the OS's decisions, just expand.

      case $_curInit in
          0);;#NOP - Done by shell
          1)  #add own help to searchlist for options
              MYOPTSFILES="${MYOPTSFILES} ${MYHELPPATH}/010_vnc"
              setVersionVNC $_initConsequences

              ret=$?
              ;;
          2);;
          3);;
          4);;
          5);;
          6);;
      esac
  else
      case $_curInit in
          *);;
      esac

  fi

  return $ret
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]