comparison libpurple/network.c @ 27192:455e679ea0db

Remove port mappings from the hash tables when removing them. Actually add NAT-PMP mappings to their hash table
author Marcus Lundblad <ml@update.uu.se>
date Wed, 17 Jun 2009 18:14:51 +0000
parents 38c4973b5222
children 627d23bfdb05
comparison
equal deleted inserted replaced
27190:38c4973b5222 27192:455e679ea0db
281 281
282 static gboolean 282 static gboolean
283 purple_network_finish_pmp_map_cb(gpointer data) 283 purple_network_finish_pmp_map_cb(gpointer data)
284 { 284 {
285 PurpleNetworkListenData *listen_data; 285 PurpleNetworkListenData *listen_data;
286 gint *key = g_new(gint, 1);
287 gint *value = g_new(gint, 1);
286 288
287 listen_data = data; 289 listen_data = data;
290
291 /* add port mapping to hash table */
292 *key = purple_network_get_port_from_fd(listen_data->listenfd);
293 *value = listen_data->socket_type;
294 g_hash_table_insert(nat_pmp_port_mappings, key, value);
288 295
289 if (listen_data->cb) 296 if (listen_data->cb)
290 listen_data->cb(listen_data->listenfd, listen_data->cb_data); 297 listen_data->cb(listen_data->listenfd, listen_data->cb_data);
291 298
292 purple_network_listen_cancel(listen_data); 299 purple_network_listen_cancel(listen_data);
923 purple_debug_info("network", "removing UPnP port mapping for port %d\n", 930 purple_debug_info("network", "removing UPnP port mapping for port %d\n",
924 port); 931 port);
925 purple_upnp_remove_port_mapping(port, 932 purple_upnp_remove_port_mapping(port,
926 protocol == SOCK_STREAM ? "TCP" : "UDP", 933 protocol == SOCK_STREAM ? "TCP" : "UDP",
927 purple_network_upnp_mapping_remove_cb, NULL); 934 purple_network_upnp_mapping_remove_cb, NULL);
935 g_hash_table_remove(upnp_port_mappings, key);
928 } 936 }
929 937
930 static void 938 static void
931 purple_network_nat_pmp_mapping_remove(gpointer key, gpointer value, 939 purple_network_nat_pmp_mapping_remove(gpointer key, gpointer value,
932 gpointer user_data) 940 gpointer user_data)
936 purple_debug_info("network", "removing NAT-PMP port mapping for port %d\n", 944 purple_debug_info("network", "removing NAT-PMP port mapping for port %d\n",
937 port); 945 port);
938 purple_pmp_destroy_map( 946 purple_pmp_destroy_map(
939 protocol == SOCK_STREAM ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP, 947 protocol == SOCK_STREAM ? PURPLE_PMP_TYPE_TCP : PURPLE_PMP_TYPE_UDP,
940 port); 948 port);
949 g_hash_table_remove(nat_pmp_port_mappings, key);
941 } 950 }
942 951
943 void 952 void
944 purple_network_remove_port_mapping(gint fd) 953 purple_network_remove_port_mapping(gint fd)
945 { 954 {