summaryrefslogtreecommitdiff
path: root/libpurple/network.c
diff options
context:
space:
mode:
authorDaniel Atallah <datallah@pidgin.im>2007-11-30 23:25:28 +0000
committerDaniel Atallah <datallah@pidgin.im>2007-11-30 23:25:28 +0000
commit3cd116c39a90ae183e75639208d0dbe0bc84ca19 (patch)
tree90dcde8584131297b154367caf843b86865c72b4 /libpurple/network.c
parentb1af78e86bbf79904480372218073b1464edfbee (diff)
downloadpidgin-3cd116c39a90ae183e75639208d0dbe0bc84ca19.tar.gz
Allow UPnP and NAT-PMP port mapping to be disabled via a pref. This means that UPnP discovery will not occur if this new pref and the "Autodetect IP Address" pref are both unchecked. Fixes #4157.
Diffstat (limited to 'libpurple/network.c')
-rw-r--r--libpurple/network.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/libpurple/network.c b/libpurple/network.c
index 7a78a91a79..9945116fae 100644
--- a/libpurple/network.c
+++ b/libpurple/network.c
@@ -182,22 +182,22 @@ purple_network_get_my_ip(int fd)
/* Make sure the IP address entered by the user is valid */
if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL))
return ip;
- }
-
- /* Check if STUN discovery was already done */
- stun = purple_stun_discover(NULL);
- if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED))
- return stun->publicip;
-
- /* Attempt to get the IP from a NAT device using UPnP */
- ip = purple_upnp_get_public_ip();
- if (ip != NULL)
- return ip;
+ } else {
+ /* Check if STUN discovery was already done */
+ stun = purple_stun_discover(NULL);
+ if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED))
+ return stun->publicip;
+
+ /* Attempt to get the IP from a NAT device using UPnP */
+ ip = purple_upnp_get_public_ip();
+ if (ip != NULL)
+ return ip;
- /* Attempt to get the IP from a NAT device using NAT-PMP */
- ip = purple_pmp_get_public_ip();
- if (ip != NULL)
- return ip;
+ /* Attempt to get the IP from a NAT device using NAT-PMP */
+ ip = purple_pmp_get_public_ip();
+ if (ip != NULL)
+ return ip;
+ }
/* Just fetch the IP of the local system */
return purple_network_get_local_system_ip(fd);
@@ -362,7 +362,7 @@ purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkList
listen_data->cb_data = cb_data;
listen_data->socket_type = socket_type;
- if (!listen_map_external)
+ if (!listen_map_external || !purple_prefs_get_bool("/purple/network/map_ports"))
{
purple_debug_info("network", "Skipping external port mapping.\n");
/* The pmp_map_cb does what we want to do */
@@ -677,11 +677,13 @@ purple_network_init(void)
purple_prefs_add_none ("/purple/network");
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);
purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE);
purple_prefs_add_int ("/purple/network/ports_range_start", 1024);
purple_prefs_add_int ("/purple/network/ports_range_end", 2048);
- purple_upnp_discover(NULL, NULL);
+ if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip"))
+ purple_upnp_discover(NULL, NULL);
#ifdef HAVE_LIBNM
nm_context = libnm_glib_init();