Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1690)

Unified Diff: net/spdy/spdy_http_utils.cc

Issue 337093003: QuicServer: Use Chrome's header parsing rather than Balsa (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@quic_server_3
Patch Set: Lowercase SPDY header Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..edd42a4bb4dcea4521c1243e5eebddcb2491d182 100644
--- a/net/spdy/spdy_http_utils.cc
+++ b/net/spdy/spdy_http_utils.cc
@@ -14,12 +14,25 @@
#include "net/base/net_util.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_request_info.h"
-#include "net/http/http_response_headers.h"
#include "net/http/http_response_info.h"
#include "net/http/http_util.h"
namespace net {
+namespace {
+
+void AddSpdyHeader(SpdyHeaderBlock* headers,
wtc 2014/06/25 22:22:25 Nit: |headers| is an output parameter, so it shoul
dmziegler 2014/06/26 01:23:30 It's really an in-out parameter that is modified -
wtc 2014/06/26 21:23:16 Yes, I would list an in-out parameter after pure-i
+ const std::string& name,
+ const std::string& value) {
+ if (headers->find(name) == headers->end()) {
+ (*headers)[name] = value;
+ } else {
+ (*headers)[name] += '\0' + value;
wtc 2014/06/25 22:22:25 IMPORTANT: Is the use of '\0' correct? Are you usi
dmziegler 2014/06/26 01:23:29 Yes. I intentionally used '\0' and not "\0".
+ }
+}
+
+} // namespace
+
bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers,
SpdyMajorVersion protocol_version,
HttpResponseInfo* response) {
@@ -83,11 +96,35 @@ bool SpdyHeadersToHttpResponse(const SpdyHeaderBlock& headers,
return true;
}
+void CreateSpdyHeadersFromHttpResponse(
+ scoped_refptr<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";
+
+ std::string status_line = response_headers->GetStatusLine();
+ std::string::iterator after_version =
wtc 2014/06/25 22:22:25 Use a const_iterator.
dmziegler 2014/06/26 01:23:30 Done.
+ std::find(status_line.begin(), status_line.end(), ' ');
+ if (protocol_version < SPDY4) {
wtc 2014/06/25 23:17:32 The internal version tests version <= SPDY3. I thi
dmziegler 2014/06/26 01:23:30 Okay. I am simply inverting SpdyHeadersToHttpRespo
+ (*headers)[version_key] = std::string(status_line.begin(), after_version);
+ }
+ (*headers)[status_key] = std::string(after_version + 1, status_line.end());
+
+ void* iter = NULL;
+ std::string raw_name, value;
+ while (response_headers->EnumerateHeaderLines(&iter, &raw_name, &value)) {
+ std::string name = StringToLowerASCII(raw_name);
+ AddSpdyHeader(headers, name, value);
+ }
+}
+
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 +133,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(headers, name, it.value());
}
static const char kHttpProtocolVersion[] = "HTTP/1.1";

Powered by Google App Engine
This is Rietveld 408576698