Commit 7a689266 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Darwin compile fix

parent b7110f8e
...@@ -316,21 +316,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -316,21 +316,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
const struct sockaddr *src, socklen_t srclen, const struct sockaddr *src, socklen_t srclen,
const struct sockaddr *grp, socklen_t grplen) const struct sockaddr *grp, socklen_t grplen)
{ {
/* Agnostic ASM/SSM multicast join */
#ifdef MCAST_JOIN_SOURCE_GROUP
union
{
struct group_req gr;
struct group_source_req gsr;
} opt;
socklen_t optlen;
int level, iid = 0; int level, iid = 0;
vlc_bool_t ssm = VLC_TRUE;
if (src == NULL)
ssm = VLC_FALSE;
memset (&opt, 0, sizeof (opt));
char *iface = var_CreateGetString (obj, "miface"); char *iface = var_CreateGetString (obj, "miface");
if (iface != NULL) if (iface != NULL)
...@@ -350,23 +336,25 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -350,23 +336,25 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
switch (grp->sa_family) switch (grp->sa_family)
{ {
#ifdef AF_INET6
case AF_INET6: case AF_INET6:
level = SOL_IPV6; level = SOL_IPV6;
if (ssm if ((src != NULL)
&& memcmp (&((const struct sockaddr_in6 *)src)->sin6_addr, && memcmp (&((const struct sockaddr_in6 *)src)->sin6_addr,
&in6addr_any, sizeof (in6addr_any)) == 0) &in6addr_any, sizeof (in6addr_any)) == 0)
ssm = VLC_FALSE; src = NULL;
if (((const struct sockaddr_in6 *)src)->sin6_scope_id) if (((const struct sockaddr_in6 *)src)->sin6_scope_id)
iid = ((const struct sockaddr_in6 *)src)->sin6_scope_id; iid = ((const struct sockaddr_in6 *)src)->sin6_scope_id;
break; break;
#endif
case AF_INET: case AF_INET:
level = SOL_IP; level = SOL_IP;
if (ssm if ((src != NULL)
&& ((const struct sockaddr_in *)src)->sin_addr.s_addr && ((const struct sockaddr_in *)src)->sin_addr.s_addr
== INADDR_ANY) == INADDR_ANY)
ssm = VLC_FALSE; src = NULL;
break; break;
default: default:
...@@ -374,7 +362,18 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -374,7 +362,18 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
return -1; return -1;
} }
if (ssm) /* Agnostic ASM/SSM multicast join */
#ifdef MCAST_JOIN_SOURCE_GROUP
union
{
struct group_req gr;
struct group_source_req gsr;
} opt;
socklen_t optlen;
memset (&opt, 0, sizeof (opt));
if (src != NULL)
{ {
if ((grplen > sizeof (opt.gsr.gsr_group)) if ((grplen > sizeof (opt.gsr.gsr_group))
|| (srclen > sizeof (opt.gsr.gsr_source))) || (srclen > sizeof (opt.gsr.gsr_source)))
...@@ -395,23 +394,23 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -395,23 +394,23 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
optlen = sizeof (opt.gr); optlen = sizeof (opt.gr);
} }
msg_Dbg (obj, "Multicast %sgroup join request", ssm ? "source " : ""); msg_Dbg (obj, "Multicast %sgroup join request", src ? "source " : "");
if (setsockopt (fd, level, if (setsockopt (fd, level,
ssm ? MCAST_JOIN_SOURCE_GROUP : MCAST_JOIN_GROUP, src ? MCAST_JOIN_SOURCE_GROUP : MCAST_JOIN_GROUP,
(void *)&opt, optlen) == 0) (void *)&opt, optlen) == 0)
return 0; return 0;
#endif #endif
/* Fallback to IPv-specific APIs */ /* Fallback to IPv-specific APIs */
if (ssm && (src->sa_family != grp->sa_family)) if ((src != NULL) && (src->sa_family != grp->sa_family))
return -1; return -1;
switch (grp->sa_family) switch (grp->sa_family)
{ {
case AF_INET: case AF_INET:
if ((grplen < sizeof (struct sockaddr_in)) if ((grplen < sizeof (struct sockaddr_in))
|| (ssm && (srclen < sizeof (struct sockaddr_in)))) || ((src != NULL) && (srclen < sizeof (struct sockaddr_in))))
return -1; return -1;
if (net_IPv4Join (obj, fd, (const struct sockaddr_in *)src, if (net_IPv4Join (obj, fd, (const struct sockaddr_in *)src,
...@@ -422,7 +421,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -422,7 +421,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
#ifdef AF_INET6 #ifdef AF_INET6
case AF_INET6: case AF_INET6:
if ((grplen < sizeof (struct sockaddr_in6)) if ((grplen < sizeof (struct sockaddr_in6))
|| (ssm && (srclen < sizeof (struct sockaddr_in6)))) || ((src != NULL) && (srclen < sizeof (struct sockaddr_in6))))
return -1; return -1;
/* We don't provide IPv6-specific SSM at the moment. /* We don't provide IPv6-specific SSM at the moment.
...@@ -437,7 +436,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd, ...@@ -437,7 +436,7 @@ net_SourceSubscribe (vlc_object_t *obj, int fd,
msg_Err (obj, "Multicast group join error (%s)", msg_Err (obj, "Multicast group join error (%s)",
net_strerror (net_errno)); net_strerror (net_errno));
if (ssm) if (src != NULL)
{ {
msg_Warn (obj, "Trying ASM instead of SSM..."); msg_Warn (obj, "Trying ASM instead of SSM...");
return net_Subscribe (obj, fd, grp, grplen); return net_Subscribe (obj, fd, grp, grplen);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment