X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/492f957ad42ce5eee7e26f3edd5789af296b7460..115ba31b90e0d6643670d7d079f9f27b0e05f1c2:/methods/http.h diff --git a/methods/http.h b/methods/http.h index 62f329ef5..0bc019e77 100644 --- a/methods/http.h +++ b/methods/http.h @@ -1,9 +1,9 @@ // -*- mode: cpp; mode: fold -*- -// Description /*{{{*/ -// $Id: http.h,v 1.3 1998/11/04 07:10:50 jgg Exp $ +// Description /*{{{*/// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ +// $Id: http.h,v 1.12 2002/04/18 05:09:38 jgg Exp $ /* ###################################################################### - HTTP Aquire Method - This is the HTTP aquire method for APT. + HTTP Acquire Method - This is the HTTP aquire method for APT. ##################################################################### */ /*}}}*/ @@ -13,6 +13,11 @@ #define MAXLEN 360 +#include + +using std::cout; +using std::endl; + class HttpMethod; class CircleBuf @@ -26,6 +31,11 @@ class CircleBuf unsigned long MaxGet; struct timeval Start; + static unsigned long BwReadLimit; + static unsigned long BwTickReadData; + static struct timeval BwReadTick; + static const unsigned int BW_HZ; + unsigned long LeftRead() { unsigned long Sz = Size - (InP - OutP); @@ -46,7 +56,7 @@ class CircleBuf public: - MD5Summation *MD5; + Hashes *Hash; // Read data in bool Read(int Fd); @@ -70,7 +80,7 @@ class CircleBuf void Stats(); CircleBuf(unsigned long Size); - ~CircleBuf() {delete [] Buf;}; + ~CircleBuf() {delete [] Buf; delete Hash;}; }; struct ServerState @@ -88,6 +98,11 @@ struct ServerState bool HaveContent; enum {Chunked,Stream,Closes} Encoding; enum {Header, Data} State; + bool Persistent; + string Location; + + // This is a Persistent attribute of the server itself. + bool Pipeline; HttpMethod *Owner; @@ -100,8 +115,21 @@ struct ServerState bool HeaderLine(string Line); bool Comp(URI Other) {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;}; void Reset() {Major = 0; Minor = 0; Result = 0; Size = 0; StartPos = 0; - Encoding = Closes; time(&Date); ServerFd = -1;}; - int RunHeaders(); + Encoding = Closes; time(&Date); ServerFd = -1; + Pipeline = true;}; + + /** \brief Result of the header acquire */ + enum RunHeadersResult { + /** \brief Header ok */ + RUN_HEADERS_OK, + /** \brief IO error while retrieving */ + RUN_HEADERS_IO_ERROR, + /** \brief Parse error after retrieving */ + RUN_HEADERS_PARSE_ERROR, + }; + /** \brief Get the headers before the data */ + RunHeadersResult RunHeaders(); + /** \brief Transfer the data from the socket */ bool RunData(); bool Open(); @@ -117,30 +145,55 @@ class HttpMethod : public pkgAcqMethod bool Go(bool ToFile,ServerState *Srv); bool Flush(ServerState *Srv); bool ServerDie(ServerState *Srv); - int DealWithHeaders(FetchResult &Res,ServerState *Srv); + + /** \brief Result of the header parsing */ + enum DealWithHeadersResult { + /** \brief The file is open and ready */ + FILE_IS_OPEN, + /** \brief We got a IMS hit, the file has not changed */ + IMS_HIT, + /** \brief The server reported a unrecoverable error */ + ERROR_UNRECOVERABLE, + /** \brief The server reported a error with a error content page */ + ERROR_WITH_CONTENT_PAGE, + /** \brief A error on the client side */ + ERROR_NOT_FROM_SERVER, + /** \brief A redirect or retry request */ + TRY_AGAIN_OR_REDIRECT + }; + /** \brief Handle the retrieved header data */ + DealWithHeadersResult DealWithHeaders(FetchResult &Res,ServerState *Srv); + + /** \brief Try to AutoDetect the proxy */ + bool AutoDetectProxy(); + + virtual bool Configuration(string Message); // In the event of a fatal signal this file will be closed and timestamped. static string FailFile; static int FailFd; static time_t FailTime; static void SigTerm(int); + + protected: + virtual bool Fetch(FetchItem *); + string NextURI; + string AutoDetectProxyCmd; + public: - friend ServerState; + friend class ServerState; - int Depth; FileFd *File; + ServerState *Server; int Loop(); - HttpMethod() : pkgAcqMethod("1.2",SingleInstance | Pipeline | SendConfig) + HttpMethod() : pkgAcqMethod("1.2",Pipeline | SendConfig) { - Depth = 0; File = 0; - Depth = 0; + Server = 0; }; }; -URI Proxy; - #endif