gst-libs/gst/net/: Added buffer subclass to store extra to/from addresses for network sources/sinks.

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.
This commit is contained in:
Wim Taymans 2005-05-19 11:56:48 +00:00
parent 8326cc5387
commit 62c46c1480
9 changed files with 548 additions and 0 deletions

View file

@ -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):

View file

@ -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)

9
gst-libs/gst/net/README Normal file
View file

@ -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.

View file

@ -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;
}

View file

@ -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__ */

View file

@ -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)

View file

@ -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.

View file

@ -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;
}

View file

@ -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__ */