aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/transport/plugin_transport_tcp.c60
1 files changed, 38 insertions, 22 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c
index 32bc65047..167d1c490 100644
--- a/src/transport/plugin_transport_tcp.c
+++ b/src/transport/plugin_transport_tcp.c
@@ -1573,25 +1573,18 @@ tcp_plugin_get_session (void *cls,
1573 { 1573 {
1574 session = si_ctx.result; 1574 session = si_ctx.result;
1575 LOG (GNUNET_ERROR_TYPE_DEBUG, 1575 LOG (GNUNET_ERROR_TYPE_DEBUG,
1576 "Found existing session for `%s' address `%s' session %p\n", 1576 "Found existing session for `%s' address `%s'\n",
1577 GNUNET_i2s (&address->peer), 1577 GNUNET_i2s (&address->peer),
1578 tcp_plugin_address_to_string (plugin, 1578 tcp_plugin_address_to_string (plugin,
1579 address->address, 1579 address->address,
1580 address->address_length), 1580 address->address_length));
1581 session);
1582 return session; 1581 return session;
1583 } 1582 }
1584 LOG (GNUNET_ERROR_TYPE_DEBUG,
1585 "Existing sessions did not match address `%s' or peer `%s'\n",
1586 tcp_plugin_address_to_string (plugin,
1587 address->address,
1588 address->address_length),
1589 GNUNET_i2s (&address->peer));
1590 } 1583 }
1591 1584
1592 if (addrlen == sizeof(struct IPv6TcpAddress)) 1585 if (addrlen == sizeof(struct IPv6TcpAddress))
1593 { 1586 {
1594 GNUNET_assert(NULL != address->address); /* make static analysis happy */ 1587 GNUNET_assert (NULL != address->address); /* make static analysis happy */
1595 t6 = address->address; 1588 t6 = address->address;
1596 options = t6->options; 1589 options = t6->options;
1597 af = AF_INET6; 1590 af = AF_INET6;
@@ -1627,12 +1620,16 @@ tcp_plugin_get_session (void *cls,
1627 } 1620 }
1628 else 1621 else
1629 { 1622 {
1630 GNUNET_STATISTICS_update (plugin->env->stats, gettext_noop 1623 GNUNET_STATISTICS_update (plugin->env->stats,
1631 ("# requests to create session with invalid address"), 1, GNUNET_NO); 1624 gettext_noop ("# requests to create session with invalid address"),
1625 1,
1626 GNUNET_NO);
1632 return NULL; 1627 return NULL;
1633 } 1628 }
1634 1629
1635 net_type = plugin->env->get_address_type (plugin->env->cls, sb, sbs); 1630 net_type = plugin->env->get_address_type (plugin->env->cls,
1631 sb,
1632 sbs);
1636 GNUNET_break (net_type != GNUNET_ATS_NET_UNSPECIFIED); 1633 GNUNET_break (net_type != GNUNET_ATS_NET_UNSPECIFIED);
1637 1634
1638 if ((is_natd == GNUNET_YES) && (addrlen == sizeof(struct IPv6TcpAddress))) 1635 if ((is_natd == GNUNET_YES) && (addrlen == sizeof(struct IPv6TcpAddress)))
@@ -1656,10 +1653,11 @@ tcp_plugin_get_session (void *cls,
1656 return NULL; 1653 return NULL;
1657 } 1654 }
1658 1655
1659 if ((is_natd == GNUNET_YES) && (NULL != plugin->nat) && 1656 if ( (is_natd == GNUNET_YES) &&
1660 (GNUNET_NO == 1657 (NULL != plugin->nat) &&
1661 GNUNET_CONTAINER_multipeermap_contains (plugin->nat_wait_conns, 1658 (GNUNET_NO ==
1662 &address->peer))) 1659 GNUNET_CONTAINER_multipeermap_contains (plugin->nat_wait_conns,
1660 &address->peer)))
1663 { 1661 {
1664 LOG (GNUNET_ERROR_TYPE_DEBUG, 1662 LOG (GNUNET_ERROR_TYPE_DEBUG,
1665 "Found valid IPv4 NAT address (creating session)!\n"); 1663 "Found valid IPv4 NAT address (creating session)!\n");
@@ -1753,8 +1751,13 @@ tcp_plugin_get_session (void *cls,
1753 } 1751 }
1754 plugin->cur_connections++; 1752 plugin->cur_connections++;
1755 if (plugin->cur_connections == plugin->max_connections) 1753 if (plugin->cur_connections == plugin->max_connections)
1754 {
1755 GNUNET_STATISTICS_update (session->plugin->env->stats,
1756 gettext_noop ("# TCP service suspended"),
1757 1,
1758 GNUNET_NO);
1756 GNUNET_SERVER_suspend (plugin->server); /* Maximum number of connections rechead */ 1759 GNUNET_SERVER_suspend (plugin->server); /* Maximum number of connections rechead */
1757 1760 }
1758 LOG (GNUNET_ERROR_TYPE_DEBUG, 1761 LOG (GNUNET_ERROR_TYPE_DEBUG,
1759 "Asked to transmit to `%4s', creating fresh session using address `%s'.\n", 1762 "Asked to transmit to `%4s', creating fresh session using address `%s'.\n",
1760 GNUNET_i2s (&address->peer), 1763 GNUNET_i2s (&address->peer),
@@ -2324,8 +2327,15 @@ handle_tcp_welcome (void *cls,
2324 if (NULL != plugin->service) /* Otherwise value is incremented in tcp_access_check */ 2327 if (NULL != plugin->service) /* Otherwise value is incremented in tcp_access_check */
2325 plugin->cur_connections++; 2328 plugin->cur_connections++;
2326 if (plugin->cur_connections == plugin->max_connections) 2329 if (plugin->cur_connections == plugin->max_connections)
2330 {
2331 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
2332 _("TCP connection limit reached, suspending server\n"));
2333 GNUNET_STATISTICS_update (session->plugin->env->stats,
2334 gettext_noop ("# TCP service suspended"),
2335 1,
2336 GNUNET_NO);
2327 GNUNET_SERVER_suspend (plugin->server); /* Maximum number of connections rechead */ 2337 GNUNET_SERVER_suspend (plugin->server); /* Maximum number of connections rechead */
2328 2338 }
2329 if (GNUNET_OK == 2339 if (GNUNET_OK ==
2330 GNUNET_SERVER_client_get_address (client, &vaddr, &alen)) 2340 GNUNET_SERVER_client_get_address (client, &vaddr, &alen))
2331 { 2341 {
@@ -2371,7 +2381,7 @@ handle_tcp_welcome (void *cls,
2371 vaddr, 2381 vaddr,
2372 alen); 2382 alen);
2373 LOG (GNUNET_ERROR_TYPE_DEBUG, 2383 LOG (GNUNET_ERROR_TYPE_DEBUG,
2374 "Creating new%s session %p for peer `%s' client %p \n", 2384 "Creating new%s session %p for peer `%s' client %p\n",
2375 GNUNET_HELLO_address_check_option (session->address, 2385 GNUNET_HELLO_address_check_option (session->address,
2376 GNUNET_HELLO_ADDRESS_INFO_INBOUND) 2386 GNUNET_HELLO_ADDRESS_INFO_INBOUND)
2377 ? " inbound" : "", 2387 ? " inbound" : "",
@@ -2553,15 +2563,21 @@ disconnect_notify (void *cls,
2553 session->address->address_length)); 2563 session->address->address_length));
2554 2564
2555 if (plugin->cur_connections == plugin->max_connections) 2565 if (plugin->cur_connections == plugin->max_connections)
2566 {
2567 GNUNET_STATISTICS_update (session->plugin->env->stats,
2568 gettext_noop ("# TCP service resumed"),
2569 1,
2570 GNUNET_NO);
2556 GNUNET_SERVER_resume (plugin->server); /* Resume server */ 2571 GNUNET_SERVER_resume (plugin->server); /* Resume server */
2572 }
2557 2573
2558 if (plugin->cur_connections < 1) 2574 if (plugin->cur_connections < 1)
2559 GNUNET_break(0); 2575 GNUNET_break(0);
2560 else 2576 else
2561 plugin->cur_connections--; 2577 plugin->cur_connections--;
2562 2578
2563 GNUNET_STATISTICS_update (session->plugin->env->stats, gettext_noop 2579 GNUNET_STATISTICS_update (session->plugin->env->stats,
2564 ("# network-level TCP disconnect events"), 2580 gettext_noop ("# network-level TCP disconnect events"),
2565 1, 2581 1,
2566 GNUNET_NO); 2582 GNUNET_NO);
2567 tcp_plugin_disconnect_session (plugin, session); 2583 tcp_plugin_disconnect_session (plugin, session);