#include <config.h>
#include <glib.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
#include "gsocketaddress.h"
+#include "ginetsocketaddress.h"
+#include "ginet4address.h"
G_DEFINE_ABSTRACT_TYPE (GSocketAddress, g_socket_address, G_TYPE_INITIALLY_UNOWNED);
return G_SOCKET_ADDRESS_GET_CLASS (address)->to_native (address, dest);
}
+
+GSocketAddress *
+g_socket_address_from_native (gpointer native, gsize len)
+{
+ gshort family;
+
+ if (len < sizeof (gshort))
+ return NULL;
+
+ family = ((struct sockaddr *) native)->sa_family;
+
+ if (family == AF_UNSPEC)
+ return NULL;
+
+ if (family == AF_INET)
+ {
+ struct sockaddr_in *addr = (struct sockaddr_in *) native;
+
+ 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
+
+ return NULL;
+}