diff options
Diffstat (limited to 'grpc/src/core/lib/address_utils/sockaddr_utils.cc')
-rw-r--r-- | grpc/src/core/lib/address_utils/sockaddr_utils.cc | 56 |
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; |