netaddressmeta: Use GSocketAddress instead of our own wrapper type
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 16 Jan 2012 12:34:28 +0000 (13:34 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 17 Jan 2012 14:02:01 +0000 (15:02 +0100)
configure.ac
libs/gst/net/Makefile.am
libs/gst/net/gstnetaddressmeta.c
libs/gst/net/gstnetaddressmeta.h
pkgconfig/gstreamer-net-uninstalled.pc.in
pkgconfig/gstreamer-net.pc.in

index b2bc5f8..2983e96 100644 (file)
@@ -534,6 +534,22 @@ AG_GST_GLIB_CHECK([$GLIB_REQ])
 dnl Check for glib2 without extra fat, useful for the unversioned tool frontends
 PKG_CHECK_MODULES(GLIB_ONLY, glib-2.0 >= $GLIB_REQ)
 
+dnl Check for GIO
+translit(dnm, m, l) AM_CONDITIONAL(USE_GIO, true)
+AG_GST_CHECK_FEATURE(GIO, [GIO library], gio, [
+  PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.31.10)
+  GIO_MODULE_DIR="`$PKG_CONFIG --variable=giomoduledir gio-2.0`"
+  AC_DEFINE_UNQUOTED(GIO_MODULE_DIR, "$GIO_MODULE_DIR",
+      [The GIO modules directory.])
+  GIO_LIBDIR="`$PKG_CONFIG --variable=libdir gio-2.0`"
+      AC_DEFINE_UNQUOTED(GIO_LIBDIR, "$GIO_LIBDIR",
+          [The GIO library directory.])
+
+  AC_SUBST(GIO_CFLAGS)
+  AC_SUBST(GIO_LIBS)
+  AC_SUBST(GIO_LDFLAGS)
+])
+
 dnl Check for documentation xrefs
 GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
 AC_SUBST(GLIB_PREFIX)
index 2a758d4..33bd014 100644 (file)
@@ -14,8 +14,8 @@ libgstnet_@GST_MAJORMINOR@_la_SOURCES = \
     gstnettimepacket.c \
     gstnettimeprovider.c
 
-libgstnet_@GST_MAJORMINOR@_la_CFLAGS = $(GST_OBJ_CFLAGS)
-libgstnet_@GST_MAJORMINOR@_la_LIBADD = $(GST_OBJ_LIBS) $(INET_ATON_LIBS) $(WIN32_LIBS)
+libgstnet_@GST_MAJORMINOR@_la_CFLAGS = $(GST_OBJ_CFLAGS) $(GIO_CFLAGS)
+libgstnet_@GST_MAJORMINOR@_la_LIBADD = $(GST_OBJ_LIBS) $(INET_ATON_LIBS) $(WIN32_LIBS) $(GIO_LIBS)
 libgstnet_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
 
 CLEANFILES = *.gcno *.gcda *.gcov
index d9f1ddd..5e687d4 100644 (file)
 
 #include "gstnetaddressmeta.h"
 
+static gboolean
+net_address_meta_init (GstNetAddressMeta * meta, gpointer params,
+    GstBuffer * buffer)
+{
+  meta->addr = NULL;
+
+  return TRUE;
+}
+
 static void
 net_address_meta_copy (GstBuffer * copybuf, GstNetAddressMeta * meta,
     GstBuffer * buffer, gsize offset, gsize size)
 {
-  GstNetAddressMeta *naddr;
+  gst_buffer_add_net_address_meta (copybuf, meta->addr);
+}
 
-  naddr = gst_buffer_add_net_address_meta (copybuf);
-  memcpy (&naddr->naddr, &meta->naddr, sizeof (meta->naddr));
+static void
+net_address_meta_free (GstNetAddressMeta * meta, GstBuffer * buffer)
+{
+  if (meta->addr)
+    g_object_unref (meta->addr);
+  meta->addr = NULL;
 }
 
 const GstMetaInfo *
@@ -50,327 +64,27 @@ gst_net_address_meta_get_info (void)
   if (meta_info == NULL) {
     meta_info = gst_meta_register ("GstNetAddressMeta", "GstNetAddressMeta",
         sizeof (GstNetAddressMeta),
-        (GstMetaInitFunction) NULL,
-        (GstMetaFreeFunction) NULL,
+        (GstMetaInitFunction) net_address_meta_init,
+        (GstMetaFreeFunction) net_address_meta_free,
         (GstMetaCopyFunction) net_address_meta_copy,
         (GstMetaTransformFunction) NULL);
   }
   return meta_info;
 }
 
-/**
- * gst_net_address_set_ip4_address:
- * @naddr: a network address
- * @address: an IPv4 network address.
- * @port: a port number to set.
- *
- * Set @naddr with the IPv4 @address and @port pair.
- *
- * Note that @port and @address must be expressed in network byte order,
- * use g_htons() and g_htonl() to convert them to network byte order.
- */
-void
-gst_net_address_set_ip4_address (GstNetAddress * naddr, guint32 address,
-    guint16 port)
-{
-  g_return_if_fail (naddr != NULL);
-
-  naddr->type = GST_NET_TYPE_IP4;
-  naddr->address.ip4 = address;
-  naddr->port = port;
-}
-
-/**
- * gst_net_address_set_ip6_address:
- * @naddr: a network address
- * @address: an IPv6 network address.
- * @port: a port number to set.
- *
- * Set @naddr with the IPv6 @address and @port pair.
- *
- * Note that @port must be expressed in network byte order, use g_htons() to convert
- * it to network byte order.
- */
-void
-gst_net_address_set_ip6_address (GstNetAddress * naddr, guint8 address[16],
-    guint16 port)
-{
-  g_return_if_fail (naddr != NULL);
-
-  naddr->type = GST_NET_TYPE_IP6;
-  memcpy (&naddr->address.ip6, address, 16);
-  naddr->port = port;
-}
-
-/**
- * gst_net_address_get_net_type:
- * @naddr: a network address
- *
- * Get the type of address stored in @naddr.
- *
- * Returns: the network type stored in @naddr.
- */
-GstNetType
-gst_net_address_get_net_type (const GstNetAddress * naddr)
-{
-  g_return_val_if_fail (naddr != NULL, GST_NET_TYPE_UNKNOWN);
-
-  return naddr->type;
-}
-
-/**
- * gst_net_address_get_ip4_address:
- * @naddr: a network address
- * @address: a location to store the address.
- * @port: a location to store the port.
- *
- * Get the IPv4 address stored in @naddr into @address. This function requires
- * that the address type of @naddr is of type #GST_NET_TYPE_IP4.
- *
- * Note that @port and @address are expressed in network byte order, use
- * g_ntohs() and g_ntohl() to convert them to host order.
- *
- * Returns: TRUE if the address could be retrieved.
- */
-gboolean
-gst_net_address_get_ip4_address (const GstNetAddress * naddr, guint32 * address,
-    guint16 * port)
+GstNetAddressMeta *
+gst_buffer_add_net_address_meta (GstBuffer * buffer, GSocketAddress * addr)
 {
-  g_return_val_if_fail (naddr != NULL, FALSE);
+  GstNetAddressMeta *meta;
 
-  if (naddr->type == GST_NET_TYPE_UNKNOWN || naddr->type == GST_NET_TYPE_IP6)
-    return FALSE;
+  g_return_val_if_fail (GST_IS_BUFFER (buffer), NULL);
+  g_return_val_if_fail (G_IS_SOCKET_ADDRESS (addr), NULL);
 
-  if (address)
-    *address = naddr->address.ip4;
-  if (port)
-    *port = naddr->port;
+  meta =
+      (GstNetAddressMeta *) gst_buffer_add_meta (buffer,
+      GST_NET_ADDRESS_META_INFO, NULL);
 
-  return TRUE;
-}
+  meta->addr = g_object_ref (addr);
 
-/**
- * gst_net_address_get_ip6_address:
- * @naddr: a network address
- * @address: a location to store the result.
- * @port: a location to store the port.
- *
- * Get the IPv6 address stored in @naddr into @address.
- *
- * If @naddr is of type GST_NET_TYPE_IP4, the transitional IP6 address is
- * returned.
- *
- * Note that @port is expressed in network byte order, use g_ntohs() to convert
- * it to host order.
- *
- * Returns: TRUE if the address could be retrieved.
- */
-gboolean
-gst_net_address_get_ip6_address (const GstNetAddress * naddr,
-    guint8 address[16], guint16 * port)
-{
-  static guint8 ip4_transition[16] =
-      { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFF, 0xFF };
-  g_return_val_if_fail (naddr != NULL, FALSE);
-
-  if (naddr->type == GST_NET_TYPE_UNKNOWN)
-    return FALSE;
-
-  if (address) {
-    if (naddr->type == GST_NET_TYPE_IP6) {
-      memcpy (address, naddr->address.ip6, 16);
-    } else {                    /* naddr->type == GST_NET_TYPE_IP4 */
-      memcpy (address, ip4_transition, 12);
-      memcpy (address + 12, (guint8 *) & (naddr->address.ip4), 4);
-    }
-  }
-  if (port)
-    *port = naddr->port;
-
-  return TRUE;
-}
-
-/**
- * gst_net_address_get_address_bytes:
- * @naddr: a network address
- * @address: a location to store the result.
- * @port: a location to store the port.
- *
- * Get just the address bytes stored in @naddr into @address.
- *
- * Note that @port is expressed in network byte order, use g_ntohs() to convert
- * it to host order. IP4 addresses are also stored in network byte order.
- *
- * Returns: number of bytes actually copied
- *
- * Since: 0.10.22
- */
-gint
-gst_net_address_get_address_bytes (const GstNetAddress * naddr,
-    guint8 address[16], guint16 * port)
-{
-  gint ret = 0;
-
-  g_return_val_if_fail (naddr != NULL, FALSE);
-
-  if (naddr->type == GST_NET_TYPE_UNKNOWN)
-    return 0;
-
-  if (address) {
-    if (naddr->type == GST_NET_TYPE_IP6) {
-      memcpy (address, naddr->address.ip6, 16);
-      ret = 16;
-    } else {                    /* naddr->type == GST_NET_TYPE_IP4 */
-      memcpy (address, (guint8 *) & (naddr->address.ip4), 4);
-      ret = 4;
-    }
-  }
-  if (port)
-    *port = naddr->port;
-
-  return ret;
-}
-
-/**
- * gst_net_address_set_address_bytes:
- * @naddr: a network address
- * @type: the address type (IPv4 or IPV6)
- * @address: a location to store the result.
- * @port: a location to store the port.
- *
- * Set just the address bytes stored in @naddr into @address.
- *
- * Note that @port must be expressed in network byte order, use g_htons() to
- * convert it to network byte order order. IP4 address bytes must also be
- * stored in network byte order.
- *
- * Returns: number of bytes actually copied
- *
- * Since: 0.10.22
- */
-gint
-gst_net_address_set_address_bytes (GstNetAddress * naddr, GstNetType type,
-    guint8 address[16], guint16 port)
-{
-  gint len = 0;
-
-  g_return_val_if_fail (naddr != NULL, 0);
-
-  naddr->type = type;
-  switch (naddr->type) {
-    case GST_NET_TYPE_UNKNOWN:
-    case GST_NET_TYPE_IP6:
-      len = 16;
-      memcpy (naddr->address.ip6, address, 16);
-      break;
-    case GST_NET_TYPE_IP4:
-      len = 4;
-      memcpy ((guint8 *) & (naddr->address.ip4), address, 4);
-      break;
-  }
-
-  if (port)
-    naddr->port = port;
-
-  return len;
-}
-
-/**
- * gst_net_address_equal:
- * @naddr1: The first #GstNetAddress
- * @naddr2: The second #GstNetAddress
- *
- * Compare two #GstNetAddress structures
- *
- * Returns: TRUE if they are identical, FALSE otherwise
- *
- * Since: 0.10.18
- */
-gboolean
-gst_net_address_equal (const GstNetAddress * naddr1,
-    const GstNetAddress * naddr2)
-{
-  g_return_val_if_fail (naddr1 != NULL, FALSE);
-  g_return_val_if_fail (naddr2 != NULL, FALSE);
-
-  if (naddr1->type != naddr2->type)
-    return FALSE;
-
-  if (naddr1->port != naddr2->port)
-    return FALSE;
-
-  switch (naddr1->type) {
-    case GST_NET_TYPE_IP4:
-      if (naddr1->address.ip4 != naddr2->address.ip4)
-        return FALSE;
-      break;
-    case GST_NET_TYPE_IP6:
-      if (memcmp (naddr1->address.ip6, naddr2->address.ip6,
-              sizeof (naddr1->address.ip6)))
-        return FALSE;
-      break;
-    default:
-      break;
-  }
-  return TRUE;
-}
-
-/**
- * gst_net_address_to_string:
- * @naddr: a #GstNetAddress
- * @dest: destination
- * @len: len of @dest
- *
- * Copies a string representation of @naddr into @dest. Up to @len bytes are
- * copied.
- *
- * Returns: the number of bytes which would be produced if the buffer was large
- * enough
- *
- * Since: 0.10.24
- */
-gint
-gst_net_address_to_string (const GstNetAddress * naddr, gchar * dest, gsize len)
-{
-  gint result;
-
-  g_return_val_if_fail (naddr != NULL, FALSE);
-  g_return_val_if_fail (dest != NULL, FALSE);
-
-  switch (naddr->type) {
-    case GST_NET_TYPE_IP4:
-    {
-      guint32 address;
-      guint16 port;
-
-      gst_net_address_get_ip4_address (naddr, &address, &port);
-      address = g_ntohl (address);
-
-      result = g_snprintf (dest, len, "%d.%d.%d.%d:%d", (address >> 24) & 0xff,
-          (address >> 16) & 0xff, (address >> 8) & 0xff, address & 0xff,
-          g_ntohs (port));
-      break;
-    }
-    case GST_NET_TYPE_IP6:
-    {
-      guint8 address[16];
-      guint16 port;
-
-      gst_net_address_get_ip6_address (naddr, address, &port);
-
-      result =
-          g_snprintf (dest, len, "[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]:%d",
-          (address[0] << 8) | address[1], (address[2] << 8) | address[3],
-          (address[4] << 8) | address[5], (address[6] << 8) | address[7],
-          (address[8] << 8) | address[9], (address[10] << 8) | address[11],
-          (address[12] << 8) | address[13], (address[14] << 8) | address[15],
-          g_ntohs (port));
-      break;
-    }
-    default:
-      dest[0] = 0;
-      result = 0;
-      break;
-  }
-  return result;
+  return meta;
 }
index 0687406..c40cf48 100644 (file)
 #define __GST_NET_ADDRESS_META_H__
 
 #include <gst/gst.h>
+#include <gio/gio.h>
 
 G_BEGIN_DECLS
 
-typedef struct _GstNetAddress GstNetAddress;
-
-/**
- * GstNetType:
- * @GST_NET_TYPE_UNKNOWN: unknown address type
- * @GST_NET_TYPE_IP4: an IPv4 address type
- * @GST_NET_TYPE_IP6: and IPv6 address type
- *
- * The Address type used in #GstNetAddress.
- */
-typedef enum {
-  GST_NET_TYPE_UNKNOWN,
-  GST_NET_TYPE_IP4,
-  GST_NET_TYPE_IP6,
-} GstNetType;
-
-/**
- * GST_NETADDRESS_MAX_LEN:
- *
- * The maximum length of a string representation of a GstNetAddress as produced
- * by gst_net_address_to_string().
- *
- * Since: 0.10.24
- */
-#define GST_NETADDRESS_MAX_LEN 64
-
-/**
- * GstNetAddress:
- *
- * An opaque network address as used in #GstNetAddressMeta.
- */
-struct _GstNetAddress {
-  /*< private >*/
-  GstNetType    type;
-  union {
-    guint8        ip6[16];
-    guint32       ip4;
-  } address;
-  guint16       port;
-  /*< private >*/
-  gpointer _gst_reserved[GST_PADDING];
-};
-
 typedef struct _GstNetAddressMeta GstNetAddressMeta;
 
 /**
@@ -77,7 +35,7 @@ typedef struct _GstNetAddressMeta GstNetAddressMeta;
 struct _GstNetAddressMeta {
   GstMeta       meta;
 
-  GstNetAddress naddr;
+  GSocketAddress *addr;
 };
 
 const GstMetaInfo *gst_net_address_meta_get_info (void);
@@ -85,28 +43,8 @@ const GstMetaInfo *gst_net_address_meta_get_info (void);
 
 #define gst_buffer_get_net_address_meta(b) \
   ((GstNetAddressMeta*)gst_buffer_get_meta((b),GST_NET_ADDRESS_META_INFO))
-#define gst_buffer_add_net_address_meta(b) \
-  ((GstNetAddressMeta*)gst_buffer_add_meta((b),GST_NET_ADDRESS_META_INFO,NULL))
-
-/* address operations */
-void            gst_net_address_set_ip4_address   (GstNetAddress *naddr, guint32 address, guint16 port);
-void            gst_net_address_set_ip6_address   (GstNetAddress *naddr, guint8 address[16], guint16 port);
-gint            gst_net_address_set_address_bytes (GstNetAddress *naddr, GstNetType type,
-                                                   guint8 address[16], guint16 port);
-
-GstNetType      gst_net_address_get_net_type      (const GstNetAddress *naddr);
-gboolean        gst_net_address_get_ip4_address   (const GstNetAddress *naddr,
-                                                   guint32 *address, guint16 *port);
-gboolean        gst_net_address_get_ip6_address   (const GstNetAddress *naddr,
-                                                   guint8 address[16], guint16 *port);
-gint            gst_net_address_get_address_bytes (const GstNetAddress *naddr,
-                                                   guint8 address[16], guint16 *port);
-
-gboolean        gst_net_address_equal             (const GstNetAddress *naddr1,
-                                                   const GstNetAddress *naddr2);
-
-gint            gst_net_address_to_string         (const GstNetAddress *naddr,
-                                                   gchar *dest, gsize len);
+GstNetAddressMeta * gst_buffer_add_net_address_meta (GstBuffer      *buffer,
+                                                     GSocketAddress *addr);
 
 G_END_DECLS
 
index 80a1691..366df18 100644 (file)
@@ -8,7 +8,7 @@ typelibdir=@abs_top_builddir@/libs/gst/net
 
 Name: GStreamer networking library, uninstalled
 Description: Network-enabled GStreamer plug-ins and clocking, uninstalled
-Requires: gstreamer-@GST_MAJORMINOR@ = @VERSION@
+Requires: gstreamer-@GST_MAJORMINOR@ = @VERSION@ gio-2.0
 Version: @VERSION@
 
 Libs: @abs_top_builddir@/libs/gst/net/libgstnet-@GST_MAJORMINOR@.la
index d8b510b..582f00c 100644 (file)
@@ -9,7 +9,7 @@ typelibdir=${libdir}/girepository-1.0
 
 Name: GStreamer networking library
 Description: Network-enabled GStreamer plug-ins and clocking
-Requires: gstreamer-@GST_MAJORMINOR@
+Requires: gstreamer-@GST_MAJORMINOR@ gio-2.0
 Version: @VERSION@
 Libs: -L${libdir} -lgstnet-@GST_MAJORMINOR@
 Cflags: -I${includedir}