summaryrefslogtreecommitdiff
path: root/src/HttpRequestCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-04-25 17:44:03 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-04-25 17:44:03 +0000
commit2a81fd466d304d71dad16db93224db78525e08ce (patch)
treee58ba97937620342ae98b37901d74b6bad1574d4 /src/HttpRequestCommand.cc
parent8ea2f386cbe9de4aacf93316796b2957ae06f547 (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.cc23
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);
}
}