1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
3 // $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $
4 /* ######################################################################
6 HTTP Acquire Method - This is the HTTP acquire method for APT.
8 ##################################################################### */
14 #include <apt-pkg/strutl.h>
15 #include <apt-pkg/acquire-method.h>
33 unsigned long long Size
;
34 unsigned long long InP
;
35 unsigned long long OutP
;
37 unsigned long long StrPos
;
38 unsigned long long MaxGet
;
41 static unsigned long long BwReadLimit
;
42 static unsigned long long BwTickReadData
;
43 static struct timeval BwReadTick
;
44 static const unsigned int BW_HZ
;
46 unsigned long long LeftRead() const
48 unsigned long long Sz
= Size
- (InP
- OutP
);
49 if (Sz
> Size
- (InP%Size
))
50 Sz
= Size
- (InP%Size
);
53 unsigned long long LeftWrite() const
55 unsigned long long Sz
= InP
- OutP
;
58 if (Sz
> Size
- (OutP%Size
))
59 Sz
= Size
- (OutP%Size
);
69 bool Read(std::string Data
);
73 bool WriteTillEl(std::string
&Data
,bool Single
= false);
75 // Control the write limit
76 void Limit(long long Max
) {if (Max
== -1) MaxGet
= 0-1; else MaxGet
= OutP
+ Max
;}
77 bool IsLimit() const {return MaxGet
== OutP
;};
78 void Print() const {cout
<< MaxGet
<< ',' << OutP
<< endl
;};
80 // Test for free space in the buffer
81 bool ReadSpace() const {return Size
- (InP
- OutP
) > 0;};
82 bool WriteSpace() const {return InP
- OutP
> 0;};
88 CircleBuf(unsigned long long Size
);
92 struct HttpServerState
: public ServerState
94 // This is the connection itself. Output is data FROM the server
100 virtual bool ReadHeaderLines(std::string
&Data
);
101 virtual bool LoadNextResponse(bool const ToFile
, FileFd
* const File
);
102 virtual bool WriteResponse(std::string
const &Data
);
105 virtual void Reset() { ServerState::Reset(); ServerFd
= -1; };
107 virtual bool RunData(FileFd
* const File
);
110 virtual bool IsOpen();
111 virtual bool Close();
112 virtual bool InitHashes(FileFd
&File
);
113 virtual Hashes
* GetHashes();
114 virtual bool Die(FileFd
&File
);
115 virtual bool Flush(FileFd
* const File
);
116 virtual bool Go(bool ToFile
, FileFd
* const File
);
118 HttpServerState(URI Srv
, HttpMethod
*Owner
);
119 virtual ~HttpServerState() {Close();};
122 class HttpMethod
: public ServerMethod
125 virtual void SendReq(FetchItem
*Itm
);
127 /** \brief Try to AutoDetect the proxy */
128 bool AutoDetectProxy();
130 virtual bool Configuration(std::string Message
);
132 virtual ServerState
* CreateServerState(URI uri
);
133 virtual void RotateDNS();
136 std::string AutoDetectProxyCmd
;
139 friend struct HttpServerState
;
141 HttpMethod() : ServerMethod("1.2",Pipeline
| SendConfig
)