misc log fixes, plus prevent multiple TCP connections from wrecking havoc by creating...
authorChristian Grothoff <christian@grothoff.org>
Sun, 19 Feb 2017 22:26:57 +0000 (23:26 +0100)
committerChristian Grothoff <christian@grothoff.org>
Sun, 19 Feb 2017 22:26:57 +0000 (23:26 +0100)
src/scalarproduct/test_scalarproduct.conf
src/transport/gnunet-service-transport.c
src/transport/plugin_transport_tcp.c

index 3ab47cfeb46ce38b48b4dd68560fe972deba32d3..73dbadbceb858c3efa3aec66bba5fa90e99d3f7d 100644 (file)
@@ -21,6 +21,3 @@ WAN_QUOTA_OUT = unlimited
 
 [peerinfo]
 USE_INCLUDED_HELLOS = NO
-
-[nat]
-RETURN_LOCAL_ADDRESSES = YES
index e7b221344d160503699d5b5becab33f843d45d71..ec4d821649f777065b6fddfdffd94e0271a9c6d3 100644 (file)
@@ -150,11 +150,11 @@ struct TransportClient
 
   /**
    * What type of client is this?
-   */ 
+   */
   enum ClientType type;
 
   union {
-  
+
     /**
      * Peer identity to monitor the addresses of.
      * Zero to monitor all neighbours.  Valid if
@@ -172,21 +172,21 @@ struct TransportClient
        * if we're performing one that has been cancelled).
        */
       struct GST_BlacklistCheck *bc;
-      
+
       /**
        * Set to #GNUNET_YES if we're currently waiting for a reply.
        */
       int waiting_for_reply;
-      
+
       /**
        * #GNUNET_YES if we have to call receive_done for this client
        */
       int call_receive_done;
-            
+
     } blacklist;
-    
+
   } details;
-  
+
 };
 
 
@@ -272,7 +272,7 @@ struct AddressToStringContext
  */
 struct SendTransmitContinuationContext
 {
-  
+
   /**
    * Client that made the request.
    */
@@ -563,7 +563,7 @@ client_disconnect_cb (void *cls,
                                             bc);
     }
     break;
-  }               
+  }
   GNUNET_free (tc);
 }
 
@@ -793,7 +793,7 @@ handle_client_send (void *cls,
                    const struct OutboundMessage *obm)
 {
   static unsigned long long uuid_gen;
-  struct TransportClient *tc = cls;  
+  struct TransportClient *tc = cls;
   const struct GNUNET_MessageHeader *obmm;
   struct SendTransmitContinuationContext *stcc;
 
@@ -937,7 +937,7 @@ check_client_address_to_string (void *cls,
     return GNUNET_SYSERR;
   }
   return GNUNET_OK;
-}    
+}
 
 
 /**
@@ -950,7 +950,7 @@ static void
 handle_client_address_to_string (void *cls,
                                 const struct AddressLookupMessage *alum)
 {
-  struct TransportClient *tc = cls;  
+  struct TransportClient *tc = cls;
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
   const char *plugin_name;
   const char *address;
@@ -1308,7 +1308,7 @@ handle_client_monitor_plugins (void *cls,
                               const struct GNUNET_MessageHeader *message)
 {
   struct TransportClient *tc = cls;
-  
+
   GNUNET_SERVICE_client_mark_monitor (tc->client);
   GNUNET_SERVICE_client_disable_continue_warning (tc->client);
   GNUNET_notification_context_add (plugin_nc,
@@ -1690,9 +1690,10 @@ GST_receive_callback (void *cls,
     goto end;
   type = ntohs (message->type);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-              "Received message with type %u from peer `%s'\n",
+              "Received message with type %u from peer `%s' at %s\n",
               type,
-              GNUNET_i2s (&address->peer));
+              GNUNET_i2s (&address->peer),
+              GST_plugins_a2s (address));
 
   GNUNET_STATISTICS_update (GST_stats,
                             gettext_noop ("# bytes total received"),
@@ -2226,7 +2227,7 @@ handle_client_set_metric (void *cls,
                          const struct TrafficMetricMessage *tm)
 {
   struct TransportClient *tc = cls;
-  
+
   GST_manipulation_set_metric (tm);
   GNUNET_SERVICE_client_continue (tc->client);
 }
@@ -2375,7 +2376,7 @@ handle_client_blacklist_reply (void *cls,
   bc = tc->details.blacklist.bc;
   tc->details.blacklist.bc = NULL;
   tc->details.blacklist.waiting_for_reply = GNUNET_NO;
-  tc->details.blacklist.call_receive_done = GNUNET_YES; 
+  tc->details.blacklist.call_receive_done = GNUNET_YES;
   if (NULL != bc)
   {
     /* only run this if the blacklist check has not been
@@ -2808,7 +2809,7 @@ run (void *cls,
 #if HAVE_GETRLIMIT
   {
     struct rlimit r_file;
-  
+
     if (0 == getrlimit (RLIMIT_NOFILE,
                        &r_file))
     {
@@ -2893,7 +2894,7 @@ GNUNET_SERVICE_MAIN
                        GNUNET_MESSAGE_TYPE_TRANSPORT_SEND,
                        struct OutboundMessage,
                        NULL),
- GNUNET_MQ_hd_var_size (client_address_to_string,                      
+ GNUNET_MQ_hd_var_size (client_address_to_string,
                        GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_TO_STRING,
                        struct AddressLookupMessage,
                        NULL),
@@ -2913,7 +2914,7 @@ GNUNET_SERVICE_MAIN
                          GNUNET_MESSAGE_TYPE_TRANSPORT_TRAFFIC_METRIC,
                          struct TrafficMetricMessage,
                          NULL),
- GNUNET_MQ_hd_fixed_size (client_monitor_plugins, 
+ GNUNET_MQ_hd_fixed_size (client_monitor_plugins,
                          GNUNET_MESSAGE_TYPE_TRANSPORT_MONITOR_PLUGIN_START,
                          struct GNUNET_MessageHeader,
                          NULL),
index eca62a8cad704907ba486fc25d2d751e44604a03..4ed5b38f7747c2f44ab42271288e3e61f306449b 100644 (file)
@@ -1418,7 +1418,7 @@ create_session (struct Plugin *plugin,
     GNUNET_assert (NULL == client);
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Creating new session for peer `%4s' at address %s\n",
+       "Creating new session for peer `%s' at address %s\n",
        GNUNET_i2s (&address->peer),
        tcp_plugin_address_to_string (plugin,
                                      address->address,
@@ -1522,7 +1522,7 @@ do_transmit (void *cls,
   if (NULL == buf)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Timeout trying to transmit to peer `%4s', discarding message queue.\n",
+         "Timeout trying to transmit to peer `%s', discarding message queue.\n",
          GNUNET_i2s (&session->target));
     /* timeout; cancel all messages that have already expired */
     hd = NULL;
@@ -1540,7 +1540,7 @@ do_transmit (void *cls,
       GNUNET_assert (pos->message_size <= session->bytes_in_queue);
       session->bytes_in_queue -= pos->message_size;
       LOG (GNUNET_ERROR_TYPE_DEBUG,
-           "Failed to transmit %u byte message to `%4s'.\n",
+           "Failed to transmit %u byte message to `%s'.\n",
            pos->message_size,
            GNUNET_i2s (&session->target));
       ret += pos->message_size;
@@ -1729,10 +1729,10 @@ tcp_plugin_send (void *cls,
   pm->transmit_cont = cont;
   pm->transmit_cont_cls = cont_cls;
 
-  LOG(GNUNET_ERROR_TYPE_DEBUG,
-      "Asked to transmit %u bytes to `%s', added message to list.\n",
-      msgbuf_size,
-      GNUNET_i2s (&session->target));
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "Asked to transmit %u bytes to `%s', added message to list.\n",
+       msgbuf_size,
+       GNUNET_i2s (&session->target));
 
   if (GNUNET_YES ==
       GNUNET_CONTAINER_multipeermap_contains_value (plugin->sessionmap,
@@ -1997,6 +1997,13 @@ tcp_plugin_get_session (void *cls,
                                          address->address_length));
       return session;
     }
+    /* This is a bit of a hack, limiting TCP to never allow more than
+       one TCP connection to any given peer at the same time.
+       Without this, peers sometimes disagree about which of the TCP
+       connections they should use, causing one side to believe that
+       they transmit successfully, while the other receives nothing. */
+    return NULL; /* Refuse to have more than one TCP connection per
+                    peer pair at the same time. */
   }
 
   if (addrlen == sizeof(struct IPv6TcpAddress))
@@ -2078,7 +2085,7 @@ tcp_plugin_get_session (void *cls,
                                                 &address->peer)))
   {
     struct sockaddr_in local_sa;
-    
+
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Found valid IPv4 NAT address (creating session)!\n");
     session = create_session (plugin,
@@ -2168,13 +2175,13 @@ tcp_plugin_get_session (void *cls,
   if (NULL == sa)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG,
-         "Failed to create connection to `%4s' at `%s'\n",
+         "Failed to create connection to `%s' at `%s'\n",
          GNUNET_i2s (&address->peer),
          GNUNET_a2s (sb, sbs));
     return NULL;
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Asked to transmit to `%4s', creating fresh session using address `%s'.\n",
+       "Asked to transmit to `%s', creating fresh session using address `%s'.\n",
        GNUNET_i2s (&address->peer),
        GNUNET_a2s (sb, sbs));
 
@@ -2246,7 +2253,7 @@ tcp_plugin_disconnect (void *cls,
   struct Plugin *plugin = cls;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Disconnecting peer `%4s'\n",
+       "Disconnecting peer `%s'\n",
        GNUNET_i2s (target));
   GNUNET_CONTAINER_multipeermap_get_multiple (plugin->sessionmap,
                                               target,
@@ -2446,7 +2453,7 @@ tcp_plugin_check_address (void *cls,
   if (addrlen == sizeof(struct IPv4TcpAddress))
   {
     struct sockaddr_in s4;
-    
+
     v4 = (const struct IPv4TcpAddress *) addr;
     if (0 != memcmp (&v4->options,
                      &plugin->myoptions,
@@ -2462,7 +2469,7 @@ tcp_plugin_check_address (void *cls,
 #endif
     s4.sin_port = v4->t4_port;
     s4.sin_addr.s_addr = v4->ipv4_addr;
-    
+
     if (GNUNET_OK !=
        GNUNET_NAT_test_address (plugin->nat,
                                 &s4,
@@ -2472,7 +2479,7 @@ tcp_plugin_check_address (void *cls,
   else
   {
     struct sockaddr_in6 s6;
-    
+
     v6 = (const struct IPv6TcpAddress *) addr;
     if (IN6_IS_ADDR_LINKLOCAL (&v6->ipv6_addr))
     {
@@ -2686,27 +2693,37 @@ handle_tcp_welcome (void *cls,
                                           &alen))
     {
       LOG (GNUNET_ERROR_TYPE_INFO,
-           "Received WELCOME message from my own identity `%4s' on address `%s'\n",
+           "Received WELCOME message from my own identity `%s' on address `%s'\n",
            GNUNET_i2s (&wm->clientIdentity),
            GNUNET_a2s (vaddr, alen));
-      GNUNET_free(vaddr);
+      GNUNET_free (vaddr);
     }
     return;
   }
 
-  LOG(GNUNET_ERROR_TYPE_DEBUG,
-      "Received WELCOME message from `%4s' %p\n",
-      GNUNET_i2s (&wm->clientIdentity),
-      client);
+  if (GNUNET_OK ==
+      GNUNET_SERVER_client_get_address (client,
+                                        &vaddr,
+                                        &alen))
+  {
+    LOG(GNUNET_ERROR_TYPE_DEBUG,
+        "Received WELCOME message from `%s' on address `%s'\n",
+        GNUNET_i2s (&wm->clientIdentity),
+        GNUNET_a2s (vaddr, alen));
+    GNUNET_free (vaddr);
+  }
   GNUNET_STATISTICS_update (plugin->env->stats,
                             gettext_noop ("# TCP WELCOME messages received"),
                             1,
                             GNUNET_NO);
-  session = lookup_session_by_client (plugin, client);
+  session = lookup_session_by_client (plugin,
+                                      client);
   if (NULL != session)
   {
     if (GNUNET_OK ==
-        GNUNET_SERVER_client_get_address (client, &vaddr, &alen))
+        GNUNET_SERVER_client_get_address (client,
+                                          &vaddr,
+                                          &alen))
     {
       LOG (GNUNET_ERROR_TYPE_DEBUG,
            "Found existing session %p for peer `%s'\n",
@@ -2795,12 +2812,11 @@ handle_tcp_welcome (void *cls,
     }
   }
 
-  if (session->expecting_welcome != GNUNET_YES)
+  if (GNUNET_YES != session->expecting_welcome)
   {
-    GNUNET_break_op(0);
+    GNUNET_break_op (0);
     GNUNET_SERVER_receive_done (client,
                                 GNUNET_SYSERR);
-    GNUNET_break(0);
     return;
   }
   session->last_activity = GNUNET_TIME_absolute_get ();
@@ -2869,7 +2885,9 @@ handle_tcp_data (void *cls,
     void *vaddr;
     size_t alen;
 
-    GNUNET_SERVER_client_get_address (client, &vaddr, &alen);
+    GNUNET_SERVER_client_get_address (client,
+                                      &vaddr,
+                                      &alen);
     LOG (GNUNET_ERROR_TYPE_ERROR,
          "Received unexpected %u bytes of type %u from `%s'\n",
          (unsigned int) ntohs (message->size),
@@ -2883,11 +2901,21 @@ handle_tcp_data (void *cls,
   }
 
   session->last_activity = GNUNET_TIME_absolute_get ();
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Passing %u bytes of type %u from `%4s' to transport service.\n",
-       (unsigned int) ntohs (message->size),
-       (unsigned int) ntohs (message->type),
-       GNUNET_i2s (&session->target));
+  {
+    void *vaddr;
+    size_t alen;
+
+    GNUNET_SERVER_client_get_address (client,
+                                      &vaddr,
+                                      &alen);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Passing %u bytes of type %u from `%s' at %s to transport service.\n",
+         (unsigned int) ntohs (message->size),
+         (unsigned int) ntohs (message->type),
+         GNUNET_i2s (&session->target),
+         GNUNET_a2s (vaddr, alen));
+    GNUNET_free_non_null (vaddr);
+  }
 
   GNUNET_STATISTICS_update (plugin->env->stats,
                             gettext_noop ("# bytes received via TCP"),
@@ -2984,7 +3012,7 @@ disconnect_notify (void *cls,
   if (NULL == session)
     return; /* unknown, nothing to do */
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-       "Destroying session of `%4s' with %s due to network-level disconnect.\n",
+       "Destroying session of `%s' with %s due to network-level disconnect.\n",
        GNUNET_i2s (&session->target),
        tcp_plugin_address_to_string (session->plugin,
                                      session->address->address,