#!/bin/bash

# V1.1 (2012/03/01)
# Script para Proxy RDP com optimização de trafego e
# Sem necessidade de usar um Gateway Windows ou
# Expor portas rdp directamente cá fora
# Impressora funciona como PDF - nao tem problemas de compatibilidade
# Se existir um ficheiro ~/.ssh/hostname ele usará esse hostname ( requerido por algumas
# aplicações como o Primavera por exemplo para controle de postos. )
#
# Tecnologias de Base: X2GO-DEV; Xfreerdp-DEV
# 2011 hteles@spikecs.pt; helmer.teles@gmail.com ; http://hteles.wordpress.com


SCRIPTNAME=`basename $0`
LOGFILE="${HOME}/.$SCRIPTNAME.log"
SERVER=${SCRIPTNAME}

PORT="3389"
SOUND="off"
MOUNTPOINT="${HOME}/media/disk"

# Newest x2go have a bug : error loading  libNX_Xext.so.6
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/nx/X11"

# Newest xfreerdp git versions  have a bug with full screen ( -f ) under nxagent
DSIZE=`xdpyinfo |grep -i dimensions|awk '{print $2}'`


PRINTER=`lpstat -d |cut -d ':' -f 2 |tr -d ' '`

check_hostname()
{
  USERHOSTFILE="${HOME}/.ssh/hostname"
  if ! [ -e ${USERHOSTFILE} ]; then 
     USERHOSTNAME="SPIKEDEV"
    else
       MYHOSTNAME=`cat ${USERHOSTFILE} | wc -c`
       if [ "$MYHOSTNAME" == "0" ]; then 
           USERHOSTNAME=${USERHOSTNAME}
       else 
           USERHOSTNAME=`cat ${USERHOSTFILE}`
    fi
  fi
}

check_session_mount_stuff()
{
 MYSESSION=`x2golistsessions |cut -d '|' -f2`
 PTUNEL=`x2golistmounts ${MYSESSION} |grep -i spool | wc -l`
 STUNEL=`x2golistmounts ${MYSESSION} |grep -i disk  | wc -l`
}

check_mounted_share()
{
 if [ "$STUNEL" = "1" ]; then
       SHARESTR="disk:PCLOCAL:${MOUNTPOINT}"
    else 
       SHARESTR=""
 fi
}

check_mounted_printer()
{
 if [ "$PTUNEL" = "1" ]; then
       PRINTERSTR="printer:$PRINTER"
    else 
       PRINTERSTR=""
 fi
}

construct_string()
{
 BASESTRG="--plugin cliprdr "

 if [ "$STUNEL" = "1" ] || [ "$PTUNEL" = "1" ]; then
       COMMAND="$BASESTRG --plugin rdpdr --data "  
       CLOSESTRG="--"
 fi

 if [ "$STUNEL" = "1" ]; then
       COMMAND="$COMMAND $SHARESTR "
 fi
 if [ "$PTUNEL" = "1" ]; then 
       COMMAND="$COMMAND $PRINTERSTR "
 fi

 FINALSTRG="$COMMAND $CLOSESTRG "
}

check_user_kbd()
{
  #TODO
  echo "todo" 
}

check_user_dimensions()
{
  echo "todo"
}


open_rdp()
{

  setxkbmap -model pc105 -layout pt
  setxkbmap -model pc105 -layout pt
  KEYB="0x00000816"
  COMMAND=" -d pikets -x 3 -z --gdi hw  -g ${DSIZE} -k ${KEYB} -n ${USERHOSTNAME} --sec rdp  ${FINALSTRG} ${SERVER}:${PORT}"
#  COMMAND=" -d pikets -x 3 -z -f -k ${KEYB} -n ${USERHOSTNAME} --sec rdp ${FINALSTRG} ${SERVER}:${PORT}" 
  echo "----------------------------------------------------------- SESSION LOG START -----------------------------------------------------" >> $LOGFILE
  echo "Vamos iniciar conecao rdesktop @ `date +%F_%T`" >> $LOGFILE
  echo "Will Connect to Server: $SERVER @ Port: $PORT " >> $LOGFILE
  echo "Will Use Keyboard Code $KEYB" >> $LOGFILE
  echo "Will Use ${USERHOSTNAME} as Client Hostname" >> $LOGFILE
  echo "Will Exec: xfreerdp -u \"\"  $COMMAND" >> $LOGFILE
  echo "----------------------------------------------------------- SESSION LOG CLOSE -----------------------------------------------------" >> $LOGFILE
  exec xfreerdp -u "" $COMMAND 
  x2goterminate-session ${MYSESSION}
   
}

 touch $LOGFILE
 check_hostname
 sleep 3 
 check_session_mount_stuff
 check_mounted_share
 check_mounted_printer
 construct_string
 open_rdp

