#include <iostream>
#include <memory>
#include <set>
#include <string>
#include <utility>
#include <vector>
#include "absl/strings/str_cat.h"
#include "quiche/quic/core/crypto/quic_client_session_cache.h"
#include "quiche/quic/core/io/quic_default_event_loop.h"
#include "quiche/quic/core/io/quic_event_loop.h"
#include "quiche/quic/core/quic_default_clock.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/core/quic_versions.h"
#include "quiche/quic/test_tools/quic_connection_peer.h"
#include "quiche/quic/test_tools/quic_session_peer.h"
#include "quiche/quic/tools/fake_proof_verifier.h"
#include "quiche/quic/tools/quic_default_client.h"
#include "quiche/quic/tools/quic_name_lookup.h"
#include "quiche/quic/tools/quic_url.h"
#include "quiche/common/http/http_header_block.h"
#include "quiche/common/platform/api/quiche_command_line_flags.h"
#include "quiche/common/platform/api/quiche_system_event_loop.h"
DEFINE_QUICHE_COMMAND_LINE_FLAG(…);
DEFINE_QUICHE_COMMAND_LINE_FLAG(…);
DEFINE_QUICHE_COMMAND_LINE_FLAG(…);
namespace quic {
enum class Feature { … };
char MatrixLetter(Feature f) { … }
class QuicClientInteropRunner : QuicConnectionDebugVisitor { … };
void QuicClientInteropRunner::AttemptResumption(QuicDefaultClient* client,
const std::string& authority) { … }
void QuicClientInteropRunner::AttemptRequest(
QuicSocketAddress addr, std::string authority, QuicServerId server_id,
ParsedQuicVersion version, bool test_version_negotiation,
bool attempt_rebind, bool attempt_multi_packet_chlo,
bool attempt_key_update) { … }
quiche::HttpHeaderBlock QuicClientInteropRunner::ConstructHeaderBlock(
const std::string& authority) { … }
void QuicClientInteropRunner::SendRequest(
QuicDefaultClient* client, const quiche::HttpHeaderBlock& header_block) { … }
std::set<Feature> ServerSupport(std::string dns_host, std::string url_host,
int port, ParsedQuicVersion version) { … }
}
int main(int argc, char* argv[]) { … }