Move the logic of submitting SETTINGS from OgHttp2Adapter to OgHttp2Session. This refactoring will facilitate adding more logic to SETTINGS submission in OgHttp2Session, e.g., SETTINGS ack callbacks. PiperOrigin-RevId: 411150817
diff --git a/http2/adapter/oghttp2_adapter.cc b/http2/adapter/oghttp2_adapter.cc index 1984173..c4c2e7b 100644 --- a/http2/adapter/oghttp2_adapter.cc +++ b/http2/adapter/oghttp2_adapter.cc
@@ -11,11 +11,9 @@ namespace { -using spdy::SpdyFrameIR; using spdy::SpdyGoAwayIR; using spdy::SpdyPingIR; using spdy::SpdyPriorityIR; -using spdy::SpdySettingsIR; using spdy::SpdyWindowUpdateIR; } // namespace @@ -39,11 +37,7 @@ } void OgHttp2Adapter::SubmitSettings(absl::Span<const Http2Setting> settings) { - auto settings_ir = absl::make_unique<SpdySettingsIR>(); - for (const Http2Setting& setting : settings) { - settings_ir->AddSetting(setting.id, setting.value); - } - session_->EnqueueFrame(std::move(settings_ir)); + session_->SubmitSettings(settings); } void OgHttp2Adapter::SubmitPriorityForStream(Http2StreamId stream_id,
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc index 0f1eb0d..399c90c 100644 --- a/http2/adapter/oghttp2_session.cc +++ b/http2/adapter/oghttp2_session.cc
@@ -19,6 +19,8 @@ using ConnectionError = Http2VisitorInterface::ConnectionError; using SpdyFramerError = Http2DecoderAdapter::SpdyFramerError; +using ::spdy::SpdySettingsIR; + // #define OGHTTP2_DEBUG_TRACE 1 #ifdef OGHTTP2_DEBUG_TRACE @@ -743,6 +745,14 @@ } } +void OgHttp2Session::SubmitSettings(absl::Span<const Http2Setting> settings) { + auto settings_ir = absl::make_unique<SpdySettingsIR>(); + for (const Http2Setting& setting : settings) { + settings_ir->AddSetting(setting.id, setting.value); + } + EnqueueFrame(std::move(settings_ir)); +} + void OgHttp2Session::OnError(SpdyFramerError error, std::string detailed_error) { QUICHE_VLOG(1) << "Error: " @@ -896,7 +906,7 @@ void OgHttp2Session::OnSettingsEnd() { visitor_.OnSettingsEnd(); - auto settings = absl::make_unique<spdy::SpdySettingsIR>(); + auto settings = absl::make_unique<SpdySettingsIR>(); settings->set_is_ack(true); EnqueueFrame(std::move(settings)); } @@ -1089,9 +1099,8 @@ // First frame must be a non-ack SETTINGS. if (frames_.empty() || frames_.front()->frame_type() != spdy::SpdyFrameType::SETTINGS || - reinterpret_cast<spdy::SpdySettingsIR*>(frames_.front().get()) - ->is_ack()) { - auto settings = absl::make_unique<spdy::SpdySettingsIR>(); + reinterpret_cast<SpdySettingsIR&>(*frames_.front()).is_ack()) { + auto settings = absl::make_unique<SpdySettingsIR>(); FillInitialSettingsFrame(*settings); frames_.push_front(std::move(settings)); } @@ -1099,7 +1108,7 @@ } } -void OgHttp2Session::FillInitialSettingsFrame(spdy::SpdySettingsIR& settings) { +void OgHttp2Session::FillInitialSettingsFrame(SpdySettingsIR& settings) { if (!IsServerSession()) { // Disable server push. Note that server push from clients is already // disabled, so the server does not need to send this disabling setting.
diff --git a/http2/adapter/oghttp2_session.h b/http2/adapter/oghttp2_session.h index 564ea76..ad007d4 100644 --- a/http2/adapter/oghttp2_session.h +++ b/http2/adapter/oghttp2_session.h
@@ -63,6 +63,7 @@ int SubmitTrailer(Http2StreamId stream_id, absl::Span<const Header> trailers); void SubmitMetadata(Http2StreamId stream_id, std::unique_ptr<MetadataSource> source); + void SubmitSettings(absl::Span<const Http2Setting> settings); bool IsServerSession() const { return options_.perspective == Perspective::kServer;