// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: ftp.cc,v 1.13 1999/05/29 03:25:03 jgg Exp $
+// $Id: ftp.cc,v 1.19 2000/01/10 03:44:54 jgg Exp $
/* ######################################################################
HTTP Aquire Method - This is the FTP aquire method for APT.
}
// Connect to the remote server
- if (Connect(Host,Port,"ftp",ServerFd,TimeOut,Owner) == false)
+ if (Connect(Host,Port,"ftp",21,ServerFd,TimeOut,Owner) == false)
return false;
socklen_t Len = sizeof(Peer);
if (getpeername(ServerFd,(sockaddr *)&Peer,&Len) != 0)
int Res = read(ServerFd,Buffer + Len,sizeof(Buffer) - Len);
if (Res <= 0)
{
+ _error->Errno("read","Read error");
Close();
- return _error->Errno("read","Read error");
+ return false;
}
Len += Res;
}
int Res = write(ServerFd,S + Start,Len);
if (Res <= 0)
{
+ _error->Errno("write","Write Error");
Close();
- return _error->Errno("write","Write Error");
+ return false;
}
Len -= Res;
return true;
// Parse it
- struct tm tm;
- memset(&tm,0,sizeof(tm));
- if (sscanf(Msg.c_str(),"%4d%2d%2d%2d%2d%2d",&tm.tm_year,&tm.tm_mon,
- &tm.tm_mday,&tm.tm_hour,&tm.tm_min,&tm.tm_sec) != 6)
- return true;
-
- tm.tm_year -= 1900;
- tm.tm_mon--;
-
- /* We use timegm from the GNU C library, libapt-pkg will provide this
- symbol if it does not exist */
- Time = timegm(&tm);
+ StrToTime(Msg,Time);
return true;
}
/*}}}*/
void FtpMethod::SigTerm(int)
{
if (FailFd == -1)
- exit(100);
+ _exit(100);
close(FailFd);
// Timestamp
UBuf.modtime = FailTime;
utime(FailFile.c_str(),&UBuf);
- exit(100);
+ _exit(100);
}
/*}}}*/
// FtpMethod::Configuration - Handle a configuration message /*{{{*/
{
Res.Size = Buf.st_size;
Res.LastModified = Buf.st_mtime;
+ Res.ResumePoint = Buf.st_size;
URIDone(Res);
return true;
}
bool Missing;
if (Server->Get(File,Fd,Res.ResumePoint,MD5,Missing) == false)
{
+ Fd.Close();
+
+ // Timestamp
+ struct utimbuf UBuf;
+ UBuf.actime = FailTime;
+ UBuf.modtime = FailTime;
+ utime(FailFile.c_str(),&UBuf);
+
// If the file is missing we hard fail otherwise transient fail
if (Missing == true)
return false;
// Timestamp
struct utimbuf UBuf;
- time(&UBuf.actime);
UBuf.actime = FailTime;
UBuf.modtime = FailTime;
utime(Queue->DestFile.c_str(),&UBuf);