summaryrefslogtreecommitdiff
path: root/src/HttpHeader.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-20 00:25:01 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-20 00:25:01 +0900
commit1d71626bea62f10e723609e32dce46fb86179749 (patch)
tree398a15cdbf92b63f67235f14e4ccfa85bf8160a9 /src/HttpHeader.cc
parent7a857e1913339c915aa103a00a7b3f4be19016e3 (diff)
Supported multi-line HTTP header field value.
See http://tools.ietf.org/html/rfc2616#section-4.2
Diffstat (limited to 'src/HttpHeader.cc')
-rw-r--r--src/HttpHeader.cc21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/HttpHeader.cc b/src/HttpHeader.cc
index 9e191ab1..a4158dff 100644
--- a/src/HttpHeader.cc
+++ b/src/HttpHeader.cc
@@ -193,14 +193,25 @@ void HttpHeader::setRequestPath(const std::string& requestPath)
void HttpHeader::fill(std::istream& in)
{
std::string line;
- while(std::getline(in, line)) {
+ std::getline(in, line);
+ while(in) {
line = util::strip(line);
if(line.empty()) {
- continue;
+ std::getline(in, line);
+ } else {
+ std::pair<std::string, std::string> hp;
+ util::divide(hp, line, ':');
+ while(std::getline(in, line)) {
+ if(!line.empty() && (line[0] == ' ' || line[0] == '\t')) {
+ line = util::strip(line);
+ hp.second += " ";
+ hp.second += line;
+ } else {
+ break;
+ }
+ }
+ put(hp.first, hp.second);
}
- std::pair<std::string, std::string> hp;
- util::divide(hp, line, ':');
- put(hp.first, hp.second);
}
}