summaryrefslogtreecommitdiff
path: root/methods
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-08-18 14:34:24 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-08-18 14:34:24 +0400
commit46743b1551b70fef63174c770e7b05ada10f96f6 (patch)
tree19ab5d1e3b27839406934425f6389d8262861f19 /methods
parentffa090bbd5d0b889d427d85e4b687ca7e1de2a47 (diff)
parent5803c1dcf0a6e590cfd98ca8ab11d5573652cb14 (diff)
downloadapt-46743b1551b70fef63174c770e7b05ada10f96f6.tar.gz
Merge branch 'debian/sid' of git://anonscm.debian.org/apt/apt
Conflicts: .gitignore Makefile apt-inst/makefile apt-pkg/install-progress.h apt-pkg/makefile buildlib/defaults.mak buildlib/environment.mak.in buildlib/library.mak buildlib/po4a_manpage.mak buildlib/program.mak buildlib/python.mak buildlib/staticlibrary.mak cmdline/makefile configure.ac debian/apt.install.in debian/changelog debian/control debian/libapt-pkg4.12.symbols debian/rules doc/makefile ftparchive/makefile po/ar.po po/bs.po po/cy.po po/dz.po po/el.po po/fi.po po/km.po po/ku.po po/lt.po po/ne.po po/nn.po po/pt_BR.po po/ro.po po/th.po po/tl.po po/uk.po test/libapt/makefile
Diffstat (limited to 'methods')
-rw-r--r--methods/http.cc90
-rw-r--r--methods/https.cc10
2 files changed, 37 insertions, 63 deletions
diff --git a/methods/http.cc b/methods/http.cc
index ed6e3517..7c7949ea 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -45,6 +45,7 @@
#include <stdio.h>
#include <errno.h>
#include <iostream>
+#include <sstream>
#include "config.h"
#include "connect.h"
@@ -667,22 +668,13 @@ void HttpMethod::SendReq(FetchItem *Itm)
URI Uri = Itm->Uri;
// The HTTP server expects a hostname with a trailing :port
- char Buf[1000];
+ std::stringstream Req;
string ProperHost;
if (Uri.Host.find(':') != string::npos)
ProperHost = '[' + Uri.Host + ']';
else
ProperHost = Uri.Host;
- if (Uri.Port != 0)
- {
- sprintf(Buf,":%u",Uri.Port);
- ProperHost += Buf;
- }
-
- // Just in case.
- if (Itm->Uri.length() >= sizeof(Buf))
- abort();
/* RFC 2616 ยง5.1.2 requires absolute URIs for requests to proxies,
but while its a must for all servers to accept absolute URIs,
@@ -701,27 +693,20 @@ void HttpMethod::SendReq(FetchItem *Itm)
in 1.1, can cause problems with proxies, and we are an HTTP/1.1
client anyway.
C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
- sprintf(Buf,"GET %s HTTP/1.1\r\nHost: %s\r\n",
- requesturi.c_str(),ProperHost.c_str());
+ Req << "GET " << requesturi << " HTTP/1.1\r\n";
+ if (Uri.Port != 0)
+ Req << "Host: " << ProperHost << ":" << Uri.Port << "\r\n";
+ else
+ Req << "Host: " << ProperHost << "\r\n";
// generate a cache control header (if needed)
- if (_config->FindB("Acquire::http::No-Cache",false) == true)
- {
- strcat(Buf,"Cache-Control: no-cache\r\nPragma: no-cache\r\n");
- }
- else
- {
- if (Itm->IndexFile == true)
- {
- sprintf(Buf+strlen(Buf),"Cache-Control: max-age=%u\r\n",
- _config->FindI("Acquire::http::Max-Age",0));
- }
- else
- {
- if (_config->FindB("Acquire::http::No-Store",false) == true)
- strcat(Buf,"Cache-Control: no-store\r\n");
- }
- }
+ if (_config->FindB("Acquire::http::No-Cache",false) == true)
+ Req << "Cache-Control: no-cache\r\n"
+ << "Pragma: no-cache\r\n";
+ else if (Itm->IndexFile == true)
+ Req << "Cache-Control: max-age=" << _config->FindI("Acquire::http::Max-Age",0) << "\r\n";
+ else if (_config->FindB("Acquire::http::No-Store",false) == true)
+ Req << "Cache-Control: no-store\r\n";
// If we ask for uncompressed files servers might respond with content-
// negotiation which lets us end up with compressed files we do not support,
@@ -733,46 +718,35 @@ void HttpMethod::SendReq(FetchItem *Itm)
size_t const filepos = Itm->Uri.find_last_of('/');
string const file = Itm->Uri.substr(filepos + 1);
if (flExtension(file) == file)
- strcat(Buf,"Accept: text/*\r\n");
+ Req << "Accept: text/*\r\n";
}
- string Req = Buf;
-
- // Check for a partial file
+ // Check for a partial file and send if-queries accordingly
struct stat SBuf;
if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
- {
- // In this case we send an if-range query with a range header
- sprintf(Buf,"Range: bytes=%lli-\r\nIf-Range: %s\r\n",(long long)SBuf.st_size,
- TimeRFC1123(SBuf.st_mtime).c_str());
- Req += Buf;
- }
- else
- {
- if (Itm->LastModified != 0)
- {
- sprintf(Buf,"If-Modified-Since: %s\r\n",TimeRFC1123(Itm->LastModified).c_str());
- Req += Buf;
- }
- }
+ Req << "Range: bytes=" << SBuf.st_size << "-\r\n"
+ << "If-Range: " << TimeRFC1123(SBuf.st_mtime) << "\r\n";
+ else if (Itm->LastModified != 0)
+ Req << "If-Modified-Since: " << TimeRFC1123(Itm->LastModified).c_str() << "\r\n";
if (Server->Proxy.User.empty() == false || Server->Proxy.Password.empty() == false)
- Req += string("Proxy-Authorization: Basic ") +
- Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) + "\r\n";
+ Req << "Proxy-Authorization: Basic "
+ << Base64Encode(Server->Proxy.User + ":" + Server->Proxy.Password) << "\r\n";
maybe_add_auth (Uri, _config->FindFile("Dir::Etc::netrc"));
if (Uri.User.empty() == false || Uri.Password.empty() == false)
- {
- Req += string("Authorization: Basic ") +
- Base64Encode(Uri.User + ":" + Uri.Password) + "\r\n";
- }
- Req += "User-Agent: " + _config->Find("Acquire::http::User-Agent",
- "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") + "\r\n\r\n";
-
+ Req << "Authorization: Basic "
+ << Base64Encode(Uri.User + ":" + Uri.Password) << "\r\n";
+
+ Req << "User-Agent: " << _config->Find("Acquire::http::User-Agent",
+ "Debian APT-HTTP/1.3 (" PACKAGE_VERSION ")") << "\r\n";
+
+ Req << "\r\n";
+
if (Debug == true)
- cerr << Req << endl;
+ cerr << Req.str() << endl;
- Server->WriteResponse(Req);
+ Server->WriteResponse(Req.str());
}
/*}}}*/
// HttpMethod::Configuration - Handle a configuration message /*{{{*/
diff --git a/methods/https.cc b/methods/https.cc
index c4aff8f3..e0348ab5 100644
--- a/methods/https.cc
+++ b/methods/https.cc
@@ -325,11 +325,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
// if we have the file send an if-range query with a range header
if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0)
{
- char Buf[1000];
- sprintf(Buf, "Range: bytes=%li-", (long) SBuf.st_size);
- headers = curl_slist_append(headers, Buf);
- sprintf(Buf, "If-Range: %s", TimeRFC1123(SBuf.st_mtime).c_str());
- headers = curl_slist_append(headers, Buf);
+ std::string Buf;
+ strprintf(Buf, "Range: bytes=%lli-", (long long) SBuf.st_size);
+ headers = curl_slist_append(headers, Buf.c_str());
+ strprintf(Buf, "If-Range: %s", TimeRFC1123(SBuf.st_mtime).c_str());
+ headers = curl_slist_append(headers, Buf.c_str());
}
else if(Itm->LastModified > 0)
{