| 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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 bool BufferedSpdyFramer::MessageFullyRead() { | 319 bool BufferedSpdyFramer::MessageFullyRead() { |
| 320 return state() == SpdyFramer::SPDY_FRAME_COMPLETE; | 320 return state() == SpdyFramer::SPDY_FRAME_COMPLETE; |
| 321 } | 321 } |
| 322 | 322 |
| 323 bool BufferedSpdyFramer::HasError() { | 323 bool BufferedSpdyFramer::HasError() { |
| 324 return spdy_framer_.HasError(); | 324 return spdy_framer_.HasError(); |
| 325 } | 325 } |
| 326 | 326 |
| 327 // TODO(jgraettinger): Eliminate uses of this method (prefer | 327 // TODO(jgraettinger): Eliminate uses of this method (prefer |
| 328 // SpdySynStreamIR). | 328 // SpdySynStreamIR). |
| 329 SpdyFrame* BufferedSpdyFramer::CreateSynStream( | 329 SpdySerializedFrame* BufferedSpdyFramer::CreateSynStream( |
| 330 SpdyStreamId stream_id, | 330 SpdyStreamId stream_id, |
| 331 SpdyStreamId associated_stream_id, | 331 SpdyStreamId associated_stream_id, |
| 332 SpdyPriority priority, | 332 SpdyPriority priority, |
| 333 SpdyControlFlags flags, | 333 SpdyControlFlags flags, |
| 334 const SpdyHeaderBlock* headers) { | 334 const SpdyHeaderBlock* headers) { |
| 335 SpdySynStreamIR syn_stream(stream_id); | 335 SpdySynStreamIR syn_stream(stream_id); |
| 336 syn_stream.set_associated_to_stream_id(associated_stream_id); | 336 syn_stream.set_associated_to_stream_id(associated_stream_id); |
| 337 syn_stream.set_priority(priority); | 337 syn_stream.set_priority(priority); |
| 338 syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); | 338 syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| 339 syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); | 339 syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
| 340 // TODO(hkhalil): Avoid copy here. | 340 // TODO(hkhalil): Avoid copy here. |
| 341 syn_stream.set_header_block(*headers); | 341 syn_stream.set_header_block(*headers); |
| 342 return spdy_framer_.SerializeSynStream(syn_stream); | 342 return new SpdySerializedFrame(spdy_framer_.SerializeSynStream(syn_stream)); |
| 343 } | 343 } |
| 344 | 344 |
| 345 // TODO(jgraettinger): Eliminate uses of this method (prefer | 345 // TODO(jgraettinger): Eliminate uses of this method (prefer |
| 346 // SpdySynReplyIR). | 346 // SpdySynReplyIR). |
| 347 SpdyFrame* BufferedSpdyFramer::CreateSynReply( | 347 SpdySerializedFrame* BufferedSpdyFramer::CreateSynReply( |
| 348 SpdyStreamId stream_id, | 348 SpdyStreamId stream_id, |
| 349 SpdyControlFlags flags, | 349 SpdyControlFlags flags, |
| 350 const SpdyHeaderBlock* headers) { | 350 const SpdyHeaderBlock* headers) { |
| 351 SpdySynReplyIR syn_reply(stream_id); | 351 SpdySynReplyIR syn_reply(stream_id); |
| 352 syn_reply.set_fin(flags & CONTROL_FLAG_FIN); | 352 syn_reply.set_fin(flags & CONTROL_FLAG_FIN); |
| 353 // TODO(hkhalil): Avoid copy here. | 353 // TODO(hkhalil): Avoid copy here. |
| 354 syn_reply.set_header_block(*headers); | 354 syn_reply.set_header_block(*headers); |
| 355 return spdy_framer_.SerializeSynReply(syn_reply); | 355 return new SpdySerializedFrame(spdy_framer_.SerializeSynReply(syn_reply)); |
| 356 } | 356 } |
| 357 | 357 |
| 358 // TODO(jgraettinger): Eliminate uses of this method (prefer | 358 // TODO(jgraettinger): Eliminate uses of this method (prefer |
| 359 // SpdyRstStreamIR). | 359 // SpdyRstStreamIR). |
| 360 SpdyFrame* BufferedSpdyFramer::CreateRstStream( | 360 SpdySerializedFrame* BufferedSpdyFramer::CreateRstStream( |
| 361 SpdyStreamId stream_id, | 361 SpdyStreamId stream_id, |
| 362 SpdyRstStreamStatus status) const { | 362 SpdyRstStreamStatus status) const { |
| 363 SpdyRstStreamIR rst_ir(stream_id, status); | 363 SpdyRstStreamIR rst_ir(stream_id, status); |
| 364 return spdy_framer_.SerializeRstStream(rst_ir); | 364 return new SpdySerializedFrame(spdy_framer_.SerializeRstStream(rst_ir)); |
| 365 } | 365 } |
| 366 | 366 |
| 367 // TODO(jgraettinger): Eliminate uses of this method (prefer | 367 // TODO(jgraettinger): Eliminate uses of this method (prefer |
| 368 // SpdySettingsIR). | 368 // SpdySettingsIR). |
| 369 SpdyFrame* BufferedSpdyFramer::CreateSettings( | 369 SpdySerializedFrame* BufferedSpdyFramer::CreateSettings( |
| 370 const SettingsMap& values) const { | 370 const SettingsMap& values) const { |
| 371 SpdySettingsIR settings_ir; | 371 SpdySettingsIR settings_ir; |
| 372 for (SettingsMap::const_iterator it = values.begin(); | 372 for (SettingsMap::const_iterator it = values.begin(); |
| 373 it != values.end(); | 373 it != values.end(); |
| 374 ++it) { | 374 ++it) { |
| 375 settings_ir.AddSetting( | 375 settings_ir.AddSetting( |
| 376 it->first, | 376 it->first, |
| 377 (it->second.first & SETTINGS_FLAG_PLEASE_PERSIST) != 0, | 377 (it->second.first & SETTINGS_FLAG_PLEASE_PERSIST) != 0, |
| 378 (it->second.first & SETTINGS_FLAG_PERSISTED) != 0, | 378 (it->second.first & SETTINGS_FLAG_PERSISTED) != 0, |
| 379 it->second.second); | 379 it->second.second); |
| 380 } | 380 } |
| 381 return spdy_framer_.SerializeSettings(settings_ir); | 381 return new SpdySerializedFrame(spdy_framer_.SerializeSettings(settings_ir)); |
| 382 } | 382 } |
| 383 | 383 |
| 384 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPingIR). | 384 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPingIR). |
| 385 SpdyFrame* BufferedSpdyFramer::CreatePingFrame(SpdyPingId unique_id, | 385 SpdySerializedFrame* BufferedSpdyFramer::CreatePingFrame(SpdyPingId unique_id, |
| 386 bool is_ack) const { | 386 bool is_ack) const { |
| 387 SpdyPingIR ping_ir(unique_id); | 387 SpdyPingIR ping_ir(unique_id); |
| 388 ping_ir.set_is_ack(is_ack); | 388 ping_ir.set_is_ack(is_ack); |
| 389 return spdy_framer_.SerializePing(ping_ir); | 389 return new SpdySerializedFrame(spdy_framer_.SerializePing(ping_ir)); |
| 390 } | 390 } |
| 391 | 391 |
| 392 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyGoAwayIR). | 392 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyGoAwayIR). |
| 393 SpdyFrame* BufferedSpdyFramer::CreateGoAway( | 393 SpdySerializedFrame* BufferedSpdyFramer::CreateGoAway( |
| 394 SpdyStreamId last_accepted_stream_id, | 394 SpdyStreamId last_accepted_stream_id, |
| 395 SpdyGoAwayStatus status, | 395 SpdyGoAwayStatus status, |
| 396 base::StringPiece debug_data) const { | 396 base::StringPiece debug_data) const { |
| 397 SpdyGoAwayIR go_ir(last_accepted_stream_id, status, debug_data); | 397 SpdyGoAwayIR go_ir(last_accepted_stream_id, status, debug_data); |
| 398 return spdy_framer_.SerializeGoAway(go_ir); | 398 return new SpdySerializedFrame(spdy_framer_.SerializeGoAway(go_ir)); |
| 399 } | 399 } |
| 400 | 400 |
| 401 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyHeadersIR). | 401 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyHeadersIR). |
| 402 SpdyFrame* BufferedSpdyFramer::CreateHeaders( | 402 SpdySerializedFrame* BufferedSpdyFramer::CreateHeaders( |
| 403 SpdyStreamId stream_id, | 403 SpdyStreamId stream_id, |
| 404 SpdyControlFlags flags, | 404 SpdyControlFlags flags, |
| 405 SpdyPriority priority, | 405 SpdyPriority priority, |
| 406 const SpdyHeaderBlock* headers) { | 406 const SpdyHeaderBlock* headers) { |
| 407 SpdyHeadersIR headers_ir(stream_id); | 407 SpdyHeadersIR headers_ir(stream_id); |
| 408 headers_ir.set_fin((flags & CONTROL_FLAG_FIN) != 0); | 408 headers_ir.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| 409 if (flags & HEADERS_FLAG_PRIORITY) { | 409 if (flags & HEADERS_FLAG_PRIORITY) { |
| 410 headers_ir.set_has_priority(true); | 410 headers_ir.set_has_priority(true); |
| 411 headers_ir.set_priority(priority); | 411 headers_ir.set_priority(priority); |
| 412 } | 412 } |
| 413 headers_ir.set_header_block(*headers); | 413 headers_ir.set_header_block(*headers); |
| 414 return spdy_framer_.SerializeHeaders(headers_ir); | 414 return new SpdySerializedFrame(spdy_framer_.SerializeHeaders(headers_ir)); |
| 415 } | 415 } |
| 416 | 416 |
| 417 // TODO(jgraettinger): Eliminate uses of this method (prefer | 417 // TODO(jgraettinger): Eliminate uses of this method (prefer |
| 418 // SpdyWindowUpdateIR). | 418 // SpdyWindowUpdateIR). |
| 419 SpdyFrame* BufferedSpdyFramer::CreateWindowUpdate( | 419 SpdySerializedFrame* BufferedSpdyFramer::CreateWindowUpdate( |
| 420 SpdyStreamId stream_id, | 420 SpdyStreamId stream_id, |
| 421 uint32_t delta_window_size) const { | 421 uint32_t delta_window_size) const { |
| 422 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); | 422 SpdyWindowUpdateIR update_ir(stream_id, delta_window_size); |
| 423 return spdy_framer_.SerializeWindowUpdate(update_ir); | 423 return new SpdySerializedFrame(spdy_framer_.SerializeWindowUpdate(update_ir)); |
| 424 } | 424 } |
| 425 | 425 |
| 426 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyDataIR). | 426 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyDataIR). |
| 427 SpdyFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, | 427 SpdySerializedFrame* BufferedSpdyFramer::CreateDataFrame(SpdyStreamId stream_id, |
| 428 const char* data, | 428 const char* data, |
| 429 uint32_t len, | 429 uint32_t len, |
| 430 SpdyDataFlags flags) { | 430 SpdyDataFlags flags) { |
| 431 SpdyDataIR data_ir(stream_id, | 431 SpdyDataIR data_ir(stream_id, |
| 432 base::StringPiece(data, len)); | 432 base::StringPiece(data, len)); |
| 433 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); | 433 data_ir.set_fin((flags & DATA_FLAG_FIN) != 0); |
| 434 return spdy_framer_.SerializeData(data_ir); | 434 return new SpdySerializedFrame(spdy_framer_.SerializeData(data_ir)); |
| 435 } | 435 } |
| 436 | 436 |
| 437 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR). | 437 // TODO(jgraettinger): Eliminate uses of this method (prefer SpdyPushPromiseIR). |
| 438 SpdyFrame* BufferedSpdyFramer::CreatePushPromise( | 438 SpdySerializedFrame* BufferedSpdyFramer::CreatePushPromise( |
| 439 SpdyStreamId stream_id, | 439 SpdyStreamId stream_id, |
| 440 SpdyStreamId promised_stream_id, | 440 SpdyStreamId promised_stream_id, |
| 441 const SpdyHeaderBlock* headers) { | 441 const SpdyHeaderBlock* headers) { |
| 442 SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id); | 442 SpdyPushPromiseIR push_promise_ir(stream_id, promised_stream_id); |
| 443 push_promise_ir.set_header_block(*headers); | 443 push_promise_ir.set_header_block(*headers); |
| 444 return spdy_framer_.SerializePushPromise(push_promise_ir); | 444 return new SpdySerializedFrame( |
| 445 spdy_framer_.SerializePushPromise(push_promise_ir)); |
| 445 } | 446 } |
| 446 | 447 |
| 447 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { | 448 SpdyPriority BufferedSpdyFramer::GetHighestPriority() const { |
| 448 return spdy_framer_.GetHighestPriority(); | 449 return spdy_framer_.GetHighestPriority(); |
| 449 } | 450 } |
| 450 | 451 |
| 451 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { | 452 void BufferedSpdyFramer::InitHeaderStreaming(SpdyStreamId stream_id) { |
| 452 header_buffer_.clear(); | 453 header_buffer_.clear(); |
| 453 header_buffer_valid_ = true; | 454 header_buffer_valid_ = true; |
| 454 header_stream_id_ = stream_id; | 455 header_stream_id_ = stream_id; |
| 455 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); | 456 DCHECK_NE(header_stream_id_, SpdyFramer::kInvalidStream); |
| 456 } | 457 } |
| 457 | 458 |
| 458 } // namespace net | 459 } // namespace net |
| OLD | NEW |