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; |
} |
@@ -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 |