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

Side by Side Diff: net/spdy/spdy_http_utils.cc

Issue 9705046: Switch CreateSpdyHeadersFromHttpRequest to construct the correct headers based on the spdy protocol… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/spdy_http_utils.h" 5 #include "net/spdy/spdy_http_utils.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } 71 }
72 72
73 response->headers = new HttpResponseHeaders(raw_headers); 73 response->headers = new HttpResponseHeaders(raw_headers);
74 response->was_fetched_via_spdy = true; 74 response->was_fetched_via_spdy = true;
75 return true; 75 return true;
76 } 76 }
77 77
78 void CreateSpdyHeadersFromHttpRequest(const HttpRequestInfo& info, 78 void CreateSpdyHeadersFromHttpRequest(const HttpRequestInfo& info,
79 const HttpRequestHeaders& request_headers, 79 const HttpRequestHeaders& request_headers,
80 spdy::SpdyHeaderBlock* headers, 80 spdy::SpdyHeaderBlock* headers,
81 int protocol_version,
81 bool direct) { 82 bool direct) {
82 83
83 HttpRequestHeaders::Iterator it(request_headers); 84 HttpRequestHeaders::Iterator it(request_headers);
84 while (it.GetNext()) { 85 while (it.GetNext()) {
85 std::string name = StringToLowerASCII(it.name()); 86 std::string name = StringToLowerASCII(it.name());
86 if (name == "connection" || name == "proxy-connection" || 87 if (name == "connection" || name == "proxy-connection" ||
87 name == "transfer-encoding") { 88 name == "transfer-encoding") {
88 continue; 89 continue;
89 } 90 }
90 if (headers->find(name) == headers->end()) { 91 if (headers->find(name) == headers->end()) {
91 (*headers)[name] = it.value(); 92 (*headers)[name] = it.value();
92 } else { 93 } else {
93 std::string new_value = (*headers)[name]; 94 std::string new_value = (*headers)[name];
94 new_value.append(1, '\0'); // +=() doesn't append 0's 95 new_value.append(1, '\0'); // +=() doesn't append 0's
95 new_value += it.value(); 96 new_value += it.value();
96 (*headers)[name] = new_value; 97 (*headers)[name] = new_value;
97 } 98 }
98 } 99 }
99 static const char kHttpProtocolVersion[] = "HTTP/1.1"; 100 static const char kHttpProtocolVersion[] = "HTTP/1.1";
100 101
101 (*headers)["version"] = kHttpProtocolVersion; 102 if (protocol_version < 3) {
102 (*headers)["method"] = info.method; 103 (*headers)["version"] = kHttpProtocolVersion;
103 (*headers)["host"] = GetHostAndOptionalPort(info.url); 104 (*headers)["method"] = info.method;
104 (*headers)["scheme"] = info.url.scheme(); 105 (*headers)["host"] = GetHostAndOptionalPort(info.url);
105 if (direct) 106 (*headers)["scheme"] = info.url.scheme();
106 (*headers)["url"] = HttpUtil::PathForRequest(info.url); 107 if (direct)
107 else 108 (*headers)["url"] = HttpUtil::PathForRequest(info.url);
108 (*headers)["url"] = HttpUtil::SpecForRequest(info.url); 109 else
110 (*headers)["url"] = HttpUtil::SpecForRequest(info.url);
111 } else {
112 (*headers)[":version"] = kHttpProtocolVersion;
113 (*headers)[":method"] = info.method;
114 (*headers)[":host"] = GetHostAndOptionalPort(info.url);
115 (*headers)[":scheme"] = info.url.scheme();
116 (*headers)[":path"] = HttpUtil::PathForRequest(info.url);
117 headers->erase("host"); // this is kinda insane, spdy 3 spec
ramant (doing other things) 2012/03/15 05:41:34 nit: this -> This. Period at the end of sentence (
Ryan Hamilton 2012/03/15 16:38:06 Done.
118 }
109 119
110 } 120 }
111 121
112 // TODO(gavinp): re-adjust this once SPDY v3 has three priority bits, 122 // TODO(gavinp): re-adjust this once SPDY v3 has three priority bits,
113 // eliminating the need for this folding. 123 // eliminating the need for this folding.
114 int ConvertRequestPriorityToSpdyPriority(const RequestPriority priority) { 124 int ConvertRequestPriorityToSpdyPriority(const RequestPriority priority) {
115 DCHECK(HIGHEST <= priority && priority < NUM_PRIORITIES); 125 DCHECK(HIGHEST <= priority && priority < NUM_PRIORITIES);
116 switch (priority) { 126 switch (priority) {
117 case LOWEST: 127 case LOWEST:
118 return SPDY_PRIORITY_LOWEST - 1; 128 return SPDY_PRIORITY_LOWEST - 1;
119 case IDLE: 129 case IDLE:
120 return SPDY_PRIORITY_LOWEST; 130 return SPDY_PRIORITY_LOWEST;
121 default: 131 default:
122 return priority; 132 return priority;
123 } 133 }
124 } 134 }
125 135
126 } // namespace net 136 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698