Uses a switch statement when interpreting HTTP/2 SETTINGS identifiers. PiperOrigin-RevId: 427541081
diff --git a/http2/adapter/oghttp2_session.cc b/http2/adapter/oghttp2_session.cc index a0c2b6f..98e200b 100644 --- a/http2/adapter/oghttp2_session.cc +++ b/http2/adapter/oghttp2_session.cc
@@ -1185,28 +1185,37 @@ } void OgHttp2Session::OnSetting(spdy::SpdySettingsId id, uint32_t value) { - visitor_.OnSetting({id, value}); - if (id == kMetadataExtensionId) { - peer_supports_metadata_ = (value != 0); - } else if (id == MAX_FRAME_SIZE) { - max_frame_payload_ = value; - } else if (id == MAX_CONCURRENT_STREAMS) { - max_outbound_concurrent_streams_ = value; - } else if (id == HEADER_TABLE_SIZE) { - value = std::min(value, HpackCapacityBound(options_)); - if (value < framer_.GetHpackEncoder()->CurrentHeaderTableSizeSetting()) { - // Safe to apply a smaller table capacity immediately. - QUICHE_VLOG(2) << TracePerspectiveAsString(options_.perspective) - << " applying encoder table capacity " << value; - framer_.GetHpackEncoder()->ApplyHeaderTableSizeSetting(value); - } else { - QUICHE_VLOG(2) - << TracePerspectiveAsString(options_.perspective) - << " NOT applying encoder table capacity until writing ack: " - << value; - encoder_header_table_capacity_when_acking_ = value; - } + switch (id) { + case MAX_FRAME_SIZE: + max_frame_payload_ = value; + break; + case MAX_CONCURRENT_STREAMS: + max_outbound_concurrent_streams_ = value; + break; + case HEADER_TABLE_SIZE: + value = std::min(value, HpackCapacityBound(options_)); + if (value < framer_.GetHpackEncoder()->CurrentHeaderTableSizeSetting()) { + // Safe to apply a smaller table capacity immediately. + QUICHE_VLOG(2) << TracePerspectiveAsString(options_.perspective) + << " applying encoder table capacity " << value; + framer_.GetHpackEncoder()->ApplyHeaderTableSizeSetting(value); + } else { + QUICHE_VLOG(2) + << TracePerspectiveAsString(options_.perspective) + << " NOT applying encoder table capacity until writing ack: " + << value; + encoder_header_table_capacity_when_acking_ = value; + } + break; + default: + // TODO(bnc): See if C++17 inline constants are allowed in QUICHE. + if (id == kMetadataExtensionId) { + peer_supports_metadata_ = (value != 0); + } else { + QUICHE_VLOG(1) << "Unimplemented SETTING id: " << id; + } } + visitor_.OnSetting({id, value}); } void OgHttp2Session::OnSettingsEnd() {