Allow HttpDecoder to report metadata of SETTINGS frame to visitor. gfe-relnote: new API, not used. PiperOrigin-RevId: 241572090 Change-Id: Ibc83a3e99727317ba95f62060338a279195c5d89
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc index 01d5e4b..972cb37 100644 --- a/quic/core/http/http_decoder.cc +++ b/quic/core/http/http_decoder.cc
@@ -106,6 +106,9 @@ } else if (current_frame_type_ == 0x1) { visitor_->OnHeadersFrameStart(Http3FrameLengths( current_length_field_size_ + kFrameTypeLength, current_frame_length_)); + } else if (current_frame_type_ == 0x4) { + visitor_->OnSettingsFrameStart(Http3FrameLengths( + current_length_field_size_ + kFrameTypeLength, current_frame_length_)); } state_ = (remaining_frame_length_ == 0) ? STATE_FINISH_PARSING
diff --git a/quic/core/http/http_decoder.h b/quic/core/http/http_decoder.h index 1cc973a..2318a03 100644 --- a/quic/core/http/http_decoder.h +++ b/quic/core/http/http_decoder.h
@@ -56,6 +56,9 @@ // Called when a GOAWAY frame has been successfully parsed. virtual void OnGoAwayFrame(const GoAwayFrame& frame) = 0; + // Called when a SETTINGS frame has been received. + virtual void OnSettingsFrameStart(Http3FrameLengths frame_length) = 0; + // Called when a SETTINGS frame has been successfully parsed. virtual void OnSettingsFrame(const SettingsFrame& frame) = 0;
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc index 53b5f86..a4202e1 100644 --- a/quic/core/http/http_decoder_test.cc +++ b/quic/core/http/http_decoder_test.cc
@@ -22,6 +22,7 @@ MOCK_METHOD1(OnCancelPushFrame, void(const CancelPushFrame& frame)); MOCK_METHOD1(OnMaxPushIdFrame, void(const MaxPushIdFrame& frame)); MOCK_METHOD1(OnGoAwayFrame, void(const GoAwayFrame& frame)); + MOCK_METHOD1(OnSettingsFrameStart, void(Http3FrameLengths frame_lengths)); MOCK_METHOD1(OnSettingsFrame, void(const SettingsFrame& frame)); MOCK_METHOD1(OnDuplicatePushFrame, void(const DuplicatePushFrame& frame)); @@ -271,6 +272,7 @@ frame.values[6] = 5; // Process the full frame. + EXPECT_CALL(visitor_, OnSettingsFrameStart(Http3FrameLengths(2, 6))); EXPECT_CALL(visitor_, OnSettingsFrame(frame)); EXPECT_EQ(QUIC_ARRAYSIZE(input), decoder_.ProcessInput(input, QUIC_ARRAYSIZE(input))); @@ -278,6 +280,7 @@ EXPECT_EQ("", decoder_.error_detail()); // Process the frame incremently. + EXPECT_CALL(visitor_, OnSettingsFrameStart(Http3FrameLengths(2, 6))); EXPECT_CALL(visitor_, OnSettingsFrame(frame)); for (char c : input) { EXPECT_EQ(1u, decoder_.ProcessInput(&c, 1));
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc index 6d15292..221a4dd 100644 --- a/quic/core/http/quic_spdy_stream.cc +++ b/quic/core/http/quic_spdy_stream.cc
@@ -55,6 +55,10 @@ CloseConnectionOnWrongFrame("Goaway"); } + void OnSettingsFrameStart(Http3FrameLengths frame_lengths) override { + CloseConnectionOnWrongFrame("Settings"); + } + void OnSettingsFrame(const SettingsFrame& frame) override { CloseConnectionOnWrongFrame("Settings"); }