chromium/net/third_party/quiche/src/quiche/quic/tools/quic_toy_client.cc

// Copyright (c) 2012 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.

// A binary wrapper for QuicClient.
// Connects to a host using QUIC, sends a request to the provided URL, and
// displays the response.
//
// Some usage examples:
//
// Standard request/response:
//   quic_client www.google.com
//   quic_client www.google.com --quiet
//   quic_client www.google.com --port=443
//
// Use a specific version:
//   quic_client www.google.com --quic_version=23
//
// Send a POST instead of a GET:
//   quic_client www.google.com --body="this is a POST body"
//
// Append additional headers to the request:
//   quic_client www.google.com --headers="Header-A: 1234; Header-B: 5678"
//
// Connect to a host different to the URL being requested:
//   quic_client mail.google.com --host=www.google.com
//
// Connect to a specific IP:
//   IP=`dig www.google.com +short | head -1`
//   quic_client www.google.com --host=${IP}
//
// Send repeated requests and change ephemeral port between requests
//   quic_client www.google.com --num_requests=10
//
// Try to connect to a host which does not speak QUIC:
//   quic_client www.example.com
//
// This tool is available as a built binary at:
// /google/data/ro/teams/quic/tools/quic_client
// After submitting changes to this file, you will need to follow the
// instructions at go/quic_client_binary_update

#include "quiche/quic/tools/quic_toy_client.h"

#include <fstream>
#include <iostream>
#include <memory>
#include <string>
#include <utility>
#include <vector>

#include "absl/strings/escaping.h"
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/core/crypto/quic_client_session_cache.h"
#include "quiche/quic/core/quic_packets.h"
#include "quiche/quic/core/quic_server_id.h"
#include "quiche/quic/core/quic_utils.h"
#include "quiche/quic/core/quic_versions.h"
#include "quiche/quic/platform/api/quic_default_proof_providers.h"
#include "quiche/quic/platform/api/quic_ip_address.h"
#include "quiche/quic/platform/api/quic_socket_address.h"
#include "quiche/quic/tools/fake_proof_verifier.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_logging.h"
#include "quiche/common/quiche_text_utils.h"

namespace {

QuicheTextUtils;

}  // namespace

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

DEFINE_QUICHE_COMMAND_LINE_FLAG();

namespace quic {
namespace {

// Creates a ClientProofSource which only contains a default client certificate.
// Return nullptr for failure.
std::unique_ptr<ClientProofSource> CreateTestClientProofSource(
    absl::string_view default_client_cert_file,
    absl::string_view default_client_cert_key_file) {}

}  // namespace

QuicToyClient::QuicToyClient(ClientFactory* client_factory)
    :{}

int QuicToyClient::SendRequestsAndPrintResponses(
    std::vector<std::string> urls) {}

}  // namespace quic