Chromium Code Reviews| Index: net/spdy/spdy_frame_builder.h |
| diff --git a/net/spdy/spdy_frame_builder.h b/net/spdy/spdy_frame_builder.h |
| index f9826d0ae5301ecea8292534b734be21d41227d0..b4089baf6181b796d20815fb8393ba5f2a07c4c2 100644 |
| --- a/net/spdy/spdy_frame_builder.h |
| +++ b/net/spdy/spdy_frame_builder.h |
| @@ -28,12 +28,13 @@ class SpdyFramer; |
| class NET_EXPORT_PRIVATE SpdyFrameBuilder { |
| public: |
| // Initializes a SpdyFrameBuilder with a buffer of given size |
| - explicit SpdyFrameBuilder(size_t size); |
| + SpdyFrameBuilder(size_t size, SpdyMajorVersion version); |
| ~SpdyFrameBuilder(); |
| - // Returns the size of the SpdyFrameBuilder's data. |
| - size_t length() const { return length_; } |
| + // Returns the total size of the SpdyFrameBuilder's data, which may include |
| + // multiple frames. |
| + size_t length() const { return offset_ + length_; } |
| // Returns a writeable buffer of given size in bytes, to be appended to the |
| // currently written frame. Does bounds checking on length but does not |
| @@ -65,16 +66,22 @@ class NET_EXPORT_PRIVATE SpdyFrameBuilder { |
| // version-specific information from the |framer| and length information from |
| // capacity_. The given type must be a control frame type. |
| // Used only for SPDY versions >=4. |
| - bool WriteFramePrefix(const SpdyFramer& framer, |
| - SpdyFrameType type, |
| - uint8 flags, |
| - SpdyStreamId stream_id); |
| + bool BeginNewFrame(const SpdyFramer& framer, |
| + SpdyFrameType type, |
| + uint8 flags, |
| + SpdyStreamId stream_id); |
| // Takes the buffer from the SpdyFrameBuilder. |
| SpdyFrame* take() { |
| - SpdyFrame* rv = new SpdyFrame(buffer_.release(), length_, true); |
| + if (version_ > SPDY3) { |
| + DLOG_IF(DFATAL, SpdyConstants::GetFrameMaximumSize(version_) < length_) |
| + << "Frame length " << length_ |
| + << " is longer than the maximum allowed length."; |
| + } |
| + SpdyFrame* rv = new SpdyFrame(buffer_.release(), length(), true); |
| capacity_ = 0; |
| length_ = 0; |
| + offset_ = 0; |
| return rv; |
| } |
|
Ryan Hamilton
2014/04/22 03:31:53
FWIW, this is a pretty complex method for a .h fil
Johnny
2014/04/22 15:30:51
Agreed, and noted.
On 2014/04/22 03:31:53, Ryan H
|
| @@ -129,7 +136,10 @@ class NET_EXPORT_PRIVATE SpdyFrameBuilder { |
| scoped_ptr<char[]> buffer_; |
| size_t capacity_; // Allocation size of payload, set by constructor. |
| - size_t length_; // Current length of the buffer. |
| + size_t length_; // Length of the latest frame in the buffer. |
| + size_t offset_; // Position at which the latest frame begins. |
| + |
| + const SpdyMajorVersion version_; |
| }; |
| } // namespace net |