277 lines
10 KiB
Python
277 lines
10 KiB
Python
#!/usr/bin/python3
|
|
|
|
import ogGlobals
|
|
import SystemLib
|
|
import ImageLib
|
|
|
|
#/**
|
|
#@file ProtocolLib.py
|
|
#@brief Librería o clase Protocol
|
|
#@class Protocol
|
|
#@brief Funciones para transmisión de datos
|
|
#@warning License: GNU GPLv3+
|
|
#*/
|
|
|
|
|
|
##################### FUNCIONES UNICAST ################
|
|
|
|
#/**
|
|
# ogUcastSyntax
|
|
#@brief Función para generar la instrucción de transferencia de datos unicast
|
|
#@param 1 Tipo de operación [ SENDPARTITION RECEIVERPARTITION SENDFILE RECEIVERFILE ]
|
|
#@param 2 Sesion Unicast
|
|
#@param 3 Dispositivo (opción PARTITION) o fichero(opción FILE) que será enviado.
|
|
#@param 4 Tools de clonación (opcion PARTITION)
|
|
#@param 5 Tools de compresion (opcion PARTITION)
|
|
#@return instrucción para ser ejecutada.
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@exception OG_ERR_UCASTSYNTAXT formato de la sesion unicast incorrecta.
|
|
#@note Requisitos: mbuffer
|
|
#@todo: controlar que mbuffer esta disponible para los clientes.
|
|
#*/ ##
|
|
|
|
#ogUcastSyntax SENDPARTITION 8000:172.17.36.11:172.17.36.12 device tool level
|
|
#ogUcastSyntax RECEIVERPARTITION 8000:172.17.36.249 device tool level
|
|
|
|
#ogUcastSyntax SENDFILE 8000:172.17.36.11:172.17.36.12 file
|
|
#ogUcastSyntax RECEIVERFILE 8000:172.17.36.249 file
|
|
|
|
def ogUcastSyntax (op, sess, file=None, device=None, tool=None, level=None):
|
|
if 'SENDPARTITION' == op or 'RECEIVERPARTITION' == op:
|
|
if device is None:
|
|
raise TypeError ('missing required argument: "device"')
|
|
if tool is None:
|
|
raise TypeError ('missing required argument: "tool"')
|
|
if tool not in ['partclone', 'PARTCLONE', 'partimage', 'PARTIMAGE', 'ntfsclone', 'NTFSCLONE']:
|
|
raise TypeError (f'argument "tool" has unsupported value "{tool}"')
|
|
if level is None:
|
|
raise TypeError ('missing required argument: "level"')
|
|
if level not in ['lzop', 'gzip', 'LZOP', 'GZIP', '0', '1']:
|
|
raise TypeError (f'argument "level" has unsupported value "{level}"')
|
|
elif 'SENDFILE' == op or 'RECEIVERFILE' == op:
|
|
if file is None:
|
|
raise TypeError ('missing required argument: "file"')
|
|
else:
|
|
raise TypeError ('first parameter should match (SEND|RECEIVER)(PARTITION|FILE), eg. "SENDFILE"')
|
|
|
|
if 'SEND' in op: mode = 'server'
|
|
else: mode = 'client'
|
|
|
|
session = sess.split (':')
|
|
|
|
portbase = int (session[0])
|
|
if portbase not in range (8000, 8006):
|
|
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'McastSession portbase {portbase}') ## || PERROR=3
|
|
return
|
|
|
|
if 'SERVER' == mode:
|
|
address = ''
|
|
for i in range (1, len (session)):
|
|
address += f'-O {session[i]}:{portbase}'
|
|
else:
|
|
address = f'{session[1]}:{portbase}'
|
|
print (f'nati mode ({mode}) address ({address})')
|
|
|
|
if 'SENDPARTITION' == op:
|
|
syn = ImageLib.ogCreateImageSyntax (device, ' ', tool, level)
|
|
## REQUIRES package mbuffer to be installed!!
|
|
## otherwise, param2 in ImageLib.ogCreateImageSyntax() is not '| mbuffer' but empty
|
|
## and then parts[2] is out of range
|
|
parts = syn.split ('|')
|
|
print (f'syn ({syn}) parts ({parts})')
|
|
prog1 = f'{parts[0]}|{parts[2]}'.strip()
|
|
prog1 = prog1.replace ('>', '').strip()
|
|
return f'{prog1} | mbuffer {address}'
|
|
elif 'RECEIVERPARTITION' == op:
|
|
syn = ImageLib.ogRestoreImageSyntax (' ', device, tool, level)
|
|
parts = syn.split ('|')
|
|
compressor = parts[0].strip()
|
|
tools = parts[-1].strip()
|
|
return f'mbuffer -I {address} | {compressor} | {tools}'
|
|
elif 'SENDFILE' == op:
|
|
return f'mbuffer {address} -i {file}'
|
|
elif 'RECEIVERFILE' == op:
|
|
return f'mbuffer -I {address} -i {file}'
|
|
else:
|
|
pass ## shouldn't happen
|
|
|
|
|
|
#/**
|
|
# ogUcastSendPartition
|
|
#@brief Función para enviar el contenido de una partición a multiples particiones remotas usando UNICAST.
|
|
#@param 1 disk
|
|
#@param 2 partition
|
|
#@param 3 sesionUcast
|
|
#@param 4 tool image
|
|
#@param 5 tool compresor
|
|
#@return
|
|
#@exception $OG_ERR_FORMAT
|
|
#@exception $OG_ERR_UCASTSENDPARTITION
|
|
#@note
|
|
#@todo: ogIsLocked siempre devuelve 1
|
|
#*/ ##
|
|
|
|
|
|
#/**
|
|
# ogUcastReceiverPartition
|
|
#@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por UNICAST.
|
|
#@param 1 disk
|
|
#@param 2 partition
|
|
#@param 3 session unicast
|
|
#@return
|
|
#@exception OG_ERR_FORMAT
|
|
#@exception OG_ERR_UCASTRECEIVERPARTITION
|
|
#@note
|
|
#@todo:
|
|
#*/ ##
|
|
|
|
|
|
#/**
|
|
# ogUcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast
|
|
#@brief Envía un fichero por unicast ORIGEN(fichero) DESTINO(sessionmulticast)
|
|
#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast
|
|
#@param (3 parámetros) $1 Contenedor REPO|CACHE $2 path_absoluto_fichero $3 sesionMulticast
|
|
#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero $4 sesionMulticast
|
|
#@return
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@exception $OG_ERR_NOTFOUND
|
|
#@exception OG_ERR_UCASTSENDFILE
|
|
#@note Requisitos:
|
|
#*/ ##
|
|
#
|
|
|
|
|
|
#/**
|
|
# ogMcastSyntax
|
|
#@brief Función para generar la instrucción de ejucción la transferencia de datos multicast
|
|
#@param 1 Tipo de operación [ SENDPARTITION RECEIVERPARTITION SENDFILE RECEIVERFILE ]
|
|
#@param 2 Sesión Mulicast
|
|
#@param 3 Dispositivo (opción PARTITION) o fichero(opción FILE) que será enviado.
|
|
#@param 4 Tools de clonación (opcion PARTITION)
|
|
#@param 5 Tools de compresion (opcion PARTITION)
|
|
#@return instrucción para ser ejecutada.
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@exception OG_ERR_NOTEXEC
|
|
#@exception OG_ERR_MCASTSYNTAXT
|
|
#@note Requisitos: upd-cast 2009 o superior
|
|
#@todo localvar check versionudp
|
|
#*/ ##
|
|
#
|
|
|
|
|
|
|
|
|
|
#/**
|
|
# ogMcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast
|
|
#@brief Envía un fichero por multicast ORIGEN(fichero) DESTINO(sessionmulticast)
|
|
#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast
|
|
#@param (3 parámetros) $1 Contenedor REPO|CACHE $2 path_absoluto_fichero $3 sesionMulticast
|
|
#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero $4 sesionMulticast
|
|
#@return
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@exception $OG_ERR_NOTFOUND
|
|
#@exception OG_ERR_MCASTSENDFILE
|
|
#*/ ##
|
|
#
|
|
|
|
|
|
|
|
|
|
#/**
|
|
# ogMcastReceiverFile sesion Multicast [ str_repo | int_ndisk int_npart ] /Relative_path_file
|
|
#@brief Recibe un fichero multicast ORIGEN(sesionmulticast) DESTINO(fichero)
|
|
#@param (2 parámetros) $1 sesionMcastCLIENT $2 path_aboluto_fichero_destino
|
|
#@param (3 parámetros) $1 sesionMcastCLIENT $2 Contenedor REPO|CACHE $3 path_absoluto_fichero_destino
|
|
#@param (4 parámetros) $1 sesionMcastCLIENT $2 disk $3 particion $4 path_absoluto_fichero_destino
|
|
#@return
|
|
#@exception OG_ERR_FORMAT formato incorrecto.
|
|
#@exception $OG_ERR_MCASTRECEIVERFILE
|
|
#@note Requisitos:
|
|
#*/ ##
|
|
#
|
|
|
|
|
|
|
|
#/**
|
|
# ogMcastSendPartition
|
|
#@brief Función para enviar el contenido de una partición a multiples particiones remotas.
|
|
#@param 1 disk
|
|
#@param 2 partition
|
|
#@param 3 session multicast
|
|
#@param 4 tool clone
|
|
#@param 5 tool compressor
|
|
#@return
|
|
#@exception OG_ERR_FORMAT
|
|
#@exception OG_ERR_MCASTSENDPARTITION
|
|
#@note
|
|
#@todo: ogIsLocked siempre devuelve 1. crear ticket
|
|
#*/ ##
|
|
|
|
|
|
#/**
|
|
# ogMcastReceiverPartition
|
|
#@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por multicast.
|
|
#@param 1 disk
|
|
#@param 2 partition
|
|
#@param 3 session multicast
|
|
#@param 4 tool clone
|
|
#@param 5 tool compressor
|
|
#@return
|
|
#@exception $OG_ERR_FORMAT
|
|
#*/ ##
|
|
|
|
|
|
#/**
|
|
# ogMcastRequest
|
|
#@brief Función temporal para solicitar al ogRepoAux el envio de un fichero por multicast
|
|
#@param 1 Fichero a enviar ubicado en el REPO. puede ser ruta absoluta o relatica a /opt/opengnsys/images
|
|
#@param 2 PROTOOPT opciones protocolo multicast
|
|
#@return
|
|
#@exception
|
|
#*/ ##
|
|
|
|
|
|
##########################################
|
|
############## funciones torrent
|
|
#/**
|
|
# ogTorrentStart [ str_repo | int_ndisk int_npart ] Relative_path_file.torrent | SessionProtocol
|
|
#@brief Función iniciar P2P - requiere un tracker para todos los modos, y un seeder para los modos peer y leecher y los ficheros .torrent.
|
|
#@param str_pathDirectory str_Relative_path_file
|
|
#@param int_disk int_partition str_Relative_path_file
|
|
#@param str_REPOSITORY(CACHE - LOCAL) str_Relative_path_file
|
|
#@param (2 parámetros) $1 path_aboluto_fichero_torrent $2 Parametros_Session_Torrent
|
|
#@param (3 parámetros) $1 Contenedor CACHE $2 path_absoluto_fichero_Torrent $3 Parametros_Session_Torrent
|
|
#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero_Torrent 4$ Parametros_Session_Torrent
|
|
#@return
|
|
#@note protocoloTORRENT=mode:time mode=seeder -> Dejar el equipo seedeando hasta que transcurra el tiempo indicado o un kill desde consola, mode=peer -> seedear mientras descarga mode=leecher -> NO seedear mientras descarga time tiempo que una vez descargada la imagen queremos dejar al cliente como seeder.
|
|
#*/ ##
|
|
|
|
#/**
|
|
# ogCreateTorrent [ str_repo | int_ndisk int_npart ] Relative_path_file
|
|
#@brief Función para crear el fichero torrent.
|
|
#@param str_pathDirectory str_Relative_path_file
|
|
#@param int_disk int_partition str_Relative_path_file
|
|
#@param str_REPOSITORY(CACHE - LOCAL) str_Relative_path_file
|
|
#@return
|
|
#@exception OG_ERR_FORMAT Formato incorrecto.
|
|
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
|
|
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
|
|
#@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo.
|
|
#*/ ##
|
|
|
|
|
|
|
|
#/**
|
|
# ogUpdateCacheIsNecesary [ str_repo ] Relative_path_file_OGIMG_with_/
|
|
#@brief Comprueba que el fichero que se desea almacenar en la cache del cliente, no esta.
|
|
#@param 1 str_REPO
|
|
#@param 2 str_Relative_path_file_OGIMG_with_/
|
|
#@param 3 md5 to check: use full to check download image torrent
|
|
#@return 0 (true) cache sin imagen, SI es necesario actualizar el fichero.
|
|
#@return 1 (false) imagen en la cache, NO es necesario actualizar el fichero
|
|
#@return >1 (false) error de sintaxis (TODO)
|
|
#@note
|
|
#@todo: Proceso en el caso de que el fichero tenga el mismo nombre, pero su contenido sea distinto.
|
|
#@todo: Se dejan mensajes mientras se confirma su funcionamiento.
|
|
#*/ ##
|