Mercurial > pidgin
diff libpurple/media.c @ 26050:ae3d25465d0f
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
to the nice transmitter for media).
Also update the IP when the preference changes and when NetworkManager support
is present, when NM reports connected.
TODO: add code to run DNS lookup on Win32 when the network connection is ready
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Sat, 17 Jan 2009 01:38:44 +0000 |
parents | f09107a80608 |
children | b68a88fb7458 |
line wrap: on
line diff
--- a/libpurple/media.c Wed Jan 14 09:32:48 2009 +0000 +++ b/libpurple/media.c Sat Jan 17 01:38:44 2009 +0000 @@ -32,6 +32,7 @@ #include "media.h" #include "marshallers.h" #include "mediamanager.h" +#include "network.h" #include "debug.h" @@ -1549,27 +1550,6 @@ g_timeout_add(0, (GSourceFunc)purple_media_connected_cb, stream); } -static gchar * -purple_media_get_stun_pref_ip() -{ - const gchar *stun_pref = - purple_prefs_get_string("/purple/network/stun_server"); - struct hostent *host; - - if ((host = gethostbyname(stun_pref)) && host->h_addr) { - gchar *stun_ip = g_strdup_printf("%hhu.%hhu.%hhu.%hhu", - host->h_addr[0], host->h_addr[1], - host->h_addr[2], host->h_addr[3]); - purple_debug_info("media", "IP address for %s found: %s\n", - stun_pref, stun_ip); - return stun_ip; - } else { - purple_debug_info("media", "Unable to resolve %s IP address\n", - stun_pref); - return NULL; - } -} - static gboolean purple_media_add_stream_internal(PurpleMedia *media, const gchar *sess_id, const gchar *who, FsMediaType type, @@ -1653,22 +1633,25 @@ if (!stream) { GError *err = NULL; - gchar *stun_ip = NULL; FsStream *fsstream = NULL; - - if ((stun_ip = purple_media_get_stun_pref_ip())) { + const gchar *stun_ip = purple_network_get_stun_ip(); + + + if (stun_ip) { GParameter *param = g_new0(GParameter, num_params+1); memcpy(param, params, sizeof(GParameter) * num_params); + purple_debug_info("media", + "setting property stun-ip on new stream: %s\n", stun_ip); + param[num_params].name = "stun-ip"; g_value_init(¶m[num_params].value, G_TYPE_STRING); - g_value_take_string(¶m[num_params].value, stun_ip); + g_value_set_string(¶m[num_params].value, stun_ip); fsstream = fs_session_new_stream(session->session, participant, type_direction, transmitter, num_params+1, param, &err); g_free(param); - g_free(stun_ip); } else { fsstream = fs_session_new_stream(session->session, participant, type_direction,