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

Unified Diff: net/spdy/spdy_frame_builder.cc

Issue 10053029: Factor out the code to write control frame headers into a new constructor of SpdyFrameBuilder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add Data frame constructor Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_framer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_frame_builder.cc
diff --git a/net/spdy/spdy_frame_builder.cc b/net/spdy/spdy_frame_builder.cc
index a7a291e491801d3224c4adf4b4e07f7b20d87b40..1ff94f2d8bfb4637bafa34d644402642f42f5138 100644
--- a/net/spdy/spdy_frame_builder.cc
+++ b/net/spdy/spdy_frame_builder.cc
@@ -9,10 +9,49 @@
namespace net {
-SpdyFrameBuilder::SpdyFrameBuilder(size_t size)
+namespace {
+
+// Creates a FlagsAndLength.
+FlagsAndLength CreateFlagsAndLength(SpdyControlFlags flags, size_t length) {
+ DCHECK_EQ(0u, length & ~static_cast<size_t>(kLengthMask));
+ FlagsAndLength flags_length;
+ flags_length.length_ = htonl(static_cast<uint32>(length));
+ DCHECK_EQ(0, flags & ~kControlFlagsMask);
+ flags_length.flags_[0] = flags;
+ return flags_length;
+}
+
+} // namespace
+
+SpdyFrameBuilder::SpdyFrameBuilder(SpdyControlType type,
+ SpdyControlFlags flags,
+ int spdy_version,
+ size_t size)
+ : buffer_(new char[size]),
+ capacity_(size),
+ length_(0) {
+ FlagsAndLength flags_length = CreateFlagsAndLength(
+ flags, size - SpdyFrame::kHeaderSize);
+ WriteUInt16(kControlFlagMask | spdy_version);
+ WriteUInt16(type);
+ WriteBytes(&flags_length, sizeof(flags_length));
+}
+
+SpdyFrameBuilder::SpdyFrameBuilder(SpdyStreamId stream_id,
+ SpdyDataFlags flags,
+ size_t size)
: buffer_(new char[size]),
capacity_(size),
length_(0) {
+ DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
+ WriteUInt32(stream_id);
+ size_t length = size - SpdyFrame::kHeaderSize;
+ DCHECK_EQ(0u, length & ~static_cast<size_t>(kLengthMask));
+ FlagsAndLength flags_length;
+ flags_length.length_ = htonl(length);
+ DCHECK_EQ(0, flags & ~kDataFlagsMask);
+ flags_length.flags_[0] = flags;
+ WriteBytes(&flags_length, sizeof(flags_length));
}
SpdyFrameBuilder::~SpdyFrameBuilder() {
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_framer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698