diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 23:28:09 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-14 23:28:09 +0000 |
commit | 9bb5a525fcb2fc5fa24cb412ed0a425c9f82cfce (patch) | |
tree | 0359924eb68dc067b909fb9868231fc667733acc /net | |
parent | f35f422934f280d373459acf452197f26373cf45 (diff) | |
download | chromium_src-9bb5a525fcb2fc5fa24cb412ed0a425c9f82cfce.zip chromium_src-9bb5a525fcb2fc5fa24cb412ed0a425c9f82cfce.tar.gz chromium_src-9bb5a525fcb2fc5fa24cb412ed0a425c9f82cfce.tar.bz2 |
Remove SpdyHeadersControlFrame struct. Useful in SPDY 4 development.
This lands server change 42128883.
Review URL: https://codereview.chromium.org/12262005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182572 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/spdy/buffered_spdy_framer.cc | 2 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer.h | 8 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer_spdy2_unittest.cc | 2 | ||||
-rw-r--r-- | net/spdy/buffered_spdy_framer_spdy3_unittest.cc | 2 | ||||
-rw-r--r-- | net/spdy/spdy_framer.cc | 62 | ||||
-rw-r--r-- | net/spdy/spdy_framer.h | 10 | ||||
-rw-r--r-- | net/spdy/spdy_framer_test.cc | 12 | ||||
-rw-r--r-- | net/spdy/spdy_protocol.h | 40 | ||||
-rw-r--r-- | net/spdy/spdy_protocol_test.cc | 10 | ||||
-rw-r--r-- | net/spdy/spdy_session.cc | 4 | ||||
-rw-r--r-- | net/spdy/spdy_session.h | 6 |
11 files changed, 44 insertions, 114 deletions
diff --git a/net/spdy/buffered_spdy_framer.cc b/net/spdy/buffered_spdy_framer.cc index 85c4b87..6c6bb51 100644 --- a/net/spdy/buffered_spdy_framer.cc +++ b/net/spdy/buffered_spdy_framer.cc @@ -259,7 +259,7 @@ SpdyFrame* BufferedSpdyFramer::CreateGoAway( return spdy_framer_.CreateGoAway(last_accepted_stream_id, status); } -SpdyHeadersControlFrame* BufferedSpdyFramer::CreateHeaders( +SpdyFrame* BufferedSpdyFramer::CreateHeaders( SpdyStreamId stream_id, SpdyControlFlags flags, bool compressed, diff --git a/net/spdy/buffered_spdy_framer.h b/net/spdy/buffered_spdy_framer.h index 234d296..63e4778 100644 --- a/net/spdy/buffered_spdy_framer.h +++ b/net/spdy/buffered_spdy_framer.h @@ -165,10 +165,10 @@ class NET_EXPORT_PRIVATE BufferedSpdyFramer SpdyFrame* CreateGoAway( SpdyStreamId last_accepted_stream_id, SpdyGoAwayStatus status) const; - SpdyHeadersControlFrame* CreateHeaders(SpdyStreamId stream_id, - SpdyControlFlags flags, - bool compressed, - const SpdyHeaderBlock* headers); + SpdyFrame* CreateHeaders(SpdyStreamId stream_id, + SpdyControlFlags flags, + bool compressed, + const SpdyHeaderBlock* headers); SpdyFrame* CreateWindowUpdate( SpdyStreamId stream_id, uint32 delta_window_size) const; diff --git a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc index 28e844d..72e568d 100644 --- a/net/spdy/buffered_spdy_framer_spdy2_unittest.cc +++ b/net/spdy/buffered_spdy_framer_spdy2_unittest.cc @@ -256,7 +256,7 @@ TEST_F(BufferedSpdyFramerSpdy2Test, ReadHeadersHeaderBlock) { headers["alpha"] = "beta"; headers["gamma"] = "delta"; BufferedSpdyFramer framer(2, true); - scoped_ptr<SpdyHeadersControlFrame> control_frame( + scoped_ptr<SpdyFrame> control_frame( framer.CreateHeaders(1, // stream_id CONTROL_FLAG_NONE, true, // compress diff --git a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc index fc3094d..9aa161b 100644 --- a/net/spdy/buffered_spdy_framer_spdy3_unittest.cc +++ b/net/spdy/buffered_spdy_framer_spdy3_unittest.cc @@ -255,7 +255,7 @@ TEST_F(BufferedSpdyFramerSpdy3Test, ReadHeadersHeaderBlock) { headers["alpha"] = "beta"; headers["gamma"] = "delta"; BufferedSpdyFramer framer(3, true); - scoped_ptr<SpdyHeadersControlFrame> control_frame( + scoped_ptr<SpdyFrame> control_frame( framer.CreateHeaders(1, // stream_id CONTROL_FLAG_NONE, true, // compress diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc index f0191ad..5f12a6c 100644 --- a/net/spdy/spdy_framer.cc +++ b/net/spdy/spdy_framer.cc @@ -674,11 +674,7 @@ void SpdyFramer::ProcessControlFrameHeader() { frame_size_without_variable_data = GetSynReplyMinimumSize(); break; case HEADERS: - frame_size_without_variable_data = SpdyHeadersControlFrame::size(); - // SPDY 2 had two bytes of unused space preceeding payload. - if (spdy_version_ < 3) { - frame_size_without_variable_data += 2; - } + frame_size_without_variable_data = GetHeadersMinimumSize(); break; case SETTINGS: frame_size_without_variable_data = SpdySettingsControlFrame::size(); @@ -965,6 +961,8 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); break; case SYN_REPLY: + case HEADERS: + // SYN_REPLY and HEADERS are the same, save for the visitor call. { SpdyFrameReader reader(current_frame_buffer_.get(), current_frame_len_); @@ -981,17 +979,11 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, reader.Seek(2); } DCHECK(reader.IsDoneReading()); - visitor_->OnSynReply(stream_id, (flags & CONTROL_FLAG_FIN) != 0); - } - CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); - break; - case HEADERS: - { - SpdyHeadersControlFrame* headers_frame = - reinterpret_cast<SpdyHeadersControlFrame*>(&control_frame); - visitor_->OnHeaders( - headers_frame->stream_id(), - (headers_frame->flags() & CONTROL_FLAG_FIN) != 0); + if (control_frame.type() == SYN_REPLY) { + visitor_->OnSynReply(stream_id, (flags & CONTROL_FLAG_FIN) != 0); + } else { + visitor_->OnHeaders(stream_id, (flags & CONTROL_FLAG_FIN) != 0); + } } CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); break; @@ -1019,14 +1011,12 @@ size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data, if (control_frame.type() == SYN_STREAM) { stream_id = reinterpret_cast<const SpdySynStreamControlFrame*>( &control_frame)->stream_id(); - } else if (control_frame.type() == SYN_REPLY) { + } else if (control_frame.type() == SYN_REPLY || + control_frame.type() == HEADERS) { SpdyFrameReader reader(current_frame_buffer_.get(), current_frame_len_); reader.Seek(SpdyFrame::kHeaderSize); // Seek past frame header. bool read_successful = reader.ReadUInt31(&stream_id); DCHECK(read_successful); - } else if (control_frame.type() == HEADERS) { - stream_id = reinterpret_cast<const SpdyHeadersControlFrame*>( - &control_frame)->stream_id(); } else { LOG(DFATAL) << "Unhandled frame type in ProcessControlFrameHeaderBlock."; } @@ -1624,7 +1614,7 @@ SpdySerializedFrame* SpdyFramer::SerializeGoAway( return builder.take(); } -SpdyHeadersControlFrame* SpdyFramer::CreateHeaders( +SpdyFrame* SpdyFramer::CreateHeaders( SpdyStreamId stream_id, SpdyControlFlags flags, bool compressed, @@ -1637,12 +1627,11 @@ SpdyHeadersControlFrame* SpdyFramer::CreateHeaders( // TODO(hkhalil): Avoid copy here. *(headers.GetMutableNameValueBlock()) = *header_block; - scoped_ptr<SpdyHeadersControlFrame> headers_frame( - reinterpret_cast<SpdyHeadersControlFrame*>(SerializeHeaders(headers))); + scoped_ptr<SpdyControlFrame> headers_frame( + reinterpret_cast<SpdyControlFrame*>(SerializeHeaders(headers))); if (compressed) { - return reinterpret_cast<SpdyHeadersControlFrame*>( - CompressControlFrame(*headers_frame.get(), - headers.GetMutableNameValueBlock())); + return CompressControlFrame(*headers_frame.get(), + headers.GetMutableNameValueBlock()); } return headers_frame.release(); } @@ -1835,26 +1824,17 @@ bool SpdyFramer::GetFrameBoundaries(const SpdyFrame& frame, } break; case SYN_REPLY: + case HEADERS: + // It is okay to conflate HEADERS and SYN_REPLY here since they are + // identical in structure. The following DCHECK_EQ should politely club + // the developer over the head should this assertion change without the + // code below changing as well. + DCHECK_EQ(GetSynReplyMinimumSize(), GetHeadersMinimumSize()); *header_length = GetSynReplyMinimumSize(); *payload_length = frame.length() - (*header_length - GetControlFrameMinimumSize()); *payload = frame.data() + *header_length; break; - case HEADERS: - { - const SpdyHeadersControlFrame& headers_frame = - reinterpret_cast<const SpdyHeadersControlFrame&>(frame); - frame_size = SpdyHeadersControlFrame::size(); - *payload_length = headers_frame.header_block_len(); - *header_length = frame_size; - *payload = frame.data() + *header_length; - // SPDY 2 had two bytes of unused space preceeding payload. - if (spdy_version_ < 3) { - *header_length += 2; - *payload += 2; - } - } - break; default: // TODO(mbelshe): set an error? return false; // We can't compress this frame! diff --git a/net/spdy/spdy_framer.h b/net/spdy/spdy_framer.h index 7e40443..ef0a54f 100644 --- a/net/spdy/spdy_framer.h +++ b/net/spdy/spdy_framer.h @@ -403,13 +403,13 @@ class NET_EXPORT_PRIVATE SpdyFramer { SpdyGoAwayStatus status) const; SpdySerializedFrame* SerializeGoAway(const SpdyGoAwayIR& goaway) const; - // Creates an instance of SpdyHeadersControlFrame. The HEADERS frame is used + // Creates and serializes a HEADERS frame. The HEADERS frame is used // for sending additional headers outside of a SYN_STREAM/SYN_REPLY. The // arguments are the same as for CreateSynReply. - SpdyHeadersControlFrame* CreateHeaders(SpdyStreamId stream_id, - SpdyControlFlags flags, - bool compressed, - const SpdyHeaderBlock* headers); + SpdyFrame* CreateHeaders(SpdyStreamId stream_id, + SpdyControlFlags flags, + bool compressed, + const SpdyHeaderBlock* headers); SpdySerializedFrame* SerializeHeaders(const SpdyHeadersIR& headers); // Creates and serializes a WINDOW_UPDATE frame. The WINDOW_UPDATE diff --git a/net/spdy/spdy_framer_test.cc b/net/spdy/spdy_framer_test.cc index 17efefb..b9de684 100644 --- a/net/spdy/spdy_framer_test.cc +++ b/net/spdy/spdy_framer_test.cc @@ -135,13 +135,13 @@ class SpdyFramerTestUtil { if (fin) { flags &= CONTROL_FLAG_FIN; } - scoped_ptr<SpdyHeadersControlFrame> frame( + scoped_ptr<SpdyFrame> frame( framer.CreateHeaders(stream_id, static_cast<SpdyControlFlags>(flags), false, &null_headers)); ResetBuffer(); - memcpy(buffer_.get(), frame->data(), SpdyHeadersControlFrame::size()); + memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); size_ += SpdySynStreamControlFrame::size(); } @@ -152,13 +152,13 @@ class SpdyFramerTestUtil { if (fin) { flags &= CONTROL_FLAG_FIN; } - scoped_ptr<SpdyHeadersControlFrame> frame( + scoped_ptr<SpdyFrame> frame( framer.CreateHeaders(stream_id, static_cast<SpdyControlFlags>(flags), false, &null_headers)); ResetBuffer(); - memcpy(buffer_.get(), frame->data(), SpdyHeadersControlFrame::size()); + memcpy(buffer_.get(), frame->data(), framer.GetHeadersMinimumSize()); size_ += SpdySynStreamControlFrame::size(); } @@ -2491,7 +2491,7 @@ TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) { headers["alpha"] = "beta"; headers["gamma"] = "delta"; SpdyFramer framer(spdy_version_); - scoped_ptr<SpdyHeadersControlFrame> control_frame( + scoped_ptr<SpdyFrame> control_frame( framer.CreateHeaders(1, // stream_id CONTROL_FLAG_NONE, true, // compress @@ -2518,7 +2518,7 @@ TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlockWithHalfClose) { headers["alpha"] = "beta"; headers["gamma"] = "delta"; SpdyFramer framer(spdy_version_); - scoped_ptr<SpdyHeadersControlFrame> control_frame( + scoped_ptr<SpdyFrame> control_frame( framer.CreateHeaders(1, // stream_id CONTROL_FLAG_FIN, true, // compress diff --git a/net/spdy/spdy_protocol.h b/net/spdy/spdy_protocol.h index 4d14fe0..2d4825a 100644 --- a/net/spdy/spdy_protocol.h +++ b/net/spdy/spdy_protocol.h @@ -497,11 +497,6 @@ struct SpdySettingsControlFrameBlock : SpdyFrameBlock { // Variable data here. }; -// A HEADERS Control Frame structure. -struct SpdyHeadersControlFrameBlock : SpdyFrameBlock { - SpdyStreamId stream_id_; -}; - #pragma pack(pop) class SpdyFrame; @@ -1054,41 +1049,6 @@ class SpdySettingsControlFrame : public SpdyControlFrame { DISALLOW_COPY_AND_ASSIGN(SpdySettingsControlFrame); }; -// A HEADERS frame. -class SpdyHeadersControlFrame : public SpdyControlFrame { - public: - SpdyHeadersControlFrame() : SpdyControlFrame(size()) {} - SpdyHeadersControlFrame(char* data, bool owns_buffer) - : SpdyControlFrame(data, owns_buffer) {} - - SpdyStreamId stream_id() const { - return ntohl(block()->stream_id_) & kStreamIdMask; - } - - // The number of bytes in the header block beyond the frame header length. - int header_block_len() const { - size_t header_block_len = length() - (size() - SpdyFrame::kHeaderSize); - // SPDY 2 had 2 bytes of unused space preceeding the header block. - if (version() < 3) { - header_block_len -= 2; - } - return header_block_len; - } - - // Returns the size of the SpdyHeadersControlFrameBlock structure. - // Note: this is not the size of the SpdyHeadersControlFrame class. - static size_t size() { return sizeof(SpdyHeadersControlFrameBlock); } - - private: - const struct SpdyHeadersControlFrameBlock* block() const { - return static_cast<SpdyHeadersControlFrameBlock*>(frame_); - } - struct SpdyHeadersControlFrameBlock* mutable_block() { - return static_cast<SpdyHeadersControlFrameBlock*>(frame_); - } - DISALLOW_COPY_AND_ASSIGN(SpdyHeadersControlFrame); -}; - } // namespace net #endif // NET_SPDY_SPDY_PROTOCOL_H_ diff --git a/net/spdy/spdy_protocol_test.cc b/net/spdy/spdy_protocol_test.cc index 9c1de18..ae5f04b 100644 --- a/net/spdy/spdy_protocol_test.cc +++ b/net/spdy/spdy_protocol_test.cc @@ -45,7 +45,6 @@ TEST_P(SpdyProtocolTest, ProtocolConstants) { EXPECT_EQ(8u, SpdyControlFrame::kHeaderSize); EXPECT_EQ(18u, SpdySynStreamControlFrame::size()); EXPECT_EQ(12u, SpdySettingsControlFrame::size()); - EXPECT_EQ(12u, SpdyHeadersControlFrame::size()); EXPECT_EQ(4u, sizeof(FlagsAndLength)); EXPECT_EQ(1, SYN_STREAM); EXPECT_EQ(2, SYN_REPLY); @@ -100,15 +99,6 @@ TEST_P(SpdyProtocolTest, ControlFrameStructs) { syn_frame->set_associated_stream_id(999u); EXPECT_EQ(123u, syn_frame->stream_id()); EXPECT_EQ(999u, syn_frame->associated_stream_id()); - - scoped_ptr<SpdyHeadersControlFrame> headers_frame( - framer.CreateHeaders(123, CONTROL_FLAG_NONE, false, &headers)); - EXPECT_EQ(framer.protocol_version(), headers_frame->version()); - EXPECT_TRUE(headers_frame->is_control_frame()); - EXPECT_EQ(HEADERS, headers_frame->type()); - EXPECT_EQ(123u, headers_frame->stream_id()); - EXPECT_EQ(IsSpdy2() ? 2 : 4, headers_frame->header_block_len()); - EXPECT_EQ(0, headers_frame->flags()); } TEST_P(SpdyProtocolTest, TestDataFrame) { diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index 96f8696..0fd3a1b 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc @@ -644,7 +644,7 @@ SpdyFrame* SpdySession::CreateCredentialFrame( return credential_frame.release(); } -SpdyHeadersControlFrame* SpdySession::CreateHeadersFrame( +SpdyFrame* SpdySession::CreateHeadersFrame( SpdyStreamId stream_id, const SpdyHeaderBlock& headers, SpdyControlFlags flags) { @@ -654,7 +654,7 @@ SpdyHeadersControlFrame* SpdySession::CreateHeadersFrame( CHECK_EQ(stream->stream_id(), stream_id); // Create a HEADER frame. - scoped_ptr<SpdyHeadersControlFrame> frame( + scoped_ptr<SpdyFrame> frame( buffered_spdy_framer_->CreateHeaders(stream_id, flags, true, &headers)); if (net_log().IsLoggingAllEvents()) { diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h index bf6927d..865e863 100644 --- a/net/spdy/spdy_session.h +++ b/net/spdy/spdy_session.h @@ -222,9 +222,9 @@ class NET_EXPORT SpdySession : public base::RefCounted<SpdySession>, RequestPriority priority); // Write a HEADERS frame to the stream. - SpdyHeadersControlFrame* CreateHeadersFrame(SpdyStreamId stream_id, - const SpdyHeaderBlock& headers, - SpdyControlFlags flags); + SpdyFrame* CreateHeadersFrame(SpdyStreamId stream_id, + const SpdyHeaderBlock& headers, + SpdyControlFlags flags); // Write a data frame to the stream. // Used to create and queue a data frame for the given stream. |