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;