udpsink: Add ttl multicast property

Add a new ttl-mc property to control the TTL on multicast addresses.

Fixes #588245
This commit is contained in:
Jarkko Palviainen 2009-08-31 12:16:01 +02:00 committed by Wim Taymans
parent e2518fedbe
commit 1f14f577d8
3 changed files with 19 additions and 3 deletions

View file

@ -1,5 +1,6 @@
/* GStreamer /* GStreamer
* Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com> * Copyright (C) <2007> Wim Taymans <wim.taymans@gmail.com>
* Copyright (C) <2009> Jarkko Palviainen <jarkko.palviainen@sesca.com>
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public
@ -81,6 +82,7 @@ enum
* be configured in the element that does the receive. */ * be configured in the element that does the receive. */
#define DEFAULT_AUTO_MULTICAST TRUE #define DEFAULT_AUTO_MULTICAST TRUE
#define DEFAULT_TTL 64 #define DEFAULT_TTL 64
#define DEFAULT_TTL_MC 1
#define DEFAULT_LOOP TRUE #define DEFAULT_LOOP TRUE
#define DEFAULT_QOS_DSCP -1 #define DEFAULT_QOS_DSCP -1
@ -95,6 +97,7 @@ enum
PROP_CLIENTS, PROP_CLIENTS,
PROP_AUTO_MULTICAST, PROP_AUTO_MULTICAST,
PROP_TTL, PROP_TTL,
PROP_TTL_MC,
PROP_LOOP, PROP_LOOP,
PROP_QOS_DSCP, PROP_QOS_DSCP,
PROP_LAST PROP_LAST
@ -307,9 +310,13 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
"Automatically join/leave the multicast groups, FALSE means user" "Automatically join/leave the multicast groups, FALSE means user"
" has to do it himself", DEFAULT_AUTO_MULTICAST, G_PARAM_READWRITE)); " has to do it himself", DEFAULT_AUTO_MULTICAST, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_TTL, g_object_class_install_property (gobject_class, PROP_TTL,
g_param_spec_int ("ttl", "Multicast TTL", g_param_spec_int ("ttl", "Unicast TTL",
"Used for setting the multicast TTL parameter", "Used for setting the unicast TTL parameter",
0, 255, DEFAULT_TTL, G_PARAM_READWRITE)); 0, 255, DEFAULT_TTL, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_TTL_MC,
g_param_spec_int ("ttl-mc", "Multicast TTL",
"Used for setting the multicast TTL parameter",
0, 255, DEFAULT_TTL_MC, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_LOOP, g_object_class_install_property (gobject_class, PROP_LOOP,
g_param_spec_boolean ("loop", "Multicast Loopback", g_param_spec_boolean ("loop", "Multicast Loopback",
"Used for setting the multicast loop parameter. TRUE = enable," "Used for setting the multicast loop parameter. TRUE = enable,"
@ -346,6 +353,7 @@ gst_multiudpsink_init (GstMultiUDPSink * sink)
sink->externalfd = (sink->sockfd != -1); sink->externalfd = (sink->sockfd != -1);
sink->auto_multicast = DEFAULT_AUTO_MULTICAST; sink->auto_multicast = DEFAULT_AUTO_MULTICAST;
sink->ttl = DEFAULT_TTL; sink->ttl = DEFAULT_TTL;
sink->ttl_mc = DEFAULT_TTL_MC;
sink->loop = DEFAULT_LOOP; sink->loop = DEFAULT_LOOP;
sink->qos_dscp = DEFAULT_QOS_DSCP; sink->qos_dscp = DEFAULT_QOS_DSCP;
} }
@ -635,6 +643,9 @@ gst_multiudpsink_set_property (GObject * object, guint prop_id,
case PROP_TTL: case PROP_TTL:
udpsink->ttl = g_value_get_int (value); udpsink->ttl = g_value_get_int (value);
break; break;
case PROP_TTL_MC:
udpsink->ttl_mc = g_value_get_int (value);
break;
case PROP_LOOP: case PROP_LOOP:
udpsink->loop = g_value_get_boolean (value); udpsink->loop = g_value_get_boolean (value);
break; break;
@ -682,6 +693,9 @@ gst_multiudpsink_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_TTL: case PROP_TTL:
g_value_set_int (value, udpsink->ttl); g_value_set_int (value, udpsink->ttl);
break; break;
case PROP_TTL_MC:
g_value_set_int (value, udpsink->ttl_mc);
break;
case PROP_LOOP: case PROP_LOOP:
g_value_set_boolean (value, udpsink->loop); g_value_set_boolean (value, udpsink->loop);
break; break;
@ -737,7 +751,7 @@ gst_multiudpsink_init_send (GstMultiUDPSink * sink)
} }
if (gst_udp_set_loop (sink->sock, sink->loop) != 0) if (gst_udp_set_loop (sink->sock, sink->loop) != 0)
goto loop_failed; goto loop_failed;
if (gst_udp_set_ttl (sink->sock, sink->ttl, TRUE) != 0) if (gst_udp_set_ttl (sink->sock, sink->ttl_mc, TRUE) != 0)
goto ttl_failed; goto ttl_failed;
} else { } else {
if (gst_udp_set_ttl (sink->sock, sink->ttl, FALSE) != 0) if (gst_udp_set_ttl (sink->sock, sink->ttl, FALSE) != 0)

View file

@ -72,6 +72,7 @@ struct _GstMultiUDPSink {
gboolean auto_multicast; gboolean auto_multicast;
gint ttl; gint ttl;
gint ttl_mc;
gboolean loop; gboolean loop;
gint qos_dscp; gint qos_dscp;
}; };

View file

@ -1,6 +1,7 @@
/* GStreamer UDP network utility functions /* GStreamer UDP network utility functions
* Copyright (C) 2006 Tim-Philipp Müller <tim centricular net> * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
* Copyright (C) 2006 Joni Valtanen <joni.valtanen@movial.fi> * Copyright (C) 2006 Joni Valtanen <joni.valtanen@movial.fi>
* Copyright (C) 2009 Jarkko Palviainen <jarkko.palviainen@sesca.com>
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public * modify it under the terms of the GNU Library General Public