Move the capsule parser into //third_party/quiche/common.
Capsules are not specific to HTTP/3, thus they should live in the common code.
PiperOrigin-RevId: 502730881
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 91be1a0..556b344 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -20,6 +20,7 @@
"balsa/noop_balsa_visitor.h",
"balsa/simple_buffer.h",
"balsa/standard_header_map.h",
+ "common/capsule.h",
"common/masque/connect_udp_datagram_payload.h",
"common/platform/api/quiche_bug_tracker.h",
"common/platform/api/quiche_client_stats.h",
@@ -219,7 +220,6 @@
"quic/core/frames/quic_streams_blocked_frame.h",
"quic/core/frames/quic_window_update_frame.h",
"quic/core/handshaker_delegate_interface.h",
- "quic/core/http/capsule.h",
"quic/core/http/http_constants.h",
"quic/core/http/http_decoder.h",
"quic/core/http/http_encoder.h",
@@ -409,6 +409,7 @@
"balsa/http_validation_policy.cc",
"balsa/simple_buffer.cc",
"balsa/standard_header_map.cc",
+ "common/capsule.cc",
"common/masque/connect_udp_datagram_payload.cc",
"common/platform/api/quiche_hostname_utils.cc",
"common/platform/api/quiche_mutex.cc",
@@ -564,7 +565,6 @@
"quic/core/frames/quic_stream_frame.cc",
"quic/core/frames/quic_streams_blocked_frame.cc",
"quic/core/frames/quic_window_update_frame.cc",
- "quic/core/http/capsule.cc",
"quic/core/http/http_constants.cc",
"quic/core/http/http_decoder.cc",
"quic/core/http/http_encoder.cc",
@@ -1025,6 +1025,7 @@
"balsa/header_properties_test.cc",
"balsa/simple_buffer_test.cc",
"binary_http/binary_http_message_test.cc",
+ "common/capsule_test.cc",
"common/masque/connect_udp_datagram_payload_test.cc",
"common/platform/api/quiche_file_utils_test.cc",
"common/platform/api/quiche_hostname_utils_test.cc",
@@ -1154,7 +1155,6 @@
"quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
"quic/core/deterministic_connection_id_generator_test.cc",
"quic/core/frames/quic_frames_test.cc",
- "quic/core/http/capsule_test.cc",
"quic/core/http/http_decoder_test.cc",
"quic/core/http/http_encoder_test.cc",
"quic/core/http/http_frames_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index 965802a..22a646d 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -20,6 +20,7 @@
"src/quiche/balsa/noop_balsa_visitor.h",
"src/quiche/balsa/simple_buffer.h",
"src/quiche/balsa/standard_header_map.h",
+ "src/quiche/common/capsule.h",
"src/quiche/common/masque/connect_udp_datagram_payload.h",
"src/quiche/common/platform/api/quiche_bug_tracker.h",
"src/quiche/common/platform/api/quiche_client_stats.h",
@@ -219,7 +220,6 @@
"src/quiche/quic/core/frames/quic_streams_blocked_frame.h",
"src/quiche/quic/core/frames/quic_window_update_frame.h",
"src/quiche/quic/core/handshaker_delegate_interface.h",
- "src/quiche/quic/core/http/capsule.h",
"src/quiche/quic/core/http/http_constants.h",
"src/quiche/quic/core/http/http_decoder.h",
"src/quiche/quic/core/http/http_encoder.h",
@@ -409,6 +409,7 @@
"src/quiche/balsa/http_validation_policy.cc",
"src/quiche/balsa/simple_buffer.cc",
"src/quiche/balsa/standard_header_map.cc",
+ "src/quiche/common/capsule.cc",
"src/quiche/common/masque/connect_udp_datagram_payload.cc",
"src/quiche/common/platform/api/quiche_hostname_utils.cc",
"src/quiche/common/platform/api/quiche_mutex.cc",
@@ -564,7 +565,6 @@
"src/quiche/quic/core/frames/quic_stream_frame.cc",
"src/quiche/quic/core/frames/quic_streams_blocked_frame.cc",
"src/quiche/quic/core/frames/quic_window_update_frame.cc",
- "src/quiche/quic/core/http/capsule.cc",
"src/quiche/quic/core/http/http_constants.cc",
"src/quiche/quic/core/http/http_decoder.cc",
"src/quiche/quic/core/http/http_encoder.cc",
@@ -1025,6 +1025,7 @@
"src/quiche/balsa/header_properties_test.cc",
"src/quiche/balsa/simple_buffer_test.cc",
"src/quiche/binary_http/binary_http_message_test.cc",
+ "src/quiche/common/capsule_test.cc",
"src/quiche/common/masque/connect_udp_datagram_payload_test.cc",
"src/quiche/common/platform/api/quiche_file_utils_test.cc",
"src/quiche/common/platform/api/quiche_hostname_utils_test.cc",
@@ -1154,7 +1155,6 @@
"src/quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
"src/quiche/quic/core/deterministic_connection_id_generator_test.cc",
"src/quiche/quic/core/frames/quic_frames_test.cc",
- "src/quiche/quic/core/http/capsule_test.cc",
"src/quiche/quic/core/http/http_decoder_test.cc",
"src/quiche/quic/core/http/http_encoder_test.cc",
"src/quiche/quic/core/http/http_frames_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index a79092f..495f110 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -19,6 +19,7 @@
"quiche/balsa/noop_balsa_visitor.h",
"quiche/balsa/simple_buffer.h",
"quiche/balsa/standard_header_map.h",
+ "quiche/common/capsule.h",
"quiche/common/masque/connect_udp_datagram_payload.h",
"quiche/common/platform/api/quiche_bug_tracker.h",
"quiche/common/platform/api/quiche_client_stats.h",
@@ -218,7 +219,6 @@
"quiche/quic/core/frames/quic_streams_blocked_frame.h",
"quiche/quic/core/frames/quic_window_update_frame.h",
"quiche/quic/core/handshaker_delegate_interface.h",
- "quiche/quic/core/http/capsule.h",
"quiche/quic/core/http/http_constants.h",
"quiche/quic/core/http/http_decoder.h",
"quiche/quic/core/http/http_encoder.h",
@@ -408,6 +408,7 @@
"quiche/balsa/http_validation_policy.cc",
"quiche/balsa/simple_buffer.cc",
"quiche/balsa/standard_header_map.cc",
+ "quiche/common/capsule.cc",
"quiche/common/masque/connect_udp_datagram_payload.cc",
"quiche/common/platform/api/quiche_hostname_utils.cc",
"quiche/common/platform/api/quiche_mutex.cc",
@@ -563,7 +564,6 @@
"quiche/quic/core/frames/quic_stream_frame.cc",
"quiche/quic/core/frames/quic_streams_blocked_frame.cc",
"quiche/quic/core/frames/quic_window_update_frame.cc",
- "quiche/quic/core/http/capsule.cc",
"quiche/quic/core/http/http_constants.cc",
"quiche/quic/core/http/http_decoder.cc",
"quiche/quic/core/http/http_encoder.cc",
@@ -1024,6 +1024,7 @@
"quiche/balsa/header_properties_test.cc",
"quiche/balsa/simple_buffer_test.cc",
"quiche/binary_http/binary_http_message_test.cc",
+ "quiche/common/capsule_test.cc",
"quiche/common/masque/connect_udp_datagram_payload_test.cc",
"quiche/common/platform/api/quiche_file_utils_test.cc",
"quiche/common/platform/api/quiche_hostname_utils_test.cc",
@@ -1153,7 +1154,6 @@
"quiche/quic/core/crypto/web_transport_fingerprint_proof_verifier_test.cc",
"quiche/quic/core/deterministic_connection_id_generator_test.cc",
"quiche/quic/core/frames/quic_frames_test.cc",
- "quiche/quic/core/http/capsule_test.cc",
"quiche/quic/core/http/http_decoder_test.cc",
"quiche/quic/core/http/http_encoder_test.cc",
"quiche/quic/core/http/http_frames_test.cc",
diff --git a/quiche/quic/core/http/capsule.cc b/quiche/common/capsule.cc
similarity index 87%
rename from quiche/quic/core/http/capsule.cc
rename to quiche/common/capsule.cc
index 6d9d5c8..0237a7f 100644
--- a/quiche/quic/core/http/capsule.cc
+++ b/quiche/common/capsule.cc
@@ -2,23 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "quiche/quic/core/http/capsule.h"
+#include "quiche/common/capsule.h"
#include <type_traits>
#include "absl/strings/escaping.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
-#include "quiche/quic/core/http/http_frames.h"
-#include "quiche/quic/core/quic_data_reader.h"
-#include "quiche/quic/core/quic_data_writer.h"
-#include "quiche/quic/core/quic_types.h"
-#include "quiche/quic/platform/api/quic_bug_tracker.h"
-#include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/common/platform/api/quiche_bug_tracker.h"
#include "quiche/common/platform/api/quiche_logging.h"
+#include "quiche/common/quiche_data_reader.h"
+#include "quiche/common/quiche_data_writer.h"
#include "quiche/common/quiche_ip_address.h"
+#include "quiche/web_transport/web_transport.h"
-namespace quic {
+namespace quiche {
std::string CapsuleTypeToString(CapsuleType capsule_type) {
switch (capsule_type) {
@@ -142,8 +140,9 @@
}
// static
-Capsule Capsule::CloseWebTransportSession(WebTransportSessionError error_code,
- absl::string_view error_message) {
+Capsule Capsule::CloseWebTransportSession(
+ webtransport::SessionErrorCode error_code,
+ absl::string_view error_message) {
Capsule capsule(CapsuleType::CLOSE_WEBTRANSPORT_SESSION);
capsule.close_web_transport_session_capsule().error_code = error_code;
capsule.close_web_transport_session_capsule().error_message = error_message;
@@ -332,9 +331,9 @@
quiche::QuicheBuffer SerializeCapsule(
const Capsule& capsule, quiche::QuicheBufferAllocator* allocator) {
- QuicByteCount capsule_type_length = QuicDataWriter::GetVarInt62Len(
+ size_t capsule_type_length = QuicheDataWriter::GetVarInt62Len(
static_cast<uint64_t>(capsule.capsule_type()));
- QuicByteCount capsule_data_length;
+ size_t capsule_data_length;
switch (capsule.capsule_type()) {
case CapsuleType::DATAGRAM:
capsule_data_length =
@@ -350,7 +349,7 @@
break;
case CapsuleType::CLOSE_WEBTRANSPORT_SESSION:
capsule_data_length =
- sizeof(WebTransportSessionError) +
+ sizeof(webtransport::SessionErrorCode) +
capsule.close_web_transport_session_capsule().error_message.size();
break;
case CapsuleType::ADDRESS_REQUEST:
@@ -358,10 +357,10 @@
for (auto requested_address :
capsule.address_request_capsule().requested_addresses) {
capsule_data_length +=
- QuicDataWriter::GetVarInt62Len(requested_address.request_id) + 1 +
+ QuicheDataWriter::GetVarInt62Len(requested_address.request_id) + 1 +
(requested_address.ip_prefix.address().IsIPv4()
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize) +
+ ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize) +
1;
}
break;
@@ -370,10 +369,10 @@
for (auto assigned_address :
capsule.address_assign_capsule().assigned_addresses) {
capsule_data_length +=
- QuicDataWriter::GetVarInt62Len(assigned_address.request_id) + 1 +
+ QuicheDataWriter::GetVarInt62Len(assigned_address.request_id) + 1 +
(assigned_address.ip_prefix.address().IsIPv4()
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize) +
+ ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize) +
1;
}
break;
@@ -383,8 +382,8 @@
capsule.route_advertisement_capsule().ip_address_ranges) {
capsule_data_length += 1 +
(ip_address_range.start_ip_address.IsIPv4()
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize) *
+ ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize) *
2 +
1;
}
@@ -393,25 +392,25 @@
capsule_data_length = capsule.unknown_capsule_data().length();
break;
}
- QuicByteCount capsule_length_length =
- QuicDataWriter::GetVarInt62Len(capsule_data_length);
- QuicByteCount total_capsule_length =
+ size_t capsule_length_length =
+ QuicheDataWriter::GetVarInt62Len(capsule_data_length);
+ size_t total_capsule_length =
capsule_type_length + capsule_length_length + capsule_data_length;
quiche::QuicheBuffer buffer(allocator, total_capsule_length);
- QuicDataWriter writer(buffer.size(), buffer.data());
+ QuicheDataWriter writer(buffer.size(), buffer.data());
if (!writer.WriteVarInt62(static_cast<uint64_t>(capsule.capsule_type()))) {
- QUIC_BUG(capsule type write fail) << "Failed to write CAPSULE type";
+ QUICHE_BUG(capsule type write fail) << "Failed to write CAPSULE type";
return {};
}
if (!writer.WriteVarInt62(capsule_data_length)) {
- QUIC_BUG(capsule length write fail) << "Failed to write CAPSULE length";
+ QUICHE_BUG(capsule length write fail) << "Failed to write CAPSULE length";
return {};
}
switch (capsule.capsule_type()) {
case CapsuleType::DATAGRAM:
if (!writer.WriteStringPiece(
capsule.datagram_capsule().http_datagram_payload)) {
- QUIC_BUG(datagram capsule payload write fail)
+ QUICHE_BUG(datagram capsule payload write fail)
<< "Failed to write DATAGRAM CAPSULE payload";
return {};
}
@@ -419,7 +418,7 @@
case CapsuleType::LEGACY_DATAGRAM:
if (!writer.WriteStringPiece(
capsule.legacy_datagram_capsule().http_datagram_payload)) {
- QUIC_BUG(datagram legacy capsule payload write fail)
+ QUICHE_BUG(datagram legacy capsule payload write fail)
<< "Failed to write LEGACY_DATAGRAM CAPSULE payload";
return {};
}
@@ -428,7 +427,7 @@
if (!writer.WriteStringPiece(
capsule.legacy_datagram_without_context_capsule()
.http_datagram_payload)) {
- QUIC_BUG(datagram legacy without context capsule payload write fail)
+ QUICHE_BUG(datagram legacy without context capsule payload write fail)
<< "Failed to write LEGACY_DATAGRAM_WITHOUT_CONTEXT CAPSULE "
"payload";
return {};
@@ -437,13 +436,13 @@
case CapsuleType::CLOSE_WEBTRANSPORT_SESSION:
if (!writer.WriteUInt32(
capsule.close_web_transport_session_capsule().error_code)) {
- QUIC_BUG(close webtransport session capsule error code write fail)
+ QUICHE_BUG(close webtransport session capsule error code write fail)
<< "Failed to write CLOSE_WEBTRANSPORT_SESSION error code";
return {};
}
if (!writer.WriteStringPiece(
capsule.close_web_transport_session_capsule().error_message)) {
- QUIC_BUG(close webtransport session capsule error message write fail)
+ QUICHE_BUG(close webtransport session capsule error message write fail)
<< "Failed to write CLOSE_WEBTRANSPORT_SESSION error message";
return {};
}
@@ -452,24 +451,24 @@
for (auto requested_address :
capsule.address_request_capsule().requested_addresses) {
if (!writer.WriteVarInt62(requested_address.request_id)) {
- QUIC_BUG(address request capsule id write fail)
+ QUICHE_BUG(address request capsule id write fail)
<< "Failed to write ADDRESS_REQUEST ID";
return {};
}
if (!writer.WriteUInt8(
requested_address.ip_prefix.address().IsIPv4() ? 4 : 6)) {
- QUIC_BUG(address request capsule family write fail)
+ QUICHE_BUG(address request capsule family write fail)
<< "Failed to write ADDRESS_REQUEST family";
return {};
}
if (!writer.WriteStringPiece(
requested_address.ip_prefix.address().ToPackedString())) {
- QUIC_BUG(address request capsule address write fail)
+ QUICHE_BUG(address request capsule address write fail)
<< "Failed to write ADDRESS_REQUEST address";
return {};
}
if (!writer.WriteUInt8(requested_address.ip_prefix.prefix_length())) {
- QUIC_BUG(address request capsule prefix length write fail)
+ QUICHE_BUG(address request capsule prefix length write fail)
<< "Failed to write ADDRESS_REQUEST prefix length";
return {};
}
@@ -479,24 +478,24 @@
for (auto assigned_address :
capsule.address_assign_capsule().assigned_addresses) {
if (!writer.WriteVarInt62(assigned_address.request_id)) {
- QUIC_BUG(address request capsule id write fail)
+ QUICHE_BUG(address request capsule id write fail)
<< "Failed to write ADDRESS_ASSIGN ID";
return {};
}
if (!writer.WriteUInt8(
assigned_address.ip_prefix.address().IsIPv4() ? 4 : 6)) {
- QUIC_BUG(address request capsule family write fail)
+ QUICHE_BUG(address request capsule family write fail)
<< "Failed to write ADDRESS_ASSIGN family";
return {};
}
if (!writer.WriteStringPiece(
assigned_address.ip_prefix.address().ToPackedString())) {
- QUIC_BUG(address request capsule address write fail)
+ QUICHE_BUG(address request capsule address write fail)
<< "Failed to write ADDRESS_ASSIGN address";
return {};
}
if (!writer.WriteUInt8(assigned_address.ip_prefix.prefix_length())) {
- QUIC_BUG(address request capsule prefix length write fail)
+ QUICHE_BUG(address request capsule prefix length write fail)
<< "Failed to write ADDRESS_ASSIGN prefix length";
return {};
}
@@ -507,24 +506,24 @@
capsule.route_advertisement_capsule().ip_address_ranges) {
if (!writer.WriteUInt8(
ip_address_range.start_ip_address.IsIPv4() ? 4 : 6)) {
- QUIC_BUG(route advertisement capsule family write fail)
+ QUICHE_BUG(route advertisement capsule family write fail)
<< "Failed to write ROUTE_ADVERTISEMENT family";
return {};
}
if (!writer.WriteStringPiece(
ip_address_range.start_ip_address.ToPackedString())) {
- QUIC_BUG(route advertisement capsule start address write fail)
+ QUICHE_BUG(route advertisement capsule start address write fail)
<< "Failed to write ROUTE_ADVERTISEMENT start address";
return {};
}
if (!writer.WriteStringPiece(
ip_address_range.end_ip_address.ToPackedString())) {
- QUIC_BUG(route advertisement capsule end address write fail)
+ QUICHE_BUG(route advertisement capsule end address write fail)
<< "Failed to write ROUTE_ADVERTISEMENT end address";
return {};
}
if (!writer.WriteUInt8(ip_address_range.ip_protocol)) {
- QUIC_BUG(route advertisement capsule IP protocol write fail)
+ QUICHE_BUG(route advertisement capsule IP protocol write fail)
<< "Failed to write ROUTE_ADVERTISEMENT IP protocol";
return {};
}
@@ -532,13 +531,13 @@
break;
default:
if (!writer.WriteStringPiece(capsule.unknown_capsule_data())) {
- QUIC_BUG(capsule data write fail) << "Failed to write CAPSULE data";
+ QUICHE_BUG(capsule data write fail) << "Failed to write CAPSULE data";
return {};
}
break;
}
if (writer.remaining() != 0) {
- QUIC_BUG(capsule write length mismatch)
+ QUICHE_BUG(capsule write length mismatch)
<< "CAPSULE serialization wrote " << writer.length() << " instead of "
<< writer.capacity();
return {};
@@ -577,19 +576,20 @@
if (buffered_data_.empty()) {
return 0;
}
- QuicDataReader capsule_fragment_reader(buffered_data_);
+ QuicheDataReader capsule_fragment_reader(buffered_data_);
uint64_t capsule_type64;
if (!capsule_fragment_reader.ReadVarInt62(&capsule_type64)) {
- QUIC_DVLOG(2) << "Partial read: not enough data to read capsule type";
+ QUICHE_DVLOG(2) << "Partial read: not enough data to read capsule type";
return 0;
}
absl::string_view capsule_data;
if (!capsule_fragment_reader.ReadStringPieceVarInt62(&capsule_data)) {
- QUIC_DVLOG(2) << "Partial read: not enough data to read capsule length or "
- "full capsule data";
+ QUICHE_DVLOG(2)
+ << "Partial read: not enough data to read capsule length or "
+ "full capsule data";
return 0;
}
- QuicDataReader capsule_data_reader(capsule_data);
+ QuicheDataReader capsule_data_reader(capsule_data);
Capsule capsule(static_cast<CapsuleType>(capsule_type64));
switch (capsule.capsule_type()) {
case CapsuleType::DATAGRAM:
@@ -634,8 +634,8 @@
absl::string_view ip_address_bytes;
if (!capsule_data_reader.ReadStringPiece(
&ip_address_bytes, address_family == 4
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize)) {
+ ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize)) {
ReportParseFailure("Unable to read capsule ADDRESS_REQUEST address");
return 0;
}
@@ -682,8 +682,8 @@
absl::string_view ip_address_bytes;
if (!capsule_data_reader.ReadStringPiece(
&ip_address_bytes, address_family == 4
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize)) {
+ ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize)) {
ReportParseFailure("Unable to read capsule ADDRESS_ASSIGN address");
return 0;
}
@@ -726,8 +726,8 @@
absl::string_view start_ip_address_bytes;
if (!capsule_data_reader.ReadStringPiece(
&start_ip_address_bytes,
- address_family == 4 ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize)) {
+ address_family == 4 ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize)) {
ReportParseFailure(
"Unable to read capsule ROUTE_ADVERTISEMENT start address");
return 0;
@@ -740,9 +740,9 @@
}
absl::string_view end_ip_address_bytes;
if (!capsule_data_reader.ReadStringPiece(
- &end_ip_address_bytes, address_family == 4
- ? QuicIpAddress::kIPv4AddressSize
- : QuicIpAddress::kIPv6AddressSize)) {
+ &end_ip_address_bytes,
+ address_family == 4 ? QuicheIpAddress::kIPv4AddressSize
+ : QuicheIpAddress::kIPv6AddressSize)) {
ReportParseFailure(
"Unable to read capsule ROUTE_ADVERTISEMENT end address");
return 0;
@@ -775,7 +775,7 @@
void CapsuleParser::ReportParseFailure(const std::string& error_message) {
if (parsing_error_occurred_) {
- QUIC_BUG(multiple parse errors) << "Experienced multiple parse failures";
+ QUICHE_BUG(multiple parse errors) << "Experienced multiple parse failures";
return;
}
parsing_error_occurred_ = true;
@@ -815,4 +815,4 @@
return ip_address_ranges == other.ip_address_ranges;
}
-} // namespace quic
+} // namespace quiche
diff --git a/quiche/quic/core/http/capsule.h b/quiche/common/capsule.h
similarity index 86%
rename from quiche/quic/core/http/capsule.h
rename to quiche/common/capsule.h
index 198f667..85292c4 100644
--- a/quiche/quic/core/http/capsule.h
+++ b/quiche/common/capsule.h
@@ -2,23 +2,21 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
-#define QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
+#ifndef QUICHE_COMMON_CAPSULE_H_
+#define QUICHE_COMMON_CAPSULE_H_
#include <cstdint>
#include <string>
#include <vector>
-#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
-#include "quiche/quic/core/quic_data_reader.h"
-#include "quiche/quic/core/quic_types.h"
#include "quiche/common/platform/api/quiche_logging.h"
#include "quiche/common/quiche_buffer_allocator.h"
#include "quiche/common/quiche_ip_address.h"
+#include "quiche/web_transport/web_transport.h"
-namespace quic {
+namespace quiche {
enum class CapsuleType : uint64_t {
// Casing in this enum matches the IETF specifications.
@@ -33,49 +31,49 @@
ROUTE_ADVERTISEMENT = 0x1ECA6A02,
};
-QUIC_EXPORT_PRIVATE std::string CapsuleTypeToString(CapsuleType capsule_type);
-QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
- const CapsuleType& capsule_type);
+QUICHE_EXPORT std::string CapsuleTypeToString(CapsuleType capsule_type);
+QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+ const CapsuleType& capsule_type);
-struct QUIC_EXPORT_PRIVATE DatagramCapsule {
+struct QUICHE_EXPORT DatagramCapsule {
absl::string_view http_datagram_payload;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE LegacyDatagramCapsule {
+struct QUICHE_EXPORT LegacyDatagramCapsule {
absl::string_view http_datagram_payload;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE LegacyDatagramWithoutContextCapsule {
+struct QUICHE_EXPORT LegacyDatagramWithoutContextCapsule {
absl::string_view http_datagram_payload;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE CloseWebTransportSessionCapsule {
- WebTransportSessionError error_code;
+struct QUICHE_EXPORT CloseWebTransportSessionCapsule {
+ webtransport::SessionErrorCode error_code;
absl::string_view error_message;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE PrefixWithId {
+struct QUICHE_EXPORT PrefixWithId {
uint64_t request_id;
quiche::QuicheIpPrefix ip_prefix;
bool operator==(const PrefixWithId& other) const;
};
-struct QUIC_EXPORT_PRIVATE IpAddressRange {
+struct QUICHE_EXPORT IpAddressRange {
quiche::QuicheIpAddress start_ip_address;
quiche::QuicheIpAddress end_ip_address;
uint8_t ip_protocol;
bool operator==(const IpAddressRange& other) const;
};
-struct QUIC_EXPORT_PRIVATE AddressAssignCapsule {
+struct QUICHE_EXPORT AddressAssignCapsule {
std::vector<PrefixWithId> assigned_addresses;
bool operator==(const AddressAssignCapsule& other) const;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE AddressRequestCapsule {
+struct QUICHE_EXPORT AddressRequestCapsule {
std::vector<PrefixWithId> requested_addresses;
bool operator==(const AddressRequestCapsule& other) const;
std::string ToString() const;
};
-struct QUIC_EXPORT_PRIVATE RouteAdvertisementCapsule {
+struct QUICHE_EXPORT RouteAdvertisementCapsule {
std::vector<IpAddressRange> ip_address_ranges;
bool operator==(const RouteAdvertisementCapsule& other) const;
std::string ToString() const;
@@ -86,7 +84,7 @@
// points to. Strings saved into a capsule must outlive the capsule object. Any
// code that sees a capsule in a callback needs to either process it immediately
// or perform its own deep copy.
-class QUIC_EXPORT_PRIVATE Capsule {
+class QUICHE_EXPORT Capsule {
public:
static Capsule Datagram(
absl::string_view http_datagram_payload = absl::string_view());
@@ -95,7 +93,7 @@
static Capsule LegacyDatagramWithoutContext(
absl::string_view http_datagram_payload = absl::string_view());
static Capsule CloseWebTransportSession(
- WebTransportSessionError error_code = 0,
+ webtransport::SessionErrorCode error_code = 0,
absl::string_view error_message = "");
static Capsule AddressRequest();
static Capsule AddressAssign();
@@ -112,8 +110,8 @@
// Human-readable information string for debugging purposes.
std::string ToString() const;
- friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
- const Capsule& capsule);
+ friend QUICHE_EXPORT std::ostream& operator<<(std::ostream& os,
+ const Capsule& capsule);
CapsuleType capsule_type() const { return capsule_type_; }
DatagramCapsule& datagram_capsule() {
@@ -222,9 +220,9 @@
class CapsuleParserPeer;
} // namespace test
-class QUIC_EXPORT_PRIVATE CapsuleParser {
+class QUICHE_EXPORT CapsuleParser {
public:
- class QUIC_EXPORT_PRIVATE Visitor {
+ class QUICHE_EXPORT Visitor {
public:
virtual ~Visitor() {}
@@ -268,9 +266,9 @@
};
// Serializes |capsule| into a newly allocated buffer.
-QUIC_EXPORT_PRIVATE quiche::QuicheBuffer SerializeCapsule(
+QUICHE_EXPORT quiche::QuicheBuffer SerializeCapsule(
const Capsule& capsule, quiche::QuicheBufferAllocator* allocator);
-} // namespace quic
+} // namespace quiche
-#endif // QUICHE_QUIC_CORE_HTTP_CAPSULE_H_
+#endif // QUICHE_COMMON_CAPSULE_H_
diff --git a/quiche/quic/core/http/capsule_test.cc b/quiche/common/capsule_test.cc
similarity index 97%
rename from quiche/quic/core/http/capsule_test.cc
rename to quiche/common/capsule_test.cc
index 95869c6..23d7533 100644
--- a/quiche/quic/core/http/capsule_test.cc
+++ b/quiche/common/capsule_test.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "quiche/quic/core/http/capsule.h"
+#include "quiche/common/capsule.h"
#include <cstddef>
#include <deque>
@@ -11,16 +11,16 @@
#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
-#include "quiche/quic/platform/api/quic_test.h"
-#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/common/quiche_ip_address.h"
+#include "quiche/common/simple_buffer_allocator.h"
#include "quiche/common/test_tools/quiche_test_utils.h"
using ::testing::_;
using ::testing::InSequence;
using ::testing::Return;
-namespace quic {
+namespace quiche {
namespace test {
class CapsuleParserPeer {
@@ -43,7 +43,7 @@
(override));
};
-class CapsuleTest : public QuicTest {
+class CapsuleTest : public QuicheTest {
public:
CapsuleTest() : capsule_parser_(&visitor_) {}
@@ -57,7 +57,7 @@
void TestSerialization(const Capsule& capsule,
const std::string& expected_bytes) {
quiche::QuicheBuffer serialized_capsule =
- SerializeCapsule(capsule, quiche::SimpleBufferAllocator::Get());
+ SerializeCapsule(capsule, SimpleBufferAllocator::Get());
quiche::test::CompareCharArraysWithHexError(
"Serialized capsule", serialized_capsule.data(),
serialized_capsule.size(), expected_bytes.data(),
@@ -389,4 +389,4 @@
} // namespace
} // namespace test
-} // namespace quic
+} // namespace quiche
diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc
index 839e330..90e5341 100644
--- a/quiche/quic/core/http/quic_spdy_stream.cc
+++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -14,7 +14,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "quiche/http2/http2_constants.h"
-#include "quiche/quic/core/http/capsule.h"
#include "quiche/quic/core/http/http_constants.h"
#include "quiche/quic/core/http/http_decoder.h"
#include "quiche/quic/core/http/http_frames.h"
@@ -32,11 +31,14 @@
#include "quiche/quic/platform/api/quic_flag_utils.h"
#include "quiche/quic/platform/api/quic_flags.h"
#include "quiche/quic/platform/api/quic_logging.h"
+#include "quiche/common/capsule.h"
#include "quiche/common/quiche_mem_slice_storage.h"
#include "quiche/common/quiche_text_utils.h"
#include "quiche/spdy/core/spdy_protocol.h"
-using spdy::Http2HeaderBlock;
+using ::quiche::Capsule;
+using ::quiche::CapsuleType;
+using ::spdy::Http2HeaderBlock;
namespace quic {
@@ -1444,7 +1446,7 @@
}
datagram_visitor_ = visitor;
QUICHE_DCHECK(!capsule_parser_);
- capsule_parser_ = std::make_unique<CapsuleParser>(this);
+ capsule_parser_ = std::make_unique<quiche::CapsuleParser>(this);
}
void QuicSpdyStream::UnregisterHttp3DatagramVisitor() {
diff --git a/quiche/quic/core/http/quic_spdy_stream.h b/quiche/quic/core/http/quic_spdy_stream.h
index 450e154..887facb 100644
--- a/quiche/quic/core/http/quic_spdy_stream.h
+++ b/quiche/quic/core/http/quic_spdy_stream.h
@@ -19,7 +19,6 @@
#include "absl/base/attributes.h"
#include "absl/strings/string_view.h"
#include "absl/types/span.h"
-#include "quiche/quic/core/http/capsule.h"
#include "quiche/quic/core/http/http_decoder.h"
#include "quiche/quic/core/http/http_encoder.h"
#include "quiche/quic/core/http/quic_header_list.h"
@@ -36,6 +35,7 @@
#include "quiche/quic/platform/api/quic_export.h"
#include "quiche/quic/platform/api/quic_flags.h"
#include "quiche/quic/platform/api/quic_socket_address.h"
+#include "quiche/common/capsule.h"
#include "quiche/common/platform/api/quiche_mem_slice.h"
#include "quiche/spdy/core/http2_header_block.h"
#include "quiche/spdy/core/spdy_framer.h"
@@ -53,7 +53,7 @@
// A QUIC stream that can send and receive HTTP2 (SPDY) headers.
class QUIC_EXPORT_PRIVATE QuicSpdyStream
: public QuicStream,
- public CapsuleParser::Visitor,
+ public quiche::CapsuleParser::Visitor,
public QpackDecodedHeadersAccumulator::Visitor {
public:
// Visitor receives callbacks from the stream.
@@ -256,7 +256,7 @@
bool CanWriteNewBodyData(QuicByteCount write_size) const;
// From CapsuleParser::Visitor.
- bool OnCapsule(const Capsule& capsule) override;
+ bool OnCapsule(const quiche::Capsule& capsule) override;
void OnCapsuleParseFailure(const std::string& error_message) override;
// Sends an HTTP/3 datagram. The stream ID is not part of |payload|. Virtual
@@ -290,11 +290,11 @@
virtual ~ConnectIpVisitor() {}
virtual bool OnAddressAssignCapsule(
- const AddressAssignCapsule& capsule) = 0;
+ const quiche::AddressAssignCapsule& capsule) = 0;
virtual bool OnAddressRequestCapsule(
- const AddressRequestCapsule& capsule) = 0;
+ const quiche::AddressRequestCapsule& capsule) = 0;
virtual bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) = 0;
+ const quiche::RouteAdvertisementCapsule& capsule) = 0;
virtual void OnHeadersWritten() = 0;
};
@@ -318,7 +318,7 @@
QuicByteCount GetMaxDatagramSize() const;
// Writes |capsule| onto the DATA stream.
- void WriteCapsule(const Capsule& capsule, bool fin = false);
+ void WriteCapsule(const quiche::Capsule& capsule, bool fin = false);
void WriteGreaseCapsule();
@@ -452,7 +452,7 @@
// the sequencer each time new stream data is processed.
QuicSpdyStreamBodyManager body_manager_;
- std::unique_ptr<CapsuleParser> capsule_parser_;
+ std::unique_ptr<quiche::CapsuleParser> capsule_parser_;
// Sequencer offset keeping track of how much data HttpDecoder has processed.
// Initial value is zero for fresh streams, or sequencer()->NumBytesConsumed()
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc
index 1ab50a0..dc15654 100644
--- a/quiche/quic/core/http/quic_spdy_stream_test.cc
+++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -15,7 +15,6 @@
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/core/crypto/null_encrypter.h"
-#include "quiche/quic/core/http/capsule.h"
#include "quiche/quic/core/http/http_encoder.h"
#include "quiche/quic/core/http/quic_spdy_session.h"
#include "quiche/quic/core/http/spdy_utils.h"
@@ -37,10 +36,13 @@
#include "quiche/quic/test_tools/quic_spdy_stream_peer.h"
#include "quiche/quic/test_tools/quic_stream_peer.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/capsule.h"
#include "quiche/common/quiche_ip_address.h"
#include "quiche/common/quiche_mem_slice_storage.h"
#include "quiche/common/simple_buffer_allocator.h"
+using quiche::Capsule;
+using quiche::IpAddressRange;
using spdy::Http2HeaderBlock;
using spdy::kV3HighestPriority;
using spdy::kV3LowestPriority;
@@ -3195,7 +3197,7 @@
ElementsAre(SavingHttp3DatagramVisitor::SavedHttp3Datagram{
stream_->id(), http_datagram_payload}));
// Address assign capsule.
- PrefixWithId ip_prefix_with_id;
+ quiche::PrefixWithId ip_prefix_with_id;
ip_prefix_with_id.request_id = 1;
quiche::QuicheIpAddress ip_address;
ip_address.FromString("::");
diff --git a/quiche/quic/core/http/web_transport_http3.cc b/quiche/quic/core/http/web_transport_http3.cc
index d74071d..91372d5 100644
--- a/quiche/quic/core/http/web_transport_http3.cc
+++ b/quiche/quic/core/http/web_transport_http3.cc
@@ -9,7 +9,6 @@
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
-#include "quiche/quic/core/http/capsule.h"
#include "quiche/quic/core/http/quic_spdy_session.h"
#include "quiche/quic/core/http/quic_spdy_stream.h"
#include "quiche/quic/core/quic_data_reader.h"
@@ -20,6 +19,7 @@
#include "quiche/quic/core/quic_utils.h"
#include "quiche/quic/core/quic_versions.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"
+#include "quiche/common/capsule.h"
#include "quiche/common/platform/api/quiche_logging.h"
#include "quiche/web_transport/web_transport.h"
@@ -108,7 +108,7 @@
QuicConnection::ScopedPacketFlusher flusher(
connect_stream_->spdy_session()->connection());
connect_stream_->WriteCapsule(
- Capsule::CloseWebTransportSession(error_code, error_message),
+ quiche::Capsule::CloseWebTransportSession(error_code, error_message),
/*fin=*/true);
}
diff --git a/quiche/quic/masque/masque_client_bin.cc b/quiche/quic/masque/masque_client_bin.cc
index 7383680..76f984c 100644
--- a/quiche/quic/masque/masque_client_bin.cc
+++ b/quiche/quic/masque/masque_client_bin.cc
@@ -49,6 +49,10 @@
namespace {
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
class MasqueTunSession : public MasqueClientSession::EncapsulatedIpSession,
public QuicSocketEventListener {
public:
diff --git a/quiche/quic/masque/masque_client_session.cc b/quiche/quic/masque/masque_client_session.cc
index e9d6d8b..5367d9e 100644
--- a/quiche/quic/masque/masque_client_session.cc
+++ b/quiche/quic/masque/masque_client_session.cc
@@ -26,6 +26,11 @@
namespace quic {
namespace {
+
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
constexpr uint64_t kConnectIpPayloadContextId = 0;
}
diff --git a/quiche/quic/masque/masque_client_session.h b/quiche/quic/masque/masque_client_session.h
index 2b48e49..43703b4 100644
--- a/quiche/quic/masque/masque_client_session.h
+++ b/quiche/quic/masque/masque_client_session.h
@@ -66,11 +66,11 @@
virtual void CloseIpSession(const std::string& details) = 0;
virtual bool OnAddressAssignCapsule(
- const AddressAssignCapsule& capsule) = 0;
+ const quiche::AddressAssignCapsule& capsule) = 0;
virtual bool OnAddressRequestCapsule(
- const AddressRequestCapsule& capsule) = 0;
+ const quiche::AddressRequestCapsule& capsule) = 0;
virtual bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) = 0;
+ const quiche::RouteAdvertisementCapsule& capsule) = 0;
};
// Takes ownership of |connection|, but not of |crypto_config| or
@@ -186,10 +186,12 @@
absl::string_view payload) override;
// From QuicSpdyStream::ConnectIpVisitor.
- bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
- bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+ bool OnAddressAssignCapsule(
+ const quiche::AddressAssignCapsule& capsule) override;
+ bool OnAddressRequestCapsule(
+ const quiche::AddressRequestCapsule& capsule) override;
bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) override;
+ const quiche::RouteAdvertisementCapsule& capsule) override;
void OnHeadersWritten() override;
private:
diff --git a/quiche/quic/masque/masque_encapsulated_client_session.cc b/quiche/quic/masque/masque_encapsulated_client_session.cc
index a4d83f6..d9e77ba 100644
--- a/quiche/quic/masque/masque_encapsulated_client_session.cc
+++ b/quiche/quic/masque/masque_encapsulated_client_session.cc
@@ -10,6 +10,10 @@
namespace quic {
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::RouteAdvertisementCapsule;
+
MasqueEncapsulatedClientSession::MasqueEncapsulatedClientSession(
const QuicConfig& config, const ParsedQuicVersionVector& supported_versions,
QuicConnection* connection, const QuicServerId& server_id,
diff --git a/quiche/quic/masque/masque_encapsulated_client_session.h b/quiche/quic/masque/masque_encapsulated_client_session.h
index d50e9b8..323c16d 100644
--- a/quiche/quic/masque/masque_encapsulated_client_session.h
+++ b/quiche/quic/masque/masque_encapsulated_client_session.h
@@ -51,10 +51,12 @@
// From MasqueClientSession::EncapsulatedIpSession.
void ProcessIpPacket(absl::string_view packet) override;
void CloseIpSession(const std::string& details) override;
- bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
- bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+ bool OnAddressAssignCapsule(
+ const quiche::AddressAssignCapsule& capsule) override;
+ bool OnAddressRequestCapsule(
+ const quiche::AddressRequestCapsule& capsule) override;
bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) override;
+ const quiche::RouteAdvertisementCapsule& capsule) override;
// From QuicSession.
void OnConnectionClosed(const QuicConnectionCloseFrame& frame,
diff --git a/quiche/quic/masque/masque_server_session.cc b/quiche/quic/masque/masque_server_session.cc
index 2feb48d..493b9f6 100644
--- a/quiche/quic/masque/masque_server_session.cc
+++ b/quiche/quic/masque/masque_server_session.cc
@@ -26,12 +26,21 @@
#include "quiche/quic/masque/masque_utils.h"
#include "quiche/quic/platform/api/quic_ip_address.h"
#include "quiche/quic/tools/quic_url.h"
+#include "quiche/common/capsule.h"
#include "quiche/common/platform/api/quiche_url_utils.h"
#include "quiche/common/quiche_ip_address.h"
namespace quic {
namespace {
+
+using ::quiche::AddressAssignCapsule;
+using ::quiche::AddressRequestCapsule;
+using ::quiche::Capsule;
+using ::quiche::IpAddressRange;
+using ::quiche::PrefixWithId;
+using ::quiche::RouteAdvertisementCapsule;
+
// RAII wrapper for QuicUdpSocketFd.
class FdWrapper {
public:
diff --git a/quiche/quic/masque/masque_server_session.h b/quiche/quic/masque/masque_server_session.h
index 77fdc73..082616d 100644
--- a/quiche/quic/masque/masque_server_session.h
+++ b/quiche/quic/masque/masque_server_session.h
@@ -117,10 +117,12 @@
absl::string_view payload) override;
// From QuicSpdyStream::ConnectIpVisitor.
- bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override;
- bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override;
+ bool OnAddressAssignCapsule(
+ const quiche::AddressAssignCapsule& capsule) override;
+ bool OnAddressRequestCapsule(
+ const quiche::AddressRequestCapsule& capsule) override;
bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) override;
+ const quiche::RouteAdvertisementCapsule& capsule) override;
void OnHeadersWritten() override;
private:
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index 8609d5f..32a16c1 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -2099,40 +2099,43 @@
// Implementation of ConnectIpVisitor which saves all received capsules.
class SavingConnectIpVisitor : public QuicSpdyStream::ConnectIpVisitor {
public:
- const std::vector<AddressAssignCapsule>& received_address_assign_capsules()
- const {
+ const std::vector<quiche::AddressAssignCapsule>&
+ received_address_assign_capsules() const {
return received_address_assign_capsules_;
}
- const std::vector<AddressRequestCapsule>& received_address_request_capsules()
- const {
+ const std::vector<quiche::AddressRequestCapsule>&
+ received_address_request_capsules() const {
return received_address_request_capsules_;
}
- const std::vector<RouteAdvertisementCapsule>&
+ const std::vector<quiche::RouteAdvertisementCapsule>&
received_route_advertisement_capsules() const {
return received_route_advertisement_capsules_;
}
bool headers_written() const { return headers_written_; }
// From QuicSpdyStream::ConnectIpVisitor.
- bool OnAddressAssignCapsule(const AddressAssignCapsule& capsule) override {
+ bool OnAddressAssignCapsule(
+ const quiche::AddressAssignCapsule& capsule) override {
received_address_assign_capsules_.push_back(capsule);
return true;
}
- bool OnAddressRequestCapsule(const AddressRequestCapsule& capsule) override {
+ bool OnAddressRequestCapsule(
+ const quiche::AddressRequestCapsule& capsule) override {
received_address_request_capsules_.push_back(capsule);
return true;
}
bool OnRouteAdvertisementCapsule(
- const RouteAdvertisementCapsule& capsule) override {
+ const quiche::RouteAdvertisementCapsule& capsule) override {
received_route_advertisement_capsules_.push_back(capsule);
return true;
}
void OnHeadersWritten() override { headers_written_ = true; }
private:
- std::vector<AddressAssignCapsule> received_address_assign_capsules_;
- std::vector<AddressRequestCapsule> received_address_request_capsules_;
- std::vector<RouteAdvertisementCapsule> received_route_advertisement_capsules_;
+ std::vector<quiche::AddressAssignCapsule> received_address_assign_capsules_;
+ std::vector<quiche::AddressRequestCapsule> received_address_request_capsules_;
+ std::vector<quiche::RouteAdvertisementCapsule>
+ received_route_advertisement_capsules_;
bool headers_written_ = false;
};