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

Side by Side Diff: net/spdy/spdy_framer.h

Issue 246013002: SPDY: Headers & Push-Promise now use Continuations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase only Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_frame_builder_test.cc ('k') | net/spdy/spdy_framer.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 #ifndef NET_SPDY_SPDY_FRAMER_H_ 5 #ifndef NET_SPDY_SPDY_FRAMER_H_
6 #define NET_SPDY_SPDY_FRAMER_H_ 6 #define NET_SPDY_SPDY_FRAMER_H_
7 7
8 #include <list> 8 #include <list>
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 480
481 // Returns the maximum size a frame can be (data or control). 481 // Returns the maximum size a frame can be (data or control).
482 size_t GetFrameMaximumSize() const; 482 size_t GetFrameMaximumSize() const;
483 483
484 // Returns the maximum size that a control frame can be. 484 // Returns the maximum size that a control frame can be.
485 size_t GetControlFrameMaximumSize() const; 485 size_t GetControlFrameMaximumSize() const;
486 486
487 // Returns the maximum payload size of a DATA frame. 487 // Returns the maximum payload size of a DATA frame.
488 size_t GetDataFrameMaximumPayload() const; 488 size_t GetDataFrameMaximumPayload() const;
489 489
490 // Returns the prefix length for the given frame type.
491 size_t GetPrefixLength(SpdyFrameType type) const;
492
490 // For debugging. 493 // For debugging.
491 static const char* StateToString(int state); 494 static const char* StateToString(int state);
492 static const char* ErrorCodeToString(int error_code); 495 static const char* ErrorCodeToString(int error_code);
493 static const char* StatusCodeToString(int status_code); 496 static const char* StatusCodeToString(int status_code);
494 static const char* FrameTypeToString(SpdyFrameType type); 497 static const char* FrameTypeToString(SpdyFrameType type);
495 498
496 SpdyMajorVersion protocol_version() const { return spdy_version_; } 499 SpdyMajorVersion protocol_version() const { return spdy_version_; }
497 500
498 bool probable_http_response() const { return probable_http_response_; } 501 bool probable_http_response() const { return probable_http_response_; }
499 502
500 SpdyStreamId expect_continuation() const { return expect_continuation_; } 503 SpdyStreamId expect_continuation() const { return expect_continuation_; }
501 504
502 SpdyPriority GetLowestPriority() const { return spdy_version_ < 3 ? 3 : 7; } 505 SpdyPriority GetLowestPriority() const { return spdy_version_ < 3 ? 3 : 7; }
503 SpdyPriority GetHighestPriority() const { return 0; } 506 SpdyPriority GetHighestPriority() const { return 0; }
504 507
505 // Deliver the given control frame's compressed headers block to the visitor 508 // Deliver the given control frame's compressed headers block to the visitor
506 // in decompressed form, in chunks. Returns true if the visitor has 509 // in decompressed form, in chunks. Returns true if the visitor has
507 // accepted all of the chunks. 510 // accepted all of the chunks.
508 bool IncrementallyDecompressControlFrameHeaderData( 511 bool IncrementallyDecompressControlFrameHeaderData(
509 SpdyStreamId stream_id, 512 SpdyStreamId stream_id,
510 const char* data, 513 const char* data,
511 size_t len); 514 size_t len);
512 515
513 protected: 516 protected:
517 // TODO(jgraettinger): Switch to test peer pattern.
514 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, BasicCompression); 518 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, BasicCompression);
515 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameSizesAreValidated); 519 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameSizesAreValidated);
516 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, HeaderCompression); 520 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, HeaderCompression);
517 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, DecompressUncompressedFrame); 521 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, DecompressUncompressedFrame);
518 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ExpandBuffer_HeapSmash); 522 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ExpandBuffer_HeapSmash);
519 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, HugeHeaderBlock); 523 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, HugeHeaderBlock);
520 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, UnclosedStreamDataCompressors); 524 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, UnclosedStreamDataCompressors);
521 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, 525 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
522 UnclosedStreamDataCompressorsOneByteAtATime); 526 UnclosedStreamDataCompressorsOneByteAtATime);
523 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, 527 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
524 UncompressLargerThanFrameBufferInitialSize); 528 UncompressLargerThanFrameBufferInitialSize);
525 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ReadLargeSettingsFrame); 529 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ReadLargeSettingsFrame);
526 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, 530 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
527 ReadLargeSettingsFrameInSmallChunks); 531 ReadLargeSettingsFrameInSmallChunks);
528 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameAtMaxSizeLimit); 532 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameAtMaxSizeLimit);
529 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameTooLarge); 533 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameTooLarge);
534 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
535 TooLargeHeadersFrameUsesContinuation);
536 FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
537 TooLargePushPromiseFrameUsesContinuation);
530 friend class net::HttpNetworkLayer; // This is temporary for the server. 538 friend class net::HttpNetworkLayer; // This is temporary for the server.
531 friend class net::HttpNetworkTransactionTest; 539 friend class net::HttpNetworkTransactionTest;
532 friend class net::HttpProxyClientSocketPoolTest; 540 friend class net::HttpProxyClientSocketPoolTest;
533 friend class net::SpdyHttpStreamTest; 541 friend class net::SpdyHttpStreamTest;
534 friend class net::SpdyNetworkTransactionTest; 542 friend class net::SpdyNetworkTransactionTest;
535 friend class net::SpdyProxyClientSocketTest; 543 friend class net::SpdyProxyClientSocketTest;
536 friend class net::SpdySessionTest; 544 friend class net::SpdySessionTest;
537 friend class net::SpdyStreamTest; 545 friend class net::SpdyStreamTest;
538 friend class net::SpdyWebSocketStreamTest; 546 friend class net::SpdyWebSocketStreamTest;
539 friend class net::WebSocketJobTest; 547 friend class net::WebSocketJobTest;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 bool ProcessSetting(const char* data); 579 bool ProcessSetting(const char* data);
572 580
573 // Retrieve serialized length of SpdyHeaderBlock. If compression is enabled, a 581 // Retrieve serialized length of SpdyHeaderBlock. If compression is enabled, a
574 // maximum estimate is returned. 582 // maximum estimate is returned.
575 size_t GetSerializedLength(const SpdyHeaderBlock& headers); 583 size_t GetSerializedLength(const SpdyHeaderBlock& headers);
576 584
577 // Get (and lazily initialize) the ZLib state. 585 // Get (and lazily initialize) the ZLib state.
578 z_stream* GetHeaderCompressor(); 586 z_stream* GetHeaderCompressor();
579 z_stream* GetHeaderDecompressor(); 587 z_stream* GetHeaderDecompressor();
580 588
589 size_t GetNumberRequiredContinuationFrames(size_t size);
590
591 void WritePayloadWithContinuation(SpdyFrameBuilder* builder,
592 const std::string& hpack_encoding,
593 SpdyStreamId stream_id,
594 SpdyFrameType type);
595
581 private: 596 private:
582 // Deliver the given control frame's uncompressed headers block to the 597 // Deliver the given control frame's uncompressed headers block to the
583 // visitor in chunks. Returns true if the visitor has accepted all of the 598 // visitor in chunks. Returns true if the visitor has accepted all of the
584 // chunks. 599 // chunks.
585 bool IncrementallyDeliverControlFrameHeaderData(SpdyStreamId stream_id, 600 bool IncrementallyDeliverControlFrameHeaderData(SpdyStreamId stream_id,
586 const char* data, 601 const char* data,
587 size_t len); 602 size_t len);
588 603
589 // Utility to copy the given data block to the current frame buffer, up 604 // Utility to copy the given data block to the current frame buffer, up
590 // to the given maximum number of bytes, and update the buffer 605 // to the given maximum number of bytes, and update the buffer
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 // If a HEADERS frame is followed by a CONTINUATION frame, the FIN/END_STREAM 730 // If a HEADERS frame is followed by a CONTINUATION frame, the FIN/END_STREAM
716 // flag is still carried in the HEADERS frame. If it's set, flip this so that 731 // flag is still carried in the HEADERS frame. If it's set, flip this so that
717 // we know to terminate the stream when the entire header block has been 732 // we know to terminate the stream when the entire header block has been
718 // processed. 733 // processed.
719 bool end_stream_when_done_; 734 bool end_stream_when_done_;
720 }; 735 };
721 736
722 } // namespace net 737 } // namespace net
723 738
724 #endif // NET_SPDY_SPDY_FRAMER_H_ 739 #endif // NET_SPDY_SPDY_FRAMER_H_
OLDNEW
« no previous file with comments | « net/spdy/spdy_frame_builder_test.cc ('k') | net/spdy/spdy_framer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698