Move QuicToyClient::ClientFactory to its own file This is necessary to avoid a dependency on QuicToyClient from the QuicEpollClientFactory, which we want to avoid because the toy client defines way to many flags. PiperOrigin-RevId: 486476799
diff --git a/build/source_list.bzl b/build/source_list.bzl index afc80c7..4d627c1 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -968,7 +968,9 @@ "quic/masque/masque_utils.h", "quic/platform/api/quic_udp_socket_platform_api.h", "quic/tools/quic_client_default_network_helper.h", + "quic/tools/quic_client_factory.h", "quic/tools/quic_default_client.h", + "quic/tools/quic_epoll_client_factory.h", "quic/tools/quic_server.h", ] io_tool_support_srcs = [ @@ -993,6 +995,7 @@ "quic/masque/masque_utils.cc", "quic/tools/quic_client_default_network_helper.cc", "quic/tools/quic_default_client.cc", + "quic/tools/quic_epoll_client_factory.cc", "quic/tools/quic_server.cc", ] io_test_support_hdrs = [ @@ -1310,7 +1313,6 @@ "quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc", ] cli_tools_hdrs = [ - "quic/tools/quic_epoll_client_factory.h", "quic/tools/quic_server_factory.h", "quic/tools/quic_toy_client.h", "quic/tools/quic_toy_server.h", @@ -1322,7 +1324,6 @@ "quic/tools/qpack_offline_decoder_bin.cc", "quic/tools/quic_client_bin.cc", "quic/tools/quic_client_interop_test_bin.cc", - "quic/tools/quic_epoll_client_factory.cc", "quic/tools/quic_packet_printer_bin.cc", "quic/tools/quic_reject_reason_decoder_bin.cc", "quic/tools/quic_server_bin.cc",
diff --git a/build/source_list.gni b/build/source_list.gni index 53814a2..82132ae 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -968,7 +968,9 @@ "src/quiche/quic/masque/masque_utils.h", "src/quiche/quic/platform/api/quic_udp_socket_platform_api.h", "src/quiche/quic/tools/quic_client_default_network_helper.h", + "src/quiche/quic/tools/quic_client_factory.h", "src/quiche/quic/tools/quic_default_client.h", + "src/quiche/quic/tools/quic_epoll_client_factory.h", "src/quiche/quic/tools/quic_server.h", ] io_tool_support_srcs = [ @@ -993,6 +995,7 @@ "src/quiche/quic/masque/masque_utils.cc", "src/quiche/quic/tools/quic_client_default_network_helper.cc", "src/quiche/quic/tools/quic_default_client.cc", + "src/quiche/quic/tools/quic_epoll_client_factory.cc", "src/quiche/quic/tools/quic_server.cc", ] io_test_support_hdrs = [ @@ -1310,7 +1313,6 @@ "src/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc", ] cli_tools_hdrs = [ - "src/quiche/quic/tools/quic_epoll_client_factory.h", "src/quiche/quic/tools/quic_server_factory.h", "src/quiche/quic/tools/quic_toy_client.h", "src/quiche/quic/tools/quic_toy_server.h", @@ -1322,7 +1324,6 @@ "src/quiche/quic/tools/qpack_offline_decoder_bin.cc", "src/quiche/quic/tools/quic_client_bin.cc", "src/quiche/quic/tools/quic_client_interop_test_bin.cc", - "src/quiche/quic/tools/quic_epoll_client_factory.cc", "src/quiche/quic/tools/quic_packet_printer_bin.cc", "src/quiche/quic/tools/quic_reject_reason_decoder_bin.cc", "src/quiche/quic/tools/quic_server_bin.cc",
diff --git a/build/source_list.json b/build/source_list.json index a877e81..3ded441 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -967,7 +967,9 @@ "quiche/quic/masque/masque_utils.h", "quiche/quic/platform/api/quic_udp_socket_platform_api.h", "quiche/quic/tools/quic_client_default_network_helper.h", + "quiche/quic/tools/quic_client_factory.h", "quiche/quic/tools/quic_default_client.h", + "quiche/quic/tools/quic_epoll_client_factory.h", "quiche/quic/tools/quic_server.h" ], "io_tool_support_srcs": [ @@ -992,6 +994,7 @@ "quiche/quic/masque/masque_utils.cc", "quiche/quic/tools/quic_client_default_network_helper.cc", "quiche/quic/tools/quic_default_client.cc", + "quiche/quic/tools/quic_epoll_client_factory.cc", "quiche/quic/tools/quic_server.cc" ], "io_test_support_hdrs": [ @@ -1309,7 +1312,6 @@ "quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc" ], "cli_tools_hdrs": [ - "quiche/quic/tools/quic_epoll_client_factory.h", "quiche/quic/tools/quic_server_factory.h", "quiche/quic/tools/quic_toy_client.h", "quiche/quic/tools/quic_toy_server.h" @@ -1321,7 +1323,6 @@ "quiche/quic/tools/qpack_offline_decoder_bin.cc", "quiche/quic/tools/quic_client_bin.cc", "quiche/quic/tools/quic_client_interop_test_bin.cc", - "quiche/quic/tools/quic_epoll_client_factory.cc", "quiche/quic/tools/quic_packet_printer_bin.cc", "quiche/quic/tools/quic_reject_reason_decoder_bin.cc", "quiche/quic/tools/quic_server_bin.cc",
diff --git a/quiche/quic/tools/quic_client_factory.h b/quiche/quic/tools/quic_client_factory.h new file mode 100644 index 0000000..df4aab9 --- /dev/null +++ b/quiche/quic/tools/quic_client_factory.h
@@ -0,0 +1,35 @@ +// Copyright (c) 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_ +#define QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_ + +#include "quiche/quic/core/crypto/proof_verifier.h" +#include "quiche/quic/core/crypto/quic_crypto_client_config.h" +#include "quiche/quic/core/quic_config.h" +#include "quiche/quic/core/quic_versions.h" +#include "quiche/quic/tools/quic_spdy_client_base.h" + +namespace quic { + +// Interface implemented by Factories to create QuicClients. +class ClientFactoryInterface { + public: + virtual ~ClientFactoryInterface() = default; + + // Creates a new client configured to connect to |host_for_lookup:port| + // supporting |versions|, using |host_for_handshake| for handshake and + // |verifier| to verify proofs. + virtual std::unique_ptr<QuicSpdyClientBase> CreateClient( + std::string host_for_handshake, std::string host_for_lookup, + // AF_INET, AF_INET6, or AF_UNSPEC(=don't care). + int address_family_for_lookup, uint16_t port, + ParsedQuicVersionVector versions, const QuicConfig& config, + std::unique_ptr<ProofVerifier> verifier, + std::unique_ptr<SessionCache> session_cache) = 0; +}; + +} // namespace quic + +#endif // QUICHE_QUIC_TOOLS_QUIC_CLIENT_FACTORY_H_
diff --git a/quiche/quic/tools/quic_epoll_client_factory.h b/quiche/quic/tools/quic_epoll_client_factory.h index 962a714..ab5e882 100644 --- a/quiche/quic/tools/quic_epoll_client_factory.h +++ b/quiche/quic/tools/quic_epoll_client_factory.h
@@ -8,12 +8,12 @@ #include <memory> #include "quiche/quic/core/io/quic_event_loop.h" -#include "quiche/quic/tools/quic_toy_client.h" +#include "quiche/quic/tools/quic_client_factory.h" namespace quic { // Factory creating QuicClient instances. -class QuicEpollClientFactory : public QuicToyClient::ClientFactory { +class QuicEpollClientFactory : public ClientFactoryInterface { public: QuicEpollClientFactory();
diff --git a/quiche/quic/tools/quic_toy_client.h b/quiche/quic/tools/quic_toy_client.h index 7639482..50e42c4 100644 --- a/quiche/quic/tools/quic_toy_client.h +++ b/quiche/quic/tools/quic_toy_client.h
@@ -8,39 +8,26 @@ #ifndef QUICHE_QUIC_TOOLS_QUIC_TOY_CLIENT_H_ #define QUICHE_QUIC_TOOLS_QUIC_TOY_CLIENT_H_ -#include "quiche/quic/tools/quic_spdy_client_base.h" +#include "quiche/quic/tools/quic_client_factory.h" namespace quic { class QuicToyClient { public: - class ClientFactory { - public: - virtual ~ClientFactory() = default; - - // Creates a new client configured to connect to |host_for_lookup:port| - // supporting |versions|, using |host_for_handshake| for handshake and - // |verifier| to verify proofs. - virtual std::unique_ptr<QuicSpdyClientBase> CreateClient( - std::string host_for_handshake, std::string host_for_lookup, - // AF_INET, AF_INET6, or AF_UNSPEC(=don't care). - int address_family_for_lookup, uint16_t port, - ParsedQuicVersionVector versions, const QuicConfig& config, - std::unique_ptr<ProofVerifier> verifier, - std::unique_ptr<SessionCache> session_cache) = 0; - }; - // Constructs a new toy client that will use |client_factory| to create the // actual QuicSpdyClientBase instance. - QuicToyClient(ClientFactory* client_factory); + QuicToyClient(ClientFactoryInterface* client_factory); // Connects to the QUIC server based on the various flags defined in the // .cc file, sends requests and prints the responses. Returns 0 on success // and non-zero otherwise. int SendRequestsAndPrintResponses(std::vector<std::string> urls); + // Compatibility alias + using ClientFactory = ClientFactoryInterface; + private: - ClientFactory* client_factory_; // Unowned. + ClientFactoryInterface* client_factory_; // Unowned. }; } // namespace quic