OpenGnsys  1.1.1
Protocol.lib
Ir a la documentación de este archivo.
1 #!/bin/bash
2 #
12 ##################### FUNCIONES UNICAST ################
13 
14 # ##
31 
32 function ogUcastSyntax ()
33 {
34 
35 local PARM SESSION SESSIONPARM MODE PORTBASE PERROR ADDRESS
36 local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT
37 
38 # Si se solicita, mostrar ayuda.
39 if [ "$*" == "help" -o "$2" == "help" ]; then
40  ogHelp "$FUNCNAME SENDPARTITION str_sessionSERVER str_device str_tools str_level" \
41  "$FUNCNAME RECEIVERPARTITION str_sessionCLIENT str_device str_tools str_level "\
42  "$FUNCNAME SENDFILE str_sessionSERVER str_file "\
43  "$FUNCNAME RECEIVERFILE str_sessionCLIENT str_file " \
44  "sessionServer syntax: portbase:ipCLIENT-1:ipCLIENT-2:ipCLIENT-N " \
45  "sessionServer example: 8000:172.17.36.11:172.17.36.12" \
46  "sessionClient syntax: portbase:ipMASTER " \
47  "sessionClient example: 8000:172.17.36.249 "
48  return
49 fi
50 PERROR=0
51 
52 
53 
54 
55 # Error si no se reciben $PARM parámetros.
56 echo "$1" | grep "PARTITION" > /dev/null && PARM=5 || PARM=3
57 [ "$#" -eq "$PARM" ] || ogRaiseError $OG_ERR_FORMAT "sin parametros"|| return $?
58 
59 
60 # 1er param check
61 ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" || ogRaiseError $OG_ERR_FORMAT "1st param: $1" || PERROR=1 #return $?
62 
63 # 2º param check
64 echo "$1" | grep "SEND" > /dev/null && MODE=server || MODE=client
65 
66 ######### No controlamos el numero de elementos de la session unicast porque en el master es variable en numero
67 #TODO: diferenciamos los paramatros especificos de la sessión unicast
68 #SI: controlamos todos los parametros de la sessión unicast.
69 #[ $MODE == "client" ] && SESSIONPARM=2 || SESSIONPARM=6
70 OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS
71 
72 
73 #[[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $?
74 
75 
76 #controlamos el PORTBASE de la sesion. Comun.-
77 PORTBASE=${SESSION[0]}
78 ogCheckStringInGroup ${SESSION[0]} "8000 8001 8002 8003 8004 8005" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
79 
80 if [ $MODE == "server" ]
81 then
82  SIZEARRAY=${#SESSION[@]}
83  for (( i = 1 ; i < $SIZEARRAY ; i++ ))
84  do
85  ADDRESS="$ADDRESS -O ${SESSION[$i]}:$PORTBASE"
86  #echo " -O ${SESSION[$i]}:$PORTBASE"
87  done
88 
89 else
90  ADDRESS=${SESSION[1]}:${PORTBASE}
91 fi
92 
93 #3er param check - que puede ser un dispositvo o un fichero.
94 #[ -n "$(ogGetPath "$3")" ] || ogRaiseError $OG_ERR_NOTFOUND " device or file $3" || PERROR=9 #return $?
95 DEVICE=$3
96 
97 #4 y 5 param check . solo si es sobre particiones.
98 if [ "$PARM" == "5" ]
99 then
100  # 4 param check
101  ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $?
102  TOOL=$4
103  ogCheckStringInGroup "$5" "lzop gzip LZOP GZIP 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $?
104  LEVEL=$5
105 fi
106 
107 [ "$PERROR" == "0" ] || ogRaiseError $OG_ERR_UCASTSYNTAXT " $PERROR" || return $?
108 
109 # Generamos la instrucción base de unicast -Envio,Recepcion-
110 SYNTAXSERVER="mbuffer $ADDRESS"
111 SYNTAXCLIENT="mbuffer -I $ADDRESS "
112 
113 
114 case "$1" in
115 SENDPARTITION)
116  PROG1=`ogCreateImageSyntax $DEVICE " " $TOOL $LEVEL | awk -F"|" '{print $1 "|" $3}' | tr -d ">"`
117  echo "$PROG1 | $SYNTAXSERVER"
118  ;;
119  RECEIVERPARTITION)
120  COMPRESSOR=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $1}'`
121  TOOLS=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $NF}'`
122  echo "$SYNTAXCLIENT | $COMPRESSOR | $TOOLS "
123  ;;
124  SENDFILE)
125  echo "$SYNTAXSERVER -i $3"
126  ;;
127  RECEIVERFILE)
128  echo "$SYNTAXCLIENT -i $3"
129  ;;
130  *)
131  ;;
132 esac
133 }
134 
135 
136 # ##
153 
155 {
156 
157 # Variables locales
158 local PART COMMAND RETVAL
159 
160 # Si se solicita, mostrar ayuda.
161 if [ "$*" == "help" ]; then
162  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionUNICAST-SERVER tools compresor" \
163  "$FUNCNAME 1 1 8000:172.17.36.11:172.17.36.12 partclone lzop"
164  return
165 fi
166 # Error si no se reciben 5 parámetros.
167 [ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $?
168 #chequeamos la particion.
169 PART=$(ogDiskToDev "$1" "$2") || return $?
170 
171 #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
172 ogUnmount $1 $2
173 
174 #generamos la instrucción a ejecutar.
175 COMMAND=`ogUcastSyntax SENDPARTITION "$3" $PART $4 $5`
176 RETVAL=$?
177 
178 if [ "$RETVAL" -gt "0" ]
179 then
180  return $RETVAL
181 else
182  echo $COMMAND
183  eval $COMMAND || ogRaiseError $OG_ERR_UCASTSENDPARTITION " "; return $?
184 fi
185 
186 }
187 
188 
189 # ##
205 {
206 # Variables locales
207 local PART COMMAND RETVAL
208 
209 # Si se solicita, mostrar ayuda.
210 if [ "$*" == "help" ]; then
211  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastCLIENT tools compresor" \
212  "$FUNCNAME 1 1 8000:ipMASTER partclone lzop"
213  return
214 fi
215 # Error si no se reciben 5 parámetros.
216 [ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $?
217 #chequeamos la particion.
218 PART=$(ogDiskToDev "$1" "$2") || return $?
219 
220 #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
221 ogUnmount $1 $2
222 
223 #generamos la instrucción a ejecutar.
224 COMMAND=`ogUcastSyntax RECEIVERPARTITION "$3" $PART $4 $5`
225 RETVAL=$?
226 
227 if [ "$RETVAL" -gt "0" ]
228 then
229  return $RETVAL
230 else
231  echo $COMMAND
232  eval $COMMAND || ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " "; return $?
233 fi
234 }
235 
236 
237 
238 # ##
253 #
254 
255 function ogUcastSendFile ()
256 {
257 # Variables locales.
258 local ARG ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
259 
260 
261 #ARGS usado para controlar ubicación de la sesion multicast
262 # Si se solicita, mostrar ayuda.
263 if [ "$*" == "help" ]; then
264  ogHelp "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast(puerto:ip:ip:ip)" \
265  "$FUNCNAME 1 1 /aula1/winxp.img 8000:172.17.36.11:172.17.36.12" \
266  "$FUNCNAME REPO /aula1/ubuntu.iso sesionUcast" \
267  "$FUNCNAME CACHE /aula1/winxp.img sesionUcast" \
268  "$FUNCNAME /opt/opengnsys/images/aula1/hd500.vmx sesionUcast"
269  return
270 fi
271 
272 ARGS="$@"
273 case "$1" in
274  /*) # Camino completo. */ (Comentrio Doxygen)
275  SOURCE=$(ogGetPath "$1")
276  ARG=2
277  DEVICE="$1"
278  ;;
279  [1-9]*) # ndisco npartición.
280  SOURCE=$(ogGetPath "$1" "$2" "$3")
281  ARG=4
282  DEVICE="$1 $2 $3"
283  ;;
284  *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
285  SOURCE=$(ogGetPath "$1" "$2")
286  ARG=3
287  DEVICE="$1 $2 "
288  ;;
289 esac
290 
291 
292 # Error si no se reciben los argumentos ARG necesarios según la opcion.
293 [ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $?
294 
295 # Comprobar fichero origen
296 [ -n "$(ogGetPath $SOURCE)" ] || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $?
297 
298 
299 SESSION=${!ARG}
300 
301 #generamos la instrucción a ejecutar.
302 COMMAND=`ogUcastSyntax "SENDFILE" "$SESSION" "$SOURCE"`
303 RETVAL=$?
304 
305 if [ "$RETVAL" -gt "0" ]
306 then
307  return $RETVAL
308 else
309  echo $COMMAND
310  eval $COMMAND || ogRaiseError $OG_ERR_UCASTSENDFILE " "; return $?
311 fi
312 
313 }
314 
315 
316 
317 # ##
344 #
345 
346 function ogMcastSyntax ()
347 {
348 
349 local ISUDPCAST RECEIVERTIMEOUT STARTTIMEOUT PARM SESSION SESSIONPARM MODE PORTBASE PERROR
350 local METHOD ADDRESS BITRATE NCLIENTS MAXTIME CERROR
351 local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT
352 
353 # Si se solicita, mostrar ayuda.
354 if [ "$*" == "help" -o "$2" == "help" ]; then
355  ogHelp "$FUNCNAME SENDPARTITION str_sessionSERVER str_device str_tools str_level" \
356  "$FUNCNAME RECEIVERPARTITION str_sessionCLIENT str_device str_tools str_level "\
357  "$FUNCNAME SENDFILE str_sessionSERVER str_file "\
358  "$FUNCNAME RECEIVERFILE str_sessionCLIENT str_file " \
359  "sessionServer syntax: portbase:method:mcastaddress:speed:nclients:ntimeWaitingUntilNclients " \
360  "sessionServer example: 9000:full-duplex|half-duplex|broadcast:239.194.17.36:80M:50:60 " \
361  "sessionClient syntax: portbase " \
362  "sessionClient example: 9000 "\
363  "sessionClient syntax: portbase:serverIP:TimeOut_session:TimeOut_transmision" \
364  "sessionClient example: 9000:172.17.88.161:40:120"
365  return
366 fi
367 PERROR=0
368 
369 #si no tenemos updcast o su version superior 2009 udpcast error.
370 ISUDPCAST=$(udp-receiver --help 2>&1)
371 echo $ISUDPCAST | grep "not found" > /dev/null && (ogRaiseError $OG_ERR_NOTEXEC "upd-cast no existe " || return $?)
372 
373 ############ BEGIN NUMBERS PARAMETERS CHECK AND SESSION OPTIONS IF CLIENT OR SERVER ##############
374 # Definimos los parametros de la funcion segun la opcion de envio/recepcion.
375 echo "$1" | grep "PARTITION" > /dev/null && PARM=5 || PARM=3
376 [ "$#" -eq "$PARM" ] || ogRaiseError $OG_ERR_FORMAT "sin parametros"|| return $?
377 # 1er param check: opcion de envio/recepcion
378 ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" || ogRaiseError $OG_ERR_FORMAT "1st param: $1" || PERROR=1 #return $?
379 # 1º param check : opcion de cliente/servidor
380 echo "$1" | grep "SEND" > /dev/null && MODE=server || MODE=client
381 
382 # 2º param check: sesion multicast cliente/servidor. comprobamos el numero de parametros segun el tipo de sesion cliente o servidor.
383 #Definimos los parametros de la sesion multicast. La sesion de cliente seran 3, aunque uno es el obligado y dos opcionales. puerto:server:autostart
384 [ $MODE == "client" ] && SESSIONPARM=1 || SESSIONPARM=6
385 #Controlamos el numero de paratros incluidos en la sesion usada como paraetro $2
386 OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS
387 #Controlamos la sesion multicast del server
388 if [ $MODE == "server" ]
389 then
390  [[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session de servidor multicast no completa" || PERROR=2# return $?
391 fi
392 #controlamos la sesion de cliente.
393 if [ $MODE == "client" ]
394 then
395  [[ ${#SESSION[*]} -ge $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session de cliente multicast no completa" || PERROR=2# return $?
396 fi
397 ############ END NUMBERS PARAMETERS CHECK ##############
398 
399 ##### BEGIN SERVER SESSION #####
400 # 2º param check: controlamos el primer componente comun de las sesiones de servidor y cliente: PORTBASE
401 PORTBASE=${SESSION[0]}
402 ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9098)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
403 # 2º param check: Controlamos el resto de componenentes de la sesion del servidor.
404 if [ $MODE == "server" ]
405 then
406  ogCheckStringInGroup ${SESSION[1]} "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST" || ogRaiseError $OG_ERR_FORMAT "McastSession method ${SESSION[1]}" || PERROR=4 #return $?
407  METHOD=${SESSION[1]}
408  ogCheckIpAddress ${SESSION[2]} || ogRaiseError $OG_ERR_FORMAT "McastSession address ${SESSION[2]}" || PERROR=5 #return $?
409  ADDRESS=${SESSION[2]}
410  ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,3}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $?
411  BITRATE=${SESSION[3]}
412  ogCheckStringInReg ${SESSION[4]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession nclients ${SESSION[4]}" || PERROR=7 # return $?
413  NCLIENTS=${SESSION[4]}
414  ogCheckStringInReg ${SESSION[5]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession maxtime ${SESSION[5]}" || PERROR=8 # return $?
415  MAXTIME=${SESSION[5]}
416 fi
417 
418 #3er param check - que puede ser un dispositvo o un fichero.
419 # [ -n "$(ogGetPath $3)" ] || ogRaiseError $OG_ERR_NOTFOUND " device or file $3" || PERROR=9 #return $?
420 DEVICE=$3
421 
422 #4 y 5 param check . solo si es sobre particiones.
423 if [ "$PARM" == "5" ]
424 then
425  # 4 param check
426  ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $?
427  TOOL=$4
428  ogCheckStringInGroup "$5" "lzop LZOP gzip GZIP 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $?
429  LEVEL=$5
430 fi
431 # Controlamos si ha habido errores en la comprobacion de la sesion de servidor.
432 if [ "$PERROR" != "0" ]; then
433  ogRaiseError $OG_ERR_MCASTSYNTAXT " $PERROR"; return $?
434 fi
435 # Asignamos mas valores no configurables a la sesioe servidor.
436 CERROR="8x8/128"
437 # opcion del usuo de tuberia intermedia en memoria mbuffer.
438 which mbuffer > /dev/null && MBUFFER=" --pipe 'mbuffer -q -m 20M' "
439 
440 # Generamos la instruccion base del servidor de multicast -Envio-
441 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"
442 ##########################################################################
443 #### END SERVER SESSION ##############
444 
445 
446 ##### BEGIN CLIENT SESSION #####
447 #La primera opcion PORTBASE, ya esta controlado. Porque es comun al server y al cliente.
448 #La segunda opcion de la sesion para el cliente:: SERVERADDRES
449 if ogCheckIpAddress ${SESSION[1]} 2>/dev/null
450 then
451  SERVERADDRESS=" --mcast-rdv-address ${SESSION[1]}"
452 else
453  # 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
454  REPOIP="$(ogGetRepoIp)"
455  CLIENTIP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}')
456  MASCARA=`echo $CLIENTIP | cut -f2 -d/`
457  CLIENTIP=`echo $CLIENTIP | cut -f1 -d/`
458  RIPBT=""
459  IPBT=""
460  for (( i = 1 ; i < 5 ; i++ ))
461  do
462  RIP=`echo $REPOIP | cut -f$i -d.`
463  RIP=`echo "$[$RIP + 256]"`
464  RIPB=""
465  while [ $RIP -gt 0 ]
466  do
467  let COCIENTE=$RIP/2
468  let RESTO=$RIP%2
469  RIPB=$RESTO$RIPB
470  RIP=$COCIENTE
471  done
472  RIPB=`echo "$RIPB" | cut -c2-`
473  RIPBT=$RIPBT$RIPB
474  IP=`echo $CLIENTIP | cut -f$i -d.`
475  IP=`echo "$[$IP + 256]"`
476  IPB=""
477  while [ $IP -gt 0 ]
478  do
479  let COCIENTE=$IP/2
480  let RESTO=$IP%2
481  IPB=$RESTO$IPB
482  IP=$COCIENTE
483  done
484  IPB=`echo "$IPB" | cut -c2-`
485  IPBT=$IPBT$IPB
486  done
487  REPOSUBRED=`echo $RIPBT | cut -c1-$MASCARA`
488  CLIENTSUBRED=`echo $IPBT | cut -c1-$MASCARA`
489  if [ $REPOSUBRED == $CLIENTSUBRED ]; then
490  SERVERADDRESS=" "
491  else
492  SERVERADDRESS=" --mcast-rdv-address $REPOIP"
493  fi
494 fi
495 #La tercera opcion de la sesion para el cliente: ${SESSION[2]} ERRORSESSION - TIMEOUT ERROR IF NO FOUNT SESSEION MULTICAST
496 if ogCheckStringInReg ${SESSION[2]} "^[0-9]{1,10}$" &>/dev/null
497 then
498  case ${SESSION[2]} in
499  0)
500  STARTTIMEOUT=" "
501  ;;
502  *)
503  STARTTIMEOUT=" --start-timeout ${SESSION[2]}"
504  ;;
505  esac
506 else
507  #asignamos valor definido en el engine.cfg
508  STARTTIMEOUT=" --start-timeout $MCASTERRORSESSION"
509 fi
510 #Verificamos que la opcion start-time out esta soportada por la version del cliente
511 echo $ISUDPCAST | grep start-timeout > /dev/null || STARTTIMEOUT=" "
512 
513 #La cuarta opcion de la sesion para el cliente: ${SESSION[2]} ERROR TRANSFER - TIMEOUT EEOR IF NOT RECEIVER DATA FROM SERVER
514 if ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,10}$" &>/dev/null
515 then
516  case ${SESSION[3]} in
517  0)
518  RECEIVERTIMEOUT=" "
519  ;;
520  *)
521  RECEIVERTIMEOUT=" --receive-timeout ${SESSION[3]}"
522  ;;
523  esac
524 else
525  #asignamos valor definido en el engine.cfg
526  RECEIVERTIMEOUT=" --receive-timeout $MCASTWAIT"
527 fi
528 #Verificamos que la opcion receive-timeou esta soportada por la version del cliente
529 echo $ISUDPCAST | grep receive-timeout > /dev/null || RECEIVERTIMEOUT=" "
530 
531 #Componenemos la sesion multicast del cliente
532 SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE $SERVERADDRESS $STARTTIMEOUT $RECEIVERTIMEOUT --log /tmp/mcast.log"
533 ##########################################################################
534 #### END CLIENT SESSION ##############
535 
536  ######## BEGIN MAIN PROGAM #####
537 case "$1" in
538  SENDPARTITION)
539  PROG1=`ogCreateImageSyntax $DEVICE " " $TOOL $LEVEL | awk -F"|" '{print $1 "|" $3}' | tr -d ">"`
540  echo "$PROG1 | $SYNTAXSERVER"
541  ;;
542  RECEIVERPARTITION)
543  COMPRESSOR=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $1}'`
544  TOOLS=`ogRestoreImageSyntax " " $DEVICE $TOOL $LEVEL | awk -F\| '{print $NF}'`
545  echo "$SYNTAXCLIENT | $COMPRESSOR | $TOOLS "
546  ;;
547  SENDFILE)
548  echo "$SYNTAXSERVER --file $3"
549  ;;
550  RECEIVERFILE)
551  echo "$SYNTAXCLIENT --file $3"
552  ;;
553  *)
554  ;;
555 esac
556 ######## END MAIN PROGAM #####
557 }
558 
559 
560 
561 # ##
576 #
577 
578 function ogMcastSendFile ()
579 {
580 # Variables locales.
581 local ARGS ARG SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
582 
583 #LOGFILE="/tmp/mcast.log"
584 
585 #ARGS usado para controlar ubicación de la sesion multicast
586 # Si se solicita, mostrar ayuda.
587 if [ "$*" == "help" ]; then
588  ogHelp "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast" \
589  "$FUNCNAME 1 1 /aula1/winxp.img sesionMcast" \
590  "$FUNCNAME REPO /aula1/ubuntu.iso sesionMcast" \
591  "$FUNCNAME CACHE /aula1/winxp.img sesionMcast" \
592  "$FUNCNAME /opt/opengnsys/images/aula1/hd500.vmx sesionMcast"
593  return
594 fi
595 
596 ARGS="$@"
597 case "$1" in
598  /*) # Camino completo. */ (Comentrio Doxygen)
599  SOURCE=$(ogGetPath "$1")
600  ARG=2
601  DEVICE="$1"
602  ;;
603  [1-9]*) # ndisco npartición.
604  SOURCE=$(ogGetPath "$1" "$2" "$3")
605  ARG=4
606  DEVICE="$1 $2 $3"
607  ;;
608  *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
609  SOURCE=$(ogGetPath "$1" "$2")
610  ARG=3
611  DEVICE="$1 $2 "
612  ;;
613 esac
614 
615 
616 # Error si no se reciben los argumentos ARG necesarios según la opcion.
617 [ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $?
618 
619 # Comprobar fichero origen
620 [ -n "$(ogGetPath $SOURCE)" ] || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $?
621 
622 # eliminamos ficheros antiguos de log
623 #rm $LOGFILE
624 
625 SESSION=${!ARG}
626 
627 
628 #generamos la instrucción a ejecutar.
629 COMMAND=`ogMcastSyntax "SENDFILE" "$SESSION" "$SOURCE"`
630 RETVAL=$?
631 
632 if [ "$RETVAL" -gt "0" ]
633 then
634  return $RETVAL
635 else
636  echo $COMMAND
637  eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDFILE " "; return $?
638  #[ -s "$LOGFILE" ] || return 21
639 fi
640 
641 }
642 
643 
644 
645 # ##
659 #
660 
662 {
663 
664 # Variables locales.
665 local ARGS ARG TARGETDIR TARGETFILE
666 
667 
668 # Si se solicita, mostrar ayuda.
669 if [ "$*" == "help" ]; then
670  ogHelp "$FUNCNAME" "$FUNCNAME [ str_portMcast] [ [Relative_path_file] | [str_REPOSITORY path_file] | [int_ndisk int_npart path_file ] ]" \
671  "$FUNCNAME 9000 /PS1_PH1.img" \
672  "$FUNCNAME 9000 CACHE /aula1/PS2_PH4.img" \
673  "$FUNCNAME 9000 1 1 /isos/linux.iso"
674  return
675 fi
676 
677 ARGS="$@"
678 case "$2" in
679  /*) # Camino completo. */ (Comentrio Doxygen)
680  TARGETDIR=$(ogGetParentPath "$2")
681  ARG=2
682  ;;
683  [1-9]*) # ndisco npartición.
684  TARGETDIR=$(ogGetParentPath "$2" "$3" "$4")
685  ARG=4
686  ;;
687  *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
688  TARGETDIR=$(ogGetParentPath "$2" "$3")
689  ARG=3
690  ;;
691 esac
692 
693 # Error si no se reciben los argumentos ARG necesarios según la opcion.
694 [ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $?
695 
696 #obtenemos el nombre del fichero a descargar.
697 TARGETFILE=`basename ${!ARG}`
698 
699 #generamos la instrucción a ejecutar.
700 COMMAND=`ogMcastSyntax RECEIVERFILE "$1" $TARGETDIR/$TARGETFILE `
701 RETVAL=$?
702 
703 if [ "$RETVAL" -gt "0" ]
704 then
705  return $RETVAL
706 else
707  echo $COMMAND
708  eval $COMMAND || ogRaiseError $OG_ERR_MCASTRECEIVERFILE "$TARGETFILE"; return $?
709  #[ -s "$LOGFILE" ] || return 21
710 fi
711 }
712 
713 
714 # ##
731 
733 {
734 
735 # Variables locales
736 local PART COMMAND RETVAL
737 
738 # Si se solicita, mostrar ayuda.
739 if [ "$*" == "help" ]; then
740  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastSERVER tools compresor" \
741  "$FUNCNAME 1 1 9000:full-duplex:239.194.37.31:50M:20:2 partclone lzop"
742  return
743 fi
744 # Error si no se reciben 5 parámetros.
745 [ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $?
746 #chequeamos la particion.
747 PART=$(ogDiskToDev "$1" "$2") || return $?
748 
749 #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
750 ogUnmount $1 $2
751 
752 #generamos la instrucción a ejecutar.
753 COMMAND=`ogMcastSyntax SENDPARTITION "$3" $PART $4 $5`
754 RETVAL=$?
755 
756 if [ "$RETVAL" -gt "0" ]
757 then
758  return $RETVAL
759 else
760  echo $COMMAND
761  eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDPARTITION " "; return $?
762 fi
763 
764 
765 }
766 
767 # ##
784 {
785 # Variables locales
786 local PART COMMAND RETVAL
787 
788 # Si se solicita, mostrar ayuda.
789 if [ "$*" == "help" ]; then
790  ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npart SessionMulticastCLIENT tools compresor" \
791  "$FUNCNAME 1 1 9000 partclone lzop"
792  return
793 fi
794 # Error si no se reciben 5 parámetros.
795 [ "$#" == 5 ] || ogRaiseError $OG_ERR_FORMAT || return $?
796 #chequeamos la particion.
797 PART=$(ogDiskToDev "$1" "$2") || return $?
798 
799 #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
800 ogUnmount $1 $2
801 
802 #generamos la instrucción a ejecutar.
803 COMMAND=`ogMcastSyntax RECEIVERPARTITION "$3" $PART $4 $5`
804 RETVAL=$?
805 
806 if [ "$RETVAL" -gt "0" ]
807 then
808  return $RETVAL
809 else
810  echo $COMMAND
811  eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDPARTITION " "; return $?
812 fi
813 
814 }
815 
816 
817 # ##
836 function ogMcastRequest ()
837 {
838 # Variables locales
839 local FILE PROTOOPT PORT PORTAUX REPOIP REPOPORTAUX REPEAT OGUNIT
840 
841 # Si se solicita, mostrar ayuda.
842 if [ "$*" == "help" ]; then
843  ogHelp "$FUNCNAME" "$FUNCNAME path_filename str_mcastoptions"
844  return
845 fi
846 # Error si no se reciben 2 parámetros.
847 [ "$#" == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
848 
849 OGUNIT="$(df|awk '/ogimages/ {print $1}'|cut -d/ -f5)/"
850 FILE="$OGUNIT$1"
851 PROTOOPT="$2"
852 
853 #TODO: CONTROL PARAMETROS
854 
855 PORT=$(echo $2 | cut -f1 -d":")
856 let PORTAUX=$PORT+1
857 REPOIP=$(ogGetRepoIp)
858 REPOPORTAUX=2009
859 REPEAT=0
860 until nmap -n -sU -p $PORTAUX $REPOIP | grep open
861 do
862  let REPEAT=$REPEAT+1
863  [ "$REPEAT" -lt 6 ] || ogRaiseError session log $OG_ERR_PROTOCOLJOINMASTER "MULTICAST \"$FILE\" \"$PROTOOPT\" $FILELIST" || return $?
864  echo "$MSG_SCRIPTS_TASK_START : hose $REPOIP $REPOPORTAUX --out sh -c "echo -ne START_MULTICAST $FILE $2""
865  #update-cache:
866  hose $REPOIP $REPOPORTAUX --out sh -c "echo -ne START_MULTICAST "$FILE" "$PROTOOPT""
867  #multicas-direct: hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST /$IMAGE.img $OPTPROTOCOLO"
868  sleep 10
869 done
870 }
871 
872 
873 ##########################################
874 ############## funciones torrent
875 # ##
900 function ogTorrentStart ()
901 {
902 
903 # Variables locales.
904 local ARGS ARG TARGETDIR TARGETFILE SESSION ERROR
905 ERROR=0
906 
907 # Si se solicita, mostrar ayuda.
908 if [ "$*" == "help" ]; then
909  ogHelp "$FUNCNAME $FUNCNAME [ str_repo] [ [Relative_path_fileTORRENT] | [str_REPOSITORY path_fileTORRENT] | [int_ndisk int_npart path_fileTORRENT ] ] SessionTorrent" \
910  "$FUNCNAME CACHE /PS1_PH1.img.torrent seeder:10000" \
911  "$FUNCNAME /opt/opengnsys/cache/linux.iso peer:60" \
912  "$FUNCNAME 1 1 /linux.iso.torrent leecher:60"
913  return
914 fi
915 
916 case "$1" in
917  /*) # Camino completo. */ (Comentrio Doxygen)
918  SOURCE=$(ogGetPath "$1")
919  ARG=2
920  ;;
921  [1-9]*) # ndisco npartición.
922  SOURCE=$(ogGetPath "$1" "$2" "$3")
923  ARG=4
924  ;;
925  *) # Otros: Solo cache (no se permiten caminos relativos).
926  SOURCE=$(ogGetPath "$1" "$2" 2>/dev/null)
927  ARG=3
928  ;;
929 esac
930 
931 # Error si no se reciben los argumentos ARG necesarios según la opcion.
932 [ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $?
933 
934 #controlar source, que no se haga al repo.
935 if [ $ARG == "3" ]
936 then
937  ogCheckStringInGroup "$1" "CACHE cache" || ogRaiseError $OG_ERR_FORMAT "La descarga torrent solo se hace desde local, copia el torrent a la cache y realiza la operación desde esa ubicación" || return $?
938 fi
939 if [ $ARG == "2" ]
940 then
941  if `ogCheckStringInReg "$1" "^/opt/opengnsys/images"`
942  then
943  ogRaiseError $OG_ERR_FORMAT "La descarga torrent solo se hace desde local, copia el torrent a la cache y realiza la operación desde esa ubicación"
944  return $?
945  fi
946 fi
947 
948 #controlar el source, para que sea un torrent.
949 ctorrent -x ${SOURCE} &> /dev/null; [ $? -eq 0 ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
950 
951 TARGET=`echo $SOURCE | awk -F.torrent '{print $1}'`
952 DIRSOURCE=`ogGetParentPath $SOURCE`
953 cd $DIRSOURCE
954 
955 
956 
957 SESSION=${!ARG}
958 OIFS=$IFS; IFS=':' ; SESSION=($SESSION); IFS=$OIFS
959 [[ ${#SESSION[*]} == 2 ]] || ogRaiseError $OG_ERR_FORMAT "parametros session Torrent no completa: modo:tiempo" || ERROR=1# return $?
960 #controlamos el modo de operación del cliente-
961 ogCheckStringInGroup ${SESSION[0]} "seeder SEEDER peer PEER leecher LEECHER" || ogRaiseError $OG_ERR_FORMAT "valor modo Torrent no valido ${SESSION[0]}" || ERROR=1 #return $?
962 MODE=${SESSION[0]}
963 #contolamos el tiempo para el seeder o una vez descargada la imagen como peer o leecher.
964 ogCheckStringInReg ${SESSION[1]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "valor tiempo no valido ${SESSION[1]}" || ERROR=1 # return $?
965 TIME=${SESSION[1]}
966 # si ha habido error en el control de parametros error.
967 [ "$ERROR" == "1" ] && return 1
968 
969 
970 #SYNTAXSEEDER="echo MODE seeder ctorrent ; (sleep \$TIME && kill -9 \`pidof ctorrent\`) & ; ctorrent \${SOURCE}"
971 
972 # si No fichero .bf, y Si fichero destino imagen ya descargada y su chequeo fue comprobado en su descarga inicial.
973 if [ ! -f ${SOURCE}.bf -a -f ${TARGET} ]
974 then
975  echo "imagen ya descargada"
976  case "$MODE" in
977  seeder|SEEDER)
978  echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
979  (sleep $TIME && kill -2 `pidof ctorrent`) &
980  ctorrent -f ${SOURCE}
981  esac
982  return 0
983 fi
984 
985 #Si no existe bf ni fichero destino descarga inicial.
986 if [ ! -f ${SOURCE}.bf -a ! -f ${TARGET} ]
987 then
988  OPTION=DOWNLOAD
989  echo "descarga inicial"
990 fi
991 
992 # Si fichero bf descarga anterior no completada -.
993 if [ -f ${SOURCE}.bf -a -f ${TARGET} ]
994 then
995  echo Continuar con Descargar inicial no terminada.
996  OPTION=DOWNLOAD
997 fi
998 
999 if [ "$OPTION" == "DOWNLOAD" ]
1000 then
1001  case "$MODE" in
1002  peer|PEER)
1003  echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}"
1004  # Creamos el fichero de resumen por defecto
1005  touch ${SOURCE}.bf
1006  # ctorrent controla otro fichero -b ${SOURCE}.bfog
1007  ctorrent -f -c -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bfog
1008  ;;
1009  leecher|LEECHER)
1010  echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep 30; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
1011  ctorrent ${SOURCE} -X "sleep 30; kill -2 \$(pidof ctorrent)" -C 100 -U 0
1012  ;;
1013  seeder|SEEDER)
1014  echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
1015  # Creamos el fichero de resumen por defecto
1016  touch ${SOURCE}.bf
1017  # ctorrent controla otro fichero -b ${SOURCE}.bfog
1018  ctorrent -f -c -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bfog
1019  ;;
1020  esac
1021 fi
1022 cd /tmp
1023 }
1024 
1025 # ##
1044 
1045 function ogCreateTorrent ()
1046 {
1047 # Variables locales.
1048 local ARGS ARG SOURCE EXT IPTORRENT
1049 
1050 
1051 # Si se solicita, mostrar ayuda.
1052 if [ "$*" == "help" ]; then
1053  ogHelp "$FUNCNAME" "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] Relative_path_file IpBttrack" \ "$FUNCNAME 1 1 /aula1/winxp 10.1.15.23" \
1054  "$FUNCNAME REPO /aula1/winxp 10.1.15.45"
1055 
1056  return
1057 fi
1058 
1059 # Error si se quiere crear el fichero en cache y no existe
1060 [ "$1" != "CACHE" ] || `ogFindCache >/dev/null` || ogRaiseError $OG_ERR_NOTFOUND "CACHE"|| return $?
1061 
1062 case "$1" in
1063  /*) # Camino completo. */ (Comentrio Doxygen)
1064  SOURCE=$(ogGetPath "$1.img")
1065  ARG=2
1066  ;;
1067  [1-9]*) # ndisco npartición.
1068  SOURCE=$(ogGetPath "$1" "$2" "$3.img")
1069  ARG=4
1070  ;;
1071  *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
1072  EXT=$(ogGetImageType "$1" "$2")
1073  SOURCE=$(ogGetPath "$1" "$2.$EXT")
1074  ARG=3
1075  ;;
1076 esac
1077 
1078 # Error si no se reciben los argumentos ARG necesarios según la opcion.
1079 [ $# -eq "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $?
1080 
1081 
1082 # Error si no existe la imagen
1083 [ $SOURCE ] || ogRaiseError $OG_ERR_NOTFOUND || return $?
1084 
1085 [ -r $SOURCE.torrent ] && mv "$SOURCE.torrent" "$SOURCE.torrent.ant" && echo "Esperamos que se refresque el servidor" && sleep 20
1086 
1087 IPTORRENT="${!#}"
1088 # Si ponemos el path completo cuando creamos el fichero torrent da error
1089 cd `dirname $SOURCE`
1090 echo ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.torrent
1091 ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.torrent
1092 
1093 }
1094 
1095 
1096 # ##
1116 {
1117 #echo "admite full check con 3param TORRENT"
1118 # Variables locales.
1119 local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET
1120 ERROR=0
1121 
1122 # Si se solicita, mostrar ayuda.
1123 if [ "$*" == "help" ]; then
1124  ogHelp "$FUNCNAME" "$FUNCNAME str_repo relative_path_image [protocol|FULL]" \
1125  "$FUNCNAME REPO /PS1_PH1.img UNICAST" \
1126  "$FUNCNAME REPO /ogclient.sqfs FULL"
1127 
1128  return
1129 fi
1130 
1131 #Control de la cache
1132 ogFindCache &>/dev/null || return $(ogRaiseError $OG_ERR_NOTCACHE; echo $?)
1133 
1134 #Control de parametros: ahora admite tres.
1135 [ $# -ge 2 ] || return $(ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_repo relative_path_image [protocol|FULL]"; echo $?)
1136 
1137 ogCheckStringInGroup "$1" "REPO repo" || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
1138 FILESOURCE=`ogGetPath $1 $2`
1139 [ -n "$FILESOURCE" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
1140 
1141 #echo "paso 1. si no existe la imagen, confirmar que es necesario actualizar la cache."
1142 FILETARGET=`ogGetPath CACHE $2`
1143 if [ -z "$FILETARGET" ]
1144 then
1145  # borramos el fichero bf del torrent, en el caso de que se hubiese quedado de algun proceso fallido
1146  [ -n "$(ogGetPath CACHE "/$2.torrent.bf")" ] && ogDeleteFile CACHE "/$2.torrent.bf" &> /dev/null
1147  [ -n "$(ogGetPath CACHE "/$2.sum")" ] && ogDeleteFile CACHE "/$2.sum" &> /dev/null
1148  [ -n "$(ogGetPath CACHE "/$2.full.sum")" ] && ogDeleteFile CACHE "/$2.full.sum" &> /dev/null
1149  echo "TRUE(0), es necesario actualizar. Paso 1, la cache no contiene esa imagen "
1150  return 0
1151 fi
1152 
1153 #echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent"
1154 if [ -n "$(ogGetPath "$FILETARGET.torrent.bf")" ]; then
1155  #TODO: comprobar los md5 del fichero .torrent para asegurarnos que la imagen a descarga es la misma.
1156  echo "TRUE(0), es necesario actualizar. Paso 2, la imagen esta en un estado de descarga torrent interrumpido"
1157  return 0
1158 fi
1159 
1160 ## En este punto la imagen en el repo y en la cache se llaman igual,
1161 #echo "paso 4. Obtener los md5 del fichero imagen en la cacha segun PROTOCOLO $3"
1162 case "${3^^}" in
1163  FULL|TORRENT)
1164  #Buscamos MD5 en el REPO SOURCE
1165  if [ -f $FILESOURCE.full.sum ]
1166  then
1167  MD5SOURCE=$(cat $FILESOURCE.full.sum)
1168  else
1169  MD5SOURCE=$(ogCalculateFullChecksum $FILESOURCE)
1170  fi
1171  # Generamos el MD5 (full) en la CACHE
1172  [ ! -f $FILETARGET.full.sum ] && ogCalculateFullChecksum $FILETARGET > $FILETARGET.full.sum
1173  MD5TARGET=$(cat $FILETARGET.full.sum)
1174  # Generamos el MD5 (little) en la CACHE para posteriores usos del protocolo MULTICAST
1175  [ ! -f $FILETARGET.sum ] && ogCalculateChecksum $FILETARGET > $FILETARGET.sum
1176  ;;
1177  *)
1178  #Buscamos MD5 en el REPO SOURCE
1179  if [ -f $FILESOURCE.sum ]
1180  then
1181  MD5SOURCE=$(cat $FILESOURCE.sum)
1182  else
1183  MD5SOURCE=$(ogCalculateChecksum $FILESOURCE)
1184  fi
1185  # Generamos el MD5 (little) en la CACHE
1186  [ ! -f $FILETARGET.sum ] && ogCalculateChecksum $FILETARGET > $FILETARGET.sum
1187  MD5TARGET=$(cat $FILETARGET.sum)
1188  #Generamos o copiamos MD5 (full) en la CACHE para posteriores usos con Torrent
1189  # Si no existe el full.sum y si existe el .sum es porque el upateCACHE multicast o unicast ha sido correcto.
1190  if [ ! -f $FILETARGET.full.sum -a $FILETARGET.sum ]
1191  then
1192  if [ -f $FILESOURCE.full.sum ]
1193  then
1194  #Existe el .full.sum en REPO realizamos COPIA
1195  cp $FILESOURCE.full.sum $FILETARGET.full.sum
1196  else
1197  #No existe .full.sum no en REPO LO GENERAMOS en la cache: situacion dificil que ocurra
1198  ogCalculateFullChecksum $FILETARGET > $FILETARGET.full.sum
1199  fi
1200  fi
1201 
1202 esac
1203 
1204 #echo "Paso 5. comparar los md5"
1205 if [ "$MD5SOURCE" == "$MD5TARGET" ]
1206 then
1207  echo "FALSE (1), No es neceario actualizar. Paso5.A la imagen esta en cache"
1208  return 1
1209 else
1210  echo "imagen en cache distinta, borramos la imagen anterior"
1211  rm -f $FILETARGET $FILETARGET.sum $FILETARGET.torrent $FILETARGET.full.sum
1212  echo "TRUE (0), Si es necesario actualizar."
1213  return 0
1214 fi
1215 }
1216 
function ogDiskToDev()
Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fich...
Definition: Disk.lib:484
function ogGetImageType()
muestra información sobre el sistema de archivos de imagen monolitica. #
Definition: Image.lib:1086
function ogUcastSyntax()
Función para generar la instrucción de transferencia de datos unicast #.
Definition: Protocol.lib:32
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
Definition: System.lib:188
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
Definition: System.lib:153
function ogUpdateCacheIsNecesary()
Comprueba que el fichero que se desea almacenar en la cache del cliente, no esta. #...
Definition: Protocol.lib:1115
function mbuffer()
Definition: ToolsGNU.c:32
function ogCheckStringInReg()
Función para determinar si el elemento contiene una "expresión regular" #.
Definition: String.lib:58
function ogUcastReceiverPartition()
Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado po...
Definition: Protocol.lib:204
function ogMcastReceiverFile()
Recibe un fichero multicast ORIGEN(sesionmulticast) DESTINO(fichero) #.
Definition: Protocol.lib:661
function ogGetPath()
Inicia el proceso de arranque de un sistema de archivos. #.
Definition: File.lib:237
function ctorrent()
Definition: ToolsGNU.c:53
function ogCalculateChecksum()
Devuelve la suma de comprobación (checksum) de un fichero. #.
Definition: File.lib:27
function ogDeleteFile()
Metafunción que borra un fichero de un dispositivo. #.
Definition: File.lib:167
function ogFindCache()
Detecta la partición caché local. #.
Definition: Cache.lib:228
function ogMcastSyntax()
Función para generar la instrucción de ejucción la transferencia de datos multicast #...
Definition: Protocol.lib:346
function ogTorrentStart()
Función iniciar P2P - requiere un tracker para todos los modos, y un seeder para los modos peer y lee...
Definition: Protocol.lib:900
function ogMcastSendFile()
Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast) #.
Definition: Protocol.lib:578
function ogIsLocked()
Definition: FileSystem.lib:523
function ogRestoreImageSyntax()
Genera una cadena de texto con la instrucción para crear un fichero imagen #.
Definition: Image.lib:122
function ogCreateImageSyntax()
Genera una cadena de texto con la instrucción para crear un fichero imagen #.
Definition: Image.lib:29
function ogCalculateFullChecksum()
Devuelve la suma COMPLETA de comprobación (checksum) de un fichero. #.
Definition: File.lib:94
function ogCheckStringInGroup()
Función para determinar si el elemento pertenece a un conjunto #.
Definition: String.lib:18
function ogUcastSendFile()
Envía un fichero por unicast ORIGEN(fichero) DESTINO(sessionmulticast) #.
Definition: Protocol.lib:255
function ogUcastSendPartition()
Función para enviar el contenido de una partición a multiples particiones remotas usando UNICAST...
Definition: Protocol.lib:154
function ogUnmount()
function ogCheckIpAddress()
Función para determinar si una cadena es una dirección ipv4 válida #.
Definition: String.lib:93
function ogMcastSendPartition()
Función para enviar el contenido de una partición a multiples particiones remotas. #.
Definition: Protocol.lib:732
function ogMcastRequest()
Función temporal para solicitar al ogRepoAux el envio de un fichero por multicast #...
Definition: Protocol.lib:836
function ogCreateTorrent()
Función para crear el fichero torrent. #.
Definition: Protocol.lib:1045
function ogMcastReceiverPartition()
Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado po...
Definition: Protocol.lib:783
function ogGetRepoIp()
Muestra la dirección IP del repositorio de datos. #.
Definition: Net.lib:256
function awk()
Definition: ToolsGNU.c:89