gst-libs/gst/net/: Added buffer subclass to store extra to/from addresses for network...
authorWim Taymans <wim.taymans@gmail.com>
Thu, 19 May 2005 11:56:48 +0000 (11:56 +0000)
committerWim Taymans <wim.taymans@gmail.com>
Thu, 19 May 2005 11:56:48 +0000 (11:56 +0000)
Original commit message from CVS:
* gst-libs/gst/net/Makefile.am:
* gst-libs/gst/net/README:
* gst-libs/gst/net/gstnetbuffer.c: (gst_netbuffer_get_type),
(gst_netbuffer_class_init), (gst_netbuffer_init),
(gst_netbuffer_finalize), (gst_netbuffer_copy),
(gst_netbuffer_new), (gst_netaddress_set_ip4_address),
(gst_netaddress_set_ip6_address), (gst_netaddress_get_net_type),
(gst_netaddress_get_ip4_address), (gst_netaddress_get_ip6_address):
* gst-libs/gst/net/gstnetbuffer.h:
Added buffer subclass to store extra to/from addresses for
network sources/sinks.

ChangeLog
gst-libs/gst/net/Makefile.am [new file with mode: 0644]
gst-libs/gst/net/README [new file with mode: 0644]
gst-libs/gst/net/gstnetbuffer.c [new file with mode: 0644]
gst-libs/gst/net/gstnetbuffer.h [new file with mode: 0644]
gst-libs/gst/netbuffer/Makefile.am [new file with mode: 0644]
gst-libs/gst/netbuffer/README [new file with mode: 0644]
gst-libs/gst/netbuffer/gstnetbuffer.c [new file with mode: 0644]
gst-libs/gst/netbuffer/gstnetbuffer.h [new file with mode: 0644]

index 0603bc5..219c865 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2005-05-19  Wim Taymans  <wim@fluendo.com>
+
+       * gst-libs/gst/net/Makefile.am:
+       * gst-libs/gst/net/README:
+       * gst-libs/gst/net/gstnetbuffer.c: (gst_netbuffer_get_type),
+       (gst_netbuffer_class_init), (gst_netbuffer_init),
+       (gst_netbuffer_finalize), (gst_netbuffer_copy),
+       (gst_netbuffer_new), (gst_netaddress_set_ip4_address),
+       (gst_netaddress_set_ip6_address), (gst_netaddress_get_net_type),
+       (gst_netaddress_get_ip4_address), (gst_netaddress_get_ip6_address):
+       * gst-libs/gst/net/gstnetbuffer.h:
+       Added buffer subclass to store extra to/from addresses for
+       network sources/sinks.
+
 2005-05-18  Ronald S. Bultje  <rbultje@ronald.bitfreak.net>
 
        * gst-libs/gst/gconf/gconf.c: (gst_bin_find_unconnected_pad):
diff --git a/gst-libs/gst/net/Makefile.am b/gst-libs/gst/net/Makefile.am
new file mode 100644 (file)
index 0000000..85fc58e
--- /dev/null
@@ -0,0 +1,8 @@
+noinst_LTLIBRARIES = libgstnet.la
+
+libgstnet_la_SOURCES = gstnetbuffer.c
+
+libgstnetincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/net
+libgstnetinclude_HEADERS = gstnetbuffer.h
+
+libgstnet_la_CFLAGS = $(GST_CFLAGS) 
diff --git a/gst-libs/gst/net/README b/gst-libs/gst/net/README
new file mode 100644 (file)
index 0000000..d55ceb1
--- /dev/null
@@ -0,0 +1,9 @@
+The network libraries
+---------------------
+
+GstNetBuffer:
+
+  A GstBuffer subclass that can be used by network sources or sinks to
+  store additional to and from addresses. This is required for plugins
+  that operate on this data like RTP.
+
diff --git a/gst-libs/gst/net/gstnetbuffer.c b/gst-libs/gst/net/gstnetbuffer.c
new file mode 100644 (file)
index 0000000..6c73f81
--- /dev/null
@@ -0,0 +1,166 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+
+#include "gstnetbuffer.h"
+
+static void gst_netbuffer_init (GTypeInstance * instance, gpointer g_class);
+static void gst_netbuffer_class_init (gpointer g_class, gpointer class_data);
+static void gst_netbuffer_finalize (GstNetBuffer * nbuf);
+static GstNetBuffer *gst_netbuffer_copy (GstNetBuffer * nbuf);
+
+static GstBufferClass *parent_class;
+
+GType
+gst_netbuffer_get_type (void)
+{
+  static GType _gst_netbuffer_type = 0;
+
+  if (G_UNLIKELY (_gst_netbuffer_type == 0)) {
+    static const GTypeInfo netbuffer_info = {
+      sizeof (GstNetBufferClass),
+      NULL,
+      NULL,
+      gst_netbuffer_class_init,
+      NULL,
+      NULL,
+      sizeof (GstNetBuffer),
+      0,
+      gst_netbuffer_init,
+      NULL
+    };
+
+    _gst_netbuffer_type = g_type_register_static (GST_TYPE_BUFFER,
+        "GstNetBuffer", &netbuffer_info, 0);
+  }
+  return _gst_netbuffer_type;
+}
+
+static void
+gst_netbuffer_class_init (gpointer g_class, gpointer class_data)
+{
+  GstMiniObjectClass *mo_class = GST_MINI_OBJECT_CLASS (g_class);
+
+  parent_class = g_type_class_ref (GST_TYPE_BUFFER);
+
+  mo_class->copy = (GstMiniObjectCopyFunction) gst_netbuffer_copy;
+  mo_class->finalize = (GstMiniObjectFinalizeFunction) gst_netbuffer_finalize;
+}
+
+static void
+gst_netbuffer_init (GTypeInstance * instance, gpointer g_class)
+{
+}
+
+static void
+gst_netbuffer_finalize (GstNetBuffer * nbuf)
+{
+  GST_MINI_OBJECT_CLASS (parent_class)->finalize (GST_MINI_OBJECT (nbuf));
+}
+
+static GstNetBuffer *
+gst_netbuffer_copy (GstNetBuffer * nbuf)
+{
+  GstNetBuffer *copy;
+
+  copy =
+      (GstNetBuffer *) GST_MINI_OBJECT_CLASS (parent_class)->
+      copy (GST_MINI_OBJECT (nbuf));
+
+  memcpy (&copy->to, &nbuf->to, sizeof (nbuf->to));
+  memcpy (&copy->from, &nbuf->from, sizeof (nbuf->from));
+
+  return copy;
+}
+
+GstNetBuffer *
+gst_netbuffer_new (void)
+{
+  GstNetBuffer *buf;
+
+  buf = (GstNetBuffer *) gst_mini_object_new (GST_TYPE_NETBUFFER);
+
+  return buf;
+}
+
+void
+gst_netaddress_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;
+}
+
+void
+gst_netaddress_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;
+}
+
+
+GstNetType
+gst_netaddress_get_net_type (GstNetAddress * naddr)
+{
+  g_return_val_if_fail (naddr != NULL, GST_NET_TYPE_UNKNOWN);
+
+  return naddr->type;
+}
+
+gboolean
+gst_netaddress_get_ip4_address (GstNetAddress * naddr, guint32 * address,
+    guint16 * port)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return FALSE;
+
+  if (address)
+    *address = naddr->address.ip4;
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
+
+gboolean
+gst_netaddress_get_ip6_address (GstNetAddress * naddr, guint8 address[16],
+    guint16 * port)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return FALSE;
+
+  if (address)
+    memcpy (address, naddr->address.ip6, 16);
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/net/gstnetbuffer.h b/gst-libs/gst/net/gstnetbuffer.h
new file mode 100644 (file)
index 0000000..a1cabe7
--- /dev/null
@@ -0,0 +1,84 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_NETBUFFER_H__
+#define __GST_NETBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstNetBuffer GstNetBuffer;
+typedef struct _GstNetBufferClass GstNetBufferClass;
+
+#define GST_TYPE_NETBUFFER            (gst_netbuffer_get_type())
+#define GST_IS_NETBUFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NETBUFFER))
+#define GST_IS_NETBUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_NETBUFFER))
+#define GST_NETBUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_NETBUFFER, GstNetBufferClass))
+#define GST_NETBUFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETBUFFER, GstNetBuffer))
+#define GST_NETBUFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_NETBUFFER, GstNetBufferClass))
+
+/* buffer for use in network sources and sinks.
+ *
+ * It contains the source or destination address of the buffer.
+ */
+typedef enum {
+  GST_NET_TYPE_UNKNOWN,
+  GST_NET_TYPE_IP4,
+  GST_NET_TYPE_IP6,
+} GstNetType;
+
+typedef struct
+{
+  GstNetType   type;
+  union {
+    guint8        ip6[16];
+    guint32      ip4;
+  } address;
+  guint16      port;
+} GstNetAddress;
+
+struct _GstNetBuffer {
+  GstBuffer buffer;
+
+  GstNetAddress from;
+  GstNetAddress to;
+};
+
+struct _GstNetBufferClass {
+  GstBufferClass  buffer_class;
+};
+
+/* creating buffers */
+GType          gst_netbuffer_get_type          (void);
+
+GstNetBuffer*  gst_netbuffer_new               (void);
+
+/* address operations */
+void           gst_netaddress_set_ip4_address  (GstNetAddress *nadd, guint32 address, guint16 port);
+void           gst_netaddress_set_ip6_address  (GstNetAddress *nadd, guint8 address[16], guint16 port);
+
+GstNetType     gst_netaddress_get_net_type     (GstNetAddress *nadd);
+gboolean       gst_netaddress_get_ip4_address  (GstNetAddress *nadd, guint32 *address, guint16 *port);
+gboolean       gst_netaddress_get_ip6_address  (GstNetAddress *nadd, guint8 address[16], guint16 *port);
+
+G_END_DECLS
+
+#endif /* __GST_NETBUFFER_H__ */
+
diff --git a/gst-libs/gst/netbuffer/Makefile.am b/gst-libs/gst/netbuffer/Makefile.am
new file mode 100644 (file)
index 0000000..85fc58e
--- /dev/null
@@ -0,0 +1,8 @@
+noinst_LTLIBRARIES = libgstnet.la
+
+libgstnet_la_SOURCES = gstnetbuffer.c
+
+libgstnetincludedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/net
+libgstnetinclude_HEADERS = gstnetbuffer.h
+
+libgstnet_la_CFLAGS = $(GST_CFLAGS) 
diff --git a/gst-libs/gst/netbuffer/README b/gst-libs/gst/netbuffer/README
new file mode 100644 (file)
index 0000000..d55ceb1
--- /dev/null
@@ -0,0 +1,9 @@
+The network libraries
+---------------------
+
+GstNetBuffer:
+
+  A GstBuffer subclass that can be used by network sources or sinks to
+  store additional to and from addresses. This is required for plugins
+  that operate on this data like RTP.
+
diff --git a/gst-libs/gst/netbuffer/gstnetbuffer.c b/gst-libs/gst/netbuffer/gstnetbuffer.c
new file mode 100644 (file)
index 0000000..6c73f81
--- /dev/null
@@ -0,0 +1,166 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <string.h>
+
+#include "gstnetbuffer.h"
+
+static void gst_netbuffer_init (GTypeInstance * instance, gpointer g_class);
+static void gst_netbuffer_class_init (gpointer g_class, gpointer class_data);
+static void gst_netbuffer_finalize (GstNetBuffer * nbuf);
+static GstNetBuffer *gst_netbuffer_copy (GstNetBuffer * nbuf);
+
+static GstBufferClass *parent_class;
+
+GType
+gst_netbuffer_get_type (void)
+{
+  static GType _gst_netbuffer_type = 0;
+
+  if (G_UNLIKELY (_gst_netbuffer_type == 0)) {
+    static const GTypeInfo netbuffer_info = {
+      sizeof (GstNetBufferClass),
+      NULL,
+      NULL,
+      gst_netbuffer_class_init,
+      NULL,
+      NULL,
+      sizeof (GstNetBuffer),
+      0,
+      gst_netbuffer_init,
+      NULL
+    };
+
+    _gst_netbuffer_type = g_type_register_static (GST_TYPE_BUFFER,
+        "GstNetBuffer", &netbuffer_info, 0);
+  }
+  return _gst_netbuffer_type;
+}
+
+static void
+gst_netbuffer_class_init (gpointer g_class, gpointer class_data)
+{
+  GstMiniObjectClass *mo_class = GST_MINI_OBJECT_CLASS (g_class);
+
+  parent_class = g_type_class_ref (GST_TYPE_BUFFER);
+
+  mo_class->copy = (GstMiniObjectCopyFunction) gst_netbuffer_copy;
+  mo_class->finalize = (GstMiniObjectFinalizeFunction) gst_netbuffer_finalize;
+}
+
+static void
+gst_netbuffer_init (GTypeInstance * instance, gpointer g_class)
+{
+}
+
+static void
+gst_netbuffer_finalize (GstNetBuffer * nbuf)
+{
+  GST_MINI_OBJECT_CLASS (parent_class)->finalize (GST_MINI_OBJECT (nbuf));
+}
+
+static GstNetBuffer *
+gst_netbuffer_copy (GstNetBuffer * nbuf)
+{
+  GstNetBuffer *copy;
+
+  copy =
+      (GstNetBuffer *) GST_MINI_OBJECT_CLASS (parent_class)->
+      copy (GST_MINI_OBJECT (nbuf));
+
+  memcpy (&copy->to, &nbuf->to, sizeof (nbuf->to));
+  memcpy (&copy->from, &nbuf->from, sizeof (nbuf->from));
+
+  return copy;
+}
+
+GstNetBuffer *
+gst_netbuffer_new (void)
+{
+  GstNetBuffer *buf;
+
+  buf = (GstNetBuffer *) gst_mini_object_new (GST_TYPE_NETBUFFER);
+
+  return buf;
+}
+
+void
+gst_netaddress_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;
+}
+
+void
+gst_netaddress_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;
+}
+
+
+GstNetType
+gst_netaddress_get_net_type (GstNetAddress * naddr)
+{
+  g_return_val_if_fail (naddr != NULL, GST_NET_TYPE_UNKNOWN);
+
+  return naddr->type;
+}
+
+gboolean
+gst_netaddress_get_ip4_address (GstNetAddress * naddr, guint32 * address,
+    guint16 * port)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return FALSE;
+
+  if (address)
+    *address = naddr->address.ip4;
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
+
+gboolean
+gst_netaddress_get_ip6_address (GstNetAddress * naddr, guint8 address[16],
+    guint16 * port)
+{
+  g_return_val_if_fail (naddr != NULL, FALSE);
+
+  if (naddr->type == GST_NET_TYPE_UNKNOWN)
+    return FALSE;
+
+  if (address)
+    memcpy (address, naddr->address.ip6, 16);
+  if (port)
+    *port = naddr->port;
+
+  return TRUE;
+}
diff --git a/gst-libs/gst/netbuffer/gstnetbuffer.h b/gst-libs/gst/netbuffer/gstnetbuffer.h
new file mode 100644 (file)
index 0000000..a1cabe7
--- /dev/null
@@ -0,0 +1,84 @@
+/* GStreamer
+ * Copyright (C) <2005> Wim Taymans <wim@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_NETBUFFER_H__
+#define __GST_NETBUFFER_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstNetBuffer GstNetBuffer;
+typedef struct _GstNetBufferClass GstNetBufferClass;
+
+#define GST_TYPE_NETBUFFER            (gst_netbuffer_get_type())
+#define GST_IS_NETBUFFER(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_NETBUFFER))
+#define GST_IS_NETBUFFER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_NETBUFFER))
+#define GST_NETBUFFER_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_NETBUFFER, GstNetBufferClass))
+#define GST_NETBUFFER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_NETBUFFER, GstNetBuffer))
+#define GST_NETBUFFER_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_NETBUFFER, GstNetBufferClass))
+
+/* buffer for use in network sources and sinks.
+ *
+ * It contains the source or destination address of the buffer.
+ */
+typedef enum {
+  GST_NET_TYPE_UNKNOWN,
+  GST_NET_TYPE_IP4,
+  GST_NET_TYPE_IP6,
+} GstNetType;
+
+typedef struct
+{
+  GstNetType   type;
+  union {
+    guint8        ip6[16];
+    guint32      ip4;
+  } address;
+  guint16      port;
+} GstNetAddress;
+
+struct _GstNetBuffer {
+  GstBuffer buffer;
+
+  GstNetAddress from;
+  GstNetAddress to;
+};
+
+struct _GstNetBufferClass {
+  GstBufferClass  buffer_class;
+};
+
+/* creating buffers */
+GType          gst_netbuffer_get_type          (void);
+
+GstNetBuffer*  gst_netbuffer_new               (void);
+
+/* address operations */
+void           gst_netaddress_set_ip4_address  (GstNetAddress *nadd, guint32 address, guint16 port);
+void           gst_netaddress_set_ip6_address  (GstNetAddress *nadd, guint8 address[16], guint16 port);
+
+GstNetType     gst_netaddress_get_net_type     (GstNetAddress *nadd);
+gboolean       gst_netaddress_get_ip4_address  (GstNetAddress *nadd, guint32 *address, guint16 *port);
+gboolean       gst_netaddress_get_ip6_address  (GstNetAddress *nadd, guint8 address[16], guint16 *port);
+
+G_END_DECLS
+
+#endif /* __GST_NETBUFFER_H__ */
+