trunck engine Protocol.lib: ogTorrentStart corrección detección estado imagen, tiempos para el peer, leecher, seeder

git-svn-id: https://opengnsys.es/svn/trunk@1009 a21b9725-9963-47de-94b9-378ad31fedc9
remotes/github/debian-pkg
Antonio Doblas Viso 2010-06-03 05:43:43 +00:00
parent f4b737dac7
commit 1678fa1b6c
2 changed files with 76 additions and 24 deletions

View File

@ -250,7 +250,6 @@ eval $COMMAND
#@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.
#@note
#@todo: Abriendo puerto para pasar parametros de control al cliente.
#@version 0.1 - Integración para OpenGNSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date
@ -311,7 +310,7 @@ ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.tor
#/**
# ogTorrentStart [ str_repo | int_ndisk int_npart ] Relative_path_file | SessionProtocol
#@brief Función iniciar P2P - requiere un tracker y los ficheros .torrent.
#@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
@ -324,14 +323,26 @@ ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.tor
#@version 0.2 - Chequeo del tamaño de imagen descargado.
#@author Irina . Univesidad de Sevilla.
#@date
#@version 0.3 - Control de los modos de operación, y estado de descarga.
#@author Antonio J. Doblas Viso. Univesidad de Málaga.
#@date
#*/ ##
#Lee el fichero torrent y descarga o comparte el fichero destino en el mismo subdirectorio.
# Parametros para el orgien del fichero file.df.torrent
# 1 camino completo al fichero
# 1 2 Contenedor /fichero relativo
# 1 2 3 disco particion y /fichero relativo.
#protocoloTORRENT mode:time
# posicion 2, 3, 4
#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.
ogTorrentStart ()
{
#protocoloTORRENT
#mode=seeder|leecher -> seedear mientras descarga
#timeAfter -> tiempo de seeder desdpues de la descarga
#timeServer -> cuando el equipo ya tenía la imagen.
#TODO ayuda
#TODO: control parametros.
case "$1" in
/*) # Camino completo. */ (Comentrio Doxygen)
@ -359,28 +370,69 @@ cd $DIRSOURCE
#analizando SESSION
MODE=`echo $SESSION | cut -f1 -d:`
TIMECLIENT=`echo $SESSION | cut -f2 -d:`
TIMESERVER=`echo $SESSION | cut -f3 -d:`
TIME=`echo $SESSION | cut -f2 -d:`
#comprobamos si tenemos la imagen completa
#echo " ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\( "
TOTAL=`ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\(`
if [ "$TOTAL" == "100%)" ]
#echo $MODE $TIME
#echo ${SOURCE}.bf ${TARGET}
# si No fichero .bf, y Si fichero destino imagen ya descargada y su chequeo fue comprobado en su descarga inicial.
if [ ! -f ${SOURCE}.bf -a -f ${TARGET} ]
then
TIMECLIENT=$TIMESERVER
echo "imagen ya descargada"
case "$MODE" in
seeder|SEEDER)
(sleep $TIME && kill -9 `pidof ctorrent`) &
echo "MODE seeder ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
ctorrent ${SOURCE}
esac
return 0
fi
if [ "$MODE" == "seeder" ]
then
echo "ctorrent ${SOURCE} -X 'sleep $TIMECLIENT; kill -9 \$(pidof ctorrent)' -C 100"
ctorrent ${SOURCE} -X "sleep $TIMECLIENT; kill -9 \$(pidof ctorrent)" -C 100
fi
if [ "$MODE" == "leecher" ]
#Si no existe bf ni fichero destino descarga inicial.
if [ ! -f ${SOURCE}.bf -a ! -f ${TARGET} ]
then
echo "ctorrent ${SOURCE} -X 'sleep $TIMECLIENT; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
ctorrent ${SOURCE} -X "sleep $TIMECLIENT; kill -9 \$(pidof ctorrent)" -C 100 -U 0
OPTION=DOWNLOAD
echo "descarga inicial"
fi
# Si fichero bf descarga anterior no completada -.
if [ -f ${SOURCE}.bf -a -f ${TARGET} ]
then
echo Continuar con Descargar inicial no terminada.
OPTION=DOWNLOAD
fi
case "$OPTION" in
download|DOWNLOAD)
if [ "$MODE" == "peer" ]
then
echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf"
ctorrent -f -X "sleep $TIME; kill -9 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
fi
if [ "$MODE" == "leecher" ]
then
echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
ctorrent ${SOURCE} -X "sleep $TIME; kill -9 \$(pidof ctorrent)" -C 100 -U 0
fi
;;
esac
if [ "$OPTION" == "DOWNLOAD" ]
then
echo "comprobando el fichero descargado"
echo " ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\( "
TOTAL=`ctorrent -s $TARGET -c $SOURCE | tail -n1 | cut -f2 -d\(`
if [ "$TOTAL" == "100%)" ]
then
return 0
else
return 1
fi
fi
cd /tmp
}

View File

@ -35,7 +35,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local"
PORTBASE=`echo $6 | cut -f1 -d:`
echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:"CACHE" "$2.img" "
ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.img"
ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.img" || exit $?
IMGFILE=$(ogGetPath "cache" "$2.img")
fi
;;
@ -43,7 +43,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local"
ogCopyFile "repo" "$2.img.torrent" "$IMGDIR" || exit $?
echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local"
ogTorrentStart "CACHE" "$2.img.torrent" "seeder:60:360"
ogTorrentStart "CACHE" "$2.img.torrent" "peer:60" || exit $?
IMGFILE=$(ogGetPath "cache" "$2.img")
;;
*) # Protocolo desconocido.