codesonar fixes
[oweals/gnunet.git] / src / testing / testing.c
index 0c650d313902668c2953c8decf0d7f63849d6a54..58d09806b8acf7cf1fdbc792ca9b2a9c9a0cefe4 100644 (file)
@@ -65,6 +65,7 @@ static void
 process_hello (void *cls, const struct GNUNET_MessageHeader *message)
 {
   struct GNUNET_TESTING_Daemon *daemon = cls;
+  int msize;
   if (daemon == NULL)
     return;
 
@@ -75,6 +76,11 @@ process_hello (void *cls, const struct GNUNET_MessageHeader *message)
     }
 
   GNUNET_assert (message != NULL);
+  msize = ntohs(message->size);
+  if (msize < 1)
+    {
+      return;
+    }
   if (daemon->th != NULL)
     {
       GNUNET_TRANSPORT_get_hello_cancel(daemon->th, &process_hello, daemon);
@@ -85,14 +91,18 @@ process_hello (void *cls, const struct GNUNET_MessageHeader *message)
               "HELLO", GNUNET_i2s (&daemon->id));
 #endif
 
-  GNUNET_free_non_null(daemon->hello);
-  daemon->hello = GNUNET_malloc(ntohs(message->size));
-  memcpy(daemon->hello, message, ntohs(message->size));
 
-  if (daemon->th != NULL)
+
     {
-      GNUNET_TRANSPORT_disconnect(daemon->th);
-      daemon->th = NULL;
+      GNUNET_free_non_null(daemon->hello);
+      daemon->hello = GNUNET_malloc(msize);
+      memcpy(daemon->hello, message, msize);
+
+      if (daemon->th != NULL)
+        {
+          GNUNET_TRANSPORT_disconnect(daemon->th);
+          daemon->th = NULL;
+        }
     }
 
 }
@@ -1158,11 +1168,15 @@ struct ConnectContext
    */
   struct GNUNET_TIME_Relative timeout_hello;
 
-
   /**
    * Was the connection attempt successful?
    */
   int connected;
+
+  /**
+   * The distance between the two connected peers
+   */
+  uint32_t distance;
 };
 
 
@@ -1210,7 +1224,7 @@ notify_connect_result (void *cls,
     {
       if (ctx->cb != NULL)
         {
-          ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, ctx->d1->cfg,
+          ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, ctx->distance, ctx->d1->cfg,
                    ctx->d2->cfg, ctx->d1, ctx->d2, NULL);
         }
     }
@@ -1234,7 +1248,7 @@ notify_connect_result (void *cls,
     {
       if (ctx->cb != NULL)
         {
-          ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, ctx->d1->cfg,
+          ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, 0, ctx->d1->cfg,
                    ctx->d2->cfg, ctx->d1, ctx->d2,
                    _("Peers failed to connect"));
         }
@@ -1266,6 +1280,7 @@ connect_notify (void *cls, const struct GNUNET_PeerIdentity * peer, struct GNUNE
   if (memcmp(&ctx->d2->id, peer, sizeof(struct GNUNET_PeerIdentity)) == 0)
     {
       ctx->connected = GNUNET_YES;
+      ctx->distance = distance;
       GNUNET_SCHEDULER_cancel(ctx->d1->sched, ctx->timeout_task);
       ctx->timeout_task = GNUNET_SCHEDULER_add_now (ctx->d1->sched,
                                                    &notify_connect_result,
@@ -1319,7 +1334,7 @@ GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
   if ((d1->running == GNUNET_NO) || (d2->running == GNUNET_NO))
     {
       if (NULL != cb)
-        cb (cb_cls, &d1->id, &d2->id, d1->cfg, d2->cfg, d1, d2,
+        cb (cb_cls, &d1->id, &d2->id, 0, d1->cfg, d2->cfg, d1, d2,
             _("Peers are not fully running yet, can not connect!\n"));
       return;
     }
@@ -1351,7 +1366,7 @@ GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
     {
       GNUNET_free (ctx);
       if (NULL != cb)
-        cb (cb_cls, &d1->id, &d2->id, d1->cfg, d2->cfg, d1, d2,
+        cb (cb_cls, &d1->id, &d2->id, 0, d1->cfg, d2->cfg, d1, d2,
             _("Failed to connect to core service of first peer!\n"));
       return;
     }
@@ -1372,7 +1387,7 @@ GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
       GNUNET_CORE_disconnect(ctx->d1core);
       GNUNET_free (ctx);
       if (NULL != cb)
-        cb (cb_cls, &d1->id, &d2->id, d1->cfg, d2->cfg, d1, d2,
+        cb (cb_cls, &d1->id, &d2->id, 0, d1->cfg, d2->cfg, d1, d2,
             _("Failed to connect to transport service!\n"));
       return;
     }
@@ -1412,7 +1427,7 @@ reattempt_daemons_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext
   if (ctx->d1core == NULL)
     {
       if (NULL != ctx->cb)
-        ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, ctx->d1->cfg, ctx->d2->cfg, ctx->d1, ctx->d2,
+        ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, 0, ctx->d1->cfg, ctx->d2->cfg, ctx->d1, ctx->d2,
                  _("Failed to connect to core service of first peer!\n"));
       GNUNET_free (ctx);
       return;
@@ -1425,7 +1440,7 @@ reattempt_daemons_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext
       GNUNET_CORE_disconnect(ctx->d1core);
       GNUNET_free (ctx);
       if (NULL != ctx->cb)
-        ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, ctx->d1->cfg, ctx->d2->cfg, ctx->d1, ctx->d2,
+        ctx->cb (ctx->cb_cls, &ctx->d1->id, &ctx->d2->id, 0, ctx->d1->cfg, ctx->d2->cfg, ctx->d1, ctx->d2,
             _("Failed to connect to transport service!\n"));
       return;
     }