changeset 26094:c80f151b159a

Added some preliminary prefs settings for configuring a TURN relay server Broke out the hostname -> IP lookup code used when setting the stun-ip property It doesn't yet set the properties for the TURN relay...
author Marcus Lundblad <ml@update.uu.se>
date Sat, 10 Jan 2009 00:49:07 +0000
parents 59188d904773
children 8b54456cba97 c7ab1983df88 8e0ff15f835a
files libpurple/media.c pidgin/gtkprefs.c
diffstat 2 files changed, 42 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/media.c	Thu Jan 08 08:26:36 2009 +0000
+++ b/libpurple/media.c	Sat Jan 10 00:49:07 2009 +0000
@@ -1277,25 +1277,34 @@
 				stream->session->id, stream->participant);
 }
 
+/* this should probably be made IPv6-compatible some time, and made async?
+ maybe this should be a public function in libpurple...*/
+static gchar *
+purple_media_get_ip(const gchar *hostname)
+{
+	struct hostent *host;
+
+	if ((host = gethostbyname(hostname)) && host->h_addr) {
+		gchar *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",
+				hostname, ip);
+		return ip;
+	} else {
+		purple_debug_info("media", "Unable to resolve %s IP address\n",
+				hostname);
+		return NULL;
+	}
+}
+
 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;
-	}
+	
+	return purple_media_get_ip(stun_pref);
 }
 
 static gboolean
--- a/pidgin/gtkprefs.c	Thu Jan 08 08:26:36 2009 +0000
+++ b/pidgin/gtkprefs.c	Sat Jan 10 00:49:07 2009 +0000
@@ -1286,6 +1286,20 @@
 	g_signal_connect(G_OBJECT(ports_checkbox), "clicked",
 					 G_CALLBACK(pidgin_toggle_sensitive), spin_button);
 
+	/* Relay server (TURN) */
+	vbox = pidgin_make_frame(ret, _("Relay Server"));
+	sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+	pidgin_prefs_labeled_entry(vbox, _("_TURN server:"),
+			"/purple/network/turn_server", sg);
+	spin_button = pidgin_prefs_labeled_spin_button(vbox, _("_Port:"),
+			"/purple/network/turn_port", 0, 65535, sg);
+	pidgin_prefs_labeled_entry(vbox, 
+			_("_Username:"),
+			"/purple/network/turn_username", sg);
+	pidgin_prefs_labeled_entry(vbox, 
+			_("_Password:"),
+			"/purple/network/turn_password", sg);
+	
 	if (purple_running_gnome()) {
 		vbox = pidgin_make_frame(ret, _("Proxy Server &amp; Browser"));
 		prefs_proxy_frame = gtk_vbox_new(FALSE, 0);
@@ -2595,6 +2609,11 @@
 	purple_prefs_add_int("/purple/media/audio/volume/input", 10);
 	purple_prefs_add_int("/purple/media/audio/volume/output", 10);
 #endif /* USE_VV */
+	
+	/* set a default port for TURN server */
+	/* currently there is no default port for TURN, one option is to use the
+	 same port as STUN */
+	purple_prefs_add_int("/purple/network/turn_port", 3478);
 
 	pidgin_prefs_update_old();
 }