FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Cancelar Transferencia FTP
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Cancelar Transferencia FTP
Posted: Mon Oct 21, 2013 04:02 PM
Saludos y buen inicio de Semana:

Tengo un m贸dulo de actualizaciones via FTP, puedo revisar los archivos actualizados, bajarlos y remplazar los archivos ant铆guos, pero quise implementar un boton para detener la descarga de archivos y cancelar el proceso antes de que 1 o todos los archivos se descarguen, si los archivos se descargan completamente se deshabilita el boton para evitar el proceso.



Trabajo con la Clase ServicesFTP de Jose Javier LLoris Roig, la cual hereda los methods de la Clase TFTP de Habour.

Mi idea es mediante una variable l贸gica si es .T. la descarga continua, si pulso el boton Cancelar la Variable torna a .F. y se cierra el Dialogo.

Code (fw): Select all Collapse
REDEFINE BUTTONBMP 聽oBtn 聽ID 500 OF oDlg TEXTRIGHT BITMAP 聽 "CANCELAR" 聽ACTION (lDown:= .F., lFinDlg:= .T., oDlg:END())


Y para mostrar el vance de la desgarga:

Code (fw): Select all Collapse
oFtp:oFtp:exGauge := ( @FtpProgress() )
聽 聽 聽 聽 聽 oFtp:oFtp:DownLoadFile( cDestino + "\" + cFile, cFile )


La Funci贸n que muestra el progreso de la descarga de los archivos y en la cual interrumpo el procesoa con la variable:

Code (fw): Select all Collapse
//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal)

LOCAL cProgress := INT( 100*nSent/nTotal )
LOCAL nPos:= 0

IF lDown == .T.
聽 聽oProg:SETPOS(cProgress)
聽 聽oProg:Refresh() 
聽 聽oSayP:SetText("Descargando "+cFile+" --> "+STR(nSent)+" 聽 聽 聽 聽Progreso: "+ALLTRIM(STR(cProgress)) +" % ")
聽 聽oSayP:Refresh()
聽 聽IF cProgress == 1
聽 聽 聽 nPos:= nPos + 1
聽 聽ENDIF
聽 聽oBrw:SETPOS(nPos)
聽 聽oBrw:Refresh() 
聽 聽SysRefresh()
ELSEIF lDown == .F.
聽 oFTP:CLOSE() 聽 聽 聽 //-----Aki el fallo
聽 聽DeleteObject( oFTP )
ENDIF

RETURN Nil



Sl cancelar el proceso el Dialogo de Cierra y muestra este error:

Time from start: 0 hours 0 mins 12 secs
Error occurred at: 21-10-2013, 10:54:23
Error description: Error BASE/3012 Error de argumento: HB_INETERRORCODE
Args:
[ 1] = U

Stack Calls
===========
Called from: => HB_INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:READTOFILE( 0 )
Called from: hbtip\ftpcli.prg => TIPCLIENTFTP:DOWNLOADFILE( 0 )
Called from: Update.prg => DOWNFILS( 271 )



Como puedo parar la conexi贸n al FTP sin que provoque error, ya que despup茅s del error el archivo continua descargandose de forma escondida... Talv茅z la soluci贸n sea sencilla pero no doy como..

Ojala puedan darme una ayudadita.. Gracias..
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Cancelar Transferencia FTP
Posted: Tue Oct 22, 2013 05:12 AM

Up +1 :twisted: :twisted:

Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Cancelar Transferencia FTP
Posted: Tue Oct 22, 2013 11:44 AM

V铆ctor,

Aunque no tengo mucha idea de lo que puede estar pasando... como veo que insistes con el mensaje he pensado echar una mano: He intentado buscar, segun las llamadas del error, el client.prg y no lo he encontrado ni en xHarbour ni en Harbour 3.2.
Deduzco que debes tener un Harbour antiguo. 驴 Has pensado coger los fuentes actuales de Harbour y utilizar esa parte de las contribs ?
Tampoco he identificado las llamadas con lo que tu dices "aki". Debe ser que tu te refieres a que es esa accion la que genera los problemas.

De todas formas te digo: el comando ftp.exe tiene la opcion de 'disconnect'... no se si habra que desconectar la conexion antes de cerrar(la). Es probable que el Close() prematuro le pueda sentar mal a la clase.
En todo caso, yo miraria los fuentes de la clase para saber que argumento es el que es erroneo para seguirle la pista. Si hubiera tenido los fuentes de la clase yo mismo lo hubiera hecho.

Saludos

Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Cancelar Transferencia FTP
Posted: Tue Oct 22, 2013 01:57 PM

Gracias por responder:

Uso Harbour 3.0, he revisado los fuentes de las libs y no hay la opcion de desconectar, no obstante la de conectar, subir y bajar si estan presentes, mi idea es de primero detener la descarga del archivo en curso, para que sea permitible la desconecci贸n del FTP, y despues cerrarlo con oFTP:CLOSE(), pero reitero que la opcion de la funci贸n desconectar no existe en harbour.

He detectado que si cierro la conexi贸n a internet o si se llega a cortar si se detiene la transferencia y borra el archivo descargado, pero muestra un mensaje que que el sitio ftp retorna el mensaje de desconecci贸n, pero no se me hace correcto que por aqui este el tiro.. Lo correcto es que el comando desconectar.. Sigo investigando..

Saludos..

Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Cancelar Transferencia FTP
Posted: Wed Oct 23, 2013 04:25 AM
Por lo pronto ya pude hacer que a media transferencia pueda cancelar la descarga del archivo en curso, pero no de forma "nativa" si no haciendo trampa, entend铆 que el Objeto oFTP se queda colgado y busca al manejador de errores HB_INETERRORCODE(), para que no se quede buscando al manejador y de error tuve que desviar el tipo de objeto de la clase "ServicesFTP" a otra Clase y despu茅s finalizarlo para que no continue la descarga quedando de 茅sta manera:


Code (fw): Select all Collapse
//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal)

LOCAL cProgress := INT( 100*nSent/nTotal )
LOCAL nPos:= 0

IF lDown == .T.
聽 聽oProg:SETPOS(cProgress)
聽 聽oProg:Refresh() 
聽 聽oSayP:SetText("Descargando "+cFile+" --> "+STR(nSent,.T.)+" 聽 聽 聽 聽Progreso: "+ALLTRIM(STR(cProgress)) +" % ")
聽 聽oSayP:Refresh()
聽 聽IF cProgress == 1
聽 聽 聽 nPos:= nPos + 1
聽 聽ENDIF
聽 聽oBrw:SETPOS(nPos)
聽 聽oBrw:Refresh() 
聽 聽SysRefresh()
ELSEIF lDown == .F.
聽 聽HB_InetCleanup()
聽 聽oFtp:= TTimer():New(10, { || Nil }) //--Cambiando de "ServicesFTP" a "TTimer"
聽 聽oFTP:END()
聽 聽DeleteObject( oFTP )
ENDIF

RETURN Nil



Listo: la soluci贸n es casi perfecta, no da errores, cierra el dialogo de actualizaci贸n, no modifica ni borra los archivos a actualizar, peroooo... el archivo "ftp-1.log" se queda cargado en memoria y no lo puedo eliminar ni con el comando FERASE(), este archivo lo genera al conectarse al FTP.

Considero que 茅ste archivo no debiera ser creado, representa un peligro: pues en 茅l esta contenida toda la informaci贸n de conexi贸n al FTP, nomnbre de usuario, pasword. Habr谩 forma de evitar que este archivo "ftp-X.log" sea creado..? :-) :-) :-)

Saludos.. :-) :-) :-)
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: Cancelar Transferencia FTP
Posted: Wed Oct 23, 2013 07:35 AM

V铆ctor,

Muy, muy bueno... el cambio de tipo de objeto... Genial, SI NO se producen fugas de memoria al no cerrar el oftp de forma "ortodoxa".
Buena tambi茅n la info del log que no quiere borrarse. 驴 Has probado con el Unlocker, a ver si lo puedes borrar ? Yo, por de pronto, intentaria, a ese archivo cambiarle el nombre y crearlo en temp o algo asi para que no estuviera demasiado "ubicado".

En todo caso, y como te comente, yo hubiera probado primero las rutinas ftp de fwh y/o las rutinas ftp de harbour 3.2. Pero como dicen los informaticos, si funciona 隆 no lo toques ! :D

Saludos

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Cancelar Transferencia FTP
Posted: Wed Oct 23, 2013 07:39 AM
Victor,

En c:\harbour\contrib\hbtip\ftpcli.prg tienes un ejemplo de cliente FTP en donde hay llamadas al m茅todo . No se si este es el c贸digo que usas 贸 parecido. Si publicas un ejemplo completo aqui, lo probaremos y a ver si podemos solucionarlo:

https://github.com/harbour/core/blob/master/contrib/hbtip/ftpcli.prg

En ese c贸digo hay llamadas a un m茅todo inetErrorCode(), que por el nombre pareciese que esta basado en HB_INETERRORCODE(). De ahi el sugerirte este fichero por si contiene informaci贸n valiosa para tu c贸digo basado en esas funciones.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Cancelar Transferencia FTP
Posted: Wed Oct 23, 2013 03:10 PM
Buen dia Maestro Antonio:

Solo queda pendiente evitar que se genere el archivo "ftp-1.log" que se crea al conectar al sitio FTP, es molesto y peligroso que este archivo se genere, ya que contiene toda la informaci贸n para conectarse a los sitios FTP, esta informaci贸n no deberia darse a los usuarios finales, de hecho ya estaba comentado en el foro pero no se le dio seguimiento y soluci贸n.

http://forums.fivetechsupport.com/viewtopic.php?p=113198#p113198

Si es inavitable que ese archivo sea creado para el uso interno de Harbour para conectarse al FTP, seria bueno que se le cambiara de extenci贸n para que no pueda ser abierto tan facil y/o mejor a煤n cambiar el lugar donde se crea, ya sea en la carpeta temporal de Windows.

El link de los fuentes de Harbour ya los habia revisado, de ahi obtuve la ra铆z del fallo anterior, revise si de ahi proviene la creaci贸n del archivo "ftp-1.log" pero no lo encontre, talvez este en los dem谩s fuentes pero no me dio tiempo de revisarlo.

Lo de detener la transferencia del archivo no me da problemas, funciona como lo explique anteriormente...

Ojala se puediera solucionar este peque帽o bug.. Saludos.. :-) :-)
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Cancelar Transferencia FTP
Posted: Wed Oct 23, 2013 04:48 PM

Victor,

Comprueba si en tu c贸digo se usa esto:

METHOD New( oUrl, xTrace, oCredentials ) CLASS TIPClient

TIPClient():New( ... )

si especificas el segundo par谩metro como .F. no se deber铆a generar ningun fichero .log

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 625
Joined: Wed Mar 14, 2007 06:49 PM
Re: Cancelar Transferencia FTP
Posted: Thu Oct 24, 2013 12:53 AM
隆隆隆 PERFECTO MAESTRO: !!!

Ahora si, funciona como lo tenia pensado..
No pues con raz贸n, en los parametros de la clase esta determinado xomo XTrace, yo estube buscando algo que tuviera que ver con ".log" pero no di mas que con StartCleanLogFile()

Gracias... :-) :-) :-)
Soluciones y Dise帽o de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Dise帽ador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon

Continue the discussion