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;