ANY address in IPv6.
Patch from Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
GInet6Address *
g_inet6_address_new_any (void)
{
- return NULL;
+ guint8 bytes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+ return g_inet6_address_from_bytes (bytes);
}
}
else if (G_IS_INET6_ADDRESS (addr->priv->address))
{
- return FALSE;
+ struct sockaddr_in6 *sock = (struct sockaddr_in6 *) dest;
+ memset (sock, 0, sizeof (sock));
+ sock->sin6_family = AF_INET6;
+ sock->sin6_port = g_htons (addr->priv->port);
+ memcpy (&(sock->sin6_addr.s6_addr), g_inet6_address_to_bytes (G_INET6_ADDRESS (addr->priv->address)), sizeof (sock->sin6_addr));
+ return TRUE;
}
else
return FALSE;
#include "gsocketaddress.h"
#include "ginetsocketaddress.h"
#include "ginet4address.h"
+#include "ginet6address.h"
G_DEFINE_ABSTRACT_TYPE (GSocketAddress, g_socket_address, G_TYPE_INITIALLY_UNOWNED);
return G_SOCKET_ADDRESS (g_inet_socket_address_new (G_INET_ADDRESS (g_inet4_address_from_bytes ((guint8 *) &(addr->sin_addr))), g_ntohs (addr->sin_port)));
}
- // TODO: handle AF_INET6 and AF_UNIX
+
+ if (family == AF_INET6)
+ {
+ struct sockaddr_in6 *addr = (struct sockaddr_in6 *) native;
+
+ return G_SOCKET_ADDRESS (g_inet_socket_address_new (G_INET_ADDRESS (g_inet6_address_from_bytes ((guint8 *) &(addr->sin6_addr))), g_ntohs (addr->sin6_port)));
+ }
+
+ // TODO: handle AF_UNIX
return NULL;
}