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 | 8 |
9 namespace net { | 9 namespace net { |
10 | 10 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 case SYN_REPLY: | 132 case SYN_REPLY: |
133 visitor_->OnSynReply(control_frame_fields_->stream_id, | 133 visitor_->OnSynReply(control_frame_fields_->stream_id, |
134 control_frame_fields_->fin, | 134 control_frame_fields_->fin, |
135 headers); | 135 headers); |
136 break; | 136 break; |
137 case HEADERS: | 137 case HEADERS: |
138 visitor_->OnHeaders(control_frame_fields_->stream_id, | 138 visitor_->OnHeaders(control_frame_fields_->stream_id, |
139 control_frame_fields_->fin, | 139 control_frame_fields_->fin, |
140 headers); | 140 headers); |
141 break; | 141 break; |
| 142 case PUSH_PROMISE: |
| 143 DCHECK_LT(SPDY3, protocol_version()); |
| 144 visitor_->OnPushPromise(control_frame_fields_->stream_id, |
| 145 control_frame_fields_->promised_stream_id, |
| 146 headers); |
| 147 break; |
142 default: | 148 default: |
143 DCHECK(false) << "Unexpect control frame type: " | 149 DCHECK(false) << "Unexpect control frame type: " |
144 << control_frame_fields_->type; | 150 << control_frame_fields_->type; |
145 break; | 151 break; |
146 } | 152 } |
147 control_frame_fields_.reset(NULL); | 153 control_frame_fields_.reset(NULL); |
148 return true; | 154 return true; |
149 } | 155 } |
150 | 156 |
151 const size_t available = kHeaderBufferSize - header_buffer_used_; | 157 const size_t available = kHeaderBufferSize - header_buffer_used_; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 } | 213 } |
208 | 214 |
209 void BufferedSpdyFramer::OnWindowUpdate(SpdyStreamId stream_id, | 215 void BufferedSpdyFramer::OnWindowUpdate(SpdyStreamId stream_id, |
210 uint32 delta_window_size) { | 216 uint32 delta_window_size) { |
211 visitor_->OnWindowUpdate(stream_id, delta_window_size); | 217 visitor_->OnWindowUpdate(stream_id, delta_window_size); |
212 } | 218 } |
213 | 219 |
214 void BufferedSpdyFramer::OnPushPromise(SpdyStreamId stream_id, | 220 void BufferedSpdyFramer::OnPushPromise(SpdyStreamId stream_id, |
215 SpdyStreamId promised_stream_id, | 221 SpdyStreamId promised_stream_id, |
216 bool end) { | 222 bool end) { |
217 // TODO(jgraettinger): Deliver headers, similar to OnHeaders. | 223 DCHECK_LT(SPDY3, protocol_version()); |
218 visitor_->OnPushPromise(stream_id, promised_stream_id); | 224 frames_received_++; |
| 225 DCHECK(!control_frame_fields_.get()); |
| 226 control_frame_fields_.reset(new ControlFrameFields()); |
| 227 control_frame_fields_->type = PUSH_PROMISE; |
| 228 control_frame_fields_->stream_id = stream_id; |
| 229 control_frame_fields_->promised_stream_id = promised_stream_id; |
| 230 |
| 231 InitHeaderStreaming(stream_id); |
219 } | 232 } |
220 | 233 |
221 void BufferedSpdyFramer::OnContinuation(SpdyStreamId stream_id, bool end) { | 234 void BufferedSpdyFramer::OnContinuation(SpdyStreamId stream_id, bool end) { |
222 } | 235 } |
223 | 236 |
224 SpdyMajorVersion BufferedSpdyFramer::protocol_version() { | 237 SpdyMajorVersion BufferedSpdyFramer::protocol_version() { |
225 return spdy_framer_.protocol_version(); | 238 return spdy_framer_.protocol_version(); |
226 } | 239 } |
227 | 240 |
228 size_t BufferedSpdyFramer::ProcessInput(const char* data, size_t len) { | 241 size_t BufferedSpdyFramer::ProcessInput(const char* data, size_t len) { |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 SpdyFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, | 359 SpdyFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, |
347 const char* data, | 360 const char* data, |
348 uint32 len, | 361 uint32 len, |
349 SpdyDataFlags flags) { | 362 SpdyDataFlags flags) { |
350 SpdyDataIR data_ir(stream_id, | 363 SpdyDataIR data_ir(stream_id, |
351 base::StringPiece(data, len)); | 364 base::StringPiece(data, len)); |
352 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); | 365 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); |
353 return spdy_framer_.SerializeData(data_ir); | 366 return spdy_framer_.SerializeData(data_ir); |
354 } | 367 } |
355 | 368 |
| 369 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR). |
| 370 SpdyFrame* BufferedSpdyFramer::CreatePushPromise( |
| 371 SpdyStreamId stream_id, |
| 372 SpdyStreamId promised_stream_id, |
| 373 const SpdyHeaderBlock* headers) { |
| 374 SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id); |
| 375 push_promise_ir.set_name_value_block(*headers); |
| 376 return spdy_framer_.SerializePushPromise(push_promise_ir); |
| 377 } |
| 378 |
356 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { | 379 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { |
357 return spdy_framer_.GetHighestPriority(); | 380 return spdy_framer_.GetHighestPriority(); |
358 } | 381 } |
359 | 382 |
360 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { | 383 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { |
361 memset(header_buffer_, 0, kHeaderBufferSize); | 384 memset(header_buffer_, 0, kHeaderBufferSize); |
362 header_buffer_used_ = 0; | 385 header_buffer_used_ = 0; |
363 header_buffer_valid_ = true; | 386 header_buffer_valid_ = true; |
364 header_stream_id_ = stream_id; | 387 header_stream_id_ = stream_id; |
365 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 388 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
366 } | 389 } |
367 | 390 |
368 } // namespace net | 391 } // namespace net |
OLD | NEW |