summaryrefslogtreecommitdiff
path: root/src/HttpRequest.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-01-10 16:10:57 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2016-01-10 16:10:57 +0900
commitbf9d99f291c9514cb4fe6bac4484aa575b713f18 (patch)
tree86f2061f205ad54060c7767f4620dae0686522be /src/HttpRequest.cc
parentea4d99ea087d8f1bafa812017efa26cb90d99947 (diff)
Send Want-Digest as per RFC 3230
Diffstat (limited to 'src/HttpRequest.cc')
-rw-r--r--src/HttpRequest.cc22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/HttpRequest.cc b/src/HttpRequest.cc
index 5cd1248a..b8bc630e 100644
--- a/src/HttpRequest.cc
+++ b/src/HttpRequest.cc
@@ -52,6 +52,7 @@
#include "array_fun.h"
#include "Request.h"
#include "DownloadHandlerConstants.h"
+#include "MessageDigest.h"
namespace aria2 {
@@ -66,7 +67,8 @@ HttpRequest::HttpRequest()
contentEncodingEnabled_(true),
acceptMetalink_(false),
noCache_(true),
- acceptGzip_(false)
+ acceptGzip_(false),
+ noWantDigest_(false)
{
}
@@ -249,6 +251,24 @@ std::string HttpRequest::createRequest()
builtinHds.push_back(
std::make_pair("If-Modified-Since:", ifModSinceHeader_));
}
+ if (!noWantDigest_) {
+ // Send Want-Digest header field with only limited hash algorithms:
+ // SHA-512, SHA-256, and SHA-1.
+ std::string wantDigest;
+ if (MessageDigest::supports("sha-512")) {
+ wantDigest += "SHA-512;q=1, ";
+ }
+ if (MessageDigest::supports("sha-256")) {
+ wantDigest += "SHA-256;q=1, ";
+ }
+ if (MessageDigest::supports("sha-1")) {
+ wantDigest += "SHA;q=0.1, ";
+ }
+ if (!wantDigest.empty()) {
+ wantDigest.erase(wantDigest.size() - 2);
+ builtinHds.emplace_back("Want-Digest:", wantDigest);
+ }
+ }
for (std::vector<std::pair<std::string, std::string>>::const_iterator
i = builtinHds.begin(),
eoi = builtinHds.end();