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

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

Issue 1961573002: Avoids the "re-encode HPACK as SPDY3" step. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update new test Created 4 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 unified diff | Download patch
« no previous file with comments | « net/spdy/buffered_spdy_framer.h ('k') | net/spdy/buffered_spdy_framer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/buffered_spdy_framer.h" 5 #include "net/spdy/buffered_spdy_framer.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/string_util.h"
8 9
9 namespace net { 10 namespace net {
10 11
11 namespace { 12 namespace {
12 13
13 // GOAWAY frame debug data is only buffered up to this many bytes. 14 // GOAWAY frame debug data is only buffered up to this many bytes.
14 size_t kGoAwayDebugDataMaxSize = 1024; 15 size_t kGoAwayDebugDataMaxSize = 1024;
15 16
16 // Initial and maximum sizes for header block buffer. 17 // Initial and maximum sizes for header block buffer.
17 size_t kHeaderBufferInitialSize = 8 * 1024; 18 size_t kHeaderBufferInitialSize = 8 * 1024;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 void BufferedSpdyFramer::OnStreamEnd(SpdyStreamId stream_id) { 204 void BufferedSpdyFramer::OnStreamEnd(SpdyStreamId stream_id) {
204 visitor_->OnStreamEnd(stream_id); 205 visitor_->OnStreamEnd(stream_id);
205 } 206 }
206 207
207 void BufferedSpdyFramer::OnStreamPadding(SpdyStreamId stream_id, size_t len) { 208 void BufferedSpdyFramer::OnStreamPadding(SpdyStreamId stream_id, size_t len) {
208 visitor_->OnStreamPadding(stream_id, len); 209 visitor_->OnStreamPadding(stream_id, len);
209 } 210 }
210 211
211 SpdyHeadersHandlerInterface* BufferedSpdyFramer::OnHeaderFrameStart( 212 SpdyHeadersHandlerInterface* BufferedSpdyFramer::OnHeaderFrameStart(
212 SpdyStreamId stream_id) { 213 SpdyStreamId stream_id) {
213 return visitor_->OnHeaderFrameStart(stream_id); 214 coalescer_.reset(new HeaderCoalescer());
215 return coalescer_.get();
214 } 216 }
215 217
216 void BufferedSpdyFramer::OnHeaderFrameEnd(SpdyStreamId stream_id, 218 void BufferedSpdyFramer::OnHeaderFrameEnd(SpdyStreamId stream_id,
217 bool end_headers) { 219 bool end_headers) {
218 visitor_->OnHeaderFrameEnd(stream_id, end_headers); 220 if (coalescer_->error_seen()) {
221 visitor_->OnStreamError(stream_id,
222 "Could not parse Spdy Control Frame Header.");
223 return;
224 }
225 DCHECK(control_frame_fields_.get());
226 switch (control_frame_fields_->type) {
227 case SYN_STREAM:
228 visitor_->OnSynStream(
229 control_frame_fields_->stream_id,
230 control_frame_fields_->associated_stream_id,
231 control_frame_fields_->priority, control_frame_fields_->fin,
232 control_frame_fields_->unidirectional, coalescer_->headers());
233 break;
234 case SYN_REPLY:
235 visitor_->OnSynReply(control_frame_fields_->stream_id,
236 control_frame_fields_->fin, coalescer_->headers());
237 break;
238 case HEADERS:
239 visitor_->OnHeaders(control_frame_fields_->stream_id,
240 control_frame_fields_->has_priority,
241 control_frame_fields_->priority,
242 control_frame_fields_->parent_stream_id,
243 control_frame_fields_->exclusive,
244 control_frame_fields_->fin, coalescer_->headers());
245 break;
246 case PUSH_PROMISE:
247 DCHECK_LT(SPDY3, protocol_version());
248 visitor_->OnPushPromise(control_frame_fields_->stream_id,
249 control_frame_fields_->promised_stream_id,
250 coalescer_->headers());
251 break;
252 default:
253 DCHECK(false) << "Unexpect control frame type: "
254 << control_frame_fields_->type;
255 break;
256 }
257 control_frame_fields_.reset(NULL);
219 } 258 }
220 259
221 void BufferedSpdyFramer::OnSettings(bool clear_persisted) { 260 void BufferedSpdyFramer::OnSettings(bool clear_persisted) {
222 visitor_->OnSettings(clear_persisted); 261 visitor_->OnSettings(clear_persisted);
223 } 262 }
224 263
225 void BufferedSpdyFramer::OnSetting(SpdySettingsIds id, 264 void BufferedSpdyFramer::OnSetting(SpdySettingsIds id,
226 uint8_t flags, 265 uint8_t flags,
227 uint32_t value) { 266 uint32_t value) {
228 visitor_->OnSetting(id, flags, value); 267 visitor_->OnSetting(id, flags, value);
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 } 488 }
450 489
451 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { 490 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) {
452 header_buffer_.clear(); 491 header_buffer_.clear();
453 header_buffer_valid_ = true; 492 header_buffer_valid_ = true;
454 header_stream_id_ = stream_id; 493 header_stream_id_ = stream_id;
455 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); 494 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream);
456 } 495 }
457 496
458 } // namespace net 497 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/buffered_spdy_framer.h ('k') | net/spdy/buffered_spdy_framer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698