source: client/engine/ProtocolLib.py @ 13ff5a5

ogClonningEnginetest-python-scriptsticket-577ticket-585ticket-693ticket-700
Last change on this file since 13ff5a5 was c2925f1a, checked in by Antonio Emmanuel Guerrero Silva <aguerrero@…>, 9 months ago

refs #577 Migration library from shell to python3

  • Property mode set to 100644
File size: 20.5 KB
Line 
1import sys
2import os
3from SystemLib import *
4
5def ogUcastSyntax():
6    PARM = SESSION = SESSIONPARM = MODE = PORTBASE = PERROR = ADDRESS = TOOL = LEVEL = DEVICE = MBUFFER = SYNTAXSERVER = SYNTAXCLIENT = ""
7
8    # Si se solicita, mostrar ayuda.
9    if "help" in sys.argv or len(sys.argv) > 2 and sys.argv[2] == "help":
10        ogHelp(f"{FUNCNAME} SENDPARTITION      str_sessionSERVER     str_device str_tools str_level",
11               f"{FUNCNAME} RECEIVERPARTITION  str_sessionCLIENT     str_device str_tools str_level",
12               f"{FUNCNAME} SENDFILE           str_sessionSERVER     str_file",
13               f"{FUNCNAME} RECEIVERFILE       str_sessionCLIENT     str_file",
14               "sessionServer syntax:        portbase:ipCLIENT-1:ipCLIENT-2:ipCLIENT-N",
15               "sessionServer example:       8000:172.17.36.11:172.17.36.12",
16               "sessionClient syntax:        portbase:ipMASTER",
17               "sessionClient example:       8000:172.17.36.249")
18        return
19    PERROR = 0
20
21    # Error si no se reciben $PARM parámetros.
22    if "PARTITION" in sys.argv[1]:
23        PARM = 5
24    else:
25        PARM = 3
26    if len(sys.argv) != PARM:
27        ogRaiseError(OG_ERR_FORMAT, "sin parametros")
28        return
29
30    # 1er param check
31    if sys.argv[1] not in ["SENDPARTITION", "sendpartition", "RECEIVERPARTITION", "receiverpartition", "SENDFILE", "sendfile", "RECEIVERFILE", "receiverfile"]:
32        ogRaiseError(OG_ERR_FORMAT, f"1st param: {sys.argv[1]}")
33        PERROR = 1
34
35    # 2º param check
36    if "SEND" in sys.argv[1]:
37        MODE = "server"
38    else:
39        MODE = "client"
40
41    ######### No controlamos el numero de elementos de la session unicast porque en el master es variable en numero
42    # TODO: diferenciamos los paramatros especificos de la sessión unicast
43    # SI: controlamos todos los parametros de la sessión unicast.
44    # [ $MODE == "client" ] && SESSIONPARM=2 || SESSIONPARM=6
45    OIFS = IFS
46    IFS = ':'
47    SESSION = sys.argv[2].split(':')
48    IFS = OIFS
49
50    # [[ ${#SESSION[*]} == $SESSIONPARM ]]  || ogRaiseError $OG_ERR_FORMAT "parametros session multicast no completa" || PERROR=2# return $?
51
52    # controlamos el PORTBASE de la sesion. Comun.-
53    PORTBASE = SESSION[0]
54    if PORTBASE not in ["8000", "8001", "8002", "8003", "8004", "8005"]:
55        ogRaiseError(OG_ERR_FORMAT, f"McastSession portbase {SESSION[0]}")
56        PERROR = 3
57
58    if MODE == "server":
59        SIZEARRAY = len(SESSION)
60        for i in range(1, SIZEARRAY):
61            ADDRESS += f" -O {SESSION[i]}:{PORTBASE}"
62            # echo " -O ${SESSION[$i]}:$PORTBASE"
63    else:
64        ADDRESS = f"{SESSION[1]}:{PORTBASE}"
65
66    # 3er param check - que puede ser un dispositvo o un fichero.
67    # [ -n "$(ogGetPath "$3")" ] || ogRaiseError $OG_ERR_NOTFOUND " device or file $3" || PERROR=9 #return $?
68    DEVICE = sys.argv[3]
69
70    # 4 y 5 param check .  solo si es sobre particiones.
71    if PARM == 5:
72        # 4 param check
73        if sys.argv[4] not in ["partclone", "PARTCLONE", "partimage", "PARTIMAGE", "ntfsclone", "NTFSCLONE"]:
74            ogRaiseError(OG_ERR_NOTFOUND, f" herramienta {sys.argv[4]} no soportada")
75            PERROR = 10
76        TOOL = sys.argv[4]
77        if sys.argv[5] not in ["lzop", "gzip", "LZOP", "GZIP", "0", "1"]:
78            ogRaiseError(OG_ERR_NOTFOUND, f" compresor {sys.argv[5]} no valido")
79            PERROR = 11
80
81    if PERROR != 0:
82        ogRaiseError(OG_ERR_UCASTSYNTAXT, f" {PERROR}")
83        return
84
85    # Generamos la instrucción base de unicast -Envio,Recepcion-
86    SYNTAXSERVER = f"mbuffer {ADDRESS}"
87    SYNTAXCLIENT = f"mbuffer -I {ADDRESS}"
88
89    if sys.argv[1] == "SENDPARTITION":
90        PROG1 = ogCreateImageSyntax(DEVICE, " ", TOOL, LEVEL).split("|")[0].split("|")[2].replace(">", "")
91        print(f"{PROG1} | {SYNTAXSERVER}")
92    elif sys.argv[1] == "RECEIVERPARTITION":
93        COMPRESSOR = ogRestoreImageSyntax(" ", DEVICE, TOOL, LEVEL).split("|")[0]
94        TOOLS = ogRestoreImageSyntax(" ", DEVICE, TOOL, LEVEL).split("|")[-1]
95        print(f"{SYNTAXCLIENT} | {COMPRESSOR} | {TOOLS}")
96    elif sys.argv[1] == "SENDFILE":
97        print(f"{SYNTAXSERVER} -i {sys.argv[3]}")
98    elif sys.argv[1] == "RECEIVERFILE":
99        print(f"{SYNTAXCLIENT} -i {sys.argv[3]}")
100#
101def ogUcastSendPartition():
102    # Variables locales
103    PART = COMMAND = RETVAL = ""
104
105    # Si se solicita, mostrar ayuda.
106    if len(sys.argv) > 1 and sys.argv[1] == "help":
107        ogHelp(f"{FUNCNAME} int_ndisk int_npart SessionUNICAST-SERVER tools compresor",
108               f"{FUNCNAME} 1 1 8000:172.17.36.11:172.17.36.12 partclone lzop")
109        return
110
111    # Error si no se reciben 5 parámetros.
112    if len(sys.argv) != 6:
113        ogRaiseError(OG_ERR_FORMAT)
114        return
115
116    # chequeamos la particion.
117    PART = ogDiskToDev(sys.argv[2], sys.argv[3])
118    if not PART:
119        return
120
121    ogUnmount(sys.argv[2], sys.argv[3])
122
123    # generamos la instrucción a ejecutar.
124    COMMAND = ogUcastSyntax("SENDPARTITION", sys.argv[4], PART, sys.argv[5], sys.argv[6])
125    RETVAL = 0
126
127    if RETVAL > 0:
128        return RETVAL
129    else:
130        print(COMMAND)
131        eval(COMMAND)
132        if RETVAL > 0:
133            ogRaiseError(OG_ERR_UCASTSENDPARTITION)
134            return RETVAL
135#
136def ogUcastReceiverPartition():
137    # Variables locales
138    PART = COMMAND = RETVAL = ""
139
140    # Si se solicita, mostrar ayuda.
141    if len(sys.argv) > 1 and sys.argv[1] == "help":
142        ogHelp(f"{FUNCNAME} int_ndisk int_npart SessionMulticastCLIENT tools compresor",
143               f"{FUNCNAME} 1 1 8000:ipMASTER partclone lzop")
144        return
145
146    # Error si no se reciben 5 parámetros.
147    if len(sys.argv) != 6:
148        ogRaiseError(OG_ERR_FORMAT)
149        return
150
151    # chequeamos la particion.
152    PART = ogDiskToDev(sys.argv[2], sys.argv[3])
153    if not PART:
154        return
155
156    ogUnmount(sys.argv[2], sys.argv[3])
157
158    # generamos la instrucción a ejecutar.
159    COMMAND = ogUcastSyntax("RECEIVERPARTITION", sys.argv[4], PART, sys.argv[5], sys.argv[6])
160    RETVAL = 0
161
162    if RETVAL > 0:
163        return RETVAL
164    else:
165        print(COMMAND)
166        eval(COMMAND)
167        if RETVAL > 0:
168            ogRaiseError(OG_ERR_UCASTRECEIVERPARTITION)
169            return RETVAL
170#
171def ogUcastSendFile():
172    # Variables locales
173    ARG = ARGS = SOURCE = TARGET = COMMAND = DEVICE = RETVAL = LOGFILE
174
175    # ARGS usado para controlar ubicación de la sesion multicast
176    # Si se solicita, mostrar ayuda.
177    if len(sys.argv) > 1 and sys.argv[1] == "help":
178        ogHelp(f"{FUNCNAME} [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast(puerto:ip:ip:ip)",
179               f"{FUNCNAME}  1 1 /aula1/winxp.img 8000:172.17.36.11:172.17.36.12",
180               f"{FUNCNAME}  REPO /aula1/ubuntu.iso sesionUcast",
181               f"{FUNCNAME}  CACHE /aula1/winxp.img sesionUcast",
182               f"{FUNCNAME}  /opt/opengnsys/images/aula1/hd500.vmx sesionUcast")
183        return
184
185    ARGS = sys.argv[1:]
186    if ARGS[0].startswith("/"):
187        SOURCE = ogGetPath(ARGS[0])
188        ARG = 2
189        DEVICE = ARGS[0]
190    elif ARGS[0].isdigit():
191        SOURCE = ogGetPath(ARGS[0], ARGS[1], ARGS[2])
192        ARG = 4
193        DEVICE = f"{ARGS[0]} {ARGS[1]} {ARGS[2]}"
194    else:
195        SOURCE = ogGetPath(ARGS[0], ARGS[1])
196        ARG = 3
197        DEVICE = f"{ARGS[0]} {ARGS[1]}"
198
199    # Error si no se reciben los argumentos ARG necesarios según la opcion.
200    if len(sys.argv) != ARG:
201        ogRaiseError(OG_ERR_FORMAT)
202        return
203
204    # Comprobar fichero origen
205    if not ogGetPath(SOURCE):
206        ogRaiseError(OG_ERR_NOTFOUND, f" device or file {DEVICE} not found")
207        return
208
209    SESSION = sys.argv[ARG]
210
211    # generamos la instrucción a ejecutar.
212    COMMAND = ogUcastSyntax("SENDFILE", SESSION, SOURCE)
213    RETVAL = 0
214
215    if RETVAL > 0:
216        return RETVAL
217    else:
218        print(COMMAND)
219        eval(COMMAND)
220        if RETVAL > 0:
221            ogRaiseError(OG_ERR_UCASTSENDFILE)
222            return RETVAL
223#
224def ogMcastSyntax():
225    PERROR = 0
226
227    # Si se solicita, mostrar ayuda.
228    if "help" in sys.argv or len(sys.argv) > 2 and sys.argv[2] == "help":
229        ogHelp(f"{FUNCNAME} SENDPARTITION      str_sessionSERVER     str_device str_tools str_level",
230               f"{FUNCNAME} RECEIVERPARTITION  str_sessionCLIENT     str_device str_tools str_level",
231               f"{FUNCNAME} SENDFILE           str_sessionSERVER     str_file",
232               f"{FUNCNAME} RECEIVERFILE       str_sessionCLIENT     str_file",
233               "sessionServer syntax:        portbase:method:mcastaddress:speed:nclients:ntimeWaitingUntilNclients",
234               "sessionServer example:       9000:full-duplex|half-duplex|broadcast:239.194.17.36:80M:50:60",
235               "sessionClient syntax:        portbase",
236               "sessionClient example:       9000",
237               "sessionClient syntax:        portbase:serverIP:TimeOut_session:TimeOut_transmision",
238               "sessionClient example:       9000:172.17.88.161:40:120")
239        return
240
241    # BEGIN NUMBERS PARAMETERS CHECK AND SESSION OPTIONS IF CLIENT OR SERVER
242    if "PARTITION" in sys.argv[1]:
243        PARM = 5
244    else:
245        PARM = 3
246    if len(sys.argv) != PARM:
247        ogRaiseError(OG_ERR_FORMAT, "sin parametros")
248        return
249
250    ogCheckStringInGroup(sys.argv[1], "SENDPARTITION sendpartition RECEIVERPARTITION receiverpartition SENDFILE sendfile RECEIVERFILE receiverfile") or ogRaiseError(OG_ERR_FORMAT, f"1st param: {sys.argv[1]}") or PERROR = 1
251
252    if "SEND" in sys.argv[1]:
253        MODE = "server"
254    else:
255        MODE = "client"
256
257    SESSION = sys.argv[2].split(':')
258    if MODE == "client":
259        SESSIONPARM = 1
260    else:
261        SESSIONPARM = 6
262    if len(SESSION) != SESSIONPARM:
263        ogRaiseError(OG_ERR_FORMAT, "parametros session de cliente multicast no completa") or PERROR = 2
264
265    if MODE == "server":
266        ogCheckStringInGroup(SESSION[1], "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST") or ogRaiseError(OG_ERR_FORMAT, f"McastSession method {SESSION[1]}") or PERROR = 4
267        ogCheckIpAddress(SESSION[2]) or ogRaiseError(OG_ERR_FORMAT, f"McastSession address {SESSION[2]}") or PERROR = 5
268        ogCheckStringInReg(SESSION[3], "^[0-9]{1,3}\M$") or ogRaiseError(OG_ERR_FORMAT, f"McastSession bitrate {SESSION[3]}") or PERROR = 6
269        ogCheckStringInReg(SESSION[4], "^[0-9]{1,10}$") or ogRaiseError(OG_ERR_FORMAT, f"McastSession nclients {SESSION[4]}") or PERROR = 7
270        ogCheckStringInReg(SESSION[5], "^[0-9]{1,10}$") or ogRaiseError(OG_ERR_FORMAT, f"McastSession maxtime {SESSION[5]}") or PERROR = 8
271
272    if PERROR != 0:
273        ogRaiseError(OG_ERR_MCASTSYNTAXT, f" {PERROR}")
274        return
275    # END NUMBERS PARAMETERS CHECK
276
277    # BEGIN SERVER SESSION
278    if MODE == "server":
279        PORTBASE = SESSION[0]
280        METHOD = SESSION[1]
281        ADDRESS = SESSION[2]
282        BITRATE = SESSION[3]
283        NCLIENTS = SESSION[4]
284        MAXTIME = SESSION[5]
285        CERROR = "8x8/128"
286        if "mbuffer" in sys.modules:
287            MBUFFER = " --pipe 'mbuffer -q -m 20M' "
288        else:
289            MBUFFER = ""
290        SYNTAXSERVER = f"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"
291    # END SERVER SESSION
292
293    # BEGIN CLIENT SESSION
294    if MODE == "client":
295        PORTBASE = SESSION[0]
296        if ogCheckIpAddress(SESSION[1]):
297            SERVERADDRESS = f" --mcast-rdv-address {SESSION[1]}"
298        else:
299            REPOIP = ogGetRepoIp()
300            CLIENTIP = " ".join([addr.split("/")[0] for addr in subprocess.check_output(["ip", "-o", "address", "show", "up"]).decode().splitlines() if "lo" not in addr])
301            MASCARA = CLIENTIP.split("/")[1]
302            CLIENTIP = CLIENTIP.split("/")[0]
303            RIPBT = ""
304            IPBT = ""
305            for i in range(1, 5):
306                RIP = str(int(REPOIP.split(".")[i-1]) + 256)
307                RIPB = ""
308                while RIP > 0:
309                    COCIENTE = RIP // 2
310                    RESTO = RIP % 2
311                    RIPB = str(RESTO) + RIPB
312                    RIP = COCIENTE
313                RIPB = RIPB[1:]
314                RIPBT += RIPB
315                IP = str(int(CLIENTIP.split(".")[i-1]) + 256)
316                IPB = ""
317                while IP > 0:
318                    COCIENTE = IP // 2
319                    RESTO = IP % 2
320                    IPB = str(RESTO) + IPB
321                    IP = COCIENTE
322                IPB = IPB[1:]
323                IPBT += IPB
324            REPOSUBRED = RIPBT[:MASCARA]
325            CLIENTSUBRED = IPBT[:MASCARA]
326            if REPOSUBRED == CLIENTSUBRED:
327                SERVERADDRESS = ""
328            else:
329                SERVERADDRESS = f" --mcast-rdv-address {REPOIP}"
330        if ogCheckStringInReg(SESSION[2], "^[0-9]{1,10}$"):
331            if SESSION[2] == "0":
332                STARTTIMEOUT = ""
333            else:
334                STARTTIMEOUT = f" --start-timeout {SESSION[2]}"
335        else:
336            STARTTIMEOUT = ""
337        if ogCheckStringInReg(SESSION[3], "^[0-9]{1,10}$"):
338            if SESSION[3] == "0":
339                RECEIVERTIMEOUT = ""
340            else:
341                RECEIVERTIMEOUT = f" --receive-timeout {SESSION[3]}"
342        else:
343            RECEIVERTIMEOUT = ""
344        if "udp-receiver" not in ISUDPCAST:
345            STARTTIMEOUT = ""
346            RECEIVERTIMEOUT = ""
347        SYNTAXCLIENT = f"udp-receiver {MBUFFER} --portbase {PORTBASE}{SERVERADDRESS}{STARTTIMEOUT}{RECEIVERTIMEOUT} --log /tmp/mcast.log"
348    # END CLIENT SESSION
349
350    # BEGIN MAIN PROGRAM
351    if sys.argv[1] == "SENDPARTITION":
352        PROG1 = ogCreateImageSyntax(DEVICE, " ", TOOL, LEVEL).split("|")[0].split("|")[2].replace(">", "")
353        print(f"{PROG1} | {SYNTAXSERVER}")
354    elif sys.argv[1] == "RECEIVERPARTITION":
355        COMPRESSOR = ogRestoreImageSyntax(" ", DEVICE, TOOL, LEVEL).split("|")[0]
356        TOOLS = ogRestoreImageSyntax(" ", DEVICE, TOOL, LEVEL).split("|")[-1]
357        print(f"{SYNTAXCLIENT} | {COMPRESSOR} | {TOOLS}")
358    elif sys.argv[1] == "SENDFILE":
359        print(f"{SYNTAXSERVER} --file {sys.argv[3]}")
360    elif sys.argv[1] == "RECEIVERFILE":
361        print(f"{SYNTAXCLIENT} --file {sys.argv[3]}")
362    # END MAIN PROGRAM
363#
364def ogMcastSendFile():
365    # Variables locales
366    ARGS = ARG = SOURCE = TARGET = COMMAND = DEVICE = RETVAL = LOGFILE
367
368    # LOGFILE = "/tmp/mcast.log"
369
370    # ARGS usado para controlar ubicación de la sesion multicast
371    # Si se solicita, mostrar ayuda.
372    if len(sys.argv) > 1 and sys.argv[1] == "help":
373        ogHelp(f"{FUNCNAME} [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast",
374               f"{FUNCNAME}  1 1 /aula1/winxp.img sesionMcast",
375               f"{FUNCNAME}  REPO /aula1/ubuntu.iso sesionMcast",
376               f"{FUNCNAME}  CACHE /aula1/winxp.img sesionMcast",
377               f"{FUNCNAME}  /opt/opengnsys/images/aula1/hd500.vmx sesionMcast")
378        return
379
380    ARGS = sys.argv[1:]
381    if ARGS[0].startswith("/"):
382        SOURCE = ogGetPath(ARGS[0])
383        ARG = 2
384        DEVICE = ARGS[0]
385    elif ARGS[0].isdigit():
386        SOURCE = ogGetPath(ARGS[0], ARGS[1], ARGS[2])
387        ARG = 4
388        DEVICE = f"{ARGS[0]} {ARGS[1]} {ARGS[2]}"
389    else:
390        SOURCE = ogGetPath(ARGS[0], ARGS[1])
391        ARG = 3
392        DEVICE = f"{ARGS[0]} {ARGS[1]}"
393
394    # Error si no se reciben los argumentos ARG necesarios según la opcion.
395    if len(sys.argv) != ARG:
396        ogRaiseError(OG_ERR_FORMAT)
397        return
398
399    # Comprobar fichero origen
400    if not ogGetPath(SOURCE):
401        ogRaiseError(OG_ERR_NOTFOUND, f" device or file {DEVICE} not found")
402        return
403
404    SESSION = sys.argv[ARG]
405
406    # generamos la instrucción a ejecutar.
407    COMMAND = ogMcastSyntax("SENDFILE", SESSION, SOURCE)
408    RETVAL = 0
409
410    if RETVAL > 0:
411        return RETVAL
412    else:
413        print(COMMAND)
414        eval(COMMAND)
415        if RETVAL > 0:
416            ogRaiseError(OG_ERR_MCASTSENDFILE)
417            return RETVAL
418#
419def ogMcastReceiverFile():
420    # Variables locales
421    ARGS = ARG = TARGETDIR = TARGETFILE = COMMAND = ""
422
423    # Si se solicita, mostrar ayuda.
424    if len(sys.argv) > 1 and sys.argv[1] == "help":
425        ogHelp(f"{FUNCNAME} [str_portMcast] [[Relative_path_file] | [str_REPOSITORY path_file] | [int_ndisk int_npart path_file]]",
426               f"{FUNCNAME} 9000 /PS1_PH1.img",
427               f"{FUNCNAME} 9000 CACHE /aula1/PS2_PH4.img",
428               f"{FUNCNAME} 9000 1 1 /isos/linux.iso")
429        return
430
431    ARGS = sys.argv[1:]
432    if ARGS[1].startswith("/"):
433        TARGETDIR = ogGetParentPath(ARGS[1])
434        ARG = 2
435    elif ARGS[1].isdigit():
436        TARGETDIR = ogGetParentPath(ARGS[1], ARGS[2], ARGS[3])
437        ARG = 4
438    else:
439        TARGETDIR = ogGetParentPath(ARGS[1], ARGS[2])
440        ARG = 3
441
442    # Error si no se reciben los argumentos ARG necesarios según la opcion.
443    if len(sys.argv) != ARG:
444        ogRaiseError(OG_ERR_FORMAT, "Parametros no admitidos")
445        return
446
447    # obtenemos el nombre del fichero a descargar.
448    TARGETFILE = os.path.basename(ARGS[ARG])
449
450    # generamos la instrucción a ejecutar.
451    COMMAND = ogMcastSyntax("RECEIVERFILE", sys.argv[1], f"{TARGETDIR}/{TARGETFILE}")
452    RETVAL = 0
453
454    if RETVAL > 0:
455        return RETVAL
456    else:
457        print(COMMAND)
458        eval(COMMAND)
459        if RETVAL > 0:
460            ogRaiseError(OG_ERR_MCASTRECEIVERFILE, TARGETFILE)
461            return RETVAL
462        #[ -s "$LOGFILE" ] || return 21
463#
464def ogMcastSendPartition():
465    # Variables locales
466    PART = ""
467    COMMAND = ""
468    RETVAL = 0
469
470    # Si se solicita, mostrar ayuda.
471    if len(sys.argv) > 1 and sys.argv[1] == "help":
472        ogHelp(f"{FUNCNAME} int_ndisk int_npart SessionMulticastSERVER tools compresor",
473               f"{FUNCNAME} 1 1 9000:full-duplex:239.194.37.31:50M:20:2 partclone lzop")
474        return
475
476    # Error si no se reciben 5 parámetros.
477    if len(sys.argv) != 6:
478        ogRaiseError(OG_ERR_FORMAT)
479        return
480
481    # chequeamos la particion.
482    PART = ogDiskToDev(sys.argv[2], sys.argv[3])
483    if not PART:
484        return
485
486    ogUnmount(sys.argv[2], sys.argv[3])
487
488    # generamos la instrucción a ejecutar.
489    COMMAND = ogMcastSyntax("SENDPARTITION", sys.argv[4], PART, sys.argv[5], sys.argv[6])
490    RETVAL = 0
491
492    if RETVAL > 0:
493        return RETVAL
494    else:
495        print(COMMAND)
496        eval(COMMAND)
497        if RETVAL > 0:
498            ogRaiseError(OG_ERR_MCASTSENDPARTITION)
499            return RETVAL
500#
501def ogMcastReceiverPartition():
502    # Variables locales
503    PART = ""
504    COMMAND = ""
505    RETVAL = 0
506
507    # Si se solicita, mostrar ayuda.
508    if len(sys.argv) > 1 and sys.argv[1] == "help":
509        ogHelp(f"{FUNCNAME} int_ndisk int_npart SessionMulticastCLIENT tools compresor",
510               f"{FUNCNAME} 1 1 9000 partclone lzop")
511        return
512
513    # Error si no se reciben 5 parámetros.
514    if len(sys.argv) != 6:
515        ogRaiseError(OG_ERR_FORMAT)
516        return
517
518    # chequeamos la particion.
519    PART = ogDiskToDev(sys.argv[2], sys.argv[3])
520    if not PART:
521        return
522
523    ogUnmount(sys.argv[2], sys.argv[3])
524
525    # generamos la instrucción a ejecutar.
526    COMMAND = ogMcastSyntax("RECEIVERPARTITION", sys.argv[4], PART, sys.argv[5], sys.argv[6])
527    RETVAL = 0
528
529    if RETVAL > 0:
530        return RETVAL
531    else:
532        print(COMMAND)
533        eval(COMMAND)
534        if RETVAL > 0:
535            ogRaiseError(OG_ERR_MCASTSENDPARTITION)
536            return RETVAL
537#
538def ogMcastRequest():
539    # Variables locales
540    FILE = ""
541    PROTOOPT = ""
542    PORT = ""
543    PORTAUX = ""
544    REPOIP = ""
545    REPOPORTAUX = ""
546    REPEAT = 0
547    OGUNIT = "$(df|awk '/ogimages/ {print $1}'|cut -d/ -f5)/"
548
549    # Si se solicita, mostrar ayuda.
550    if len(sys.argv) > 1 and sys.argv[1] == "help":
551        ogHelp(f"{FUNCNAME} path_filename str_mcastoptions")
552        return
553
554    # Error si no se reciben 2 parámetros.
555    if len(sys.argv) != 3:
556        ogRaiseError(OG_ERR_FORMAT)
557        return
558
559    FILE = f"{OGUNIT}{sys.argv[1]}"
560    PROTOOPT = sys.argv[2]
561
562    # TODO: CONTROL PARAMETROS
563
564    PORT = PROTOOPT.split(":")[0]
565    PORTAUX = str(int(PORT) + 1)
566    REPOIP = ogGetRepoIp()
567    REPOPORTAUX = 2009
568    REPEAT = 0
569    while not nmap -n -sU -p $PORTAUX $REPOIP | grep open:
570        REPEAT += 1
571        if REPEAT >= 6:
572            ogRaiseError("session log", OG_ERR_PROTOCOLJOINMASTER, f"MULTICAST {FILE} {PROTOOPT} {FILELIST}")
573            return
574        print(f"{MSG_SCRIPTS_TASK_START}: hose {REPOIP} {REPOPORTAUX} --out sh -c 'echo -ne START_MULTICAST {FILE} {PROTOOPT}'")
575        # update-cache:
576        hose(REPOIP, REPOPORTAUX, "--out sh -c 'echo -ne START_MULTICAST {FILE} {PROTOOPT}'")
577        # multicas-direct: hose {REPOIP} 2009 --out sh -c 'echo -ne START_MULTICAST /{IMAGE}.img {OPTPROTOCOLO}'
578        time.sleep(10)
579#
Note: See TracBrowser for help on using the repository browser.