mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 08:41:07 +00:00
gst/udp/: Fix multiudpsink on OSX by passing the specific length of the socket, refactor that into a function shared ...
Original commit message from CVS: * gst/udp/gstmultiudpsink.c: * gst/udp/gstudpnetutils.c: * gst/udp/gstudpnetutils.h: * gst/udp/gstudpsrc.c: Fix multiudpsink on OSX by passing the specific length of the socket, refactor that into a function shared with the same thing in udpsrc.
This commit is contained in:
parent
380b64d670
commit
9b372f1bbd
6 changed files with 33 additions and 15 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2008-11-20 Michael Smith <msmith@songbirdnest.com>
|
||||||
|
|
||||||
|
* gst/udp/gstmultiudpsink.c:
|
||||||
|
* gst/udp/gstudpnetutils.c:
|
||||||
|
* gst/udp/gstudpnetutils.h:
|
||||||
|
* gst/udp/gstudpsrc.c:
|
||||||
|
Fix multiudpsink on OSX by passing the specific length of the socket,
|
||||||
|
refactor that into a function shared with the same thing in udpsrc.
|
||||||
|
|
||||||
2008-11-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
2008-11-20 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
* gst/wavparse/gstwavparse.c: (uint64_ceiling_scale_int),
|
* gst/wavparse/gstwavparse.c: (uint64_ceiling_scale_int),
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit edfb4b44ea433b0b83b8a2f27a6e0bcbccdc3f2f
|
Subproject commit e4b2fe44724e1c1a6e816ae4fbbae43d7f68f1ef
|
|
@ -374,6 +374,7 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
|
||||||
gint ret, size, num = 0;
|
gint ret, size, num = 0;
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
GList *clients;
|
GList *clients;
|
||||||
|
gint len;
|
||||||
|
|
||||||
sink = GST_MULTIUDPSINK (bsink);
|
sink = GST_MULTIUDPSINK (bsink);
|
||||||
|
|
||||||
|
@ -395,12 +396,13 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
|
||||||
GST_LOG_OBJECT (sink, "sending %d bytes to client %p", size, client);
|
GST_LOG_OBJECT (sink, "sending %d bytes to client %p", size, client);
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
|
len = gst_udp_get_sockaddr_length (&client->theiraddr);
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
ret = sendto (*client->sock, (char *) data, size, 0,
|
ret = sendto (*client->sock, (char *) data, size, 0,
|
||||||
#else
|
#else
|
||||||
ret = sendto (*client->sock, data, size, 0,
|
ret = sendto (*client->sock, data, size, 0,
|
||||||
#endif
|
#endif
|
||||||
(struct sockaddr *) &client->theiraddr, sizeof (client->theiraddr));
|
(struct sockaddr *) &client->theiraddr, len);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
/* we get a non-posix EPERM on Linux when a firewall rule blocks this
|
/* we get a non-posix EPERM on Linux when a firewall rule blocks this
|
||||||
* destination. We will simply ignore this. */
|
* destination. We will simply ignore this. */
|
||||||
|
|
|
@ -59,6 +59,23 @@ gst_udp_net_utils_win32_wsa_startup (GstObject * obj)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
gst_udp_get_sockaddr_length (struct sockaddr_storage *addr)
|
||||||
|
{
|
||||||
|
/* MacOS is picky about passing precisely the correct length,
|
||||||
|
* so we calculate it here for the given socket type.
|
||||||
|
*/
|
||||||
|
switch (addr->ss_family) {
|
||||||
|
case AF_INET:
|
||||||
|
return sizeof (struct sockaddr_in);
|
||||||
|
case AF_INET6:
|
||||||
|
return sizeof (struct sockaddr_in6);
|
||||||
|
default:
|
||||||
|
/* don't know, Screw MacOS and use the full length */
|
||||||
|
return sizeof (*addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr)
|
gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,6 +74,8 @@ gboolean gst_udp_net_utils_win32_wsa_startup (GstObject * obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int gst_udp_get_sockaddr_length(struct sockaddr_storage *addr);
|
||||||
|
|
||||||
int gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr);
|
int gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr);
|
||||||
int gst_udp_is_multicast (struct sockaddr_storage *addr);
|
int gst_udp_is_multicast (struct sockaddr_storage *addr);
|
||||||
|
|
||||||
|
|
|
@ -777,19 +777,7 @@ gst_udpsrc_start (GstBaseSrc * bsrc)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "binding on port %d", src->port);
|
GST_DEBUG_OBJECT (src, "binding on port %d", src->port);
|
||||||
|
|
||||||
/* Mac OS is picky about the size for the bind so we switch on the family */
|
len = gst_udp_get_sockaddr_length (&src->myaddr);
|
||||||
switch (src->myaddr.ss_family) {
|
|
||||||
case AF_INET:
|
|
||||||
len = sizeof (struct sockaddr_in);
|
|
||||||
break;
|
|
||||||
case AF_INET6:
|
|
||||||
len = sizeof (struct sockaddr_in6);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
/* don't know, Screw MacOS and use the full length */
|
|
||||||
len = sizeof (src->myaddr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ((ret = bind (src->sock.fd, (struct sockaddr *) &src->myaddr, len)) < 0)
|
if ((ret = bind (src->sock.fd, (struct sockaddr *) &src->myaddr, len)) < 0)
|
||||||
goto bind_error;
|
goto bind_error;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue