12 ##################### FUNCIONES UNICAST ################ 35 local PARM SESSION SESSIONPARM MODE PORTBASE PERROR ADDRESS
36 local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT
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 " 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 $?
61 ogCheckStringInGroup "$1" "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile" ||
ogRaiseError $OG_ERR_FORMAT
"1st param: $1" || PERROR=1 #
return $?
64 echo
"$1" | grep
"SEND" > /dev/null && MODE=server || MODE=client
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
73 #[[ ${#SESSION[*]} == $SESSIONPARM ]] || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $? 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 $?
80 if [ $MODE ==
"server" ]
82 SIZEARRAY=${#SESSION[@]}
83 for (( i = 1 ; i < $SIZEARRAY ; i++ ))
85 ADDRESS=
"$ADDRESS -O ${SESSION[$i]}:$PORTBASE" 86 #echo " -O ${SESSION[$i]}:$PORTBASE" 90 ADDRESS=${SESSION[1]}:${PORTBASE}
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 $? 97 #4 y 5 param check . solo si es sobre particiones. 101 ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" ||
ogRaiseError $OG_ERR_NOTFOUND
" herramienta $4 no soportada" || PERROR=10 #
return $?
107 [
"$PERROR" ==
"0" ] ||
ogRaiseError $OG_ERR_UCASTSYNTAXT
" $PERROR" ||
return $?
109 # Generamos la instrucción base de unicast -Envio,Recepcion- 110 SYNTAXSERVER=
"mbuffer $ADDRESS" 111 SYNTAXCLIENT=
"mbuffer -I $ADDRESS " 117 echo
"$PROG1 | $SYNTAXSERVER" 122 echo
"$SYNTAXCLIENT | $COMPRESSOR | $TOOLS " 125 echo
"$SYNTAXSERVER -i $3" 128 echo
"$SYNTAXCLIENT -i $3" 158 local PART COMMAND RETVAL
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" 166 # Error si no se reciben 5 parámetros. 167 [
"$#" == 5 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
168 #chequeamos la particion. 174 #generamos la instrucción a ejecutar.
178 if [
"$RETVAL" -gt
"0" ]
183 eval $COMMAND ||
ogRaiseError $OG_ERR_UCASTSENDPARTITION
" ";
return $?
207 local PART COMMAND RETVAL
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" 215 # Error si no se reciben 5 parámetros. 216 [
"$#" == 5 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
217 #chequeamos la particion. 223 #generamos la instrucción a ejecutar.
227 if [
"$RETVAL" -gt
"0" ]
232 eval $COMMAND ||
ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION
" ";
return $?
258 local ARG ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
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" 279 [1-9]*) # ndisco npartición.
284 *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
292 # Error si no se reciben los argumentos ARG necesarios según la opcion. 293 [ $# ==
"$ARG" ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
295 # Comprobar fichero origen 296 [ -n
"$(ogGetPath $SOURCE)" ] ||
ogRaiseError $OG_ERR_NOTFOUND
" device or file $DEVICE not found" ||
return $?
301 #generamos la instrucción a ejecutar. 305 if [
"$RETVAL" -gt
"0" ]
310 eval $COMMAND ||
ogRaiseError $OG_ERR_UCASTSENDFILE
" ";
return $?
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
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" 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 $?)
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
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" ]
390 [[ ${#SESSION[*]} == $SESSIONPARM ]] ||
ogRaiseError $OG_ERR_FORMAT
"parametros session de servidor multicast no completa" || PERROR=2#
return $?
392 #controlamos la sesion de cliente. 393 if [ $MODE ==
"client" ]
395 [[ ${#SESSION[*]} -ge $SESSIONPARM ]] ||
ogRaiseError $OG_ERR_FORMAT
"parametros session de cliente multicast no completa" || PERROR=2#
return $?
397 ############ END NUMBERS PARAMETERS CHECK ############## 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]}
403 # 2º param check: Controlamos el resto de componenentes de la sesion del servidor. 404 if [ $MODE ==
"server" ]
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 $?
409 ADDRESS=${SESSION[2]}
411 BITRATE=${SESSION[3]}
413 NCLIENTS=${SESSION[4]}
415 MAXTIME=${SESSION[5]}
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 $? 422 #4 y 5 param check . solo si es sobre particiones. 423 if [
"$PARM" ==
"5" ]
426 ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" ||
ogRaiseError $OG_ERR_NOTFOUND
" herramienta $4 no soportada" || PERROR=10 #
return $?
431 # Controlamos si ha habido errores en la comprobacion de la sesion de servidor. 432 if [
"$PERROR" !=
"0" ]; then
435 # Asignamos mas valores no configurables a la sesioe servidor. 437 # opcion del usuo de tuberia intermedia en memoria mbuffer. 438 which
mbuffer > /dev/null && MBUFFER=
" --pipe 'mbuffer -q -m 20M' " 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 ############## 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 451 SERVERADDRESS=
" --mcast-rdv-address ${SESSION[1]}" 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/`
460 for (( i = 1 ; i < 5 ; i++ ))
462 RIP=`echo $REPOIP | cut -f$i -d.`
463 RIP=`echo
"$[$RIP + 256]"`
472 RIPB=`echo
"$RIPB" | cut -c2-`
474 IP=`echo $CLIENTIP | cut -f$i -d.`
475 IP=`echo
"$[$IP + 256]"`
484 IPB=`echo
"$IPB" | cut -c2-`
487 REPOSUBRED=`echo $RIPBT | cut -c1-$MASCARA`
488 CLIENTSUBRED=`echo $IPBT | cut -c1-$MASCARA`
489 if [ $REPOSUBRED == $CLIENTSUBRED ]; then
492 SERVERADDRESS=
" --mcast-rdv-address $REPOIP" 495 #La tercera opcion de la sesion para el cliente: ${SESSION[2]} ERRORSESSION - TIMEOUT ERROR IF NO FOUNT SESSEION MULTICAST 498 case ${SESSION[2]} in
503 STARTTIMEOUT=
" --start-timeout ${SESSION[2]}" 507 #asignamos valor definido en el engine.cfg 508 STARTTIMEOUT=
" --start-timeout $MCASTERRORSESSION" 510 #Verificamos que la opcion start-time out esta soportada por la version del cliente 511 echo $ISUDPCAST | grep start-timeout > /dev/null || STARTTIMEOUT=
" " 513 #La cuarta opcion de la sesion para el cliente: ${SESSION[2]} ERROR TRANSFER - TIMEOUT EEOR IF NOT RECEIVER DATA FROM SERVER 516 case ${SESSION[3]} in
521 RECEIVERTIMEOUT=
" --receive-timeout ${SESSION[3]}" 525 #asignamos valor definido en el engine.cfg 526 RECEIVERTIMEOUT=
" --receive-timeout $MCASTWAIT" 528 #Verificamos que la opcion receive-timeou esta soportada por la version del cliente 529 echo $ISUDPCAST | grep receive-timeout > /dev/null || RECEIVERTIMEOUT=
" " 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 ############## 536 ######## BEGIN MAIN PROGAM ##### 540 echo
"$PROG1 | $SYNTAXSERVER" 545 echo
"$SYNTAXCLIENT | $COMPRESSOR | $TOOLS " 548 echo
"$SYNTAXSERVER --file $3" 551 echo
"$SYNTAXCLIENT --file $3" 556 ######## END MAIN PROGAM ##### 581 local ARGS ARG SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
583 #LOGFILE="/tmp/mcast.log" 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" 603 [1-9]*) # ndisco npartición.
608 *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
616 # Error si no se reciben los argumentos ARG necesarios según la opcion. 617 [ $# ==
"$ARG" ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
619 # Comprobar fichero origen 620 [ -n
"$(ogGetPath $SOURCE)" ] ||
ogRaiseError $OG_ERR_NOTFOUND
" device or file $DEVICE not found" ||
return $?
622 # eliminamos ficheros antiguos de log 628 #generamos la instrucción a ejecutar. 632 if [
"$RETVAL" -gt
"0" ]
637 eval $COMMAND ||
ogRaiseError $OG_ERR_MCASTSENDFILE
" ";
return $?
638 #[ -s "$LOGFILE" ] || return 21 665 local ARGS ARG TARGETDIR TARGETFILE
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" 680 TARGETDIR=$(ogGetParentPath
"$2")
683 [1-9]*) # ndisco npartición.
684 TARGETDIR=$(ogGetParentPath
"$2" "$3" "$4")
687 *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
688 TARGETDIR=$(ogGetParentPath
"$2" "$3")
693 # Error si no se reciben los argumentos ARG necesarios según la opcion. 694 [ $# ==
"$ARG" ] ||
ogRaiseError $OG_ERR_FORMAT
"Parametros no admitidos"||
return $?
696 #obtenemos el nombre del fichero a descargar. 697 TARGETFILE=`basename ${!ARG}`
699 #generamos la instrucción a ejecutar. 700 COMMAND=`
ogMcastSyntax RECEIVERFILE
"$1" $TARGETDIR/$TARGETFILE `
703 if [
"$RETVAL" -gt
"0" ]
708 eval $COMMAND ||
ogRaiseError $OG_ERR_MCASTRECEIVERFILE
"$TARGETFILE";
return $?
709 #[ -s "$LOGFILE" ] || return 21 736 local PART COMMAND RETVAL
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" 744 # Error si no se reciben 5 parámetros. 745 [
"$#" == 5 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
746 #chequeamos la particion. 752 #generamos la instrucción a ejecutar.
756 if [
"$RETVAL" -gt
"0" ]
761 eval $COMMAND ||
ogRaiseError $OG_ERR_MCASTSENDPARTITION
" ";
return $?
786 local PART COMMAND RETVAL
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" 794 # Error si no se reciben 5 parámetros. 795 [
"$#" == 5 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
796 #chequeamos la particion. 802 #generamos la instrucción a ejecutar.
806 if [
"$RETVAL" -gt
"0" ]
811 eval $COMMAND ||
ogRaiseError $OG_ERR_MCASTSENDPARTITION
" ";
return $?
839 local FILE PROTOOPT PORT PORTAUX REPOIP REPOPORTAUX REPEAT OGUNIT
841 # Si se solicita, mostrar ayuda. 842 if [
"$*" ==
"help" ]; then
843 ogHelp "$FUNCNAME" "$FUNCNAME path_filename str_mcastoptions" 846 # Error si no se reciben 2 parámetros. 847 [
"$#" == 2 ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
849 OGUNIT=
"$(df|awk '/ogimages/ {print $1}'|cut -d/ -f5)/" 853 #TODO: CONTROL PARAMETROS 855 PORT=$(echo $2 | cut -f1 -d
":")
860 until nmap -n -sU -p $PORTAUX $REPOIP | grep open
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
"" 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" 873 ########################################## 874 ############## funciones torrent 904 local ARGS ARG TARGETDIR TARGETFILE SESSION ERROR
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" 921 [1-9]*) # ndisco npartición.
925 *) # Otros: Solo cache (no se permiten caminos relativos).
926 SOURCE=$(
ogGetPath "$1" "$2" 2>/dev/null)
931 # Error si no se reciben los argumentos ARG necesarios según la opcion. 932 [ $# ==
"$ARG" ] ||
ogRaiseError $OG_ERR_FORMAT
"Parametros no admitidos"||
return $?
934 #controlar source, que no se haga al repo. 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 $?
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" 948 #controlar el source, para que sea un torrent. 949 ctorrent -x ${SOURCE} &> /dev/null; [ $? -eq 0 ] ||
ogRaiseError $OG_ERR_NOTFOUND
"${ARGS% $*}" ||
return $?
951 TARGET=`echo $SOURCE |
awk -F.torrent
'{print $1}'`
952 DIRSOURCE=`ogGetParentPath $SOURCE`
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 $?
963 #contolamos el tiempo para el seeder o una vez descargada la imagen como peer o leecher. 966 # si ha habido error en el control de parametros error. 967 [
"$ERROR" ==
"1" ] &&
return 1
970 #SYNTAXSEEDER="echo MODE seeder ctorrent ; (sleep \$TIME && kill -9 \`pidof ctorrent\`) & ; ctorrent \${SOURCE}" 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} ]
975 echo
"imagen ya descargada" 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} 985 #Si no existe bf ni fichero destino descarga inicial. 986 if [ ! -f ${SOURCE}.bf -a ! -f ${TARGET} ] 989 echo "descarga inicial
" 992 # Si fichero bf descarga anterior no completada -. 993 if [ -f ${SOURCE}.bf -a -f ${TARGET} ] 995 echo Continuar con Descargar inicial no terminada. 999 if [ "$OPTION
" == "DOWNLOAD
" ] 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 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 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 1014 echo "MODE seeder
ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100" 1015 # Creamos el fichero de resumen por defecto
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
1047 # Variables locales. 1048 local ARGS ARG SOURCE EXT IPTORRENT
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" 1059 # Error si se quiere crear el fichero en cache y no existe 1067 [1-9]*) # ndisco npartición.
1071 *) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
1078 # Error si no se reciben los argumentos ARG necesarios según la opcion. 1079 [ $# -eq
"$ARG" ] ||
ogRaiseError $OG_ERR_FORMAT ||
return $?
1082 # Error si no existe la imagen 1083 [ $SOURCE ] ||
ogRaiseError $OG_ERR_NOTFOUND ||
return $?
1085 [ -r $SOURCE.torrent ] && mv
"$SOURCE.torrent" "$SOURCE.torrent.ant" && echo
"Esperamos que se refresque el servidor" && sleep 20
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:
1091 ctorrent -t `basename $SOURCE` -u http:
1117 #echo "admite full check con 3param TORRENT" 1118 # Variables locales. 1119 local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET
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" 1131 #Control de la cache 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 $?)
1139 [ -n
"$FILESOURCE" ] ||
return $(
ogRaiseError $OG_ERR_NOTFOUND
" $1 $2"; echo $?)
1141 #echo
"paso 1. si no existe la imagen, confirmar que es necesario actualizar la cache." 1143 if [ -z
"$FILETARGET" ]
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 " 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" 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" 1164 #Buscamos MD5 en el REPO SOURCE 1165 if [ -f $FILESOURCE.full.sum ]
1167 MD5SOURCE=$(cat $FILESOURCE.full.sum)
1171 # Generamos el MD5 (full) en la CACHE 1173 MD5TARGET=$(cat $FILETARGET.full.sum)
1174 # Generamos el MD5 (little) en la CACHE para posteriores usos del protocolo MULTICAST
1178 #Buscamos MD5 en el REPO SOURCE
1179 if [ -f $FILESOURCE.sum ]
1181 MD5SOURCE=$(cat $FILESOURCE.sum)
1185 # Generamos el MD5 (little) en la CACHE
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 ]
1192 if [ -f $FILESOURCE.full.sum ]
1194 #Existe el .full.sum en REPO realizamos COPIA 1195 cp $FILESOURCE.full.sum $FILETARGET.full.sum
1197 #No existe .full.sum no en REPO LO GENERAMOS en la cache: situacion dificil que ocurra 1204 #echo "Paso 5. comparar los md5" 1205 if [
"$MD5SOURCE" ==
"$MD5TARGET" ]
1207 echo
"FALSE (1), No es neceario actualizar. Paso5.A la imagen esta en cache" 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." function ogDiskToDev()
Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fich...
function ogGetImageType()
muestra información sobre el sistema de archivos de imagen monolitica. #
function ogUcastSyntax()
Función para generar la instrucción de transferencia de datos unicast #.
function ogRaiseError()
Devuelve el mensaje y el código de error correspondiente. #.
function ogHelp()
Muestra mensaje de ayuda para una función determinda. #.
function ogUpdateCacheIsNecesary()
Comprueba que el fichero que se desea almacenar en la cache del cliente, no esta. #...
function ogCheckStringInReg()
Función para determinar si el elemento contiene una "expresión regular" #.
function ogUcastReceiverPartition()
Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado po...
function ogMcastReceiverFile()
Recibe un fichero multicast ORIGEN(sesionmulticast) DESTINO(fichero) #.
function ogGetPath()
Inicia el proceso de arranque de un sistema de archivos. #.
function ogCalculateChecksum()
Devuelve la suma de comprobación (checksum) de un fichero. #.
function ogDeleteFile()
Metafunción que borra un fichero de un dispositivo. #.
function ogFindCache()
Detecta la partición caché local. #.
function ogMcastSyntax()
Función para generar la instrucción de ejucción la transferencia de datos multicast #...
function ogTorrentStart()
Función iniciar P2P - requiere un tracker para todos los modos, y un seeder para los modos peer y lee...
function ogMcastSendFile()
Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast) #.
function ogRestoreImageSyntax()
Genera una cadena de texto con la instrucción para crear un fichero imagen #.
function ogCreateImageSyntax()
Genera una cadena de texto con la instrucción para crear un fichero imagen #.
function ogCalculateFullChecksum()
Devuelve la suma COMPLETA de comprobación (checksum) de un fichero. #.
function ogCheckStringInGroup()
Función para determinar si el elemento pertenece a un conjunto #.
function ogUcastSendFile()
Envía un fichero por unicast ORIGEN(fichero) DESTINO(sessionmulticast) #.
function ogUcastSendPartition()
Función para enviar el contenido de una partición a multiples particiones remotas usando UNICAST...
function ogCheckIpAddress()
Función para determinar si una cadena es una dirección ipv4 válida #.
function ogMcastSendPartition()
Función para enviar el contenido de una partición a multiples particiones remotas. #.
function ogMcastRequest()
Función temporal para solicitar al ogRepoAux el envio de un fichero por multicast #...
function ogCreateTorrent()
Función para crear el fichero torrent. #.
function ogMcastReceiverPartition()
Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado po...
function ogGetRepoIp()
Muestra la dirección IP del repositorio de datos. #.