diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-25 17:44:03 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-04-25 17:44:03 +0000 |
| commit | 2a81fd466d304d71dad16db93224db78525e08ce (patch) | |
| tree | e58ba97937620342ae98b37901d74b6bad1574d4 /src/HttpRequestCommand.cc | |
| parent | 8ea2f386cbe9de4aacf93316796b2957ae06f547 (diff) | |
2008-04-26 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added build-in "Accept-Feature" support. For now only "metalink" is
used in this header field.
This "metalink" value is removed from the list when connecting URLs
fed by metalink file to avoid loop in "transparent" metlaink.
* src/HttpRequest.cc
* src/HttpRequest.h: Renamed _userHeaders as _headers. Accept-Feature
header is also held in this variable. Also renamed setUserHeaders as
addHeader and it was rewritten to add header not just to clear the old
value.
* src/HttpRequestCommand.cc
* src/Metalink2RequestGroup.cc: Added the code to remove "metalink"
from "Accept-Feature" list.
* src/RequestGroup.cc: Added "metalink" to "Accept-Feature" by default.
* src/RequestGroup.h
* src/TaggedItem.cc: Moved Concat class to a2functional.h.
* src/a2functional.h: Included <string> because Concat class depends on
it.
* test/HttpRequestTest.cc
Diffstat (limited to 'src/HttpRequestCommand.cc')
| -rw-r--r-- | src/HttpRequestCommand.cc | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/HttpRequestCommand.cc b/src/HttpRequestCommand.cc index cc76a9be..e552007c 100644 --- a/src/HttpRequestCommand.cc +++ b/src/HttpRequestCommand.cc @@ -44,6 +44,9 @@ #include "Option.h" #include "Socket.h" #include "prefs.h" +#include "a2functional.h" +#include "Util.h" +#include <numeric> namespace aria2 { @@ -67,14 +70,24 @@ static SharedHandle<HttpRequest> createHttpRequest(const SharedHandle<Request>& req, const SharedHandle<Segment>& segment, uint64_t totalLength, - const Option* option) + const Option* option, + const std::deque<std::string>& acceptFeatures) { HttpRequestHandle httpRequest(new HttpRequest()); httpRequest->setUserAgent(option->get(PREF_USER_AGENT)); httpRequest->setRequest(req); httpRequest->setSegment(segment); httpRequest->setEntityLength(totalLength); - httpRequest->setUserHeaders(option->get(PREF_HEADER)); + httpRequest->addHeader(option->get(PREF_HEADER)); + if(acceptFeatures.size()) { + std::string acceptFeaturesHeader = "Accept-Features: "+ + Util::trim + (std::accumulate(acceptFeatures.begin()+1, acceptFeatures.end(), + *acceptFeatures.begin(), + Concat(",")), + ","); + httpRequest->addHeader(acceptFeaturesHeader); + } httpRequest->configure(option); return httpRequest; @@ -89,7 +102,8 @@ bool HttpRequestCommand::executeInternal() { if(_segments.empty()) { HttpRequestHandle httpRequest (createHttpRequest(req, SharedHandle<Segment>(), - _requestGroup->getTotalLength(), e->option)); + _requestGroup->getTotalLength(), e->option, + _requestGroup->getAcceptFeatures())); _httpConnection->sendRequest(httpRequest); } else { for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) { @@ -97,7 +111,8 @@ bool HttpRequestCommand::executeInternal() { if(!_httpConnection->isIssued(segment)) { HttpRequestHandle httpRequest (createHttpRequest(req, segment, - _requestGroup->getTotalLength(), e->option)); + _requestGroup->getTotalLength(), e->option, + _requestGroup->getAcceptFeatures())); _httpConnection->sendRequest(httpRequest); } } |
