Mercurial > pidgin.yaz
diff libpurple/network.c @ 26137:c56e8826fed0
Added support to generate relayed candidates (TURN).
Added prefs setting for relay server in Pidgin
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Thu, 22 Jan 2009 23:04:52 +0000 |
parents | ae3d25465d0f |
children | 4f0aec6d4ad7 |
line wrap: on
line diff
--- a/libpurple/network.c Mon Jan 19 10:47:12 2009 +0000 +++ b/libpurple/network.c Thu Jan 22 23:04:52 2009 +0000 @@ -93,8 +93,9 @@ static NMState nm_get_network_state(void); #endif -/* Cached IP address for STUN server */ +/* Cached IP addresses for STUN and TURN servers (set globally in prefs) */ static gchar *stun_ip = NULL; +static gchar *turn_ip = NULL; const unsigned char * purple_network_ip_atoi(const char *ip) @@ -694,6 +695,8 @@ offline */ purple_network_set_stun_server( purple_prefs_get_string("/purple/network/stun_server")); + purple_network_set_turn_server( + purple_prefs_get_string("/purple/network/turn_server")); if (ui_ops != NULL && ui_ops->network_connected != NULL) ui_ops->network_connected(); @@ -757,11 +760,13 @@ #endif static void -purple_network_stun_lookup_cb(GSList *hosts, gpointer data, +purple_network_ip_lookup_cb(GSList *hosts, gpointer data, const char *error_message) { + const gchar **ip = (const gchar **) data; + if (error_message) { - purple_debug_error("network", "lookup of STUN server IP failed: %s\n", + purple_debug_error("network", "lookup of IP address failed: %s\n", error_message); g_slist_free(hosts); return; @@ -780,8 +785,8 @@ dst, sizeof(dst)); } - stun_ip = g_strdup(dst); - purple_debug_info("network", "set STUN IP: %s\n", stun_ip); + *ip = g_strdup(dst); + purple_debug_info("network", "set IP address: %s\n", *ip); } g_slist_free(hosts); @@ -793,8 +798,8 @@ if (stun_server && stun_server[0] != '\0') { if (purple_network_is_available()) { purple_debug_info("network", "running DNS query for STUN server\n"); - purple_dnsquery_a(stun_server, 3478, purple_network_stun_lookup_cb, - NULL); + purple_dnsquery_a(stun_server, 3478, purple_network_ip_lookup_cb, + &stun_ip); } else { purple_debug_info("network", "network is unavailable, don't try to update STUN IP"); @@ -805,12 +810,38 @@ } } +void +purple_network_set_turn_server(const gchar *turn_server) +{ + if (turn_server && turn_server[0] != '\0') { + if (purple_network_is_available()) { + purple_debug_info("network", "running DNS query for TURN server\n"); + purple_dnsquery_a(turn_server, + purple_prefs_get_int("/purple/network/turn_port"), + purple_network_ip_lookup_cb, &turn_ip); + } else { + purple_debug_info("network", + "network is unavailable, don't try to update TURN IP"); + } + } else if (turn_ip) { + g_free(turn_ip); + turn_ip = NULL; + } +} + + const gchar * purple_network_get_stun_ip(void) { return stun_ip; } +const gchar * +purple_network_get_turn_ip(void) +{ + return turn_ip; +} + void * purple_network_get_handle(void) { @@ -843,6 +874,10 @@ purple_prefs_add_none ("/purple/network"); purple_prefs_add_string("/purple/network/stun_server", ""); + purple_prefs_add_string("/purple/network/turn_server", ""); + purple_prefs_add_int ("/purple/network/turn_port", 3478); + purple_prefs_add_string("/purple/network/turn_username", ""); + purple_prefs_add_string("/purple/network/turn_password", ""); purple_prefs_add_bool ("/purple/network/auto_ip", TRUE); purple_prefs_add_string("/purple/network/public_ip", ""); purple_prefs_add_bool ("/purple/network/map_ports", TRUE); @@ -884,6 +919,8 @@ purple_network_set_stun_server( purple_prefs_get_string("/purple/network/stun_server")); + purple_network_set_turn_server( + purple_prefs_get_string("/purple/network/turn_server")); } void