aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_tcp.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-04-10 14:38:33 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-04-10 14:38:33 +0000
commit562a20129f7e3eb01bdae830d619f9a22bb81286 (patch)
tree2724f90305198180a356acdc85006b3e5608288a /src/transport/plugin_transport_tcp.c
parent836020bfb15bd865fffacaf39a6183da285999f5 (diff)
downloadgnunet-562a20129f7e3eb01bdae830d619f9a22bb81286.tar.gz
gnunet-562a20129f7e3eb01bdae830d619f9a22bb81286.zip
- fix for session counting: nat_wait sessions decreased session counter but did increase it
Diffstat (limited to 'src/transport/plugin_transport_tcp.c')
-rw-r--r--src/transport/plugin_transport_tcp.c63
1 files changed, 56 insertions, 7 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c
index 2753ba219..9247d8a73 100644
--- a/src/transport/plugin_transport_tcp.c
+++ b/src/transport/plugin_transport_tcp.c
@@ -403,6 +403,44 @@ struct Plugin
403 403
404}; 404};
405 405
406/* DEBUG CODE */
407static const char *
408tcp_address_to_string (void *cls, const void *addr, size_t addrlen);
409
410static unsigned int sessions;
411
412static void inc_sessions (struct Plugin *plugin, struct Session *session, int line)
413{
414 sessions ++;
415 unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap);
416 if (sessions != size)
417 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "Inconsistent sessions %u <-> session map size: %u\n",
418 sessions, size);
419 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "%4i Session increased to %u (session map size: %u): `%s' `%s'\n",
420 line,
421 sessions,
422 size,
423 GNUNET_i2s (&session->target),
424 tcp_address_to_string (NULL, session->addr, session->addrlen));
425}
426
427static void dec_sessions (struct Plugin *plugin, struct Session *session, int line)
428{
429 GNUNET_assert (sessions > 0);
430 unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap);
431 sessions --;
432 if (sessions != size)
433 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "Inconsistent sessions %u <-> session map size: %u\n",
434 sessions, size);
435 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "%4i Session decreased to %u (session map size: %u): `%s' `%s'\n",
436 line,
437 sessions,
438 size,
439 GNUNET_i2s (&session->target),
440 tcp_address_to_string (NULL, session->addr, session->addrlen));
441}
442/* DEBUG CODE */
443
406 444
407/** 445/**
408 * Function to check if an inbound connection is acceptable. 446 * Function to check if an inbound connection is acceptable.
@@ -678,9 +716,11 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
678 GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head, 716 GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head,
679 ret->pending_messages_tail, pm); 717 ret->pending_messages_tail, pm);
680 if (is_nat != GNUNET_YES) 718 if (is_nat != GNUNET_YES)
719 {
681 GNUNET_STATISTICS_update (plugin->env->stats, 720 GNUNET_STATISTICS_update (plugin->env->stats,
682 gettext_noop ("# TCP sessions active"), 1, 721 gettext_noop ("# TCP sessions active"), 1,
683 GNUNET_NO); 722 GNUNET_NO);
723 }
684 return ret; 724 return ret;
685} 725}
686 726
@@ -867,8 +907,14 @@ disconnect_session (struct Session *session)
867 GNUNET_i2s (&session->target), 907 GNUNET_i2s (&session->target),
868 tcp_address_to_string(NULL, session->addr, session->addrlen)); 908 tcp_address_to_string(NULL, session->addr, session->addrlen));
869 909
870 GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->sessionmap, &session->target.hashPubKey, session) || 910 if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->sessionmap, &session->target.hashPubKey, session))
871 GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->nat_wait_conns, &session->target.hashPubKey, session)); 911 {
912 GNUNET_STATISTICS_update (session->plugin->env->stats,
913 gettext_noop ("# TCP sessions active"), -1,
914 GNUNET_NO);
915 dec_sessions (plugin, session, __LINE__);
916 }
917 else GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->nat_wait_conns, &session->target.hashPubKey, session));
872 918
873 /* clean up state */ 919 /* clean up state */
874 if (session->transmit_handle != NULL) 920 if (session->transmit_handle != NULL)
@@ -919,9 +965,8 @@ disconnect_session (struct Session *session)
919 GNUNET_SERVER_client_drop (session->client); 965 GNUNET_SERVER_client_drop (session->client);
920 session->client = NULL; 966 session->client = NULL;
921 } 967 }
922 GNUNET_STATISTICS_update (session->plugin->env->stats, 968
923 gettext_noop ("# TCP sessions active"), -1, 969
924 GNUNET_NO);
925 GNUNET_free_non_null (session->addr); 970 GNUNET_free_non_null (session->addr);
926 GNUNET_assert (NULL == session->transmit_handle); 971 GNUNET_assert (NULL == session->transmit_handle);
927 GNUNET_free (session); 972 GNUNET_free (session);
@@ -1285,7 +1330,7 @@ tcp_plugin_get_session (void *cls,
1285 session->ats_address_network_type = ats.value; 1330 session->ats_address_network_type = ats.value;
1286 1331
1287 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1332 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1288 1333 inc_sessions (plugin, session, __LINE__);
1289 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", 1334 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp",
1290 "Creating new session for `%s' address `%s' session %p\n", 1335 "Creating new session for `%s' address `%s' session %p\n",
1291 GNUNET_i2s (&address->peer), 1336 GNUNET_i2s (&address->peer),
@@ -1674,7 +1719,7 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client,
1674 GNUNET_free (vaddr); 1719 GNUNET_free (vaddr);
1675 1720
1676 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &session->target.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1721 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &session->target.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1677 1722 inc_sessions (plugin, session, __LINE__);
1678 GNUNET_STATISTICS_update (plugin->env->stats, 1723 GNUNET_STATISTICS_update (plugin->env->stats,
1679 gettext_noop ("# TCP sessions active"), 1, 1724 gettext_noop ("# TCP sessions active"), 1,
1680 GNUNET_NO); 1725 GNUNET_NO);
@@ -1774,6 +1819,7 @@ handle_tcp_welcome (void *cls, struct GNUNET_SERVER_Client *client,
1774#endif 1819#endif
1775 } 1820 }
1776 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); 1821 GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
1822 inc_sessions (plugin, session, __LINE__);
1777 } 1823 }
1778 1824
1779 if (session->expecting_welcome != GNUNET_YES) 1825 if (session->expecting_welcome != GNUNET_YES)
@@ -2192,6 +2238,9 @@ libgnunet_plugin_transport_tcp_init (void *cls)
2192 plugin->server = 2238 plugin->server =
2193 GNUNET_SERVER_create_with_sockets (&plugin_tcp_access_check, plugin, 2239 GNUNET_SERVER_create_with_sockets (&plugin_tcp_access_check, plugin,
2194 NULL, idle_timeout, GNUNET_YES); 2240 NULL, idle_timeout, GNUNET_YES);
2241 GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "tcp",
2242 _("%s in section %s : %u\n"),
2243 "TIMEOUT", idle_timeout);
2195 } 2244 }
2196 plugin->handlers = GNUNET_malloc (sizeof (my_handlers)); 2245 plugin->handlers = GNUNET_malloc (sizeof (my_handlers));
2197 memcpy (plugin->handlers, my_handlers, sizeof (my_handlers)); 2246 memcpy (plugin->handlers, my_handlers, sizeof (my_handlers));