2 * Copyright (C) 2012 Wim Taymans <wim.taymans at gmail.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
22 #ifndef __GST_RTSP_ADDRESS_POOL_H__
23 #define __GST_RTSP_ADDRESS_POOL_H__
27 #define GST_TYPE_RTSP_ADDRESS_POOL (gst_rtsp_address_pool_get_type ())
28 #define GST_IS_RTSP_ADDRESS_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_ADDRESS_POOL))
29 #define GST_IS_RTSP_ADDRESS_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTSP_ADDRESS_POOL))
30 #define GST_RTSP_ADDRESS_POOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTSP_ADDRESS_POOL, GstRTSPAddressPoolClass))
31 #define GST_RTSP_ADDRESS_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_ADDRESS_POOL, GstRTSPAddressPool))
32 #define GST_RTSP_ADDRESS_POOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTSP_ADDRESS_POOL, GstRTSPAddressPoolClass))
33 #define GST_RTSP_ADDRESS_POOL_CAST(obj) ((GstRTSPAddressPool*)(obj))
34 #define GST_RTSP_ADDRESS_POOL_CLASS_CAST(klass) ((GstRTSPAddressPoolClass*)(klass))
37 * GstRTSPAddressPoolResult:
38 * @GST_RTSP_ADDRESS_POOL_OK: no error
39 * @GST_RTSP_ADDRESS_POOL_EINVAL:invalid arguments were provided to a function
40 * @GST_RTSP_ADDRESS_POOL_ERESERVED: the addres has already been reserved
41 * @GST_RTSP_ADDRESS_POOL_ERANGE: the address is not in the pool
42 * @GST_RTSP_ADDRESS_POOL_ELAST: last error
44 * Result codes from RTSP address pool functions.
47 GST_RTSP_ADDRESS_POOL_OK = 0,
49 GST_RTSP_ADDRESS_POOL_EINVAL = -1,
50 GST_RTSP_ADDRESS_POOL_ERESERVED = -2,
51 GST_RTSP_ADDRESS_POOL_ERANGE = -3,
53 GST_RTSP_ADDRESS_POOL_ELAST = -4,
54 } GstRTSPAddressPoolResult;
57 typedef struct _GstRTSPAddress GstRTSPAddress;
59 typedef struct _GstRTSPAddressPool GstRTSPAddressPool;
60 typedef struct _GstRTSPAddressPoolClass GstRTSPAddressPoolClass;
61 typedef struct _GstRTSPAddressPoolPrivate GstRTSPAddressPoolPrivate;
65 * @pool: the #GstRTSPAddressPool owner of this address
66 * @address: the address
67 * @port: the port number
68 * @n_ports: number of ports
69 * @ttl: TTL or 0 for unicast addresses
73 struct _GstRTSPAddress {
74 GstRTSPAddressPool *pool;
85 GType gst_rtsp_address_get_type (void);
87 GstRTSPAddress * gst_rtsp_address_copy (GstRTSPAddress *addr);
88 void gst_rtsp_address_free (GstRTSPAddress *addr);
91 * GstRTSPAddressFlags:
92 * @GST_RTSP_ADDRESS_FLAG_NONE: no flags
93 * @GST_RTSP_ADDRESS_FLAG_IPV4: an IPv4 address
94 * @GST_RTSP_ADDRESS_FLAG_IPV6: and IPv6 address
95 * @GST_RTSP_ADDRESS_FLAG_EVEN_PORT: address with an even port
96 * @GST_RTSP_ADDRESS_FLAG_MULTICAST: a multicast address
97 * @GST_RTSP_ADDRESS_FLAG_UNICAST: a unicast address
99 * Flags used to control allocation of addresses
102 GST_RTSP_ADDRESS_FLAG_NONE = 0,
103 GST_RTSP_ADDRESS_FLAG_IPV4 = (1 << 0),
104 GST_RTSP_ADDRESS_FLAG_IPV6 = (1 << 1),
105 GST_RTSP_ADDRESS_FLAG_EVEN_PORT = (1 << 2),
106 GST_RTSP_ADDRESS_FLAG_MULTICAST = (1 << 3),
107 GST_RTSP_ADDRESS_FLAG_UNICAST = (1 << 4),
108 } GstRTSPAddressFlags;
111 * GST_RTSP_ADDRESS_POOL_ANY_IPV4:
113 * Used with gst_rtsp_address_pool_add_range() to bind to all
116 #define GST_RTSP_ADDRESS_POOL_ANY_IPV4 "0.0.0.0"
119 * GST_RTSP_ADDRESS_POOL_ANY_IPV6:
121 * Used with gst_rtsp_address_pool_add_range() to bind to all
124 #define GST_RTSP_ADDRESS_POOL_ANY_IPV6 "::"
127 * GstRTSPAddressPool:
128 * @parent: the parent GObject
130 * An address pool, all member are private
132 struct _GstRTSPAddressPool {
136 GstRTSPAddressPoolPrivate *priv;
137 gpointer _gst_reserved[GST_PADDING];
141 * GstRTSPAddressPoolClass:
143 * Opaque Address pool class.
145 struct _GstRTSPAddressPoolClass {
146 GObjectClass parent_class;
149 gpointer _gst_reserved[GST_PADDING];
152 GType gst_rtsp_address_pool_get_type (void);
154 /* create a new address pool */
155 GstRTSPAddressPool * gst_rtsp_address_pool_new (void);
157 void gst_rtsp_address_pool_clear (GstRTSPAddressPool * pool);
158 void gst_rtsp_address_pool_dump (GstRTSPAddressPool * pool);
160 gboolean gst_rtsp_address_pool_add_range (GstRTSPAddressPool * pool,
161 const gchar *min_address,
162 const gchar *max_address,
167 GstRTSPAddress * gst_rtsp_address_pool_acquire_address (GstRTSPAddressPool * pool,
168 GstRTSPAddressFlags flags,
171 GstRTSPAddressPoolResult gst_rtsp_address_pool_reserve_address (GstRTSPAddressPool * pool,
172 const gchar *ip_address,
176 GstRTSPAddress ** address);
178 gboolean gst_rtsp_address_pool_has_unicast_addresses (GstRTSPAddressPool * pool);
182 #endif /* __GST_RTSP_ADDRESS_POOL_H__ */