From 2a81fd466d304d71dad16db93224db78525e08ce Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Fri, 25 Apr 2008 17:44:03 +0000 Subject: 2008-04-26 Tatsuhiro Tsujikawa 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 because Concat class depends on it. * test/HttpRequestTest.cc --- src/HttpRequestCommand.cc | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'src/HttpRequestCommand.cc') 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 namespace aria2 { @@ -67,14 +70,24 @@ static SharedHandle createHttpRequest(const SharedHandle& req, const SharedHandle& segment, uint64_t totalLength, - const Option* option) + const Option* option, + const std::deque& 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(), - _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); } } -- cgit