On Tue, Mar 17, 2009 at 10:16:35AM +0300, Alexander V. Lukyanov wrote:
> On Sun, Mar 15, 2009 at 08:52:05PM +0100, Manuel Reimer wrote:
> > ---> REST 5760
> > <--- 350 Restarting at 5760. Send STORE or RETRIEVE to initiate transfer
> > ---> STOR hu.po
> > <--- 451 hu.po: Append/Restart not permitted, try again
> > ---- Closing data socket
> >
> > lftp doesn't interpret this error and tries to use "rest" in front of a
> > "stor" over and over again.
>
> IMHO lftp interprets this error correctly, as 4xx means a transient error,
> from RFC959: "the error condition is temporary and the action may be
> requested again".
Anyway, please try this patch.
--
Alexander..
Index: ftpclass.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/ftpclass.cc,v
retrieving revision 1.455
diff -u -p -r1.455 ftpclass.cc
--- ftpclass.cc 3 Mar 2009 10:20:51 -0000 1.455
+++ ftpclass.cc 17 Mar 2009 10:35:59 -0000
@@ -251,19 +251,21 @@ void Ftp::NoFileCheck(int act)
SetError(FATAL,all_lines);
return;
}
+ if(real_pos>0 && !GetFlag(IO_FLAG) && copy_mode==COPY_NONE
+ && ((is4XX(act) && strstr(line,"Append/Restart not permitted"))
+ || (is5XX(act) && !Transient5XX(act))))
+ {
+ DataClose();
+ LogNote(2,_("Switching to NOREST mode"));
+ flags|=NOREST_MODE;
+ real_pos=0;
+ if(mode==STORE)
+ pos=0;
+ state=EOF_STATE; // retry
+ return;
+ }
if(is5XX(act) && !Transient5XX(act))
{
- if(real_pos>0 && !GetFlag(IO_FLAG) && copy_mode==COPY_NONE)
- {
- DataClose();
- LogNote(2,_("Switching to NOREST mode"));
- flags|=NOREST_MODE;
- real_pos=0;
- if(mode==STORE)
- pos=0;
- state=EOF_STATE; // retry
- return;
- }
SetError(NO_FILE,all_lines);
return;
}