diff libpurple/network.c @ 21466:7a05b6f84545

Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
author Daniel Atallah <daniel.atallah@gmail.com>
date Tue, 13 Nov 2007 04:29:06 +0000
parents 35b4f1dc4c8d
children 14afe5a92fc2 65ef019c000b
line wrap: on
line diff
--- a/libpurple/network.c	Tue Nov 13 02:20:58 2007 +0000
+++ b/libpurple/network.c	Tue Nov 13 04:29:06 2007 +0000
@@ -259,6 +259,12 @@
 	return FALSE;
 }
 
+static gboolean listen_map_external = TRUE;
+void purple_network_listen_map_external(gboolean map_external)
+{
+	listen_map_external = map_external;
+}
+
 static PurpleNetworkListenData *
 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
 {
@@ -356,11 +362,17 @@
 	listen_data->cb_data = cb_data;
 	listen_data->socket_type = socket_type;
 
+	if (!listen_map_external)
+	{
+		purple_debug_info("network", "Skipping external port mapping.\n");
+		/* The pmp_map_cb does what we want to do */
+		purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
+	}
 	/* Attempt a NAT-PMP Mapping, which will return immediately */
-	if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
+	else if (purple_pmp_create_map(((socket_type == SOCK_STREAM) ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP),
 							  actual_port, actual_port, PURPLE_PMP_LIFETIME))
 	{
-		purple_debug_info("network", "Created NAT-PMP mapping on port %i\n",actual_port);
+		purple_debug_info("network", "Created NAT-PMP mapping on port %i\n", actual_port);
 		/* We want to return listen_data now, and on the next run loop trigger the cb and destroy listen_data */
 		purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
 	}
@@ -567,7 +579,7 @@
 
 		retval = WSALookupServiceEnd(h);
 
-		g_idle_add(wpurple_network_change_thread_cb, NULL);
+		purple_timeout_add(0, wpurple_network_change_thread_cb, NULL);
 
 	}