Mercurial > pidgin.yaz
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 { |