OLD | NEW |
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" | |
9 | 8 |
10 namespace net { | 9 namespace net { |
11 | 10 |
12 namespace { | 11 namespace { |
13 | 12 |
14 // GOAWAY frame debug data is only buffered up to this many bytes. | 13 // GOAWAY frame debug data is only buffered up to this many bytes. |
15 size_t kGoAwayDebugDataMaxSize = 1024; | 14 size_t kGoAwayDebugDataMaxSize = 1024; |
16 | 15 |
17 // Initial and maximum sizes for header block buffer. | 16 // Initial and maximum sizes for header block buffer. |
18 size_t kHeaderBufferInitialSize = 8 * 1024; | 17 size_t kHeaderBufferInitialSize = 8 * 1024; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 void BufferedSpdyFramer::OnStreamEnd(SpdyStreamId stream_id) { | 203 void BufferedSpdyFramer::OnStreamEnd(SpdyStreamId stream_id) { |
205 visitor_->OnStreamEnd(stream_id); | 204 visitor_->OnStreamEnd(stream_id); |
206 } | 205 } |
207 | 206 |
208 void BufferedSpdyFramer::OnStreamPadding(SpdyStreamId stream_id, size_t len) { | 207 void BufferedSpdyFramer::OnStreamPadding(SpdyStreamId stream_id, size_t len) { |
209 visitor_->OnStreamPadding(stream_id, len); | 208 visitor_->OnStreamPadding(stream_id, len); |
210 } | 209 } |
211 | 210 |
212 SpdyHeadersHandlerInterface* BufferedSpdyFramer::OnHeaderFrameStart( | 211 SpdyHeadersHandlerInterface* BufferedSpdyFramer::OnHeaderFrameStart( |
213 SpdyStreamId stream_id) { | 212 SpdyStreamId stream_id) { |
214 coalescer_.reset(new HeaderCoalescer()); | 213 return visitor_->OnHeaderFrameStart(stream_id); |
215 return coalescer_.get(); | |
216 } | 214 } |
217 | 215 |
218 void BufferedSpdyFramer::OnHeaderFrameEnd(SpdyStreamId stream_id, | 216 void BufferedSpdyFramer::OnHeaderFrameEnd(SpdyStreamId stream_id, |
219 bool end_headers) { | 217 bool end_headers) { |
220 if (coalescer_->error_seen()) { | 218 visitor_->OnHeaderFrameEnd(stream_id, end_headers); |
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); | |
258 } | 219 } |
259 | 220 |
260 void BufferedSpdyFramer::OnSettings(bool clear_persisted) { | 221 void BufferedSpdyFramer::OnSettings(bool clear_persisted) { |
261 visitor_->OnSettings(clear_persisted); | 222 visitor_->OnSettings(clear_persisted); |
262 } | 223 } |
263 | 224 |
264 void BufferedSpdyFramer::OnSetting(SpdySettingsIds id, | 225 void BufferedSpdyFramer::OnSetting(SpdySettingsIds id, |
265 uint8_t flags, | 226 uint8_t flags, |
266 uint32_t value) { | 227 uint32_t value) { |
267 visitor_->OnSetting(id, flags, value); | 228 visitor_->OnSetting(id, flags, value); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 } | 449 } |
489 | 450 |
490 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { | 451 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { |
491 header_buffer_.clear(); | 452 header_buffer_.clear(); |
492 header_buffer_valid_ = true; | 453 header_buffer_valid_ = true; |
493 header_stream_id_ = stream_id; | 454 header_stream_id_ = stream_id; |
494 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 455 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
495 } | 456 } |
496 | 457 |
497 } // namespace net | 458 } // namespace net |
OLD | NEW |