diff --git a/bazel/external/quiche.BUILD b/bazel/external/quiche.BUILD index 39bc19ea0821f..cc12b3392bd0a 100644 --- a/bazel/external/quiche.BUILD +++ b/bazel/external/quiche.BUILD @@ -103,6 +103,7 @@ envoy_cc_library( "quiche/spdy/platform/api/spdy_export.h", "quiche/spdy/platform/api/spdy_flags.h", "quiche/spdy/platform/api/spdy_logging.h", + "quiche/spdy/platform/api/spdy_macros.h", "quiche/spdy/platform/api/spdy_mem_slice.h", "quiche/spdy/platform/api/spdy_ptr_util.h", "quiche/spdy/platform/api/spdy_string.h", @@ -111,7 +112,10 @@ envoy_cc_library( ], repository = "@envoy", visibility = ["//visibility:public"], - deps = ["@envoy//source/extensions/quic_listeners/quiche/platform:spdy_platform_impl_lib"], + deps = [ + ":quiche_common_lib", + "@envoy//source/extensions/quic_listeners/quiche/platform:spdy_platform_impl_lib", + ], ) envoy_cc_library( @@ -148,6 +152,58 @@ envoy_cc_library( deps = [":spdy_platform"], ) +envoy_cc_library( + name = "spdy_core_header_block_lib", + srcs = ["quiche/spdy/core/spdy_header_block.cc"], + hdrs = ["quiche/spdy/core/spdy_header_block.h"], + copts = quiche_copt, + repository = "@envoy", + visibility = ["//visibility:public"], + deps = [ + ":spdy_platform", + ":spdy_platform_unsafe_arena_lib", + ], +) + +envoy_cc_library( + name = "spdy_core_headers_handler_interface", + hdrs = ["quiche/spdy/core/spdy_headers_handler_interface.h"], + copts = quiche_copt, + repository = "@envoy", + visibility = ["//visibility:public"], + deps = [":spdy_platform"], +) + +envoy_cc_library( + name = "spdy_core_protocol_lib", + hdrs = [ + "quiche/spdy/core/spdy_bitmasks.h", + "quiche/spdy/core/spdy_protocol.h", + ], + copts = quiche_copt, + repository = "@envoy", + visibility = ["//visibility:public"], + deps = [ + ":spdy_core_alt_svc_wire_format_lib", + ":spdy_core_header_block_lib", + ":spdy_platform", + ], +) + +envoy_cc_test_library( + name = "spdy_core_test_utils_lib", + srcs = ["quiche/spdy/core/spdy_test_utils.cc"], + hdrs = ["quiche/spdy/core/spdy_test_utils.h"], + copts = quiche_copt, + repository = "@envoy", + deps = [ + ":spdy_core_header_block_lib", + ":spdy_core_headers_handler_interface", + ":spdy_core_protocol_lib", + ":spdy_platform", + ], +) + envoy_cc_library( name = "quic_platform", srcs = [ @@ -167,6 +223,7 @@ envoy_cc_library( repository = "@envoy", visibility = ["//visibility:public"], deps = [ + ":quic_core_time_lib", ":quic_platform_base", "@envoy//source/extensions/quic_listeners/quiche/platform:quic_platform_impl_lib", ], @@ -286,7 +343,9 @@ envoy_cc_library( visibility = ["//visibility:public"], deps = [ ":quic_platform_export", + ":quiche_common_lib", "@envoy//source/extensions/quic_listeners/quiche/platform:quic_platform_base_impl_lib", + "@envoy//source/extensions/quic_listeners/quiche/platform:quic_platform_logging_impl_lib", ], ) @@ -311,6 +370,7 @@ envoy_cc_library( hdrs = ["quiche/quic/core/quic_error_codes.h"], copts = quiche_copt, repository = "@envoy", + visibility = ["//visibility:public"], deps = [":quic_platform_export"], ) @@ -377,6 +437,33 @@ envoy_cc_test_library( deps = [":epoll_server_platform"], ) +envoy_cc_library( + name = "quiche_common_platform", + hdrs = [ + "quiche/common/platform/api/quiche_logging.h", + "quiche/common/platform/api/quiche_ptr_util.h", + "quiche/common/platform/api/quiche_unordered_containers.h", + ], + repository = "@envoy", + visibility = ["//visibility:public"], + deps = ["@envoy//source/extensions/quic_listeners/quiche/platform:quiche_common_platform_impl_lib"], +) + +envoy_cc_test_library( + name = "quiche_common_platform_test", + hdrs = ["quiche/common/platform/api/quiche_test.h"], + repository = "@envoy", + deps = ["@envoy//test/extensions/quic_listeners/quiche/platform:quiche_common_platform_test_impl_lib"], +) + +envoy_cc_library( + name = "quiche_common_lib", + hdrs = ["quiche/common/simple_linked_hash_map.h"], + repository = "@envoy", + visibility = ["//visibility:public"], + deps = [":quiche_common_platform"], +) + envoy_cc_test( name = "epoll_server_test", srcs = ["quiche/epoll_server/simple_epoll_server_test.cc"], @@ -385,6 +472,17 @@ envoy_cc_test( deps = [":epoll_server_lib"], ) +envoy_cc_test( + name = "quiche_common_test", + srcs = ["quiche/common/simple_linked_hash_map_test.cc"], + copts = quiche_copt, + repository = "@envoy", + deps = [ + ":quiche_common_lib", + ":quiche_common_platform_test", + ], +) + envoy_cc_test( name = "http2_platform_api_test", srcs = [ @@ -405,9 +503,21 @@ envoy_cc_test( deps = [":spdy_platform"], ) +envoy_cc_test( + name = "spdy_core_header_block_test", + srcs = ["quiche/spdy/core/spdy_header_block_test.cc"], + copts = quiche_copt, + repository = "@envoy", + deps = [ + ":spdy_core_header_block_lib", + ":spdy_core_test_utils_lib", + ], +) + envoy_cc_test( name = "quic_platform_api_test", srcs = [ + "quiche/quic/platform/api/quic_containers_test.cc", "quiche/quic/platform/api/quic_endian_test.cc", "quiche/quic/platform/api/quic_reference_counted_test.cc", "quiche/quic/platform/api/quic_string_utils_test.cc", diff --git a/bazel/external/quiche.genrule_cmd b/bazel/external/quiche.genrule_cmd index 3a9a40f12362e..5a26a07b2877b 100644 --- a/bazel/external/quiche.genrule_cmd +++ b/bazel/external/quiche.genrule_cmd @@ -28,10 +28,11 @@ cat <sed_commands /^#include/ s!net/quic/platform/impl/quic_test_impl.h!test/extensions/quic_listeners/quiche/platform/quic_test_impl.h! /^#include/ s!net/quic/platform/impl/quic_test_output_impl.h!test/extensions/quic_listeners/quiche/platform/quic_test_output_impl.h! /^#include/ s!net/quic/platform/impl/quic_thread_impl.h!test/extensions/quic_listeners/quiche/platform/quic_thread_impl.h! +/^#include/ s!net/quiche/common/platform/impl/quiche_test_impl.h!test/extensions/quic_listeners/quiche/platform/quiche_test_impl.h! /^#include/ s!net/spdy/platform/impl/spdy_test_helpers_impl.h!test/extensions/quic_listeners/quiche/platform/spdy_test_helpers_impl.h! # Rewrite include directives for platform impl files. -/^#include/ s!net/(http2|spdy|quic)/platform/impl/!extensions/quic_listeners/quiche/platform/! +/^#include/ s!net/(http2|spdy|quic|quiche/common)/platform/impl/!extensions/quic_listeners/quiche/platform/! # Rewrite include directives for epoll_server platform impl files. /^#include/ s!net/tools/epoll_server/platform/impl!test/extensions/quic_listeners/quiche/platform/! diff --git a/source/extensions/quic_listeners/quiche/platform/BUILD b/source/extensions/quic_listeners/quiche/platform/BUILD index 31fc97de3bb0a..e347bac4cfbf1 100644 --- a/source/extensions/quic_listeners/quiche/platform/BUILD +++ b/source/extensions/quic_listeners/quiche/platform/BUILD @@ -104,7 +104,6 @@ envoy_cc_library( "quic_flag_utils_impl.h", "quic_flags_impl.h", "quic_iovec_impl.h", - "quic_logging_impl.h", "quic_map_util_impl.h", "quic_prefetch_impl.h", "quic_ptr_util_impl.h", @@ -129,13 +128,13 @@ envoy_cc_library( visibility = ["//visibility:public"], deps = [ ":flags_impl_lib", - ":quic_platform_logging_impl_lib", ":string_utils_lib", "//source/common/common:assert_lib", "//source/common/common:byte_order_lib", "//source/server:backtrace_lib", "@com_googlesource_quiche//:quic_core_buffer_allocator_lib", "@com_googlesource_quiche//:quic_platform_export", + "@com_googlesource_quiche//:quiche_common_platform", ], ) @@ -167,10 +166,33 @@ envoy_cc_library( "//source/common/filesystem:directory_lib", "//source/common/filesystem:filesystem_lib", "//source/common/http:utility_lib", - "@com_googlesource_quiche//:quic_core_types_lib", ], ) +envoy_cc_library( + name = "quiche_common_platform_impl_lib", + hdrs = [ + "quiche_logging_impl.h", + "quiche_ptr_util_impl.h", + "quiche_unordered_containers_impl.h", + ], + external_deps = [ + "abseil_hash", + "abseil_node_hash_map", + ], + visibility = ["//visibility:public"], + deps = [ + ":quic_platform_logging_impl_lib", + ], +) + +envoy_cc_library( + name = "quic_platform_sleep_impl_lib", + hdrs = ["quic_sleep_impl.h"], + visibility = ["//visibility:public"], + deps = ["@com_googlesource_quiche//:quic_core_time_lib"], +) + envoy_cc_library( name = "spdy_platform_impl_lib", hdrs = [ @@ -204,6 +226,7 @@ envoy_cc_library( ":quic_platform_logging_impl_lib", ":string_utils_lib", "//source/common/common:assert_lib", + "@com_googlesource_quiche//:quiche_common_lib", ], ) diff --git a/source/extensions/quic_listeners/quiche/platform/quic_containers_impl.h b/source/extensions/quic_listeners/quiche/platform/quic_containers_impl.h index 8d1a08953a42b..e2638f8e21bf3 100644 --- a/source/extensions/quic_listeners/quiche/platform/quic_containers_impl.h +++ b/source/extensions/quic_listeners/quiche/platform/quic_containers_impl.h @@ -3,13 +3,12 @@ #include #include #include -#include -#include #include "absl/container/flat_hash_map.h" #include "absl/container/inlined_vector.h" #include "absl/container/node_hash_map.h" #include "absl/container/node_hash_set.h" +#include "quiche/common/simple_linked_hash_map.h" // NOLINT(namespace-envoy) @@ -26,14 +25,11 @@ using QuicUnorderedMapImpl = absl::node_hash_map; template using QuicUnorderedSetImpl = absl::node_hash_set; -// TODO: implement -template class QuicLinkedHashMapImpl {}; - -// TODO: implement -template class QuicSmallMapImpl {}; +template +using QuicLinkedHashMapImpl = quiche::SimpleLinkedHashMap; -// TODO: implement -template class QuicIntervalSetImpl; +template +using QuicSmallMapImpl = absl::flat_hash_map; template using QuicQueueImpl = std::queue; diff --git a/source/extensions/quic_listeners/quiche/platform/quiche_logging_impl.h b/source/extensions/quic_listeners/quiche/platform/quiche_logging_impl.h new file mode 100644 index 0000000000000..26e5f7662630b --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quiche_logging_impl.h @@ -0,0 +1,9 @@ +#pragma once + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +#include "extensions/quic_listeners/quiche/platform/quic_logging_impl.h" diff --git a/source/extensions/quic_listeners/quiche/platform/quiche_ptr_util_impl.h b/source/extensions/quic_listeners/quiche/platform/quiche_ptr_util_impl.h new file mode 100644 index 0000000000000..e5ed8a2714d04 --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quiche_ptr_util_impl.h @@ -0,0 +1,17 @@ +#pragma once + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +#include + +namespace quiche { + +template std::unique_ptr QuicheMakeUniqueImpl(Args&&... args) { + return std::make_unique(std::forward(args)...); +} + +} // namespace quiche diff --git a/source/extensions/quic_listeners/quiche/platform/quiche_unordered_containers_impl.h b/source/extensions/quic_listeners/quiche/platform/quiche_unordered_containers_impl.h new file mode 100644 index 0000000000000..cefb261521b4d --- /dev/null +++ b/source/extensions/quic_listeners/quiche/platform/quiche_unordered_containers_impl.h @@ -0,0 +1,21 @@ +#pragma once + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +#include "absl/container/node_hash_map.h" +#include "absl/hash/hash.h" + +namespace quiche { + +// The default hasher used by hash tables. +template using QuicheDefaultHasherImpl = absl::Hash; + +// Similar to std::unordered_map, but with better performance and memory usage. +template +using QuicheUnorderedMapImpl = absl::node_hash_map; + +} // namespace quiche diff --git a/source/extensions/quic_listeners/quiche/platform/spdy_containers_impl.h b/source/extensions/quic_listeners/quiche/platform/spdy_containers_impl.h index 00c145d8381ad..57d953c939d37 100644 --- a/source/extensions/quic_listeners/quiche/platform/spdy_containers_impl.h +++ b/source/extensions/quic_listeners/quiche/platform/spdy_containers_impl.h @@ -1,26 +1,20 @@ #pragma once -#include "absl/container/flat_hash_map.h" -#include "absl/container/flat_hash_set.h" -#include "absl/container/inlined_vector.h" -#include "absl/hash/hash.h" - -// The following includes should be: -// -// #include "extensions/quic_listeners/quiche/platform/spdy_string_impl.h" -// #include "extensions/quic_listeners/quiche/platform/spdy_string_piece_impl.h" -// -// However, for some reason, bazel.clang_tidy cannot resolve the files when specified this way. -// TODO(mpw): fix includes to use full paths. -#include "spdy_string_impl.h" -#include "spdy_string_piece_impl.h" - // NOLINT(namespace-envoy) // This file is part of the QUICHE platform implementation, and is not to be // consumed or referenced directly by other Envoy code. It serves purely as a // porting layer for QUICHE. +#include "extensions/quic_listeners/quiche/platform/spdy_string_impl.h" +#include "extensions/quic_listeners/quiche/platform/spdy_string_piece_impl.h" + +#include "absl/container/flat_hash_map.h" +#include "absl/container/flat_hash_set.h" +#include "absl/container/inlined_vector.h" +#include "absl/hash/hash.h" +#include "quiche/common/simple_linked_hash_map.h" + namespace spdy { template using SpdyHashImpl = absl::Hash; @@ -31,8 +25,8 @@ using SpdyHashMapImpl = absl::flat_hash_map; template using SpdyHashSetImpl = absl::flat_hash_set; -// TODO: implement -template class SpdyLinkedHashMapImpl {}; +template +using SpdyLinkedHashMapImpl = quiche::SimpleLinkedHashMap; template > using SpdyInlinedVectorImpl = absl::InlinedVector; diff --git a/source/extensions/quic_listeners/quiche/platform/spdy_macros_impl.h b/source/extensions/quic_listeners/quiche/platform/spdy_macros_impl.h index 1cec4845b1e15..9b38f29695e68 100644 --- a/source/extensions/quic_listeners/quiche/platform/spdy_macros_impl.h +++ b/source/extensions/quic_listeners/quiche/platform/spdy_macros_impl.h @@ -10,6 +10,3 @@ #define SPDY_MUST_USE_RESULT_IMPL ABSL_MUST_USE_RESULT #define SPDY_UNUSED_IMPL ABSL_ATTRIBUTE_UNUSED - -// TODO: implement -#define SPDY_DVLOG_IF_IMPL 0 diff --git a/test/extensions/quic_listeners/quiche/platform/BUILD b/test/extensions/quic_listeners/quiche/platform/BUILD index 3b78527b46915..ba5156ac0bd37 100644 --- a/test/extensions/quic_listeners/quiche/platform/BUILD +++ b/test/extensions/quic_listeners/quiche/platform/BUILD @@ -44,6 +44,8 @@ envoy_cc_test( "//test/test_common:threadsafe_singleton_injector_lib", "//test/test_common:utility_lib", "@com_googlesource_quiche//:epoll_server_lib", + "@com_googlesource_quiche//:quic_core_error_codes_lib", + "@com_googlesource_quiche//:quic_core_types_lib", "@com_googlesource_quiche//:quic_platform_expect_bug", "@com_googlesource_quiche//:quic_platform_mock_log", "@com_googlesource_quiche//:quic_platform_port_utils", @@ -62,6 +64,7 @@ envoy_cc_test( "//source/extensions/quic_listeners/quiche/platform:flags_impl_lib", "//test/test_common:logging_lib", "//test/test_common:utility_lib", + "@com_googlesource_quiche//:spdy_platform", "@com_googlesource_quiche//:spdy_platform_test_helpers", ], ) @@ -172,6 +175,11 @@ envoy_cc_test_library( ], ) +envoy_cc_test_library( + name = "quiche_common_platform_test_impl_lib", + hdrs = ["quiche_test_impl.h"], +) + envoy_cc_test_library( name = "spdy_platform_test_helpers_impl_lib", hdrs = ["spdy_test_helpers_impl.h"], diff --git a/test/extensions/quic_listeners/quiche/platform/quiche_test_impl.h b/test/extensions/quic_listeners/quiche/platform/quiche_test_impl.h new file mode 100644 index 0000000000000..e351735c3ab15 --- /dev/null +++ b/test/extensions/quic_listeners/quiche/platform/quiche_test_impl.h @@ -0,0 +1,10 @@ +#pragma once + +// NOLINT(namespace-envoy) + +// This file is part of the QUICHE platform implementation, and is not to be +// consumed or referenced directly by other Envoy code. It serves purely as a +// porting layer for QUICHE. + +#include "gmock/gmock.h" +#include "gtest/gtest.h"