diff options
Diffstat (limited to 'src/transport/plugin_transport_tcp.c')
-rw-r--r-- | src/transport/plugin_transport_tcp.c | 60 |
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); |