Merge remote-tracking branch 'donkult/feature/generalize-gzipindex' into debian/sid
[ntk/apt.git] / methods / ftp.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/// $Id: ftp.h,v 1.4 2001/03/06 07:15:29 jgg Exp $
3 // $Id: ftp.h,v 1.4 2001/03/06 07:15:29 jgg Exp $
4 /* ######################################################################
5
6 FTP Acquire Method - This is the FTP acquire method for APT.
7
8 ##################################################################### */
9 /*}}}*/
10 #ifndef APT_FTP_H
11 #define APT_FTP_H
12
13 #include <apt-pkg/strutl.h>
14
15 #include <sys/types.h>
16 #include <time.h>
17 #include <string>
18
19 class FTPConn
20 {
21 char Buffer[1024*10];
22 unsigned long Len;
23 int ServerFd;
24 int DataFd;
25 int DataListenFd;
26 URI ServerName;
27 bool ForceExtended;
28 bool TryPassive;
29 bool Debug;
30
31 struct addrinfo *PasvAddr;
32
33 // Generic Peer Address
34 struct sockaddr_storage PeerAddr;
35 socklen_t PeerAddrLen;
36
37 // Generic Server Address (us)
38 struct sockaddr_storage ServerAddr;
39 socklen_t ServerAddrLen;
40
41 // Private helper functions
42 bool ReadLine(std::string &Text);
43 bool Login();
44 bool CreateDataFd();
45 bool Finalize();
46
47 public:
48
49 bool Comp(URI Other) {return Other.Host == ServerName.Host && Other.Port == ServerName.Port && Other.User == ServerName.User && Other.Password == ServerName.Password; };
50
51 // Raw connection IO
52 bool ReadResp(unsigned int &Ret,std::string &Text);
53 bool WriteMsg(unsigned int &Ret,std::string &Text,const char *Fmt,...);
54
55 // Connection control
56 bool Open(pkgAcqMethod *Owner);
57 void Close();
58 bool GoPasv();
59 bool ExtGoPasv();
60
61 // Query
62 bool Size(const char *Path,unsigned long long &Size);
63 bool ModTime(const char *Path, time_t &Time);
64 bool Get(const char *Path,FileFd &To,unsigned long long Resume,
65 Hashes &MD5,bool &Missing);
66
67 FTPConn(URI Srv);
68 ~FTPConn();
69 };
70
71 class FtpMethod : public pkgAcqMethod
72 {
73 virtual bool Fetch(FetchItem *Itm);
74 virtual bool Configuration(std::string Message);
75
76 FTPConn *Server;
77
78 static std::string FailFile;
79 static int FailFd;
80 static time_t FailTime;
81 static APT_NORETURN void SigTerm(int);
82
83 public:
84
85 FtpMethod();
86 };
87
88 #endif