summary refs log tree commit diff stats
path: root/src/common/network.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/network.c')
-rw-r--r--src/common/network.c209
1 files changed, 7 insertions, 202 deletions
diff --git a/src/common/network.c b/src/common/network.c
index 8790f673..fcdaf547 100644
--- a/src/common/network.c
+++ b/src/common/network.c
@@ -18,6 +18,8 @@
 
 /* ipv4 and ipv6 networking functions with a common interface */
 
+#include "config.h"
+
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
@@ -26,7 +28,6 @@
 #ifndef WIN32
 #include <unistd.h>
 #endif
-#include "../../config.h"
 
 #define WANTSOCKET
 #define WANTARPA
@@ -64,128 +65,17 @@ net_ip (guint32 addr)
 void
 net_store_destroy (netstore * ns)
 {
-#ifdef USE_IPV6
 	if (ns->ip6_hostent)
 		freeaddrinfo (ns->ip6_hostent);
-#endif
-	free (ns);
+	g_free (ns);
 }
 
 netstore *
 net_store_new (void)
 {
-	netstore *ns;
-
-	ns = malloc (sizeof (netstore));
-	memset (ns, 0, sizeof (netstore));
-
-	return ns;
-}
-
-#ifndef USE_IPV6
-
-/* =================== IPV4 ================== */
-
-/*
-	A note about net_resolve and lookupd:
-
-	Many IRC networks rely on round-robin DNS for load balancing, rotating the list
-	of IP address on each query. However, this method breaks when DNS queries are
-	cached. Mac OS X and Darwin handle DNS lookups through the lookupd daemon, which
-	caches queries in its default configuration: thus, if we always pick the first
-	address, we will be stuck with the same host (which might be down!) until the
-	TTL reaches 0 or lookupd is reset (typically, at reboot). Therefore, we need to
-	pick a random address from the result list, instead of always using the first.
-*/
-
-char *
-net_resolve (netstore * ns, char *hostname, int port, char **real_host)
-{
-	ns->ip4_hostent = gethostbyname (hostname);
-	if (!ns->ip4_hostent)
-		return NULL;
-
-	memset (&ns->addr, 0, sizeof (ns->addr));
-#ifdef LOOKUPD
-	int count = 0;
-	while (ns->ip4_hostent->h_addr_list[count]) count++;
-	memcpy (&ns->addr.sin_addr,
-			ns->ip4_hostent->h_addr_list[RAND_INT(count)],
-			ns->ip4_hostent->h_length);
-#else
-	memcpy (&ns->addr.sin_addr, ns->ip4_hostent->h_addr,
-			  ns->ip4_hostent->h_length);
-#endif
-	ns->addr.sin_port = htons (port);
-	ns->addr.sin_family = AF_INET;
-
-	*real_host = strdup (ns->ip4_hostent->h_name);
-	return strdup (inet_ntoa (ns->addr.sin_addr));
-}
-
-int
-net_connect (netstore * ns, int sok4, int sok6, int *sok_return)
-{
-	*sok_return = sok4;
-	return connect (sok4, (struct sockaddr *) &ns->addr, sizeof (ns->addr));
-}
-
-void
-net_bind (netstore * tobindto, int sok4, int sok6)
-{
-	bind (sok4, (struct sockaddr *) &tobindto->addr, sizeof (tobindto->addr));
-}
-
-void
-net_sockets (int *sok4, int *sok6)
-{
-	*sok4 = socket (AF_INET, SOCK_STREAM, 0);
-	*sok6 = -1;
-	net_set_socket_options (*sok4);
-}
-
-void
-udp_sockets (int *sok4, int *sok6)
-{
-	*sok4 = socket (AF_INET, SOCK_DGRAM, 0);
-	*sok6 = -1;
-}
-
-void
-net_store_fill_any (netstore *ns)
-{
-	ns->addr.sin_family = AF_INET;
-	ns->addr.sin_addr.s_addr = INADDR_ANY;
-	ns->addr.sin_port = 0;
-}
-
-void
-net_store_fill_v4 (netstore *ns, guint32 addr, int port)
-{
-	ns->addr.sin_family = AF_INET;
-	ns->addr.sin_addr.s_addr = addr;
-	ns->addr.sin_port = port;
+	return g_new0 (netstore, 1);
 }
 
-guint32
-net_getsockaddr_v4 (netstore *ns)
-{
-	return ns->addr.sin_addr.s_addr;
-}
-
-int
-net_getsockport (int sok4, int sok6)
-{
-	struct sockaddr_in addr;
-	int len = sizeof (addr);
-
-	if (getsockname (sok4, (struct sockaddr *)&addr, &len) == -1)
-		return -1;
-	return addr.sin_port;
-}
-
-#else
-
 /* =================== IPV6 ================== */
 
 char *
@@ -231,11 +121,11 @@ net_resolve (netstore * ns, char *hostname, int port, char **real_host)
 					 ipstring, sizeof (ipstring), NULL, 0, NI_NUMERICHOST);
 
 	if (ns->ip6_hostent->ai_canonname)
-		*real_host = strdup (ns->ip6_hostent->ai_canonname);
+		*real_host = g_strdup (ns->ip6_hostent->ai_canonname);
 	else
-		*real_host = strdup (hostname);
+		*real_host = g_strdup (hostname);
 
-	return strdup (ipstring);
+	return g_strdup (ipstring);
 }
 
 /* the only thing making this interface unclean, this shitty sok4, sok6 business */
@@ -298,88 +188,3 @@ udp_sockets (int *sok4, int *sok6)
 	*sok4 = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 	*sok6 = socket (AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
 }
-
-/* the following functions are used only by MSPROXY and are not
-   proper ipv6 implementations - do not use in new code! */
-
-void
-net_store_fill_any (netstore *ns)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-	if (!ai) {
-		ai = malloc (sizeof (struct addrinfo));
-		memset (ai, 0, sizeof (struct addrinfo));
-		ns->ip6_hostent = ai;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	if (!sin) {
-		sin = malloc (sizeof (struct sockaddr_in));
-		memset (sin, 0, sizeof (struct sockaddr_in));
-		ai->ai_addr = (struct sockaddr *)sin;
-	}
-	ai->ai_family = AF_INET;
-	ai->ai_addrlen = sizeof(struct sockaddr_in);
-	sin->sin_family = AF_INET;
-	sin->sin_addr.s_addr = INADDR_ANY;
-	sin->sin_port = 0;
-	ai->ai_next = NULL;
-}
-
-void
-net_store_fill_v4 (netstore *ns, guint32 addr, int port)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-	if (!ai) {
-		ai = malloc (sizeof (struct addrinfo));
-		memset (ai, 0, sizeof (struct addrinfo));
-		ns->ip6_hostent = ai;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	if (!sin) {
-		sin = malloc (sizeof (struct sockaddr_in));
-		memset (sin, 0, sizeof (struct sockaddr_in));
-		ai->ai_addr = (struct sockaddr *)sin;
-	}
-	ai->ai_family = AF_INET;
-	ai->ai_addrlen = sizeof(struct sockaddr_in);
-	sin->sin_family = AF_INET;
-	sin->sin_addr.s_addr = addr;
-	sin->sin_port = port;
-	ai->ai_next = NULL;
-}
-
-guint32
-net_getsockaddr_v4 (netstore *ns)
-{
-	struct addrinfo *ai;
-	struct sockaddr_in *sin;
-
-	ai = ns->ip6_hostent;
-
-	while (ai->ai_family != AF_INET) {
-		ai = ai->ai_next;
-		if (!ai)
-			return 0;
-	}
-	sin = (struct sockaddr_in *)ai->ai_addr;
-	return sin->sin_addr.s_addr;
-}
-
-int
-net_getsockport (int sok4, int sok6)
-{
-	struct sockaddr_in addr;
-	int len = sizeof (addr);
-
-	if (getsockname (sok4, (struct sockaddr *)&addr, &len) == -1)
-		return -1;
-	return addr.sin_port;
-}
-
-#endif