Extending the testcases to use bluetooth
[oweals/gnunet.git] / src / transport / gnunet-service-transport.c
index d17b96313c73b449a779f5bce00c46e9da9cc6d2..0039b9a4c61b8991cf4acd0268c75231e381c95c 100644 (file)
@@ -171,6 +171,8 @@ process_payload (const struct GNUNET_PeerIdentity *peer,
     return ret;
   }
 
+  GST_ats_add_address ((struct GNUNET_HELLO_Address *) address, session);
+
   if (do_forward != GNUNET_YES)
     return ret;
   im = (struct InboundMessage *) buf;
@@ -179,7 +181,6 @@ process_payload (const struct GNUNET_PeerIdentity *peer,
   im->peer = *peer;
   memcpy (&im[1], message, ntohs (message->size));
 
-  //GNUNET_ATS_address_add (GST_ats, address, session, NULL, 0);
   GST_clients_broadcast (&im->header, GNUNET_YES);
 
   return ret;
@@ -246,14 +247,14 @@ GST_receive_callback (void *cls, const struct GNUNET_PeerIdentity *peer,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK,
                 "Processing `%s' from `%s'\n", "PING",
                 (sender_address !=
-                 NULL) ? GST_plugins_a2s (&address) : "<inbound>");
+                 NULL) ? GST_plugins_a2s (&address) : TRANSPORT_SESSION_INBOUND_STRING);
     GST_validation_handle_ping (peer, message, &address, session);
     break;
   case GNUNET_MESSAGE_TYPE_TRANSPORT_PONG:
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK,
                 "Processing `%s' from `%s'\n", "PONG",
                 (sender_address !=
-                 NULL) ? GST_plugins_a2s (&address) : "<inbound>");
+                 NULL) ? GST_plugins_a2s (&address) : TRANSPORT_SESSION_INBOUND_STRING);
     GST_validation_handle_pong (peer, message);
     break;
   case GNUNET_MESSAGE_TYPE_TRANSPORT_SESSION_CONNECT:
@@ -401,8 +402,8 @@ plugin_env_address_to_type (void *cls,
  * @param session the session
  */
 void
-GST_ats_add_address (struct GNUNET_HELLO_Address *address,
-                                                void *session)
+GST_ats_add_address (const struct GNUNET_HELLO_Address *address,
+                                                                                struct Session *session)
 {
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
        struct GNUNET_ATS_Information ats;
@@ -421,7 +422,10 @@ GST_ats_add_address (struct GNUNET_HELLO_Address *address,
        return;
   }
 
-       net = papi->get_network (NULL, session);
+  if (GNUNET_YES == GNUNET_ATS_session_known (GST_ats, address, session))
+       return;
+
+       net = papi->get_network (NULL, (void *) session);
   if (GNUNET_ATS_NET_UNSPECIFIED == net)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -459,6 +463,10 @@ GST_ats_update_metrics (const struct GNUNET_PeerIdentity *peer,
                        uint32_t ats_count)
 {
        struct GNUNET_ATS_Information *ats_new;
+
+  if (GNUNET_NO == GNUNET_ATS_session_known (GST_ats, address, session))
+       return;
+
        /* Call to manipulation to manipulate ATS information */
        ats_new = GST_manipulation_manipulate_metrics (peer, address, session, ats, ats_count);
        if (NULL == ats_new)
@@ -466,7 +474,12 @@ GST_ats_update_metrics (const struct GNUNET_PeerIdentity *peer,
                        GNUNET_break (0);
                        return;
        }
-  GNUNET_ATS_address_update (GST_ats, address, session, ats_new, ats_count);
+  if (GNUNET_NO == GNUNET_ATS_address_update (GST_ats, address, session, ats_new, ats_count))
+  {
+       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                       _("Address or session unknown: failed to update properties for peer `%s' plugin `%s' address `%s' session %p\n"),
+                       GNUNET_i2s (peer), address->transport_name, GST_plugins_a2s (address), session);
+  }
   GNUNET_free (ats_new);
 }
 
@@ -499,11 +512,14 @@ plugin_env_update_metrics (void *cls,
                return;
        GNUNET_assert (NULL != GST_ats);
 
+
        haddress.peer = *peer;
        haddress.address = address;
   haddress.address_length = address_len;
   haddress.transport_name = plugin_name;
 
+       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Updating metrics for peer `%s' address %s session %p\n",
+                       GNUNET_i2s (peer), GST_plugins_a2s(&haddress), session);
   GST_ats_update_metrics (peer, &haddress, session, ats, ats_count);
 }
 
@@ -527,7 +543,7 @@ plugin_env_session_start (void *cls,
                GNUNET_break (0);
                return;
        }
-       if (NULL == address)
+       if ((address_len != 0) && (NULL == address))
        {
                GNUNET_break (0);
                return;
@@ -540,9 +556,11 @@ plugin_env_session_start (void *cls,
 
        struct GNUNET_HELLO_Address *addr;
        addr = GNUNET_HELLO_address_allocate (peer, plugin, address, address_len);
-       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Adding peer `%s' address %s session %p\n",
-                       GNUNET_i2s (peer), GST_plugins_a2s(addr), session);
+       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                       "Notification from plugin `%s' about new session %p from peer `%s' address `%s'\n",
+                       plugin, session, GNUNET_i2s (peer), GST_plugins_a2s(addr));
        GST_ats_add_address (addr, session);
+
        if (0 < ats_count)
                GST_ats_update_metrics (peer, addr, session, ats, ats_count);
        GNUNET_free (addr);