// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: http.cc,v 1.55 2003/02/10 07:34:41 doogie Exp $
+// $Id: http.cc,v 1.59 2004/05/08 19:42:35 mdz Exp $
/* ######################################################################
HTTP Aquire Method - This is the HTTP aquire method for APT.
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
-#include <apti18n.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/acquire-method.h>
#include <apt-pkg/error.h>
#include <errno.h>
#include <string.h>
#include <iostream>
+#include <apti18n.h>
// Internet stuff
#include <netdb.h>
{
if (Buf[I%Size] != '\n')
continue;
- for (I++; I < InP && Buf[I%Size] == '\r'; I++);
+ ++I;
+ if (I < InP && Buf[I%Size] == '\r')
+ ++I;
if (Single == false)
{
if (Buf[I%Size] != '\n')
continue;
- for (I++; I < InP && Buf[I%Size] == '\r'; I++);
+ ++I;
+ if (I < InP && Buf[I%Size] == '\r')
+ ++I;
}
if (I > InP)
{
State = Header;
- Owner->Status(_("Waiting for file"));
+ Owner->Status(_("Waiting for headers"));
Major = 0;
Minor = 0;
{
if (sscanf(Line.c_str(),"HTTP/%u.%u %u %[^\n]",&Major,&Minor,
&Result,Code) != 4)
- return _error->Error(_("The http server sent an invalid reply header"));
+ return _error->Error(_("The HTTP server sent an invalid reply header"));
}
else
{
Major = 0;
Minor = 9;
if (sscanf(Line.c_str(),"HTTP %u %[^\n]",&Result,Code) != 2)
- return _error->Error(_("The http server sent an invalid reply header"));
+ return _error->Error(_("The HTTP server sent an invalid reply header"));
}
/* Check the HTTP response header to get the default persistance
return true;
if (sscanf(Val.c_str(),"%lu",&Size) != 1)
- return _error->Error(_("The http server sent an invalid Content-Length header"));
+ return _error->Error(_("The HTTP server sent an invalid Content-Length header"));
return true;
}
HaveContent = true;
if (sscanf(Val.c_str(),"bytes %lu-%*u/%lu",&StartPos,&Size) != 2)
- return _error->Error(_("The http server sent an invalid Content-Range header"));
+ return _error->Error(_("The HTTP server sent an invalid Content-Range header"));
if ((unsigned)StartPos > Size)
- return _error->Error(_("This http server has broken range support"));
+ return _error->Error(_("This HTTP server has broken range support"));
return true;
}
and a no-store directive for archives. */
sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\n",
Itm->Uri.c_str(),ProperHost.c_str());
- if (_config->FindB("Acquire::http::No-Cache",false) == true)
- strcat(Buf,"Cache-Control: no-cache\r\nPragma: no-cache\r\n");
- else
+ // only generate a cache control header if we actually want to
+ // use a cache
+ if (_config->FindB("Acquire::http::No-Cache",false) == false)
{
if (Itm->IndexFile == true)
sprintf(Buf+strlen(Buf),"Cache-Control: max-age=%u\r\n",
- _config->FindI("Acquire::http::Max-Age",60*60*24));
+ _config->FindI("Acquire::http::Max-Age",0));
else
{
if (_config->FindB("Acquire::http::No-Store",false) == true)
}
}
}
+ // generate a no-cache header if needed
+ if (_config->FindB("Acquire::http::No-Cache",false) == true)
+ strcat(Buf,"Cache-Control: no-cache\r\nPragma: no-cache\r\n");
+
string Req = Buf;
{
Srv->Close();
if (LErrno == 0)
- return _error->Error(_("Error reading from server Remote end closed connection"));
+ return _error->Error(_("Error reading from server. Remote end closed connection"));
errno = LErrno;
return _error->Errno("read",_("Error reading from server"));
}
// The header data is bad
case 2:
{
- _error->Error(_("Bad header Data"));
+ _error->Error(_("Bad header data"));
Fail(true);
RotateDNS();
continue;
int main()
{
+ setlocale(LC_ALL, "");
+
HttpMethod Mth;
return Mth.Loop();