summaryrefslogtreecommitdiffstats
path: root/client/shared/scripts/updateCache
blob: 2b7f2c3f0b30d24956d9bbb61472061f578af196 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/bash


#/**
#         updateCache
#@brief   Actualiza la cache del cliente con imagen o fichero iso.
#@param 1 REPO          Origen del fichero. -accesible por nfs-samba-
#@param 2 str_fichero   nombre del fichero a actualizar.
#@param 3 str_protoco.  TORRENT | MULTICAST    | UNICAST.
#@param 4 str_opcionesprotocolo
#@param 4 str_opcionesupdatecache
#@ejemplo: oneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop 
#@return  
#@exception OG_ERR_FORMAT     formato incorrecto.
#@note   
#@todo: 
#@version 0.9.1 - integracion EAC
#@author  Antonio J. Doblas Viso. Universidad de Malaga.
#@date    2008/03/17
#@version 0.9.2 - integracion OpenGnsys
#@author  Antonio J. Doblas Viso. Universidad de Malaga.
#@date    2010/07/27
#@version 1.0.1 - Control de espacio requerido
#@author  Antonio J.Doblas Viso
#@date   2011-05-10
#*/ ##

PROG="$(basename $0)"
if [ $# -lt 3 ]; then
    ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE"
    exit $?
fi

REPOSITORIO="$1"
PROTOCOLO="$3"
OPTPROTOCOLO="$4"
REPOIP=$(ogGetRepoIp)
echo $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
# Si el repositorio local CACHE no existe salimos.
if ! $(ogFindCache >/dev/null); then
        ogRaiseError $OG_ERR_NOTCACHE "CACHE"
        exit $?
fi

#Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-
#TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
# si RETVAL=0 => actualizamos  si RETVAL=1 no actaulizasmo-exit 0  || si RETVAL>2 exit 1
[ "$RETVAL" == "1" ] && exit 0
[ "$RETVAL" -gt  "1" ] && exit 1


CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
FILESIZE=$(ls -sk $(ogGetPath $REPOSITORIO "$2") | cut -f1 -d" ")

if [ "$FILESIZE" -ge "$CACHESIZEFREE" ]  
then
	echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE"
	ogRaiseError $OG_ERR_CACHESIZE "CACHE"
    exit $?
fi

ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
# si RETVAL=0 => actualizamos  si RETVAL=1 no actaulizasmo-exit 0  || si RETVAL>2 exit 1
[ "$RETVAL" == "1" ] && exit 0
[ "$RETVAL" -gt  "1" ] && exit 1

ogMountCache >/dev/null

## Si no existe, crear subdirectorio para el fichero en la cache.
IMGDIR=$(ogGetParentPath CACHE "/$2")
if [ $? != 0 ]; then
    echo "[5] Crear subdirectorio del fichero  \"$2 $(dirname "$2")."
    ogMakeDir CACHE $(dirname "/$2")
    IMGDIR=$(ogGetParentPath CACHE "/$2") || exit $?
fi


case "$PROTOCOLO" in
	torrent | TORRENT )
		echo "ogCopyFile $1 $2.torrent absolute $OGCAC/$OGIMG"
		# tiempos 
		timewait=$(expr $(printf '%d\n' 0x$(ogGetMacAddress | awk -F: '{print $5$6}')) \* 120 / 65535)                         
		ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR"
		#TODO: comprobar que el tracker definido en el fichero es correcto.
    	#TODO comprobar que el fichero torrent está en cache
		# retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos 
		P2PWAIT=$[ ( $RANDOM % 120 )  + 1 ]
		echo "Esperando $P2PWAIT segundos para iniciar ogTorrentStart CACHE $2.torrent $4"
		sleep $P2PWAIT
		ogTorrentStart CACHE "$2.torrent" $4
	;;
	multicast | MULTICAST )
		echo "determinando puerto principal y auxiliar."
		PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":")
		let PORTAUX=$PORT+1
        #TODO: ticket 379
		NUMBER=$[ ( $RANDOM % 30 )  + 1 ]
		sleep $NUMBER
		#FIN TODO
		echo "comprobando puerto $PORTAUX en $REPOIP (sesion multicast en puerto $PORT) "
		if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
		then 
	   		ogMcastReceiverFile $PORT CACHE "$2"
		else
		    # TODO ticket 379 Realizar la petición basada en identificador de operacion
	   		echo "solicita la apertura:  hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO""
	   		hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
	   		#echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2"
	   		sleep 10
	   		if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
	   		then 
	   			ogMcastReceiverFile $PORT CACHE "$2"
			else
			    echo "la peticion ha fallado: hose $REPOIP 2009 --out sh -c echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
	   		    exit 1
	   		fi
		fi	
	;;
	unicast | UNICAST )
		echo "unicast"
		ogCopyFile $REPOSITORIO "$2" "$IMGDIR"
	;;
esac


ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
# si RETVAL=0 => actualizamos  si RETVAL=1 no actaulizasmo-exit 0  || si RETVAL>2 exit 1
[ "$RETVAL" == "0" ] && exit 1
[ "$RETVAL" == "1" ] && exit 0
[ "$RETVAL" -gt  "1" ] && exit 1