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>