diff options
author | adv <adv@uma.es> | 2018-11-13 05:58:04 +0000 |
---|---|---|
committer | Ramón M. Gómez <ramongomez@us.es> | 2018-11-13 10:52:45 +0100 |
commit | e06c8c4003debabb1e264b7cdb7fb6a6a357a195 (patch) | |
tree | 59a87992aee00fa6d8c5344c6ecb68f133502cbd | |
parent | 48921143528b6227fc1b3e46dadb5581f55b4108 (diff) |
#851 ogMcastSyntax expand client multicast session
(cherry picked from commit e0cea763bb2186ea3c7a76adae259a0f68f58610)
-rwxr-xr-x | client/engine/Protocol.lib | 184 |
1 files changed, 115 insertions, 69 deletions
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index 49a83d73..70d8030a 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -337,6 +337,9 @@ fi #@version 1.1 - Control de errores en transferencia multicast (ticket #781) #@author Irina Gomez, ETSII Universidad de Sevilla #@date 2017/04/20 +#@version 1.1.0.a - Parametros de clientes como sesision de multicast (ticket #851) +#@author Antonio J. Doblas Viso +#@date 2018/09/11 #*/ ## # @@ -356,7 +359,9 @@ if [ "$*" == "help" -o "$2" == "help" ]; then "sessionServer syntax: portbase:method:mcastaddress:speed:nclients:ntimeWaitingUntilNclients " \ "sessionServer example: 9000:full-duplex|half-duplex|broadcast:239.194.17.36:80M:50:60 " \ "sessionClient syntax: portbase " \ - "sessionClient example: 9000 " + "sessionClient example: 9000 "\ + "sessionClient syntax: portbase:serverIP:TimeOut_session:TimeOut_transmision" \ + "sessionClient example: 9000:172.17.88.161:40:120" return fi PERROR=0 @@ -365,36 +370,37 @@ PERROR=0 ISUDPCAST=$(udp-receiver --help 2>&1) echo $ISUDPCAST | grep start-timeout > /dev/null || ogRaiseError $OG_ERR_NOTEXEC "upd-cast no existe o version antigua -requerida 2009-"|| return $? -# Si la version de udp-receiver permite --receive-timeout utilizamos la opción -if echo $ISUDPCAST | grep receive-timeout &>/dev/null; then - RECEIVERTIMEOUT=" --receive-timeout $MCASTWAIT" -else - RECEIVERTIMEOUT="" -fi - -# Error si no se reciben $PARM parámetros. +############ BEGIN NUMBERS PARAMETERS CHECK AND SESSION OPTIONS IF CLIENT OR SERVER ############## +# Definimos los parametros de la funcion segun la opcion de envio/recepcion. echo "$1" | grep "PARTITION" > /dev/null && PARM=5 || PARM=3 [ "$#" -eq "$PARM" ] || ogRaiseError $OG_ERR_FORMAT "sin parametros"|| return $? - - -# 1er param check +# 1er param check: opcion de envio/recepcion ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" || ogRaiseError $OG_ERR_FORMAT "1st param: $1" || PERROR=1 #return $? - -# 2º param check +# 1º param check : opcion de cliente/servidor echo "$1" | grep "SEND" > /dev/null && MODE=server || MODE=client -#TODO: diferenciamos los paramatros especificos de la sessión multicast -#SI: controlamos todos los parametros de la sessión multicast. +# 2º param check: sesion multicast cliente/servidor. comprobamos el numero de parametros segun el tipo de sesion cliente o servidor. +#Definimos los parametros de la sesion multicast. La sesion de cliente seran 3, aunque uno es el obligado y dos opcionales. puerto:server:autostart [ $MODE == "client" ] && SESSIONPARM=1 || SESSIONPARM=6 +#Controlamos el numero de paratros incluidos en la sesion usada como paraetro $2 OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS +#Controlamos la sesion multicast del server +if [ $MODE == "server" ] +then + [[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session de servidor multicast no completa" || PERROR=2# return $? +fi +#controlamos la sesion de cliente. +if [ $MODE == "client" ] +then + [[ ${#SESSION[*]} -ge $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session de cliente multicast no completa" || PERROR=2# return $? +fi +############ END NUMBERS PARAMETERS CHECK ############## - -[[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $? - - -#controlamos el PORTBASE de la sesion. Comun.- +##### BEGIN SERVER SESSION ##### +# 2º param check: controlamos el primer componente comun de las sesiones de servidor y cliente: PORTBASE PORTBASE=${SESSION[0]} ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9050)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $? +# 2º param check: Controlamos el resto de componenentes de la sesion del servidor. if [ $MODE == "server" ] then ogCheckStringInGroup ${SESSION[1]} "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST" || ogRaiseError $OG_ERR_FORMAT "McastSession method ${SESSION[1]}" || PERROR=4 #return $? @@ -422,67 +428,106 @@ then ogCheckStringInGroup "$5" "lzop LZOP gzip GZIP 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? LEVEL=$5 fi - - +# Controlamos si ha habido errores en la comprobacion de la sesion de servidor. if [ "$PERROR" != "0" ]; then ogRaiseError $OG_ERR_MCASTSYNTAXT " $PERROR"; return $? fi - - -# Valores estandar no configurables. +# Asignamos mas valores no configurables a la sesioe servidor. CERROR="8x8/128" - -# opción del usuo de tuberia intermedia en memoria mbuffer. +# opcion del usuo de tuberia intermedia en memoria mbuffer. which mbuffer > /dev/null && MBUFFER=" --pipe 'mbuffer -q -m 20M' " -# Generamos la instrucción base de multicast -Envio,Recepcion- +# Generamos la instruccion base del servidor de multicast -Envio- SYNTAXSERVER="udp-sender $MBUFFER --nokbd --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME --autostart $MAXTIME --log /tmp/mcast.log" -#SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE " +########################################################################## +#### END SERVER SESSION ############## -# Deteccion automatica de la subred del cliente para anadir la IP del repositorio a la orden udp-receiver en el caso de encontrarse en distinta subred del repo -REPOIP="$(ogGetRepoIp)" -CLIENTIP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}') -MASCARA=`echo $CLIENTIP | cut -f2 -d/` -CLIENTIP=`echo $CLIENTIP | cut -f1 -d/` -RIPBT="" -IPBT="" -for (( i = 1 ; i < 5 ; i++ )) -do - RIP=`echo $REPOIP | cut -f$i -d.` - RIP=`echo "$[$RIP + 256]"` - RIPB="" - while [ $RIP -gt 0 ] - do - let COCIENTE=$RIP/2 - let RESTO=$RIP%2 - RIPB=$RESTO$RIPB - RIP=$COCIENTE - done - RIPB=`echo "$RIPB" | cut -c2-` - RIPBT=$RIPBT$RIPB - IP=`echo $CLIENTIP | cut -f$i -d.` - IP=`echo "$[$IP + 256]"` - IPB="" - while [ $IP -gt 0 ] +##### BEGIN CLIENT SESSION ##### +#La primera opcion PORTBASE, ya esta controlado. Porque es comun al server y al cliente. +#La segunda opcion de la sesion para el cliente:: SERVERADDRES +if ogCheckIpAddress ${SESSION[1]} +then + SERVERADDRESS=" --mcast-rdv-address ${SESSION[1]}" +else + # Deteccion automatica de la subred del cliente para anadir la IP del repositorio a la orden udp-receiver en el caso de encontrarse en distinta subred del repo + REPOIP="$(ogGetRepoIp)" + CLIENTIP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}') + MASCARA=`echo $CLIENTIP | cut -f2 -d/` + CLIENTIP=`echo $CLIENTIP | cut -f1 -d/` + RIPBT="" + IPBT="" + for (( i = 1 ; i < 5 ; i++ )) do - let COCIENTE=$IP/2 - let RESTO=$IP%2 - IPB=$RESTO$IPB - IP=$COCIENTE + RIP=`echo $REPOIP | cut -f$i -d.` + RIP=`echo "$[$RIP + 256]"` + RIPB="" + while [ $RIP -gt 0 ] + do + let COCIENTE=$RIP/2 + let RESTO=$RIP%2 + RIPB=$RESTO$RIPB + RIP=$COCIENTE + done + RIPB=`echo "$RIPB" | cut -c2-` + RIPBT=$RIPBT$RIPB + IP=`echo $CLIENTIP | cut -f$i -d.` + IP=`echo "$[$IP + 256]"` + IPB="" + while [ $IP -gt 0 ] + do + let COCIENTE=$IP/2 + let RESTO=$IP%2 + IPB=$RESTO$IPB + IP=$COCIENTE + done + IPB=`echo "$IPB" | cut -c2-` + IPBT=$IPBT$IPB done - IPB=`echo "$IPB" | cut -c2-` - IPBT=$IPBT$IPB -done -MCASTWAIT=${MCASTWAIT:-120} -REPOSUBRED=`echo $RIPBT | cut -c1-$MASCARA` -CLIENTSUBRED=`echo $IPBT | cut -c1-$MASCARA` -if [ $REPOSUBRED == $CLIENTSUBRED ]; then - SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE $RECEIVERTIMEOUT --start-timeout $MCASTWAIT" -else - SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE --mcast-rdv-address $REPOIP $RECEIVERTIMEOUT --start-timeout $MCASTWAIT" + REPOSUBRED=`echo $RIPBT | cut -c1-$MASCARA` + CLIENTSUBRED=`echo $IPBT | cut -c1-$MASCARA` + if [ $REPOSUBRED == $CLIENTSUBRED ]; then + SERVERADDRESS=" " + else + SERVERADDRESS=" --mcast-rdv-address $REPOIP" + fi fi +#La tercera opcion de la sesion para el cliente: ${SESSION[2]} ERRORSESSION - TIMEOUT ERROR IF NO FOUNT SESSEION MULTICAST +if ogCheckStringInReg ${SESSION[2]} "^[0-9]{1,10}$" &>/dev/null +then + case ${SESSION[2]} in + 0) + ERRORSESSION=" " + ;; + *) + ERRORSESSION=" --start-timeout ${SESSION[2]}" + ;; + esac +else + #asignamos valor definido en el engine.cfg + ERRORSESSION=" --start-timeout $MCASTERRORSESSION" +fi +#La cuarta opcion de la sesion para el cliente: ${SESSION[2]} ERROR TRANSFER - TIMEOUT EEOR IF NOT RECEIVER DATA FROM SERVER +if ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,10}$" &>/dev/null +then + case ${SESSION[3]} in + 0) + ABORTTRANSMISSION=" " + ;; + *) + ABORTTRANSMISSION=" --receive-timeout ${SESSION[3]}" + ;; + esac +else + #asignamos valor definido en el engine.cfg + ABORTTRANSMISSION=" --receive-timeout $MCASTWAIT" +fi +#Componenemos la sesion multicast del cliente +SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE $SERVERADDRESS $ERRORSESSION $ABORTTRANSMISSION --log /tmp/mcast.log" +########################################################################## +#### END CLIENT SESSION ############## + ######## BEGIN MAIN PROGAM ##### case "$1" in SENDPARTITION) PROG1=`ogCreateImageSyntax $DEVICE " " $TOOL $LEVEL | awk -F"|" '{print $1 "|" $3}' | tr -d ">"` @@ -502,6 +547,7 @@ SENDPARTITION) *) ;; esac +######## END MAIN PROGAM ##### } |