Build quic_server in iOS/Android presubmits PiperOrigin-RevId: 468763588
diff --git a/build/source_list.bzl b/build/source_list.bzl index 9092865..225a563 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -701,6 +701,7 @@ "quic/tools/quic_client_default_network_helper.h", "quic/tools/quic_default_client.h", "quic/tools/quic_memory_cache_backend.h", + "quic/tools/quic_name_lookup.h", "quic/tools/quic_server_factory.h", "quic/tools/quic_simple_client_session.h", "quic/tools/quic_simple_client_stream.h", @@ -725,6 +726,7 @@ "quic/tools/quic_client_default_network_helper.cc", "quic/tools/quic_default_client.cc", "quic/tools/quic_memory_cache_backend.cc", + "quic/tools/quic_name_lookup.cc", "quic/tools/quic_server_factory.cc", "quic/tools/quic_simple_client_session.cc", "quic/tools/quic_simple_client_stream.cc",
diff --git a/build/source_list.gni b/build/source_list.gni index e06888f..de22a2a 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -701,6 +701,7 @@ "src/quiche/quic/tools/quic_client_default_network_helper.h", "src/quiche/quic/tools/quic_default_client.h", "src/quiche/quic/tools/quic_memory_cache_backend.h", + "src/quiche/quic/tools/quic_name_lookup.h", "src/quiche/quic/tools/quic_server_factory.h", "src/quiche/quic/tools/quic_simple_client_session.h", "src/quiche/quic/tools/quic_simple_client_stream.h", @@ -725,6 +726,7 @@ "src/quiche/quic/tools/quic_client_default_network_helper.cc", "src/quiche/quic/tools/quic_default_client.cc", "src/quiche/quic/tools/quic_memory_cache_backend.cc", + "src/quiche/quic/tools/quic_name_lookup.cc", "src/quiche/quic/tools/quic_server_factory.cc", "src/quiche/quic/tools/quic_simple_client_session.cc", "src/quiche/quic/tools/quic_simple_client_stream.cc",
diff --git a/build/source_list.json b/build/source_list.json index 0811079..7c929bf 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -700,6 +700,7 @@ "quiche/quic/tools/quic_client_default_network_helper.h", "quiche/quic/tools/quic_default_client.h", "quiche/quic/tools/quic_memory_cache_backend.h", + "quiche/quic/tools/quic_name_lookup.h", "quiche/quic/tools/quic_server_factory.h", "quiche/quic/tools/quic_simple_client_session.h", "quiche/quic/tools/quic_simple_client_stream.h", @@ -724,6 +725,7 @@ "quiche/quic/tools/quic_client_default_network_helper.cc", "quiche/quic/tools/quic_default_client.cc", "quiche/quic/tools/quic_memory_cache_backend.cc", + "quiche/quic/tools/quic_name_lookup.cc", "quiche/quic/tools/quic_server_factory.cc", "quiche/quic/tools/quic_simple_client_session.cc", "quiche/quic/tools/quic_simple_client_stream.cc",
diff --git a/quiche/quic/core/io/socket_posix.cc b/quiche/quic/core/io/socket_posix.cc index 59f286b..b69f6cc 100644 --- a/quiche/quic/core/io/socket_posix.cc +++ b/quiche/quic/core/io/socket_posix.cc
@@ -15,6 +15,15 @@ #include "quiche/quic/platform/api/quic_ip_address_family.h" #include "quiche/common/platform/api/quiche_logging.h" +// accept4() is a Linux-specific extension that is available in glibc 2.10+. +#if defined(__linux__) && defined(_GNU_SOURCE) && defined(__GLIBC_PREREQ) +#if __GLIBC_PREREQ(2, 10) +#define HAS_ACCEPT4 1 +#else +#define HAS_ACCEPT4 0 +#endif +#endif + namespace quic::socket_api { namespace { @@ -171,7 +180,7 @@ } } -#if defined(__linux__) && defined(SOCK_NONBLOCK) +#if HAS_ACCEPT4 absl::StatusOr<AcceptResult> AcceptWithFlags(SocketFd fd, int flags) { QUICHE_DCHECK_GE(fd, 0); @@ -200,7 +209,7 @@ return peer_address.status(); } } -#endif // defined(__linux__) && defined(SOCK_NONBLOCK) +#endif // HAS_ACCEPT4 socklen_t GetAddrlen(IpAddressFamily family) { switch (family) { @@ -409,7 +418,7 @@ absl::StatusOr<AcceptResult> Accept(SocketFd fd, bool blocking) { QUICHE_DCHECK_GE(fd, 0); -#if defined(__linux__) && defined(SOCK_NONBLOCK) +#if HAS_ACCEPT4 if (!blocking) { return AcceptWithFlags(fd, SOCK_NONBLOCK); }
diff --git a/quiche/quic/tools/connect_tunnel.cc b/quiche/quic/tools/connect_tunnel.cc index ef2a5eb..e86d628 100644 --- a/quiche/quic/tools/connect_tunnel.cc +++ b/quiche/quic/tools/connect_tunnel.cc
@@ -22,7 +22,7 @@ #include "quiche/quic/core/quic_error_codes.h" #include "quiche/quic/platform/api/quic_socket_address.h" #include "quiche/quic/tools/quic_backend_response.h" -#include "quiche/quic/tools/quic_client.h" +#include "quiche/quic/tools/quic_name_lookup.h" #include "quiche/quic/tools/quic_simple_server_backend.h" #include "quiche/common/platform/api/quiche_logging.h" #include "quiche/common/platform/api/quiche_mem_slice.h"
diff --git a/quiche/quic/tools/quic_client.cc b/quiche/quic/tools/quic_client.cc index b3e4705..c6de357 100644 --- a/quiche/quic/tools/quic_client.cc +++ b/quiche/quic/tools/quic_client.cc
@@ -4,14 +4,6 @@ #include "quiche/quic/tools/quic_client.h" -#include <errno.h> -#include <netdb.h> -#include <netinet/in.h> -#include <string.h> -#include <sys/epoll.h> -#include <sys/socket.h> -#include <sys/types.h> - #include <utility> #include "quiche/quic/core/crypto/quic_random.h" @@ -29,31 +21,6 @@ namespace quic { -namespace tools { - -QuicSocketAddress LookupAddress(int address_family_for_lookup, std::string host, - std::string port) { - addrinfo hint; - memset(&hint, 0, sizeof(hint)); - hint.ai_family = address_family_for_lookup; - hint.ai_protocol = IPPROTO_UDP; - - addrinfo* info_list = nullptr; - int result = getaddrinfo(host.c_str(), port.c_str(), &hint, &info_list); - if (result != 0) { - QUIC_LOG(ERROR) << "Failed to look up " << host << ": " - << gai_strerror(result); - return QuicSocketAddress(); - } - - QUICHE_CHECK(info_list != nullptr); - std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list, - freeaddrinfo); - return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen); -} - -} // namespace tools - QuicClient::QuicClient(QuicSocketAddress server_address, const QuicServerId& server_id, const ParsedQuicVersionVector& supported_versions,
diff --git a/quiche/quic/tools/quic_client.h b/quiche/quic/tools/quic_client.h index e0106c7..e878a8e 100644 --- a/quiche/quic/tools/quic_client.h +++ b/quiche/quic/tools/quic_client.h
@@ -18,6 +18,7 @@ #include "quiche/quic/core/quic_packet_reader.h" #include "quiche/quic/platform/api/quic_epoll.h" #include "quiche/quic/tools/quic_client_epoll_network_helper.h" +#include "quiche/quic/tools/quic_name_lookup.h" #include "quiche/quic/tools/quic_spdy_client_base.h" namespace quic { @@ -28,17 +29,6 @@ class QuicClientPeer; } // namespace test -namespace tools { - -QuicSocketAddress LookupAddress(int address_family_for_lookup, std::string host, - std::string port); - -inline QuicSocketAddress LookupAddress(std::string host, std::string port) { - return LookupAddress(0, host, port); -} - -} // namespace tools - class QuicClient : public QuicSpdyClientBase { public: // These will create their own QuicClientEpollNetworkHelper.
diff --git a/quiche/quic/tools/quic_name_lookup.cc b/quiche/quic/tools/quic_name_lookup.cc new file mode 100644 index 0000000..5098e80 --- /dev/null +++ b/quiche/quic/tools/quic_name_lookup.cc
@@ -0,0 +1,36 @@ +// 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. + +#include "quiche/quic/tools/quic_name_lookup.h" + +#include <netdb.h> +#include <sys/socket.h> +#include <sys/types.h> + +#include "quiche/quic/platform/api/quic_logging.h" + +namespace quic::tools { + +QuicSocketAddress LookupAddress(int address_family_for_lookup, std::string host, + std::string port) { + addrinfo hint; + memset(&hint, 0, sizeof(hint)); + hint.ai_family = address_family_for_lookup; + hint.ai_protocol = IPPROTO_UDP; + + addrinfo* info_list = nullptr; + int result = getaddrinfo(host.c_str(), port.c_str(), &hint, &info_list); + if (result != 0) { + QUIC_LOG(ERROR) << "Failed to look up " << host << ": " + << gai_strerror(result); + return QuicSocketAddress(); + } + + QUICHE_CHECK(info_list != nullptr); + std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list, + freeaddrinfo); + return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen); +} + +} // namespace quic::tools
diff --git a/quiche/quic/tools/quic_name_lookup.h b/quiche/quic/tools/quic_name_lookup.h new file mode 100644 index 0000000..99a69b1 --- /dev/null +++ b/quiche/quic/tools/quic_name_lookup.h
@@ -0,0 +1,23 @@ +// 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. + +#ifndef QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_ +#define QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_ + +#include <string> + +#include "quiche/quic/platform/api/quic_socket_address.h" + +namespace quic::tools { + +quic::QuicSocketAddress LookupAddress(int address_family_for_lookup, + std::string host, std::string port); + +inline QuicSocketAddress LookupAddress(std::string host, std::string port) { + return LookupAddress(0, host, port); +} + +} // namespace quic::tools + +#endif // QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_
diff --git a/quiche/quic/tools/quic_server.cc b/quiche/quic/tools/quic_server.cc index b318cfd..aace378 100644 --- a/quiche/quic/tools/quic_server.cc +++ b/quiche/quic/tools/quic_server.cc
@@ -4,13 +4,6 @@ #include "quiche/quic/tools/quic_server.h" -#include <errno.h> -#include <features.h> -#include <netinet/in.h> -#include <string.h> -#include <sys/epoll.h> -#include <sys/socket.h> - #include <cstdint> #include <memory>