--- mcore-src/trunk/mcore-tools/daemon/client/include/citrix.client.class 2012/08/13 11:37:56 2029 +++ mcore-src/trunk/mcore-tools/src/modules/citrix/citrix.client.class.in 2014/07/03 11:18:35 2319 @@ -5,16 +5,23 @@ # needs fluxbox! require fluxbox basic-video +# citrix global config +include @@SYSCONFDIR@@/mcore/citrix.conf + help_citrix_serverlist() { - mecho "get citrix.serverlist" + mecho "get citrix.serverlist [action]" mecho " Shows all hosts added on the serverlist." + mecho " [actions]:" + mecho " print - prints local configured serverlist" + mecho " query - get serverlist of the farm from given [server]" mecho mecho "set citrix.serverlist [action] [host]" mecho " Adds or deletes a server from the ica serverlist." mecho " [actions]:" mecho " add - adds a server" mecho " del - deletes a server" + mecho " auto - queries given [server] for the serverlist and adds all of them" mecho mecho " host - dns hostname or ip of the server" mecho @@ -25,13 +32,15 @@ { mecho "get citrix.session" mecho " Shows all configured ICA sessions" + mecho " print - prints all local configured sessions" + mecho " query - get sessionlist of the farm from given [server]" mecho - mecho "set citrix.session [action] [session] [mode] [user] [domain] [password]" + mecho "set citrix.session [action] [name] [session] [mode] [user] [domain] [password]" mecho " Adds or delets a ICA session." mecho " Available actions:" mecho " add - adds a new ica session" - mecho " del - deletes ica session with file name [file]" - mecho " if no [file] given, all sessions will be deleted" + mecho " del - deletes ica session with name [name]" + mecho " if no [name] given, all sessions will be deleted" mecho mecho " Available modes:" mecho " fullscreen - fullscreen session" @@ -48,111 +57,55 @@ set_citrix_session() { - local action="$1" - local session="$2" - local mode="$3" - local user="$4" - local domain="$5" - local password="$6" - local serverlist - local server - local server_num - local icafile - local CONFIG + local action="${CLASS_ARGV[0]}" + local name="${CLASS_ARGV[1]}" + local session="${CLASS_ARGV[2]}" + local mode="${CLASS_ARGV[3]}" + local user="${CLASS_ARGV[4]}" + local domain="${CLASS_ARGV[5]}" + local password="${CLASS_ARGV[6]}" local i [[ -z ${action} ]] && help_citrix_session && return 1 - [[ -z ${session} ]] && help_citrix_session && return 1 case "${action}" in add) + # requires name + [[ -z ${name} ]] && help_citrix_session && return 1 # action 'add' need mode too [[ -z ${mode} ]] && help_citrix_session && return 1 + # and session + [[ -z ${session} ]] && help_citrix_session && return 1 # other sanity checks case "${mode}" in fullscreen) ;; seamless) ;; *x*) ;; - *) help_citrix_session && return 1 + *) help_citrix_session && return 1 ;; esac - icafile="${MCORE_CONFIG_PATH}/citrix/ica/${session}.ica" - CONFIG="${MROOT}/${icafile}" - clearconfig - - addconfig '[WFClient]' - addconfig 'Version=2' - - serverlist=$(NOCOLORS=true get_citrix_serverlist) - declare -i i=0 - for server in ${serverlist} - do - (( i++ )) - server_num="${i}" - [[ ${i} -eq 1 ]] && server_num="" - addconfig "TcpBrowserAddress${server_num}=${server}" - done - addconfig 'ScreenPercent=0' - addconfig '[ApplicationServers]' - addconfig "${session}=" - addconfig "[${session}]" - addconfig "Address=${session}" - addconfig "InitialProgram=#${session}" - - # mapping table xorg -> citrix - # citrix 1 = 16 colors - # citrix 2 = 256 colors - # citrix 4 = 16 bit - # citrix 8 = 32 bit - # try always 16 bit - addconfig "DesiredColor=4" - - addconfig 'TransportDriver=TCP/IP' - addconfig 'WinStationDriver=ICA 3.0' - - [[ -n ${user} ]] && addconfig "Username=${user}" - [[ -n ${domain} ]] && addconfig "Domain=${domain}" - [[ -n ${password} ]] && addconfig "ClearPassword=${password}" - - # use the right display settings - case "${mode}" in - # fullscreen mode - fullscreen) - addconfig 'UseFullScreen=Yes' - addconfig 'NoWindowManager=True' - addconfig "DesiredHRES=65535" - addconfig "DesiredVRES=65535" - ;; - # seamless window mode - seamless) - addconfig 'TWIMode=On' - ;; - # a desired resolution - *x*) - addconfig "DesiredHRES=${mode%x*}" - addconfig "DesiredVRES=${mode#*x}" - ;; - esac - - # generate fluxbox menu entry - set_fluxbox_menuitem add "${session}" "wfica ${icafile}" + # create citrix session file + ${MCORE_LIBDIR}/citrix-session \ + --add \ + --name "${name}" \ + --session "${session}" \ + --mode "${mode}" \ + --user "${user}" \ + --domain "${domain}" \ + --password "${password}" ;; del) - if [ -f ${MROOT}/${MCORE_CONFIG_PATH}/citrix/ica/"${session}".ica ] - then - rm ${MROOT}/${MCORE_CONFIG_PATH}/citrix/ica/"${session}".ica - set_fluxbox_menuitem del "${session}" - - elif [[ -z ${file} ]] + if [[ -n ${name} ]] then - # delete all items, needed to loop through every session - # or we delete *all* fluxbox menuitem too - for i in $(find ${MROOT}/${MCORE_CONFIG_PATH}/citrix/ica -type f) + ${MCORE_LIBDIR}/citrix-session --del --name "${name}" + else + for i in $(NOCOLORS=true ${MCORE_LIBDIR}/citrix-session --print) do - rm ${i} - set_fluxbox_menuitem del "$(basename ${i} .ica)" + # basename + name="${i%.*}" + ${MCORE_LIBDIR}/citrix-session --del --name "${name}" done fi ;; @@ -163,41 +116,53 @@ get_citrix_session() { - list_files_in_directory ${MROOT}/${MCORE_CONFIG_PATH}/citrix/ica + local action="${CLASS_ARGV[0]}" + + [[ -z ${action} ]] && help_citrix_serverlist && return 1 + + case "${action}" in + print) ${MCORE_LIBDIR}/citrix-session --print ;; + query) ${MCORE_LIBDIR}/citrix-session --query ;; + *) help_citrix_session && return 1 ;; + esac } set_citrix_serverlist() { - local action="$1" - local server="$2" - local CONFIG + local action="${CLASS_ARGV[0]}" + local server="${CLASS_ARGV[1]}" + local i [[ -z ${action} ]] && help_citrix_serverlist && return 1 case "${action}" in - add) - [[ -z ${server} ]] && help_citrix_serverlist && return 1 - CONFIG="${MROOT}/${MCORE_CONFIG_PATH}/citrix/serverlist/${server}" - clearconfig - addconfig "${server}" - ;; - + add) ${MCORE_LIBDIR}/citrix-serverlist --add --server "${server}" ;; del) - if [[ -f ${MROOT}/${MCORE_CONFIG_PATH}/citrix/serverlist/${server} ]] - then - rm ${MROOT}/${MCORE_CONFIG_PATH}/citrix/serverlist/"${server}" - elif [[ -z ${server} ]] + if [[ -n ${server} ]] then + ${MCORE_LIBDIR}/citrix-serverlist --del --server "${server}" + else # delete all items - find ${MROOT}/${MCORE_CONFIG_PATH}/citrix/serverlist -type f | xargs --no-run-if-empty rm + for i in $(NOCOLORS=true ${MCORE_LIBDIR}/citrix-serverlist --print) + do + ${MCORE_LIBDIR}/citrix-serverlist --del --server "${i}" + done fi ;; - + auto) ${MCORE_LIBDIR}/citrix-serverlist --auto ;; *) help_citrix_serverlist && return 1 ;; esac } get_citrix_serverlist() { - list_files_in_directory ${MROOT}/${MCORE_CONFIG_PATH}/citrix/serverlist + local action="${CLASS_ARGV[0]}" + + [[ -z ${action} ]] && help_citrix_serverlist && return 1 + + case "${action}" in + print) ${MCORE_LIBDIR}/citrix-serverlist --print ;; + query) ${MCORE_LIBDIR}/citrix-serverlist --query ;; + *) help_citrix_session && return 1 ;; + esac }