| 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 |