blob: 08ead0c6f2cf391654b6c953377e0bb52b5267f2 [file] [log] [blame]
// Copyright 2019 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.
// This file is reponsible for the masque_server binary. It allows testing
// our MASQUE server code by creating a MASQUE proxy that relays HTTP/3
// requests to web servers tunnelled over MASQUE connections.
// e.g.: masque_server
#include <memory>
#include "net/third_party/quiche/src/quic/masque/masque_epoll_server.h"
#include "net/third_party/quiche/src/quic/masque/masque_server_backend.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
DEFINE_QUIC_COMMAND_LINE_FLAG(int32_t,
port,
9661,
"The port the MASQUE server will listen on.");
DEFINE_QUIC_COMMAND_LINE_FLAG(
std::string,
cache_dir,
"",
"Specifies the directory used during QuicHttpResponseCache "
"construction to seed the cache. Cache directory can be "
"generated using `wget -p --save-headers <url>`");
DEFINE_QUIC_COMMAND_LINE_FLAG(
std::string,
server_authority,
"",
"Specifies the authority over which the server will accept MASQUE "
"requests. Defaults to empty which allows all authorities.");
int main(int argc, char* argv[]) {
const char* usage = "Usage: masque_server [options]";
std::vector<std::string> non_option_args =
quic::QuicParseCommandLineFlags(usage, argc, argv);
if (!non_option_args.empty()) {
quic::QuicPrintCommandLineFlagHelp(usage);
return 0;
}
auto backend = std::make_unique<quic::MasqueServerBackend>(
GetQuicFlag(FLAGS_server_authority), GetQuicFlag(FLAGS_cache_dir));
auto server = std::make_unique<quic::MasqueEpollServer>(backend.get());
if (!server->CreateUDPSocketAndListen(quic::QuicSocketAddress(
quic::QuicIpAddress::Any6(), GetQuicFlag(FLAGS_port)))) {
return 1;
}
std::cerr << "Started MASQUE server" << std::endl;
server->HandleEventsForever();
return 0;
}