aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_tcp.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-09-30 20:35:10 +0000
committerChristian Grothoff <christian@grothoff.org>2013-09-30 20:35:10 +0000
commita0ba5b741b56036bd35bd9ba88164324b2ff7ada (patch)
tree3fd10a0fc15f9a9e7cf5415b2bec86d97d7fe825 /src/transport/plugin_transport_tcp.c
parent427dd6f998fb1fde515a3b5c800f9f6d308197b2 (diff)
downloadgnunet-a0ba5b741b56036bd35bd9ba88164324b2ff7ada.tar.gz
gnunet-a0ba5b741b56036bd35bd9ba88164324b2ff7ada.zip
-getting ATS and transport to compile again (part of #3047)
Diffstat (limited to 'src/transport/plugin_transport_tcp.c')
-rw-r--r--src/transport/plugin_transport_tcp.c110
1 files changed, 58 insertions, 52 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c
index 37a4aa7cd..0e49300b0 100644
--- a/src/transport/plugin_transport_tcp.c
+++ b/src/transport/plugin_transport_tcp.c
@@ -358,7 +358,7 @@ struct Plugin
358 /** 358 /**
359 * Map from peer identities to sessions for the given peer. 359 * Map from peer identities to sessions for the given peer.
360 */ 360 */
361 struct GNUNET_CONTAINER_MultiHashMap *sessionmap; 361 struct GNUNET_CONTAINER_MultiPeerMap *sessionmap;
362 362
363 /** 363 /**
364 * Handle to the network service. 364 * Handle to the network service.
@@ -379,7 +379,7 @@ struct Plugin
379 /** 379 /**
380 * Map of peers we have tried to contact behind a NAT 380 * Map of peers we have tried to contact behind a NAT
381 */ 381 */
382 struct GNUNET_CONTAINER_MultiHashMap *nat_wait_conns; 382 struct GNUNET_CONTAINER_MultiPeerMap *nat_wait_conns;
383 383
384 /** 384 /**
385 * List of active TCP probes. 385 * List of active TCP probes.
@@ -458,7 +458,7 @@ static void
458inc_sessions (struct Plugin *plugin, struct Session *session, int line) 458inc_sessions (struct Plugin *plugin, struct Session *session, int line)
459{ 459{
460 sessions++; 460 sessions++;
461 unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap); 461 unsigned int size = GNUNET_CONTAINER_multipeermap_size(plugin->sessionmap);
462 if (sessions != size) 462 if (sessions != size)
463 LOG (GNUNET_ERROR_TYPE_DEBUG, "Inconsistent sessions %u <-> session map size: %u\n", 463 LOG (GNUNET_ERROR_TYPE_DEBUG, "Inconsistent sessions %u <-> session map size: %u\n",
464 sessions, size); 464 sessions, size);
@@ -475,7 +475,7 @@ static void
475dec_sessions (struct Plugin *plugin, struct Session *session, int line) 475dec_sessions (struct Plugin *plugin, struct Session *session, int line)
476{ 476{
477 GNUNET_assert (sessions > 0); 477 GNUNET_assert (sessions > 0);
478 unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap); 478 unsigned int size = GNUNET_CONTAINER_multipeermap_size(plugin->sessionmap);
479 sessions--; 479 sessions--;
480 if (sessions != size) 480 if (sessions != size)
481 LOG (GNUNET_ERROR_TYPE_DEBUG, "Inconsistent sessions %u <-> session map size: %u\n", 481 LOG (GNUNET_ERROR_TYPE_DEBUG, "Inconsistent sessions %u <-> session map size: %u\n",
@@ -751,7 +751,7 @@ struct SessionClientCtx
751 751
752static int 752static int
753session_lookup_by_client_it (void *cls, 753session_lookup_by_client_it (void *cls,
754 const struct GNUNET_HashCode * key, 754 const struct GNUNET_PeerIdentity *key,
755 void *value) 755 void *value)
756{ 756{
757 struct SessionClientCtx *sc_ctx = cls; 757 struct SessionClientCtx *sc_ctx = cls;
@@ -781,7 +781,7 @@ lookup_session_by_client (struct Plugin *plugin,
781 781
782 sc_ctx.client = client; 782 sc_ctx.client = client;
783 sc_ctx.ret = NULL; 783 sc_ctx.ret = NULL;
784 GNUNET_CONTAINER_multihashmap_iterate (plugin->sessionmap, &session_lookup_by_client_it, &sc_ctx); 784 GNUNET_CONTAINER_multipeermap_iterate (plugin->sessionmap, &session_lookup_by_client_it, &sc_ctx);
785 return sc_ctx.ret; 785 return sc_ctx.ret;
786} 786}
787 787
@@ -1024,14 +1024,14 @@ disconnect_session (struct Session *session)
1024 1024
1025 stop_session_timeout (session); 1025 stop_session_timeout (session);
1026 1026
1027 if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (plugin->sessionmap, &session->target.hashPubKey, session)) 1027 if (GNUNET_YES == GNUNET_CONTAINER_multipeermap_remove (plugin->sessionmap, &session->target, session))
1028 { 1028 {
1029 GNUNET_STATISTICS_update (session->plugin->env->stats, 1029 GNUNET_STATISTICS_update (session->plugin->env->stats,
1030 gettext_noop ("# TCP sessions active"), -1, 1030 gettext_noop ("# TCP sessions active"), -1,
1031 GNUNET_NO); 1031 GNUNET_NO);
1032 dec_sessions (plugin, session, __LINE__); 1032 dec_sessions (plugin, session, __LINE__);
1033 } 1033 }
1034 else GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove (plugin->nat_wait_conns, &session->target.hashPubKey, session)); 1034 else GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multipeermap_remove (plugin->nat_wait_conns, &session->target, session));
1035 1035
1036 /* clean up state */ 1036 /* clean up state */
1037 if (session->transmit_handle != NULL) 1037 if (session->transmit_handle != NULL)
@@ -1093,32 +1093,36 @@ struct FindSessionContext
1093 int res; 1093 int res;
1094}; 1094};
1095 1095
1096int session_it (void *cls, 1096
1097 const struct GNUNET_HashCode * key, 1097static int
1098 void *value) 1098session_it (void *cls,
1099 const struct GNUNET_PeerIdentity * key,
1100 void *value)
1099{ 1101{
1100 struct FindSessionContext *res = cls; 1102 struct FindSessionContext *res = cls;
1103
1101 if (res->s == value) 1104 if (res->s == value)
1102 { 1105 {
1103 res->res = GNUNET_OK; 1106 res->res = GNUNET_OK;
1104 return GNUNET_NO; 1107 return GNUNET_NO;
1105 } 1108 }
1106 else 1109 return GNUNET_YES;
1107 return GNUNET_YES;
1108} 1110}
1109 1111
1110int find_session (struct Plugin *plugin, struct Session *session) 1112
1113static int
1114find_session (struct Plugin *plugin, struct Session *session)
1111{ 1115{
1112 struct FindSessionContext session_map_res; 1116 struct FindSessionContext session_map_res;
1113 struct FindSessionContext nat_map_res; 1117 struct FindSessionContext nat_map_res;
1114 1118
1115 session_map_res.s = session; 1119 session_map_res.s = session;
1116 session_map_res.res = GNUNET_SYSERR; 1120 session_map_res.res = GNUNET_SYSERR;
1117 GNUNET_CONTAINER_multihashmap_iterate (plugin->sessionmap, &session_it, &session_map_res); 1121 GNUNET_CONTAINER_multipeermap_iterate (plugin->sessionmap, &session_it, &session_map_res);
1118 1122
1119 nat_map_res.s = session; 1123 nat_map_res.s = session;
1120 nat_map_res.res = GNUNET_SYSERR; 1124 nat_map_res.res = GNUNET_SYSERR;
1121 GNUNET_CONTAINER_multihashmap_iterate (plugin->nat_wait_conns, &session_it, &nat_map_res); 1125 GNUNET_CONTAINER_multipeermap_iterate (plugin->nat_wait_conns, &session_it, &nat_map_res);
1122 1126
1123 if ((session_map_res.res == GNUNET_SYSERR) && (nat_map_res.res == GNUNET_SYSERR)) 1127 if ((session_map_res.res == GNUNET_SYSERR) && (nat_map_res.res == GNUNET_SYSERR))
1124 { 1128 {
@@ -1190,8 +1194,8 @@ tcp_plugin_send (void *cls,
1190 "Asked to transmit %u bytes to `%s', added message to list.\n", 1194 "Asked to transmit %u bytes to `%s', added message to list.\n",
1191 msgbuf_size, GNUNET_i2s (&session->target)); 1195 msgbuf_size, GNUNET_i2s (&session->target));
1192 1196
1193 if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value (plugin->sessionmap, 1197 if (GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains_value (plugin->sessionmap,
1194 &session->target.hashPubKey, 1198 &session->target,
1195 session)) 1199 session))
1196 { 1200 {
1197 GNUNET_assert (session->client != NULL); 1201 GNUNET_assert (session->client != NULL);
@@ -1209,7 +1213,7 @@ tcp_plugin_send (void *cls,
1209 process_pending_messages (session); 1213 process_pending_messages (session);
1210 return msgbuf_size; 1214 return msgbuf_size;
1211 } 1215 }
1212 else if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value(plugin->nat_wait_conns, &session->target.hashPubKey, session)) 1216 else if (GNUNET_YES == GNUNET_CONTAINER_multipeermap_contains_value(plugin->nat_wait_conns, &session->target, session))
1213 { 1217 {
1214 LOG (GNUNET_ERROR_TYPE_DEBUG, 1218 LOG (GNUNET_ERROR_TYPE_DEBUG,
1215 "This NAT WAIT session for peer `%s' is not yet ready!\n", 1219 "This NAT WAIT session for peer `%s' is not yet ready!\n",
@@ -1247,7 +1251,7 @@ struct SessionItCtx
1247 1251
1248static int 1252static int
1249session_lookup_it (void *cls, 1253session_lookup_it (void *cls,
1250 const struct GNUNET_HashCode *key, 1254 const struct GNUNET_PeerIdentity *key,
1251 void *value) 1255 void *value)
1252{ 1256{
1253 struct SessionItCtx * si_ctx = cls; 1257 struct SessionItCtx * si_ctx = cls;
@@ -1343,8 +1347,8 @@ tcp_plugin_get_session (void *cls,
1343 1347
1344 /* look for existing session */ 1348 /* look for existing session */
1345 if (GNUNET_YES == 1349 if (GNUNET_YES ==
1346 GNUNET_CONTAINER_multihashmap_contains (plugin->sessionmap, 1350 GNUNET_CONTAINER_multipeermap_contains (plugin->sessionmap,
1347 &address->peer.hashPubKey)) 1351 &address->peer))
1348 { 1352 {
1349 struct SessionItCtx si_ctx; 1353 struct SessionItCtx si_ctx;
1350 1354
@@ -1353,8 +1357,8 @@ tcp_plugin_get_session (void *cls,
1353 1357
1354 si_ctx.result = NULL; 1358 si_ctx.result = NULL;
1355 1359
1356 GNUNET_CONTAINER_multihashmap_get_multiple (plugin->sessionmap, 1360 GNUNET_CONTAINER_multipeermap_get_multiple (plugin->sessionmap,
1357 &address->peer.hashPubKey, 1361 &address->peer,
1358 &session_lookup_it, &si_ctx); 1362 &session_lookup_it, &si_ctx);
1359 if (si_ctx.result != NULL) 1363 if (si_ctx.result != NULL)
1360 { 1364 {
@@ -1431,8 +1435,8 @@ tcp_plugin_get_session (void *cls,
1431 1435
1432 if ((is_natd == GNUNET_YES) && 1436 if ((is_natd == GNUNET_YES) &&
1433 (GNUNET_YES == 1437 (GNUNET_YES ==
1434 GNUNET_CONTAINER_multihashmap_contains (plugin->nat_wait_conns, 1438 GNUNET_CONTAINER_multipeermap_contains (plugin->nat_wait_conns,
1435 &address->peer.hashPubKey))) 1439 &address->peer)))
1436 { 1440 {
1437 /* Only do one NAT punch attempt per peer identity */ 1441 /* Only do one NAT punch attempt per peer identity */
1438 return NULL; 1442 return NULL;
@@ -1440,8 +1444,8 @@ tcp_plugin_get_session (void *cls,
1440 1444
1441 if ((is_natd == GNUNET_YES) && (NULL != plugin->nat) && 1445 if ((is_natd == GNUNET_YES) && (NULL != plugin->nat) &&
1442 (GNUNET_NO == 1446 (GNUNET_NO ==
1443 GNUNET_CONTAINER_multihashmap_contains (plugin->nat_wait_conns, 1447 GNUNET_CONTAINER_multipeermap_contains (plugin->nat_wait_conns,
1444 &address->peer.hashPubKey))) 1448 &address->peer)))
1445 { 1449 {
1446 LOG (GNUNET_ERROR_TYPE_DEBUG, 1450 LOG (GNUNET_ERROR_TYPE_DEBUG,
1447 "Found valid IPv4 NAT address (creating session)!\n") ; 1451 "Found valid IPv4 NAT address (creating session)!\n") ;
@@ -1454,8 +1458,8 @@ tcp_plugin_get_session (void *cls,
1454 session); 1458 session);
1455 GNUNET_assert (session != NULL); 1459 GNUNET_assert (session != NULL);
1456 GNUNET_assert (GNUNET_OK == 1460 GNUNET_assert (GNUNET_OK ==
1457 GNUNET_CONTAINER_multihashmap_put (plugin->nat_wait_conns, 1461 GNUNET_CONTAINER_multipeermap_put (plugin->nat_wait_conns,
1458 &session->target.hashPubKey, 1462 &session->target,
1459 session, 1463 session,
1460 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 1464 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
1461 1465
@@ -1502,8 +1506,8 @@ tcp_plugin_get_session (void *cls,
1502 session->addrlen = addrlen; 1506 session->addrlen = addrlen;
1503 session->ats_address_network_type = ats.value; 1507 session->ats_address_network_type = ats.value;
1504 1508
1505 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, 1509 GNUNET_CONTAINER_multipeermap_put (plugin->sessionmap,
1506 &session->target.hashPubKey, 1510 &session->target,
1507 session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1511 session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1508 inc_sessions (plugin, session, __LINE__); 1512 inc_sessions (plugin, session, __LINE__);
1509 LOG (GNUNET_ERROR_TYPE_DEBUG, 1513 LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1520,7 +1524,7 @@ tcp_plugin_get_session (void *cls,
1520 1524
1521static int 1525static int
1522session_disconnect_it (void *cls, 1526session_disconnect_it (void *cls,
1523 const struct GNUNET_HashCode * key, 1527 const struct GNUNET_PeerIdentity *key,
1524 void *value) 1528 void *value)
1525{ 1529{
1526 struct Session *session = value; 1530 struct Session *session = value;
@@ -1557,8 +1561,10 @@ tcp_plugin_disconnect (void *cls, const struct GNUNET_PeerIdentity *target)
1557 1561
1558 LOG (GNUNET_ERROR_TYPE_DEBUG, 1562 LOG (GNUNET_ERROR_TYPE_DEBUG,
1559 "Disconnecting peer `%4s'\n", GNUNET_i2s (target)); 1563 "Disconnecting peer `%4s'\n", GNUNET_i2s (target));
1560 GNUNET_CONTAINER_multihashmap_get_multiple (plugin->sessionmap, &target->hashPubKey, &session_disconnect_it, plugin); 1564 GNUNET_CONTAINER_multipeermap_get_multiple (plugin->sessionmap, target,
1561 GNUNET_CONTAINER_multihashmap_get_multiple (plugin->nat_wait_conns, &target->hashPubKey, &session_disconnect_it, plugin); 1565 &session_disconnect_it, plugin);
1566 GNUNET_CONTAINER_multipeermap_get_multiple (plugin->nat_wait_conns, target,
1567 &session_disconnect_it, plugin);
1562} 1568}
1563 1569
1564 1570
@@ -1933,9 +1939,9 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client,
1933 } 1939 }
1934 1940
1935 session = 1941 session =
1936 GNUNET_CONTAINER_multihashmap_get (plugin->nat_wait_conns, 1942 GNUNET_CONTAINER_multipeermap_get (plugin->nat_wait_conns,
1937 &tcp_nat_probe-> 1943 &tcp_nat_probe->
1938 clientIdentity.hashPubKey); 1944 clientIdentity);
1939 if (session == NULL) 1945 if (session == NULL)
1940 { 1946 {
1941 LOG (GNUNET_ERROR_TYPE_DEBUG, 1947 LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1959,12 +1965,12 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client,
1959 disconnect_session (session); 1965 disconnect_session (session);
1960 return; 1966 return;
1961 } 1967 }
1962 GNUNET_assert (GNUNET_CONTAINER_multihashmap_remove 1968 GNUNET_assert (GNUNET_CONTAINER_multipeermap_remove
1963 (plugin->nat_wait_conns, 1969 (plugin->nat_wait_conns,
1964 &tcp_nat_probe->clientIdentity.hashPubKey, 1970 &tcp_nat_probe->clientIdentity,
1965 session) == GNUNET_YES); 1971 session) == GNUNET_YES);
1966 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, 1972 GNUNET_CONTAINER_multipeermap_put (plugin->sessionmap,
1967 &session->target.hashPubKey, session, 1973 &session->target, session,
1968 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1974 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1969 session->last_activity = GNUNET_TIME_absolute_get (); 1975 session->last_activity = GNUNET_TIME_absolute_get ();
1970 session->inbound = GNUNET_NO; 1976 session->inbound = GNUNET_NO;
@@ -2110,8 +2116,8 @@ handle_tcp_welcome (void *cls, struct GNUNET_SERVER_Client *client,
2110 session, 2116 session,
2111 GNUNET_a2s (vaddr, alen)); 2117 GNUNET_a2s (vaddr, alen));
2112 GNUNET_free (vaddr); 2118 GNUNET_free (vaddr);
2113 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, 2119 GNUNET_CONTAINER_multipeermap_put (plugin->sessionmap,
2114 &session->target.hashPubKey, 2120 &session->target,
2115 session, 2121 session,
2116 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 2122 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
2117 inc_sessions (plugin, session, __LINE__); 2123 inc_sessions (plugin, session, __LINE__);
@@ -2247,9 +2253,9 @@ handle_tcp_data (void *cls, struct GNUNET_SERVER_Client *client,
2247 distance.value = session->ats_address_network_type; 2253 distance.value = session->ats_address_network_type;
2248 GNUNET_break (ntohl(session->ats_address_network_type) != GNUNET_ATS_NET_UNSPECIFIED); 2254 GNUNET_break (ntohl(session->ats_address_network_type) != GNUNET_ATS_NET_UNSPECIFIED);
2249 2255
2250 GNUNET_assert (GNUNET_CONTAINER_multihashmap_contains_value (plugin->sessionmap, 2256 GNUNET_assert (GNUNET_CONTAINER_multipeermap_contains_value (plugin->sessionmap,
2251 &session->target.hashPubKey, 2257 &session->target,
2252 session)); 2258 session));
2253 2259
2254 delay = plugin->env->receive (plugin->env->cls, 2260 delay = plugin->env->receive (plugin->env->cls,
2255 &session->target, 2261 &session->target,
@@ -2592,7 +2598,7 @@ libgnunet_plugin_transport_tcp_init (void *cls)
2592 myoptions = 0; 2598 myoptions = 0;
2593 2599
2594 plugin = GNUNET_malloc (sizeof (struct Plugin)); 2600 plugin = GNUNET_malloc (sizeof (struct Plugin));
2595 plugin->sessionmap = GNUNET_CONTAINER_multihashmap_create (max_connections, GNUNET_YES); 2601 plugin->sessionmap = GNUNET_CONTAINER_multipeermap_create (max_connections, GNUNET_YES);
2596 plugin->max_connections = max_connections; 2602 plugin->max_connections = max_connections;
2597 plugin->cur_connections = 0; 2603 plugin->cur_connections = 0;
2598 plugin->open_port = bport; 2604 plugin->open_port = bport;
@@ -2671,7 +2677,7 @@ libgnunet_plugin_transport_tcp_init (void *cls)
2671 2677
2672 GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers); 2678 GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers);
2673 GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin); 2679 GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin);
2674 plugin->nat_wait_conns = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_YES); 2680 plugin->nat_wait_conns = GNUNET_CONTAINER_multipeermap_create (16, GNUNET_YES);
2675 if (bport != 0) 2681 if (bport != 0)
2676 LOG (GNUNET_ERROR_TYPE_INFO, 2682 LOG (GNUNET_ERROR_TYPE_INFO,
2677 _("TCP transport listening on port %llu\n"), bport); 2683 _("TCP transport listening on port %llu\n"), bport);
@@ -2713,9 +2719,9 @@ libgnunet_plugin_transport_tcp_done (void *cls)
2713 LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down TCP plugin\n"); 2719 LOG (GNUNET_ERROR_TYPE_DEBUG, "Shutting down TCP plugin\n");
2714 2720
2715 /* Removing leftover sessions */ 2721 /* Removing leftover sessions */
2716 GNUNET_CONTAINER_multihashmap_iterate(plugin->sessionmap, &session_disconnect_it, NULL); 2722 GNUNET_CONTAINER_multipeermap_iterate(plugin->sessionmap, &session_disconnect_it, NULL);
2717 /* Removing leftover NAT sessions */ 2723 /* Removing leftover NAT sessions */
2718 GNUNET_CONTAINER_multihashmap_iterate(plugin->nat_wait_conns, &session_disconnect_it, NULL); 2724 GNUNET_CONTAINER_multipeermap_iterate(plugin->nat_wait_conns, &session_disconnect_it, NULL);
2719 2725
2720 next = ppc_dll_head; 2726 next = ppc_dll_head;
2721 for (cur = next; NULL != cur; cur = next) 2727 for (cur = next; NULL != cur; cur = next)
@@ -2743,8 +2749,8 @@ libgnunet_plugin_transport_tcp_done (void *cls)
2743 GNUNET_CONNECTION_destroy (tcp_probe->sock); 2749 GNUNET_CONNECTION_destroy (tcp_probe->sock);
2744 GNUNET_free (tcp_probe); 2750 GNUNET_free (tcp_probe);
2745 } 2751 }
2746 GNUNET_CONTAINER_multihashmap_destroy (plugin->nat_wait_conns); 2752 GNUNET_CONTAINER_multipeermap_destroy (plugin->nat_wait_conns);
2747 GNUNET_CONTAINER_multihashmap_destroy (plugin->sessionmap); 2753 GNUNET_CONTAINER_multipeermap_destroy (plugin->sessionmap);
2748 GNUNET_free (plugin); 2754 GNUNET_free (plugin);
2749 GNUNET_free (api); 2755 GNUNET_free (api);
2750 return NULL; 2756 return NULL;