|  | // 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 <iostream> | 
|  | #include <memory> | 
|  | #include <string> | 
|  |  | 
|  | #include "quic/platform/api/quic_system_event_loop.h" | 
|  | #include "quic/tools/quic_epoll_client_factory.h" | 
|  | #include "quic/tools/quic_toy_client.h" | 
|  | #include "common/platform/api/quiche_command_line_flags.h" | 
|  |  | 
|  | int main(int argc, char* argv[]) { | 
|  | QuicSystemEventLoop event_loop("quic_client"); | 
|  | const char* usage = "Usage: quic_client [options] <url>"; | 
|  |  | 
|  | // All non-flag arguments should be interpreted as URLs to fetch. | 
|  | std::vector<std::string> urls = | 
|  | quiche::QuicheParseCommandLineFlags(usage, argc, argv); | 
|  | if (urls.size() != 1) { | 
|  | quiche::QuichePrintCommandLineFlagHelp(usage); | 
|  | exit(0); | 
|  | } | 
|  |  | 
|  | quic::QuicEpollClientFactory factory; | 
|  | quic::QuicToyClient client(&factory); | 
|  | return client.SendRequestsAndPrintResponses(urls); | 
|  | } |