diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2008-05-21 17:35:50 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2008-05-21 17:35:50 +0000 |
commit | e206f74bcea198673e6e64f04218d7c72a56efcd (patch) | |
tree | 47ff9b26c2813960bae7c522028e9e7f01773bd1 /gst/udp/gstudpnetutils.c | |
parent | 961eed538b8dff2f9ee059cf2ce45ecf0c715351 (diff) |
gst/udp/: Joining a multicast group and setting the loop/ttl properties are totally unrelated tasks are must be separ...
Original commit message from CVS:
* gst/udp/gstmultiudpsink.c: (gst_multiudpsink_init_send),
(gst_multiudpsink_add_internal):
* gst/udp/gstudpnetutils.c: (gst_udp_set_loop_ttl),
(gst_udp_join_group):
* gst/udp/gstudpnetutils.h:
* gst/udp/gstudpsrc.c: (gst_udpsrc_start):
Joining a multicast group and setting the loop/ttl properties are
totally unrelated tasks are must be separated.
Diffstat (limited to 'gst/udp/gstudpnetutils.c')
-rw-r--r-- | gst/udp/gstudpnetutils.c | 66 |
1 files changed, 43 insertions, 23 deletions
diff --git a/gst/udp/gstudpnetutils.c b/gst/udp/gstudpnetutils.c index b50336f5..ff5e9387 100644 --- a/gst/udp/gstudpnetutils.c +++ b/gst/udp/gstudpnetutils.c @@ -91,21 +91,16 @@ gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr) } int -gst_udp_join_group (int sockfd, gboolean loop, int ttl, - struct sockaddr_storage *addr) +gst_udp_set_loop_ttl (int sockfd, gboolean loop, int ttl) { int ret = -1; + +#if 0 int l = (loop == FALSE) ? 0 : 1; switch (addr->ss_family) { case AF_INET: { - struct ip_mreq mreq4; - - mreq4.imr_multiaddr.s_addr = - ((struct sockaddr_in *) addr)->sin_addr.s_addr; - mreq4.imr_interface.s_addr = INADDR_ANY; - if ((ret = setsockopt (sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &l, sizeof (l))) < 0) @@ -115,14 +110,50 @@ gst_udp_join_group (int sockfd, gboolean loop, int ttl, setsockopt (sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof (ttl))) < 0) return ret; + break; + } + case AF_INET6: + { + if ((ret = + setsockopt (sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &l, + sizeof (l))) < 0) + return ret; + + if ((ret = + setsockopt (sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &ttl, + sizeof (ttl))) < 0) + return ret; + + break; + } + default: + errno = EAFNOSUPPORT; + } +#endif + return ret; +} + +int +gst_udp_join_group (int sockfd, struct sockaddr_storage *addr) +{ + int ret = -1; + + switch (addr->ss_family) { + case AF_INET: + { + struct ip_mreq mreq4; + + mreq4.imr_multiaddr.s_addr = + ((struct sockaddr_in *) addr)->sin_addr.s_addr; + mreq4.imr_interface.s_addr = INADDR_ANY; if ((ret = setsockopt (sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const void *) &mreq4, sizeof (mreq4))) < 0) return ret; - } - break; + break; + } case AF_INET6: { struct ipv6_mreq mreq6; @@ -133,26 +164,15 @@ gst_udp_join_group (int sockfd, gboolean loop, int ttl, mreq6.ipv6mr_interface = 0; if ((ret = - setsockopt (sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &l, - sizeof (l))) < 0) - return ret; - - if ((ret = - setsockopt (sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &ttl, - sizeof (ttl))) < 0) - return ret; - - if ((ret = setsockopt (sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (const void *) &mreq6, sizeof (mreq6))) < 0) return ret; - } - break; + break; + } default: errno = EAFNOSUPPORT; } - return ret; } |