diff options
author | Michael Vogt <mvo@debian.org> | 2011-05-16 15:57:52 +0200 |
---|---|---|
committer | Michael Vogt <mvo@debian.org> | 2011-05-16 15:57:52 +0200 |
commit | d44b706c2d5964daaaf55e6eb97845827958f6e3 (patch) | |
tree | b77f6e72c34c2444ec28e2d47430211d802efb4b /methods/http.cc | |
parent | 9c192d2811c12dcaf607024eb7f0677b011194e6 (diff) | |
parent | d77b985a309c379d4978525172a72b728fecd15e (diff) |
merged from lp:~donkult/apt/sid
Diffstat (limited to 'methods/http.cc')
-rw-r--r-- | methods/http.cc | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/methods/http.cc b/methods/http.cc index dfc1619e3..13f9cbe06 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -778,9 +778,10 @@ bool HttpMethod::Go(bool ToFile,ServerState *Srv) if (Srv->In.WriteSpace() == true && ToFile == true && FileFD != -1) FD_SET(FileFD,&wfds); - + // Add stdin - FD_SET(STDIN_FILENO,&rfds); + if (_config->FindB("Acquire::http::DependOnSTDIN", true) == true) + FD_SET(STDIN_FILENO,&rfds); // Figure out the max fd int MaxFd = FileFD; @@ -947,9 +948,25 @@ HttpMethod::DealWithHeaders(FetchResult &Res,ServerState *Srv) && Srv->Result != 304 // Not Modified && Srv->Result != 306)) // (Not part of HTTP/1.1, reserved) { - if (!Srv->Location.empty()) + if (Srv->Location.empty() == true); + else if (Srv->Location[0] == '/' && Queue->Uri.empty() == false) { - NextURI = Srv->Location; + URI Uri = Queue->Uri; + if (Uri.Host.empty() == false) + { + if (Uri.Port != 0) + strprintf(NextURI, "http://%s:%u", Uri.Host.c_str(), Uri.Port); + else + NextURI = "http://" + Uri.Host; + } + else + NextURI.clear(); + NextURI.append(DeQuoteString(Srv->Location)); + return TRY_AGAIN_OR_REDIRECT; + } + else + { + NextURI = DeQuoteString(Srv->Location); return TRY_AGAIN_OR_REDIRECT; } /* else pass through for error message */ @@ -1113,7 +1130,13 @@ int HttpMethod::Loop() do a WaitFd above.. Otherwise the FD is closed. */ int Result = Run(true); if (Result != -1 && (Result != 0 || Queue == 0)) - return 100; + { + if(FailReason.empty() == false || + _config->FindB("Acquire::http::DependOnSTDIN", true) == true) + return 100; + else + return 0; + } if (Queue == 0) continue; |