comparison libpurple/network.c @ 21697:65ef019c000b

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.
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 30 Nov 2007 23:25:28 +0000
parents 7a05b6f84545
children b63b2a5c2d05
comparison
equal deleted inserted replaced
21696:fded60f269bc 21697:65ef019c000b
180 if (!purple_prefs_get_bool("/purple/network/auto_ip")) { 180 if (!purple_prefs_get_bool("/purple/network/auto_ip")) {
181 ip = purple_network_get_public_ip(); 181 ip = purple_network_get_public_ip();
182 /* Make sure the IP address entered by the user is valid */ 182 /* Make sure the IP address entered by the user is valid */
183 if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL)) 183 if ((ip != NULL) && (purple_network_ip_atoi(ip) != NULL))
184 return ip; 184 return ip;
185 } 185 } else {
186 186 /* Check if STUN discovery was already done */
187 /* Check if STUN discovery was already done */ 187 stun = purple_stun_discover(NULL);
188 stun = purple_stun_discover(NULL); 188 if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED))
189 if ((stun != NULL) && (stun->status == PURPLE_STUN_STATUS_DISCOVERED)) 189 return stun->publicip;
190 return stun->publicip; 190
191 191 /* Attempt to get the IP from a NAT device using UPnP */
192 /* Attempt to get the IP from a NAT device using UPnP */ 192 ip = purple_upnp_get_public_ip();
193 ip = purple_upnp_get_public_ip(); 193 if (ip != NULL)
194 if (ip != NULL) 194 return ip;
195 return ip; 195
196 196 /* Attempt to get the IP from a NAT device using NAT-PMP */
197 /* Attempt to get the IP from a NAT device using NAT-PMP */ 197 ip = purple_pmp_get_public_ip();
198 ip = purple_pmp_get_public_ip(); 198 if (ip != NULL)
199 if (ip != NULL) 199 return ip;
200 return ip; 200 }
201 201
202 /* Just fetch the IP of the local system */ 202 /* Just fetch the IP of the local system */
203 return purple_network_get_local_system_ip(fd); 203 return purple_network_get_local_system_ip(fd);
204 } 204 }
205 205
360 listen_data->retry = TRUE; 360 listen_data->retry = TRUE;
361 listen_data->cb = cb; 361 listen_data->cb = cb;
362 listen_data->cb_data = cb_data; 362 listen_data->cb_data = cb_data;
363 listen_data->socket_type = socket_type; 363 listen_data->socket_type = socket_type;
364 364
365 if (!listen_map_external) 365 if (!listen_map_external || !purple_prefs_get_bool("/purple/network/map_ports"))
366 { 366 {
367 purple_debug_info("network", "Skipping external port mapping.\n"); 367 purple_debug_info("network", "Skipping external port mapping.\n");
368 /* The pmp_map_cb does what we want to do */ 368 /* The pmp_map_cb does what we want to do */
369 purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); 369 purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data);
370 } 370 }
675 #endif 675 #endif
676 676
677 purple_prefs_add_none ("/purple/network"); 677 purple_prefs_add_none ("/purple/network");
678 purple_prefs_add_bool ("/purple/network/auto_ip", TRUE); 678 purple_prefs_add_bool ("/purple/network/auto_ip", TRUE);
679 purple_prefs_add_string("/purple/network/public_ip", ""); 679 purple_prefs_add_string("/purple/network/public_ip", "");
680 purple_prefs_add_bool ("/purple/network/map_ports", TRUE);
680 purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE); 681 purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE);
681 purple_prefs_add_int ("/purple/network/ports_range_start", 1024); 682 purple_prefs_add_int ("/purple/network/ports_range_start", 1024);
682 purple_prefs_add_int ("/purple/network/ports_range_end", 2048); 683 purple_prefs_add_int ("/purple/network/ports_range_end", 2048);
683 684
684 purple_upnp_discover(NULL, NULL); 685 if(purple_prefs_get_bool("/purple/network/map_ports") || purple_prefs_get_bool("/purple/network/auto_ip"))
686 purple_upnp_discover(NULL, NULL);
685 687
686 #ifdef HAVE_LIBNM 688 #ifdef HAVE_LIBNM
687 nm_context = libnm_glib_init(); 689 nm_context = libnm_glib_init();
688 if(nm_context) 690 if(nm_context)
689 nm_callback_idx = libnm_glib_register_callback(nm_context, nm_callback_func, NULL, g_main_context_default()); 691 nm_callback_idx = libnm_glib_register_callback(nm_context, nm_callback_func, NULL, g_main_context_default());