summaryrefslogtreecommitdiff
path: root/transmitters
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2013-04-04 14:17:15 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2013-04-04 14:28:45 -0400
commit5caa188909453f8890a8af8b4b41fe3d287a7fec (patch)
tree0c7d6c73dc23d3e513ed23160d5a78b19d807a6b /transmitters
parentcdf4998b4ce7da59f15aa88b5f4629e5995cab94 (diff)
downloadfarstream-5caa188909453f8890a8af8b4b41fe3d287a7fec.tar.gz
multicast: Use gio instead of getaddrinfo for resolving
Diffstat (limited to 'transmitters')
-rw-r--r--transmitters/multicast/fs-multicast-transmitter.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/transmitters/multicast/fs-multicast-transmitter.c b/transmitters/multicast/fs-multicast-transmitter.c
index d105798e..2926e80c 100644
--- a/transmitters/multicast/fs-multicast-transmitter.c
+++ b/transmitters/multicast/fs-multicast-transmitter.c
@@ -53,7 +53,6 @@
# include <ws2tcpip.h>
# define close closesocket
#else /*G_OS_WIN32*/
-# include <netdb.h>
# include <sys/socket.h>
# include <netinet/ip.h>
# include <arpa/inet.h>
@@ -550,24 +549,34 @@ static gboolean
_ip_string_into_sockaddr_in (const gchar *ip_as_string,
struct sockaddr_in *sockaddr_in, GError **error)
{
- struct addrinfo hints;
- struct addrinfo *result = NULL;
- int retval;
+ GInetAddress *inetaddr;
+ GSocketAddress *socket_addr;
+ gboolean ret;
+
+ inetaddr = g_inet_address_new_from_string (ip_as_string);
- memset (&hints, 0, sizeof (struct addrinfo));
- hints.ai_family = AF_INET;
- hints.ai_flags = AI_NUMERICHOST;
- retval = getaddrinfo (ip_as_string, NULL, &hints, &result);
- if (retval != 0) {
+ if (!inetaddr) {
g_set_error (error, FS_ERROR, FS_ERROR_NETWORK,
- "Invalid IP address %s passed: %s", ip_as_string,
- gai_strerror (retval));
+ "Invalid IP address %s passed", ip_as_string);
return FALSE;
}
- memcpy (sockaddr_in, result->ai_addr, sizeof (struct sockaddr_in));
- freeaddrinfo (result);
- return TRUE;
+ if (g_inet_address_get_family (inetaddr) != G_SOCKET_FAMILY_IPV4) {
+ g_set_error (error, FS_ERROR, FS_ERROR_NETWORK,
+ "IP address %s passed is not IPv4", ip_as_string);
+ g_object_unref (inetaddr);
+ return 0;
+ }
+
+ socket_addr = g_inet_socket_address_new (inetaddr, 1);
+
+ ret = g_socket_address_to_native (socket_addr, sockaddr_in,
+ sizeof (struct sockaddr_in), error);
+
+ g_object_unref (socket_addr);
+ g_object_unref (inetaddr);
+
+ return ret;
}
static gint