aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client_new.c2
-rw-r--r--src/output/httpd_output_plugin.c2
-rw-r--r--src/resolver.c83
-rw-r--r--src/resolver.h40
-rw-r--r--src/server_socket.c1
-rw-r--r--src/socket_util.c50
-rw-r--r--src/socket_util.h13
7 files changed, 126 insertions, 65 deletions
diff --git a/src/client_new.c b/src/client_new.c
index 1145c0236..cf28c43c5 100644
--- a/src/client_new.c
+++ b/src/client_new.c
@@ -21,7 +21,7 @@
#include "client_internal.h"
#include "fd_util.h"
#include "fifo_buffer.h"
-#include "socket_util.h"
+#include "resolver.h"
#include "permission.h"
#include "glib_socket.h"
diff --git a/src/output/httpd_output_plugin.c b/src/output/httpd_output_plugin.c
index 8ef0c11a6..e7344320c 100644
--- a/src/output/httpd_output_plugin.c
+++ b/src/output/httpd_output_plugin.c
@@ -24,7 +24,7 @@
#include "output_api.h"
#include "encoder_plugin.h"
#include "encoder_list.h"
-#include "socket_util.h"
+#include "resolver.h"
#include "page.h"
#include "icy_server.h"
#include "fd_util.h"
diff --git a/src/resolver.c b/src/resolver.c
new file mode 100644
index 000000000..81099b2af
--- /dev/null
+++ b/src/resolver.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+#include "resolver.h"
+
+#ifndef G_OS_WIN32
+#include <sys/socket.h>
+#include <netdb.h>
+#else /* G_OS_WIN32 */
+#define WINVER 0x0501
+#include <ws2tcpip.h>
+#include <winsock.h>
+#endif /* G_OS_WIN32 */
+
+#ifdef HAVE_IPV6
+#include <string.h>
+#endif
+
+char *
+sockaddr_to_string(const struct sockaddr *sa, size_t length, GError **error)
+{
+#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED)
+ const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *)sa;
+ struct sockaddr_in a4;
+#endif
+ int ret;
+ char host[NI_MAXHOST], serv[NI_MAXSERV];
+
+#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED)
+ if (sa->sa_family == 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;
+
+ sa = (const struct sockaddr *)&a4;
+ length = sizeof(a4);
+ }
+#endif
+
+ ret = getnameinfo(sa, length, host, sizeof(host), serv, sizeof(serv),
+ NI_NUMERICHOST|NI_NUMERICSERV);
+ if (ret != 0) {
+ g_set_error(error, g_quark_from_static_string("netdb"), ret,
+ "%s", gai_strerror(ret));
+ return NULL;
+ }
+
+#ifdef HAVE_UN
+ if (sa->sa_family == AF_UNIX)
+ /* "serv" contains corrupt information with unix
+ sockets */
+ return g_strdup(host);
+#endif
+
+#ifdef HAVE_IPV6
+ if (strchr(host, ':') != NULL)
+ return g_strconcat("[", host, "]:", serv, NULL);
+#endif
+
+ return g_strconcat(host, ":", serv, NULL);
+}
diff --git a/src/resolver.h b/src/resolver.h
new file mode 100644
index 000000000..179f8fd75
--- /dev/null
+++ b/src/resolver.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_RESOLVER_H
+#define MPD_RESOLVER_H
+
+#include <glib.h>
+
+struct sockaddr;
+
+/**
+ * Converts the specified socket address into a string in the form
+ * "IP:PORT". The return value must be freed with g_free() when you
+ * don't need it anymore.
+ *
+ * @param sa the sockaddr struct
+ * @param length the length of #sa in bytes
+ * @param error location to store the error occurring, or NULL to
+ * ignore errors
+ */
+char *
+sockaddr_to_string(const struct sockaddr *sa, size_t length, GError **error);
+
+#endif
diff --git a/src/server_socket.c b/src/server_socket.c
index 4affeb91b..dba549bfc 100644
--- a/src/server_socket.c
+++ b/src/server_socket.c
@@ -25,6 +25,7 @@
#include "server_socket.h"
#include "socket_util.h"
+#include "resolver.h"
#include "fd_util.h"
#include "glib_compat.h"
#include "glib_socket.h"
diff --git a/src/socket_util.c b/src/socket_util.c
index f673d73e9..8f36c10cf 100644
--- a/src/socket_util.c
+++ b/src/socket_util.c
@@ -26,7 +26,6 @@
#ifndef G_OS_WIN32
#include <sys/socket.h>
-#include <netdb.h>
#else /* G_OS_WIN32 */
#define WINVER 0x0501
#include <ws2tcpip.h>
@@ -43,55 +42,6 @@ listen_quark(void)
return g_quark_from_static_string("listen");
}
-char *
-sockaddr_to_string(const struct sockaddr *sa, size_t length, GError **error)
-{
-#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED)
- const struct sockaddr_in6 *a6 = (const struct sockaddr_in6 *)sa;
- struct sockaddr_in a4;
-#endif
- int ret;
- char host[NI_MAXHOST], serv[NI_MAXSERV];
-
-#if defined(HAVE_IPV6) && defined(IN6_IS_ADDR_V4MAPPED)
- if (sa->sa_family == 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;
-
- sa = (const struct sockaddr *)&a4;
- length = sizeof(a4);
- }
-#endif
-
- ret = getnameinfo(sa, length, host, sizeof(host), serv, sizeof(serv),
- NI_NUMERICHOST|NI_NUMERICSERV);
- if (ret != 0) {
- g_set_error(error, g_quark_from_static_string("netdb"), ret,
- "%s", gai_strerror(ret));
- return NULL;
- }
-
-#ifdef HAVE_UN
- if (sa->sa_family == AF_UNIX)
- /* "serv" contains corrupt information with unix
- sockets */
- return g_strdup(host);
-#endif
-
-#ifdef HAVE_IPV6
- if (strchr(host, ':') != NULL)
- return g_strconcat("[", host, "]:", serv, NULL);
-#endif
-
- return g_strconcat(host, ":", serv, NULL);
-}
-
int
socket_bind_listen(int domain, int type, int protocol,
const struct sockaddr *address, size_t address_length,
diff --git a/src/socket_util.h b/src/socket_util.h
index f27751aa3..93bd27362 100644
--- a/src/socket_util.h
+++ b/src/socket_util.h
@@ -31,19 +31,6 @@
struct sockaddr;
/**
- * Converts the specified socket address into a string in the form
- * "IP:PORT". The return value must be freed with g_free() when you
- * don't need it anymore.
- *
- * @param sa the sockaddr struct
- * @param length the length of #sa in bytes
- * @param error location to store the error occurring, or NULL to
- * ignore errors
- */
-char *
-sockaddr_to_string(const struct sockaddr *sa, size_t length, GError **error);
-
-/**
* Creates a socket listening on the specified address. This is a
* shortcut for socket(), bind() and listen().
*