diff options
Diffstat (limited to 'src/net/Resolver.cxx')
-rw-r--r-- | src/net/Resolver.cxx | 101 |
1 files changed, 4 insertions, 97 deletions
diff --git a/src/net/Resolver.cxx b/src/net/Resolver.cxx index 19df84096..189c5bc9c 100644 --- a/src/net/Resolver.cxx +++ b/src/net/Resolver.cxx @@ -23,21 +23,12 @@ #include "util/Error.hxx" #include "util/Domain.hxx" -#include <algorithm> +#include <string> -#ifndef WIN32 -#include <sys/socket.h> -#include <netdb.h> -#ifdef HAVE_TCP -#include <netinet/in.h> -#endif -#else +#ifdef WIN32 #include <ws2tcpip.h> -#include <winsock.h> -#endif - -#ifdef HAVE_UN -#include <sys/un.h> +#else +#include <netdb.h> #endif #include <string.h> @@ -45,90 +36,6 @@ const Domain resolver_domain("resolver"); -#ifdef HAVE_UN - -static std::string -LocalAddressToString(const struct sockaddr_un &s_un, size_t size) -{ - const size_t prefix_size = (size_t) - ((struct sockaddr_un *)nullptr)->sun_path; - assert(size >= prefix_size); - - size_t result_length = size - prefix_size; - - /* remove the trailing null terminator */ - if (result_length > 0 && s_un.sun_path[result_length - 1] == 0) - --result_length; - - if (result_length == 0) - return "local"; - - std::string result(s_un.sun_path, result_length); - - /* replace all null bytes with '@'; this also handles abstract - addresses (Linux specific) */ - std::replace(result.begin(), result.end(), '\0', '@'); - - return result; -} - -#endif - -std::string -sockaddr_to_string(SocketAddress address) -{ -#ifdef HAVE_UN - if (address.GetFamily() == AF_UNIX) - /* return path of UNIX domain sockets */ - return LocalAddressToString(*(const sockaddr_un *)address.GetAddress(), - address.GetSize()); -#endif - -#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED) - const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *) - address.GetAddress(); - struct sockaddr_in a4; -#endif - int ret; - char host[NI_MAXHOST], serv[NI_MAXSERV]; - -#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED) - if (address.GetFamily() == AF_INET6 && - IN6_IS_ADDR_V4MAPPED(&a6->sin6_addr)) { - /* convert "::ffff:127.0.0.1" to "127.0.0.1" */ - - memset(&a4, 0, sizeof(a4)); - a4.sin_family = AF_INET; - memcpy(&a4.sin_addr, ((const char *)&a6->sin6_addr) + 12, - sizeof(a4.sin_addr)); - a4.sin_port = a6->sin6_port; - - address = { (const struct sockaddr *)&a4, sizeof(a4) }; - } -#endif - - ret = getnameinfo(address.GetAddress(), address.GetSize(), - host, sizeof(host), serv, sizeof(serv), - NI_NUMERICHOST|NI_NUMERICSERV); - if (ret != 0) - return "unknown"; - -#ifdef HAVE_IPV6 - if (strchr(host, ':') != nullptr) { - std::string result("["); - result.append(host); - result.append("]:"); - result.append(serv); - return result; - } -#endif - - std::string result(host); - result.push_back(':'); - result.append(serv); - return result; -} - struct addrinfo * resolve_host_port(const char *host_port, unsigned default_port, int flags, int socktype, |