--- a/ChangeLog.API Sun Sep 25 00:02:52 2022 -0500
+++ b/ChangeLog.API Sun Sep 25 00:19:58 2022 -0500
@@ -505,6 +505,7 @@
* purple_network_listen_map_external
* purple_network_listen_range
* purple_network_listen_range_family
+ * purple_network_remove_port_mapping * PurpleNotifyUiOps.notify_email
* PurpleNotifyUiOps.notify_emails
--- a/libpurple/network.c Sun Sep 25 00:02:52 2022 -0500
+++ b/libpurple/network.c Sun Sep 25 00:19:58 2022 -0500
@@ -54,10 +54,6 @@
static gchar *stun_ip = NULL;
static gchar *turn_ip = NULL;
-/* Keep track of port mappings done with UPnP and NAT-PMP */
-static GHashTable *upnp_port_mappings = NULL;
-static GHashTable *nat_pmp_port_mappings = NULL;
purple_network_set_public_ip(const char *ip)
@@ -285,71 +281,6 @@
-purple_network_upnp_mapping_remove_cb(gboolean success, gpointer data)
- purple_debug_info("network", "done removing UPnP port mapping\n");
-/* the reason for these functions to have these signatures is to be able to
- use them for g_hash_table_foreach to clean remaining port mappings, which is
-purple_network_upnp_mapping_remove(gpointer key, gpointer value,
- gint port = GPOINTER_TO_INT(key);
- gint protocol = GPOINTER_TO_INT(value);
- purple_debug_info("network", "removing UPnP port mapping for port %d\n",
- purple_upnp_remove_port_mapping(port,
- protocol == SOCK_STREAM ? "TCP" : "UDP",
- purple_network_upnp_mapping_remove_cb, NULL);
- g_hash_table_remove(upnp_port_mappings, GINT_TO_POINTER(port));
-purple_network_nat_pmp_mapping_remove(gpointer key, gpointer value,
- gint port = GPOINTER_TO_INT(key);
- gint protocol = GPOINTER_TO_INT(value);
- purple_debug_info("network", "removing NAT-PMP port mapping for port %d\n",
- purple_pmp_destroy_map(
- protocol == SOCK_STREAM ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP,
- g_hash_table_remove(nat_pmp_port_mappings, GINT_TO_POINTER(port));
-purple_network_remove_port_mapping(gint fd)
- struct sockaddr_in addr;
- g_return_if_fail(fd >= 0);
- if (getsockname(fd, (struct sockaddr *) &addr, &len) == -1) {
- purple_debug_warning("network", "getsockname: %s", g_strerror(errno));
- port = g_ntohs(addr.sin_port);
- protocol = GPOINTER_TO_INT(g_hash_table_lookup(upnp_port_mappings, GINT_TO_POINTER(port)));
- purple_network_upnp_mapping_remove(GINT_TO_POINTER(port), GINT_TO_POINTER(protocol), NULL);
- protocol = GPOINTER_TO_INT(g_hash_table_lookup(nat_pmp_port_mappings, GINT_TO_POINTER(port)));
- purple_network_nat_pmp_mapping_remove(GINT_TO_POINTER(port), GINT_TO_POINTER(protocol), NULL);
_purple_network_set_common_socket_flags(int fd)
@@ -404,9 +335,6 @@
purple_prefs_get_string("/purple/network/stun_server"));
purple_network_set_turn_server(
purple_prefs_get_string("/purple/network/turn_server"));
- upnp_port_mappings = g_hash_table_new(g_direct_hash, g_direct_equal);
- nat_pmp_port_mappings = g_hash_table_new(g_direct_hash, g_direct_equal);
@@ -415,9 +343,6 @@
- g_hash_table_destroy(upnp_port_mappings);
- g_hash_table_destroy(nat_pmp_port_mappings);
/* TODO: clean up remaining port mappings, note calling
purple_upnp_remove_port_mapping from here doesn't quite work... */
--- a/libpurple/network.h Sun Sep 25 00:02:52 2022 -0500
+++ b/libpurple/network.h Sun Sep 25 00:19:58 2022 -0500
@@ -148,14 +148,6 @@
const gchar *purple_network_get_turn_ip(void);
- * purple_network_remove_port_mapping:
- * @fd: Socket to remove the port mapping for
- * Remove a port mapping (UPnP or NAT-PMP) associated with listening socket
-void purple_network_remove_port_mapping(gint fd);
* _purple_network_set_common_socket_flags:
* @fd: The file descriptor for the socket.
--- a/libpurple/protocols/jabber/si.c Sun Sep 25 00:02:52 2022 -0500
+++ b/libpurple/protocols/jabber/si.c Sun Sep 25 00:19:58 2022 -0500
@@ -1835,11 +1835,6 @@
jabber_iq_remove_callback_by_id(js, jsx->iq_id);
- if (purple_xfer_get_xfer_type(PURPLE_XFER(jsx)) == PURPLE_XFER_TYPE_SEND && purple_xfer_get_fd(PURPLE_XFER(jsx)) >= 0) {
- purple_debug_info("jabber", "remove port mapping\n");
- purple_network_remove_port_mapping(purple_xfer_get_fd(PURPLE_XFER(jsx)));
if (jsx->connect_timeout > 0) {
g_source_remove(jsx->connect_timeout);