| Index: net/spdy/spdy_framer.h
|
| diff --git a/net/spdy/spdy_framer.h b/net/spdy/spdy_framer.h
|
| index 3188825ad0e224f8feca0da29c34e4fc240cdfc7..2da3b7ed5ceb2be14df34bf617195ab3cdd44a60 100644
|
| --- a/net/spdy/spdy_framer.h
|
| +++ b/net/spdy/spdy_framer.h
|
| @@ -56,14 +56,15 @@ typedef std::map<std::string, std::string> SpdyHeaderBlock;
|
| // Conveniently handles converstion to/from wire format.
|
| class NET_EXPORT_PRIVATE SettingsFlagsAndId {
|
| public:
|
| - static SettingsFlagsAndId FromWireFormat(int version, uint32 wire);
|
| + static SettingsFlagsAndId FromWireFormat(SpdyMajorVersion version,
|
| + uint32 wire);
|
|
|
| SettingsFlagsAndId() : flags_(0), id_(0) {}
|
|
|
| // TODO(hkhalil): restrict to enums instead of free-form ints.
|
| SettingsFlagsAndId(uint8 flags, uint32 id);
|
|
|
| - uint32 GetWireFormat(int version) const;
|
| + uint32 GetWireFormat(SpdyMajorVersion version) const;
|
|
|
| uint32 id() const { return id_; }
|
| uint8 flags() const { return flags_; }
|
| @@ -320,13 +321,14 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
|
|
| // Serializes a SpdyHeaderBlock.
|
| static void WriteHeaderBlock(SpdyFrameBuilder* frame,
|
| - const int spdy_version,
|
| + const SpdyMajorVersion spdy_version,
|
| const SpdyHeaderBlock* headers);
|
|
|
| // Retrieve serialized length of SpdyHeaderBlock.
|
| // TODO(hkhalil): Remove, or move to quic code.
|
| - static size_t GetSerializedLength(const int spdy_version,
|
| - const SpdyHeaderBlock* headers);
|
| + static size_t GetSerializedLength(
|
| + const SpdyMajorVersion spdy_version,
|
| + const SpdyHeaderBlock* headers);
|
|
|
| // Create a new Framer, provided a SPDY version.
|
| explicit SpdyFramer(SpdyMajorVersion version);
|
| @@ -371,8 +373,10 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
|
|
| // Serialize a data frame.
|
| SpdySerializedFrame* SerializeData(const SpdyDataIR& data) const;
|
| - // Serializes just the data frame header, excluding actual data payload.
|
| - SpdySerializedFrame* SerializeDataFrameHeader(const SpdyDataIR& data) const;
|
| + // Serializes the data frame header and optionally padding length fields,
|
| + // excluding actual data payload and padding.
|
| + SpdySerializedFrame* SerializeDataFrameHeaderWithPaddingLengthField(
|
| + const SpdyDataIR& data) const;
|
|
|
| // Serializes a SYN_STREAM frame.
|
| SpdySerializedFrame* SerializeSynStream(const SpdySynStreamIR& syn_stream);
|
| @@ -485,6 +489,9 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
| // Returns the maximum payload size of a DATA frame.
|
| size_t GetDataFrameMaximumPayload() const;
|
|
|
| + // Returns the prefix length for the given frame type.
|
| + size_t GetPrefixLength(SpdyFrameType type) const;
|
| +
|
| // For debugging.
|
| static const char* StateToString(int state);
|
| static const char* ErrorCodeToString(int error_code);
|
| @@ -497,7 +504,10 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
|
|
| SpdyStreamId expect_continuation() const { return expect_continuation_; }
|
|
|
| - SpdyPriority GetLowestPriority() const { return spdy_version_ < 3 ? 3 : 7; }
|
| + SpdyPriority GetLowestPriority() const {
|
| + return spdy_version_ < SPDY3 ? 3 : 7;
|
| + }
|
| +
|
| SpdyPriority GetHighestPriority() const { return 0; }
|
|
|
| // Deliver the given control frame's compressed headers block to the visitor
|
| @@ -509,6 +519,7 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
| size_t len);
|
|
|
| protected:
|
| + // TODO(jgraettinger): Switch to test peer pattern.
|
| FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, BasicCompression);
|
| FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameSizesAreValidated);
|
| FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, HeaderCompression);
|
| @@ -525,6 +536,10 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
| ReadLargeSettingsFrameInSmallChunks);
|
| FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameAtMaxSizeLimit);
|
| FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest, ControlFrameTooLarge);
|
| + FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
|
| + TooLargeHeadersFrameUsesContinuation);
|
| + FRIEND_TEST_ALL_PREFIXES(SpdyFramerTest,
|
| + TooLargePushPromiseFrameUsesContinuation);
|
| friend class net::HttpNetworkLayer; // This is temporary for the server.
|
| friend class net::HttpNetworkTransactionTest;
|
| friend class net::HttpProxyClientSocketPoolTest;
|
| @@ -555,6 +570,7 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
| size_t ProcessGoAwayFramePayload(const char* data, size_t len);
|
| size_t ProcessRstStreamFramePayload(const char* data, size_t len);
|
| size_t ProcessSettingsFramePayload(const char* data, size_t len);
|
| + size_t ProcessIgnoredControlFramePayload(/*const char* data,*/ size_t len);
|
|
|
| // TODO(jgraettinger): To be removed with migration to
|
| // SpdyHeadersHandlerInterface.
|
| @@ -576,6 +592,13 @@ class NET_EXPORT_PRIVATE SpdyFramer {
|
| z_stream* GetHeaderCompressor();
|
| z_stream* GetHeaderDecompressor();
|
|
|
| + size_t GetNumberRequiredContinuationFrames(size_t size);
|
| +
|
| + void WritePayloadWithContinuation(SpdyFrameBuilder* builder,
|
| + const std::string& hpack_encoding,
|
| + SpdyStreamId stream_id,
|
| + SpdyFrameType type);
|
| +
|
| private:
|
| // Deliver the given control frame's uncompressed headers block to the
|
| // visitor in chunks. Returns true if the visitor has accepted all of the
|
|
|