summaryrefslogtreecommitdiff
path: root/grpc/src/core/lib/address_utils/sockaddr_utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'grpc/src/core/lib/address_utils/sockaddr_utils.cc')
-rw-r--r--grpc/src/core/lib/address_utils/sockaddr_utils.cc56
1 files changed, 33 insertions, 23 deletions
diff --git a/grpc/src/core/lib/address_utils/sockaddr_utils.cc b/grpc/src/core/lib/address_utils/sockaddr_utils.cc
index 888cd1aa..ac84a144 100644
--- a/grpc/src/core/lib/address_utils/sockaddr_utils.cc
+++ b/grpc/src/core/lib/address_utils/sockaddr_utils.cc
@@ -36,7 +36,35 @@
#include "src/core/lib/gprpp/host_port.h"
#include "src/core/lib/iomgr/sockaddr.h"
#include "src/core/lib/iomgr/socket_utils.h"
-#include "src/core/lib/iomgr/unix_sockets_posix.h"
+
+#ifdef GRPC_HAVE_UNIX_SOCKET
+#include <sys/un.h>
+#endif
+
+#ifdef GRPC_HAVE_UNIX_SOCKET
+static std::string grpc_sockaddr_to_uri_unix_if_possible(
+ const grpc_resolved_address* resolved_addr) {
+ const grpc_sockaddr* addr =
+ reinterpret_cast<const grpc_sockaddr*>(resolved_addr->addr);
+ if (addr->sa_family != AF_UNIX) {
+ return "";
+ }
+ const auto* unix_addr = reinterpret_cast<const struct sockaddr_un*>(addr);
+ if (unix_addr->sun_path[0] == '\0' && unix_addr->sun_path[1] != '\0') {
+ return absl::StrCat(
+ "unix-abstract:",
+ absl::string_view(
+ unix_addr->sun_path + 1,
+ resolved_addr->len - sizeof(unix_addr->sun_family) - 1));
+ }
+ return absl::StrCat("unix:", unix_addr->sun_path);
+}
+#else
+static std::string grpc_sockaddr_to_uri_unix_if_possible(
+ const grpc_resolved_address* /* addr */) {
+ return "";
+}
+#endif
static const uint8_t kV4MappedPrefix[] = {0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0xff, 0xff};
@@ -198,25 +226,6 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* resolved_addr,
return out;
}
-grpc_error_handle grpc_string_to_sockaddr(grpc_resolved_address* out,
- const char* addr, int port) {
- memset(out, 0, sizeof(grpc_resolved_address));
- grpc_sockaddr_in6* addr6 = reinterpret_cast<grpc_sockaddr_in6*>(out->addr);
- grpc_sockaddr_in* addr4 = reinterpret_cast<grpc_sockaddr_in*>(out->addr);
- if (grpc_inet_pton(GRPC_AF_INET6, addr, &addr6->sin6_addr) == 1) {
- addr6->sin6_family = GRPC_AF_INET6;
- out->len = sizeof(grpc_sockaddr_in6);
- } else if (grpc_inet_pton(GRPC_AF_INET, addr, &addr4->sin_addr) == 1) {
- addr4->sin_family = GRPC_AF_INET;
- out->len = sizeof(grpc_sockaddr_in);
- } else {
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
- absl::StrCat("Failed to parse address:", addr).c_str());
- }
- grpc_sockaddr_set_port(out, port);
- return GRPC_ERROR_NONE;
-}
-
std::string grpc_sockaddr_to_uri(const grpc_resolved_address* resolved_addr) {
if (resolved_addr->len == 0) return "";
grpc_resolved_address addr_normalized;
@@ -267,10 +276,11 @@ int grpc_sockaddr_get_port(const grpc_resolved_address* resolved_addr) {
case GRPC_AF_INET6:
return grpc_ntohs(
(reinterpret_cast<const grpc_sockaddr_in6*>(addr))->sin6_port);
+#ifdef GRPC_HAVE_UNIX_SOCKET
+ case AF_UNIX:
+ return 1;
+#endif
default:
- if (grpc_is_unix_socket(resolved_addr)) {
- return 1;
- }
gpr_log(GPR_ERROR, "Unknown socket family %d in grpc_sockaddr_get_port",
addr->sa_family);
return 0;