blob: 29eb2bf53da9642afa7ae4bec742795e8b3e5c66 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef EXTENSIONS_BROWSER_API_SOCKETS_UDP_TEST_UDP_ECHO_SERVER_H_
#define EXTENSIONS_BROWSER_API_SOCKETS_UDP_TEST_UDP_ECHO_SERVER_H_
#include <memory>
#include "base/threading/thread.h"
#include "net/base/completion_once_callback.h"
#include "net/base/host_port_pair.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/test/udp_socket_test_util.h"
namespace net {
class HostPortPair;
} // namespace net
namespace extensions {
// Test UDP server that echos back everything it receives.
class TestUdpEchoServer {
public:
TestUdpEchoServer();
// Destroying the server shuts it down.
~TestUdpEchoServer();
TestUdpEchoServer(const TestUdpEchoServer&) = delete;
TestUdpEchoServer& operator=(const TestUdpEchoServer&) = delete;
// Starts the echo server, and returns an error on failure. Sets
// `host_port_pair` to the the host and port the server is listening on.
// `host_port_pair` must not be null. Spins the current message loop while
// waiting for the server to start.
[[nodiscard]] bool Start(network::mojom::NetworkContext* network_context,
net::HostPortPair* host_port_pair);
private:
// Class that does all the work. Created on the test server's thread, but
// otherwise lives an IO thread, where it is also destroyed.
class Core;
std::unique_ptr<Core> core_;
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_API_SOCKETS_UDP_TEST_UDP_ECHO_SERVER_H_