diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-01-17 11:18:33 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2012-01-17 11:18:33 +0100 |
commit | 2ea3ef0c1cab133e8efcd9941360813a513cb8db (patch) | |
tree | a65b5a2545a3380c55ca6cd4720fc55027ebb655 | |
parent | bb38a849e57393b67ff72f05ac48c44eba02430c (diff) |
udp: Remove now unecessary code
-rw-r--r-- | gst/udp/gstudp.c | 5 | ||||
-rw-r--r-- | gst/udp/gstudpnetutils.c | 366 | ||||
-rw-r--r-- | gst/udp/gstudpnetutils.h | 86 |
3 files changed, 6 insertions, 451 deletions
diff --git a/gst/udp/gstudp.c b/gst/udp/gstudp.c index b95213e8c..bfb5c106f 100644 --- a/gst/udp/gstudp.c +++ b/gst/udp/gstudp.c @@ -31,11 +31,6 @@ static gboolean plugin_init (GstPlugin * plugin) { -#ifdef G_OS_WIN32 - if (!gst_udp_net_utils_win32_wsa_startup (GST_OBJECT (plugin))) - return FALSE; -#endif - /* register info of the netaddress metadata so that we can use it from * multiple threads right away. Note that the plugin loading is always * serialized */ diff --git a/gst/udp/gstudpnetutils.c b/gst/udp/gstudpnetutils.c index 18c009f9c..217c70849 100644 --- a/gst/udp/gstudpnetutils.c +++ b/gst/udp/gstudpnetutils.c @@ -23,350 +23,11 @@ #include "config.h" #endif -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <memory.h> - #include <gst/gst.h> +#include <string.h> #include "gstudpnetutils.h" -/* EAI_ADDRFAMILY was obsoleted in BSD at some point */ -#ifndef EAI_ADDRFAMILY -#define EAI_ADDRFAMILY 1 -#endif - -#ifdef G_OS_WIN32 - -gboolean -gst_udp_net_utils_win32_wsa_startup (GstObject * obj) -{ - WSADATA w; - int error; - - error = WSAStartup (0x0202, &w); - - if (error) { - GST_WARNING_OBJECT (obj, "WSAStartup error: %d", error); - return FALSE; - } - - if (w.wVersion != 0x0202) { - WSACleanup (); - GST_WARNING_OBJECT (obj, "Winsock version wrong : 0x%x", w.wVersion); - return FALSE; - } - - return TRUE; -} - -#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 -gst_udp_get_addr (const char *hostname, int port, struct sockaddr_storage *addr) -{ - struct addrinfo hints, *res = NULL, *nres; - char service[NI_MAXSERV]; - int ret; - - memset (&hints, 0, sizeof (hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_DGRAM; - g_snprintf (service, sizeof (service) - 1, "%d", port); - service[sizeof (service) - 1] = '\0'; - - if ((ret = getaddrinfo (hostname, (port == -1) ? NULL : service, &hints, - &res)) < 0) { - goto beach; - } - - nres = res; - while (nres) { - if (nres->ai_family == AF_INET || nres->ai_family == AF_INET6) - break; - nres = nres->ai_next; - } - - if (nres) { - memcpy (addr, nres->ai_addr, nres->ai_addrlen); - } else { - ret = EAI_ADDRFAMILY; - } - - freeaddrinfo (res); -beach: - return ret; -} - -int -gst_udp_set_loop (int sockfd, guint16 ss_family, gboolean loop) -{ - int ret = -1; - int l = (loop == FALSE) ? 0 : 1; - - switch (ss_family) { - case AF_INET: - { - ret = setsockopt (sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &l, sizeof (l)); - if (ret < 0) - return ret; - - break; - } - case AF_INET6: - { - ret = - setsockopt (sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &l, - sizeof (l)); - if (ret < 0) - return ret; - - break; - } - default: -#ifdef G_OS_WIN32 - WSASetLastError (WSAEAFNOSUPPORT); -#else - errno = EAFNOSUPPORT; -#endif - } - - return ret; -} - -int -gst_udp_set_ttl (int sockfd, guint16 ss_family, int ttl, gboolean is_multicast) -{ - int optname = -1; - int ret = -1; - - switch (ss_family) { - case AF_INET: - { - optname = (is_multicast == TRUE) ? IP_MULTICAST_TTL : IP_TTL; - ret = setsockopt (sockfd, IPPROTO_IP, optname, &ttl, sizeof (ttl)); - if (ret < 0) - return ret; - break; - } - case AF_INET6: - { - optname = - (is_multicast == TRUE) ? IPV6_MULTICAST_HOPS : IPV6_UNICAST_HOPS; - ret = setsockopt (sockfd, IPPROTO_IPV6, optname, &ttl, sizeof (ttl)); - if (ret < 0) - return ret; - - /* When using IPV4 address with IPV6 socket, both TTL values - must be set in order to actually use the given value. - Has no effect when IPV6 address is used. */ - optname = (is_multicast == TRUE) ? IP_MULTICAST_TTL : IP_TTL; - ret = setsockopt (sockfd, IPPROTO_IP, optname, &ttl, sizeof (ttl)); - if (ret < 0) - return ret; - break; - } - default: -#ifdef G_OS_WIN32 - WSASetLastError (WSAEAFNOSUPPORT); -#else - errno = EAFNOSUPPORT; -#endif - } - return ret; -} - -/* FIXME: Add interface selection for windows hosts. */ -int -gst_udp_join_group (int sockfd, struct sockaddr_storage *addr, gchar * iface) -{ - int ret = -1; - - switch (addr->ss_family) { - case AF_INET: - { -#ifdef HAVE_IP_MREQN - struct ip_mreqn mreq4; -#else - struct ip_mreq mreq4; -#endif - - memset (&mreq4, 0, sizeof (mreq4)); - mreq4.imr_multiaddr.s_addr = - ((struct sockaddr_in *) addr)->sin_addr.s_addr; -#ifdef HAVE_IP_MREQN - if (iface) - mreq4.imr_ifindex = if_nametoindex (iface); - else - mreq4.imr_ifindex = 0; /* Pick any. */ -#else - mreq4.imr_interface.s_addr = INADDR_ANY; -#endif - - if ((ret = - setsockopt (sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, - (const void *) &mreq4, sizeof (mreq4))) < 0) - return ret; - - break; - } - case AF_INET6: - { - struct ipv6_mreq mreq6; - - memset (&mreq6, 0, sizeof (mreq6)); - memcpy (&mreq6.ipv6mr_multiaddr, - &(((struct sockaddr_in6 *) addr)->sin6_addr), - sizeof (struct in6_addr)); - mreq6.ipv6mr_interface = 0; -#if !defined(G_OS_WIN32) - if (iface) - mreq6.ipv6mr_interface = if_nametoindex (iface); -#endif - - if ((ret = - setsockopt (sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, - (const void *) &mreq6, sizeof (mreq6))) < 0) - return ret; - - break; - } - default: -#ifdef G_OS_WIN32 - WSASetLastError (WSAEAFNOSUPPORT); -#else - errno = EAFNOSUPPORT; -#endif - } - return ret; -} - -int -gst_udp_leave_group (int sockfd, struct sockaddr_storage *addr) -{ - int ret = -1; - - switch (addr->ss_family) { - case AF_INET: - { - struct ip_mreq mreq4; - - memset (&mreq4, 0, sizeof (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_DROP_MEMBERSHIP, - (const void *) &mreq4, sizeof (mreq4))) < 0) - return ret; - } - break; - - case AF_INET6: - { - struct ipv6_mreq mreq6; - - memset (&mreq6, 0, sizeof (mreq6)); - memcpy (&mreq6.ipv6mr_multiaddr, - &(((struct sockaddr_in6 *) addr)->sin6_addr), - sizeof (struct in6_addr)); - mreq6.ipv6mr_interface = 0; - - if ((ret = - setsockopt (sockfd, IPPROTO_IPV6, IPV6_LEAVE_GROUP, - (const void *) &mreq6, sizeof (mreq6))) < 0) - return ret; - } - break; - - default: -#ifdef G_OS_WIN32 - WSASetLastError (WSAEAFNOSUPPORT); -#else - errno = EAFNOSUPPORT; -#endif - } - - return ret; -} - -int -gst_udp_is_multicast (struct sockaddr_storage *addr) -{ - int ret = -1; - - switch (addr->ss_family) { - case AF_INET: - { - struct sockaddr_in *addr4 = (struct sockaddr_in *) addr; - - ret = IN_MULTICAST (g_ntohl (addr4->sin_addr.s_addr)); - } - break; - - case AF_INET6: - { - struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) addr; - - ret = IN6_IS_ADDR_MULTICAST (&addr6->sin6_addr); - } - break; - - default: -#ifdef G_OS_WIN32 - WSASetLastError (WSAEAFNOSUPPORT); -#else - errno = EAFNOSUPPORT; -#endif - } - - return ret; -} - -void -gst_udp_uri_init (GstUDPUri * uri, const gchar * host, gint port) -{ - uri->host = NULL; - uri->port = -1; - gst_udp_uri_update (uri, host, port); -} - -int -gst_udp_uri_update (GstUDPUri * uri, const gchar * host, gint port) -{ - if (host) { - g_free (uri->host); - uri->host = g_strdup (host); - if (strchr (host, ':')) - uri->is_ipv6 = TRUE; - else - uri->is_ipv6 = FALSE; - } - if (port != -1) - uri->port = port; - - return 0; -} - gboolean gst_udp_parse_uri (const gchar * uristr, gchar ** host, guint16 * port) { @@ -417,7 +78,9 @@ gst_udp_parse_uri (const gchar * uristr, gchar ** host, guint16 * port) GST_DEBUG ("host set to '%s'", *host); if (colptr != NULL) { - *port = atoi (colptr + 1); + *port = g_ascii_strtoll (colptr + 1, NULL, 10); + } else { + *port = 0; } g_free (location_start); @@ -443,24 +106,3 @@ wrong_address: return FALSE; } } - -gchar * -gst_udp_uri_string (GstUDPUri * uri) -{ - gchar *result; - - if (uri->is_ipv6) { - result = g_strdup_printf ("udp://[%s]:%d", uri->host, uri->port); - } else { - result = g_strdup_printf ("udp://%s:%d", uri->host, uri->port); - } - return result; -} - -void -gst_udp_uri_free (GstUDPUri * uri) -{ - g_free (uri->host); - uri->host = NULL; - uri->port = -1; -} diff --git a/gst/udp/gstudpnetutils.h b/gst/udp/gstudpnetutils.h index 313567e84..8e8665cce 100644 --- a/gst/udp/gstudpnetutils.h +++ b/gst/udp/gstudpnetutils.h @@ -18,93 +18,11 @@ * Boston, MA 02111-1307, USA. */ +#include <gst/gst.h> + #ifndef __GST_UDP_NET_UTILS_H__ #define __GST_UDP_NET_UTILS_H__ -#include <sys/types.h> - -/* Needed for G_OS_XXXX */ -#include <glib.h> - -#ifdef G_OS_WIN32 -/* ws2_32.dll has getaddrinfo and freeaddrinfo on Windows XP and later. - * minwg32 headers check WINVER before allowing the use of these */ -#ifndef WINVER -#define WINVER 0x0501 -#endif -#include <winsock2.h> -#include <ws2tcpip.h> -#ifndef socklen_t -#define socklen_t int -#endif - -/* Needed for GstObject and GST_WARNING_OBJECT */ -#include <gst/gstobject.h> -#include <gst/gstinfo.h> - -#else -#include <sys/time.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <net/if.h> -#include <netdb.h> -#include <sys/wait.h> -#include <arpa/inet.h> -#include <unistd.h> -#include <sys/ioctl.h> -#endif - -#include <fcntl.h> - -#ifdef G_OS_WIN32 - -#define IOCTL_SOCKET ioctlsocket -#define CLOSE_SOCKET(sock) closesocket(sock) -#define setsockopt(sock,l,opt,val,len) setsockopt(sock,l,opt,(char *)(val),len) -#define WSA_STARTUP(obj) gst_udp_net_utils_win32_wsa_startup(GST_OBJECT(obj)) -#define WSA_CLEANUP(obj) WSACleanup () - -#else - -#define IOCTL_SOCKET ioctl -#define CLOSE_SOCKET(sock) close(sock) -#define setsockopt(sock,l,opt,val,len) setsockopt(sock,l,opt,(void *)(val),len) -#define WSA_STARTUP(obj) -#define WSA_CLEANUP(obj) - -#endif - -#ifdef G_OS_WIN32 - -gboolean gst_udp_net_utils_win32_wsa_startup (GstObject * obj); - -#endif - -typedef struct { - gchar *host; - guint16 port; - gboolean is_ipv6; -} GstUDPUri; - -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_is_multicast (struct sockaddr_storage *addr); - -int gst_udp_set_loop (int sockfd, guint16 ss_family, gboolean loop); -int gst_udp_set_ttl (int sockfd, guint16 ss_family, int ttl, gboolean is_multicast); - -/* multicast groups */ -int gst_udp_join_group (int sockfd, struct sockaddr_storage *addr, - gchar *iface); -int gst_udp_leave_group (int sockfd, struct sockaddr_storage *addr); - -/* uri handling */ -void gst_udp_uri_init (GstUDPUri *uri, const gchar *host, gint port); -int gst_udp_uri_update (GstUDPUri *uri, const gchar *host, gint port); -gchar * gst_udp_uri_string (GstUDPUri *uri); -void gst_udp_uri_free (GstUDPUri *uri); - gboolean gst_udp_parse_uri (const gchar *uristr, gchar **host, guint16 *port); #endif /* __GST_UDP_NET_UTILS_H__*/ |