Index: net/spdy/spdy_http_utils.cc |
diff --git a/net/spdy/spdy_http_utils.cc b/net/spdy/spdy_http_utils.cc |
index 448c82ffd3ca9a2fc06f947f706e6082c36f8956..55f0395c066ea45c5a28384808b0e8c2a860b249 100644 |
--- a/net/spdy/spdy_http_utils.cc |
+++ b/net/spdy/spdy_http_utils.cc |
@@ -20,6 +20,20 @@ |
namespace net { |
+namespace { |
+ |
+void AddSpdyHeader(const std::string& name, |
+ const std::string& value, |
+ SpdyHeaderBlock* headers) { |
+ if (headers->find(name) == headers->end()) { |
+ (*headers)[name] = value; |
+ } else { |
+ (*headers)[name] += '\0' + value; |
+ } |
+} |
+ |
+} // namespace |
+ |
bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers, |
SpdyMajorVersion protocol_version, |
HttpResponseInfo* response) { |
@@ -85,9 +99,9 @@ bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers, |
void CreateSpdyHeadersFromHttpRequest(const HttpRequestInfo& info, |
const HttpRequestHeaders& request_headers, |
- SpdyHeaderBlock* headers, |
SpdyMajorVersion protocol_version, |
- bool direct) { |
+ bool direct, |
+ SpdyHeaderBlock* headers) { |
HttpRequestHeaders::Iterator it(request_headers); |
while (it.GetNext()) { |
@@ -96,14 +110,7 @@ void CreateSpdyHeadersFromHttpRequest(const HttpRequestInfo& info, |
name == "transfer-encoding" || name == "host") { |
continue; |
} |
- if (headers->find(name) == headers->end()) { |
- (*headers)[name] = it.value(); |
- } else { |
- std::string new_value = (*headers)[name]; |
- new_value.append(1, '\0'); // +=() doesn't append 0's |
- new_value += it.value(); |
- (*headers)[name] = new_value; |
- } |
+ AddSpdyHeader(name, it.value(), headers); |
} |
static const char kHttpProtocolVersion[] = "HTTP/1.1"; |
@@ -129,6 +136,31 @@ void CreateSpdyHeadersFromHttpRequest(const HttpRequestInfo& info, |
} |
} |
+void CreateSpdyHeadersFromHttpResponse( |
+ const HttpResponseHeaders& response_headers, |
+ SpdyMajorVersion protocol_version, |
+ SpdyHeaderBlock* headers) { |
+ std::string status_key = (protocol_version >= SPDY3) ? ":status" : "status"; |
+ std::string version_key = |
+ (protocol_version >= SPDY3) ? ":version" : "version"; |
+ |
+ const std::string status_line = response_headers.GetStatusLine(); |
+ std::string::const_iterator after_version = |
+ std::find(status_line.begin(), status_line.end(), ' '); |
+ if (protocol_version < SPDY4) { |
+ (*headers)[version_key] = std::string(status_line.begin(), after_version); |
+ } |
+ (*headers)[status_key] = std::string(after_version + 1, status_line.end()); |
wtc
2014/07/08 17:54:42
Can you explain this change? Is it because cbegin
dmz
2014/07/08 18:07:35
Yes, that's exactly right. I just made |status_lin
|
+ |
+ void* iter = NULL; |
+ std::string raw_name, value; |
+ while (response_headers.EnumerateHeaderLines(&iter, &raw_name, &value)) { |
+ std::string name = StringToLowerASCII(raw_name); |
+ AddSpdyHeader(name, value, headers); |
+ } |
+} |
+ |
+ |
COMPILE_ASSERT(HIGHEST - LOWEST < 4 && |
HIGHEST - MINIMUM_PRIORITY < 5, |
request_priority_incompatible_with_spdy); |