aboutsummaryrefslogtreecommitdiff
path: root/src/transport
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-10-07 18:19:32 +0000
committerChristian Grothoff <christian@grothoff.org>2012-10-07 18:19:32 +0000
commita60b958f984d08525b636a2c7eae564ebec54ae6 (patch)
tree6dcbbf91d734834f804b2fd9ab790244e2d60e6c /src/transport
parentdecf459805cdb3f6811f979df4831bc2ce9a2858 (diff)
downloadgnunet-a60b958f984d08525b636a2c7eae564ebec54ae6.tar.gz
gnunet-a60b958f984d08525b636a2c7eae564ebec54ae6.zip
-chaning multihashmap API to allow option for avoiding key allocation
Diffstat (limited to 'src/transport')
-rw-r--r--src/transport/gnunet-service-transport_blacklist.c3
-rw-r--r--src/transport/gnunet-service-transport_neighbours.c2
-rw-r--r--src/transport/gnunet-service-transport_validation.c3
-rw-r--r--src/transport/gnunet-transport.c2
-rw-r--r--src/transport/plugin_transport_tcp.c74
-rw-r--r--src/transport/plugin_transport_udp.c2
-rw-r--r--src/transport/plugin_transport_unix.c2
-rw-r--r--src/transport/transport_api.c4
8 files changed, 53 insertions, 39 deletions
diff --git a/src/transport/gnunet-service-transport_blacklist.c b/src/transport/gnunet-service-transport_blacklist.c
index 505326879..e426b8fd2 100644
--- a/src/transport/gnunet-service-transport_blacklist.c
+++ b/src/transport/gnunet-service-transport_blacklist.c
@@ -687,7 +687,8 @@ GST_blacklist_add_peer (const struct GNUNET_PeerIdentity *peer,
687 GNUNET_i2s (peer), transport_name); 687 GNUNET_i2s (peer), transport_name);
688 if (blacklist == NULL) 688 if (blacklist == NULL)
689 blacklist = 689 blacklist =
690 GNUNET_CONTAINER_multihashmap_create (TRANSPORT_BLACKLIST_HT_SIZE); 690 GNUNET_CONTAINER_multihashmap_create (TRANSPORT_BLACKLIST_HT_SIZE,
691 GNUNET_NO);
691 GNUNET_CONTAINER_multihashmap_put (blacklist, &peer->hashPubKey, 692 GNUNET_CONTAINER_multihashmap_put (blacklist, &peer->hashPubKey,
692 GNUNET_strdup (transport_name), 693 GNUNET_strdup (transport_name),
693 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 694 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c
index dd506b125..da42b8c56 100644
--- a/src/transport/gnunet-service-transport_neighbours.c
+++ b/src/transport/gnunet-service-transport_neighbours.c
@@ -3197,7 +3197,7 @@ GST_neighbours_start (void *cls,
3197 connect_notify_cb = connect_cb; 3197 connect_notify_cb = connect_cb;
3198 disconnect_notify_cb = disconnect_cb; 3198 disconnect_notify_cb = disconnect_cb;
3199 address_change_cb = peer_address_cb; 3199 address_change_cb = peer_address_cb;
3200 neighbours = GNUNET_CONTAINER_multihashmap_create (NEIGHBOUR_TABLE_SIZE); 3200 neighbours = GNUNET_CONTAINER_multihashmap_create (NEIGHBOUR_TABLE_SIZE, GNUNET_NO);
3201} 3201}
3202 3202
3203 3203
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c
index 59fe1737f..ab334013d 100644
--- a/src/transport/gnunet-service-transport_validation.c
+++ b/src/transport/gnunet-service-transport_validation.c
@@ -696,7 +696,8 @@ process_peerinfo_hello (void *cls, const struct GNUNET_PeerIdentity *peer,
696void 696void
697GST_validation_start () 697GST_validation_start ()
698{ 698{
699 validation_map = GNUNET_CONTAINER_multihashmap_create (VALIDATION_MAP_SIZE); 699 validation_map = GNUNET_CONTAINER_multihashmap_create (VALIDATION_MAP_SIZE,
700 GNUNET_NO);
700 pnc = GNUNET_PEERINFO_notify (GST_cfg, &process_peerinfo_hello, NULL); 701 pnc = GNUNET_PEERINFO_notify (GST_cfg, &process_peerinfo_hello, NULL);
701} 702}
702 703
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c
index 217fbf51f..5978de6bb 100644
--- a/src/transport/gnunet-transport.c
+++ b/src/transport/gnunet-transport.c
@@ -655,7 +655,7 @@ testservice_task (void *cls,
655 } 655 }
656 if (iterate_connections) 656 if (iterate_connections)
657 { 657 {
658 peers = GNUNET_CONTAINER_multihashmap_create (20); 658 peers = GNUNET_CONTAINER_multihashmap_create (20, GNUNET_NO);
659 GNUNET_TRANSPORT_peer_get_active_addresses (cfg, NULL, GNUNET_YES, 659 GNUNET_TRANSPORT_peer_get_active_addresses (cfg, NULL, GNUNET_YES,
660 TIMEOUT, 660 TIMEOUT,
661 &process_address, (void *) cfg); 661 &process_address, (void *) cfg);
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c
index 9d23c5121..877356c16 100644
--- a/src/transport/plugin_transport_tcp.c
+++ b/src/transport/plugin_transport_tcp.c
@@ -734,7 +734,7 @@ static struct Session *
734create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, 734create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
735 struct GNUNET_SERVER_Client *client, int is_nat) 735 struct GNUNET_SERVER_Client *client, int is_nat)
736{ 736{
737 struct Session *ret; 737 struct Session *session;
738 struct PendingMessage *pm; 738 struct PendingMessage *pm;
739 struct WelcomeMessage welcome; 739 struct WelcomeMessage welcome;
740 740
@@ -746,14 +746,14 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
746 LOG (GNUNET_ERROR_TYPE_DEBUG, 746 LOG (GNUNET_ERROR_TYPE_DEBUG,
747 "Creating new session for peer `%4s'\n", 747 "Creating new session for peer `%4s'\n",
748 GNUNET_i2s (target)); 748 GNUNET_i2s (target));
749 ret = GNUNET_malloc (sizeof (struct Session)); 749 session = GNUNET_malloc (sizeof (struct Session));
750 ret->last_activity = GNUNET_TIME_absolute_get (); 750 session->last_activity = GNUNET_TIME_absolute_get ();
751 ret->plugin = plugin; 751 session->plugin = plugin;
752 ret->is_nat = is_nat; 752 session->is_nat = is_nat;
753 ret->client = client; 753 session->client = client;
754 ret->target = *target; 754 session->target = *target;
755 ret->expecting_welcome = GNUNET_YES; 755 session->expecting_welcome = GNUNET_YES;
756 ret->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED); 756 session->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED);
757 pm = GNUNET_malloc (sizeof (struct PendingMessage) + 757 pm = GNUNET_malloc (sizeof (struct PendingMessage) +
758 sizeof (struct WelcomeMessage)); 758 sizeof (struct WelcomeMessage));
759 pm->msg = (const char *) &pm[1]; 759 pm->msg = (const char *) &pm[1];
@@ -766,17 +766,17 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
766 GNUNET_STATISTICS_update (plugin->env->stats, 766 GNUNET_STATISTICS_update (plugin->env->stats,
767 gettext_noop ("# bytes currently in TCP buffers"), 767 gettext_noop ("# bytes currently in TCP buffers"),
768 pm->message_size, GNUNET_NO); 768 pm->message_size, GNUNET_NO);
769 GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head, 769 GNUNET_CONTAINER_DLL_insert (session->pending_messages_head,
770 ret->pending_messages_tail, pm); 770 session->pending_messages_tail, pm);
771 if (GNUNET_YES != is_nat) 771 if (GNUNET_YES != is_nat)
772 { 772 {
773 GNUNET_STATISTICS_update (plugin->env->stats, 773 GNUNET_STATISTICS_update (plugin->env->stats,
774 gettext_noop ("# TCP sessions active"), 1, 774 gettext_noop ("# TCP sessions active"), 1,
775 GNUNET_NO); 775 GNUNET_NO);
776 } 776 }
777 start_session_timeout (ret); 777 start_session_timeout (session);
778 778
779 return ret; 779 return session;
780} 780}
781 781
782 782
@@ -1120,7 +1120,9 @@ tcp_plugin_send (void *cls,
1120 "Asked to transmit %u bytes to `%s', added message to list.\n", 1120 "Asked to transmit %u bytes to `%s', added message to list.\n",
1121 msgbuf_size, GNUNET_i2s (&session->target)); 1121 msgbuf_size, GNUNET_i2s (&session->target));
1122 1122
1123 if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value(plugin->sessionmap, &session->target.hashPubKey, session)) 1123 if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value (plugin->sessionmap,
1124 &session->target.hashPubKey,
1125 session))
1124 { 1126 {
1125 GNUNET_assert (session->client != NULL); 1127 GNUNET_assert (session->client != NULL);
1126 reschedule_session_timeout (session); 1128 reschedule_session_timeout (session);
@@ -1246,8 +1248,8 @@ static struct Session *
1246tcp_plugin_get_session (void *cls, 1248tcp_plugin_get_session (void *cls,
1247 const struct GNUNET_HELLO_Address *address) 1249 const struct GNUNET_HELLO_Address *address)
1248{ 1250{
1249 struct Plugin * plugin = cls; 1251 struct Plugin *plugin = cls;
1250 struct Session * session = NULL; 1252 struct Session *session = NULL;
1251 int af; 1253 int af;
1252 const void *sb; 1254 const void *sb;
1253 size_t sbs; 1255 size_t sbs;
@@ -1270,7 +1272,8 @@ tcp_plugin_get_session (void *cls,
1270 1272
1271 /* look for existing session */ 1273 /* look for existing session */
1272 if (GNUNET_YES == 1274 if (GNUNET_YES ==
1273 GNUNET_CONTAINER_multihashmap_contains(plugin->sessionmap, &address->peer.hashPubKey)) 1275 GNUNET_CONTAINER_multihashmap_contains (plugin->sessionmap,
1276 &address->peer.hashPubKey))
1274 { 1277 {
1275 struct SessionItCtx si_ctx; 1278 struct SessionItCtx si_ctx;
1276 1279
@@ -1279,7 +1282,9 @@ tcp_plugin_get_session (void *cls,
1279 1282
1280 si_ctx.result = NULL; 1283 si_ctx.result = NULL;
1281 1284
1282 GNUNET_CONTAINER_multihashmap_get_multiple(plugin->sessionmap, &address->peer.hashPubKey, &session_lookup_it, &si_ctx); 1285 GNUNET_CONTAINER_multihashmap_get_multiple (plugin->sessionmap,
1286 &address->peer.hashPubKey,
1287 &session_lookup_it, &si_ctx);
1283 if (si_ctx.result != NULL) 1288 if (si_ctx.result != NULL)
1284 { 1289 {
1285 session = si_ctx.result; 1290 session = si_ctx.result;
@@ -1372,13 +1377,15 @@ tcp_plugin_get_session (void *cls,
1372 session->addrlen = 0; 1377 session->addrlen = 0;
1373 session->addr = NULL; 1378 session->addr = NULL;
1374 session->ats_address_network_type = ats.value; 1379 session->ats_address_network_type = ats.value;
1375 session->nat_connection_timeout = GNUNET_SCHEDULER_add_delayed(NAT_TIMEOUT, 1380 session->nat_connection_timeout = GNUNET_SCHEDULER_add_delayed (NAT_TIMEOUT,
1376 &nat_connect_timeout, 1381 &nat_connect_timeout,
1377 session); 1382 session);
1378 GNUNET_assert (session != NULL); 1383 GNUNET_assert (session != NULL);
1379 GNUNET_assert (GNUNET_CONTAINER_multihashmap_put 1384 GNUNET_assert (GNUNET_OK ==
1380 (plugin->nat_wait_conns, &address->peer.hashPubKey, session, 1385 GNUNET_CONTAINER_multihashmap_put (plugin->nat_wait_conns,
1381 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY) == GNUNET_OK); 1386 &session->target.hashPubKey,
1387 session,
1388 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
1382 1389
1383 LOG (GNUNET_ERROR_TYPE_DEBUG, 1390 LOG (GNUNET_ERROR_TYPE_DEBUG,
1384 "Created NAT WAIT connection to `%4s' at `%s'\n", 1391 "Created NAT WAIT connection to `%4s' at `%s'\n",
@@ -1421,7 +1428,9 @@ tcp_plugin_get_session (void *cls,
1421 session->addrlen = addrlen; 1428 session->addrlen = addrlen;
1422 session->ats_address_network_type = ats.value; 1429 session->ats_address_network_type = ats.value;
1423 1430
1424 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1431 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap,
1432 &session->target.hashPubKey,
1433 session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1425 inc_sessions (plugin, session, __LINE__); 1434 inc_sessions (plugin, session, __LINE__);
1426 LOG (GNUNET_ERROR_TYPE_DEBUG, 1435 LOG (GNUNET_ERROR_TYPE_DEBUG,
1427 "Creating new session for `%s' address `%s' session %p\n", 1436 "Creating new session for `%s' address `%s' session %p\n",
@@ -1763,9 +1772,9 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client,
1763 (plugin->nat_wait_conns, 1772 (plugin->nat_wait_conns,
1764 &tcp_nat_probe->clientIdentity.hashPubKey, 1773 &tcp_nat_probe->clientIdentity.hashPubKey,
1765 session) == GNUNET_YES); 1774 session) == GNUNET_YES);
1766 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, 1775 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap,
1767 &session->target.hashPubKey, session, 1776 &session->target.hashPubKey, session,
1768 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1777 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1769 session->last_activity = GNUNET_TIME_absolute_get (); 1778 session->last_activity = GNUNET_TIME_absolute_get ();
1770 session->inbound = GNUNET_NO; 1779 session->inbound = GNUNET_NO;
1771 LOG (GNUNET_ERROR_TYPE_DEBUG, 1780 LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1896,7 +1905,10 @@ handle_tcp_welcome (void *cls, struct GNUNET_SERVER_Client *client,
1896 LOG (GNUNET_ERROR_TYPE_DEBUG, 1905 LOG (GNUNET_ERROR_TYPE_DEBUG,
1897 "Did not obtain TCP socket address for incoming connection\n"); 1906 "Did not obtain TCP socket address for incoming connection\n");
1898 } 1907 }
1899 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1908 GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap,
1909 &session->target.hashPubKey,
1910 session,
1911 GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1900 inc_sessions (plugin, session, __LINE__); 1912 inc_sessions (plugin, session, __LINE__);
1901 } 1913 }
1902 1914
@@ -2332,7 +2344,7 @@ libgnunet_plugin_transport_tcp_init (void *cls)
2332 service = NULL; 2344 service = NULL;
2333 2345
2334 plugin = GNUNET_malloc (sizeof (struct Plugin)); 2346 plugin = GNUNET_malloc (sizeof (struct Plugin));
2335 plugin->sessionmap = GNUNET_CONTAINER_multihashmap_create(max_connections); 2347 plugin->sessionmap = GNUNET_CONTAINER_multihashmap_create (max_connections, GNUNET_YES);
2336 plugin->max_connections = max_connections; 2348 plugin->max_connections = max_connections;
2337 plugin->open_port = bport; 2349 plugin->open_port = bport;
2338 plugin->adv_port = aport; 2350 plugin->adv_port = aport;
@@ -2405,7 +2417,7 @@ libgnunet_plugin_transport_tcp_init (void *cls)
2405 plugin->handlers[i].callback_cls = plugin; 2417 plugin->handlers[i].callback_cls = plugin;
2406 GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers); 2418 GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers);
2407 GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin); 2419 GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin);
2408 plugin->nat_wait_conns = GNUNET_CONTAINER_multihashmap_create (16); 2420 plugin->nat_wait_conns = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_YES);
2409 if (bport != 0) 2421 if (bport != 0)
2410 LOG (GNUNET_ERROR_TYPE_INFO, 2422 LOG (GNUNET_ERROR_TYPE_INFO,
2411 _("TCP transport listening on port %llu\n"), bport); 2423 _("TCP transport listening on port %llu\n"), bport);
diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c
index 1520bf284..bf8220164 100644
--- a/src/transport/plugin_transport_udp.c
+++ b/src/transport/plugin_transport_udp.c
@@ -2348,7 +2348,7 @@ libgnunet_plugin_transport_udp_init (void *cls)
2348 2348
2349 GNUNET_BANDWIDTH_tracker_init (&p->tracker, 2349 GNUNET_BANDWIDTH_tracker_init (&p->tracker,
2350 GNUNET_BANDWIDTH_value_init ((uint32_t)udp_max_bps), 30); 2350 GNUNET_BANDWIDTH_value_init ((uint32_t)udp_max_bps), 30);
2351 p->sessions = GNUNET_CONTAINER_multihashmap_create (10); 2351 p->sessions = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
2352 p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 2352 p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
2353 p->mst = GNUNET_SERVER_mst_create (&process_inbound_tokenized_messages, p); 2353 p->mst = GNUNET_SERVER_mst_create (&process_inbound_tokenized_messages, p);
2354 p->port = port; 2354 p->port = port;
diff --git a/src/transport/plugin_transport_unix.c b/src/transport/plugin_transport_unix.c
index c688039e6..fc1556591 100644
--- a/src/transport/plugin_transport_unix.c
+++ b/src/transport/plugin_transport_unix.c
@@ -1354,7 +1354,7 @@ libgnunet_plugin_transport_unix_init (void *cls)
1354 if (sockets_created == 0) 1354 if (sockets_created == 0)
1355 LOG (GNUNET_ERROR_TYPE_WARNING, _("Failed to open UNIX sockets\n")); 1355 LOG (GNUNET_ERROR_TYPE_WARNING, _("Failed to open UNIX sockets\n"));
1356 1356
1357 plugin->session_map = GNUNET_CONTAINER_multihashmap_create(10); 1357 plugin->session_map = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO);
1358 1358
1359 GNUNET_SCHEDULER_add_now (address_notification, plugin); 1359 GNUNET_SCHEDULER_add_now (address_notification, plugin);
1360 return api; 1360 return api;
diff --git a/src/transport/transport_api.c b/src/transport/transport_api.c
index 2d4890db9..7fef0cf3e 100644
--- a/src/transport/transport_api.c
+++ b/src/transport/transport_api.c
@@ -353,7 +353,7 @@ neighbour_add (struct GNUNET_TRANSPORT_Handle *h,
353 MAX_BANDWIDTH_CARRY_S); 353 MAX_BANDWIDTH_CARRY_S);
354 GNUNET_assert (GNUNET_OK == 354 GNUNET_assert (GNUNET_OK ==
355 GNUNET_CONTAINER_multihashmap_put (h->neighbours, 355 GNUNET_CONTAINER_multihashmap_put (h->neighbours,
356 &pid->hashPubKey, n, 356 &n->id.hashPubKey, n,
357 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); 357 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
358 return n; 358 return n;
359} 359}
@@ -1191,7 +1191,7 @@ GNUNET_TRANSPORT_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
1191 ret->nd_cb = nd; 1191 ret->nd_cb = nd;
1192 ret->reconnect_delay = GNUNET_TIME_UNIT_ZERO; 1192 ret->reconnect_delay = GNUNET_TIME_UNIT_ZERO;
1193 ret->neighbours = 1193 ret->neighbours =
1194 GNUNET_CONTAINER_multihashmap_create (STARTING_NEIGHBOURS_SIZE); 1194 GNUNET_CONTAINER_multihashmap_create (STARTING_NEIGHBOURS_SIZE, GNUNET_YES);
1195 ret->ready_heap = 1195 ret->ready_heap =
1196 GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 1196 GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
1197 LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to transport service.\n"); 1197 LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to transport service.\n");