- don-t re-scheduler, destroy immediately (comes from scheduler)
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh_dht.c
index 428024bd83942939cc5ec8d565b8c8fc4157887a..01fb4a30f2f59bc82d4ac62faa78f9a5006b3c9a 100644 (file)
@@ -222,16 +222,21 @@ dht_get_id_handler (void *cls, struct GNUNET_TIME_Absolute exp,
   struct GMD_search_handle *h = cls;
   struct GNUNET_HELLO_Message *hello;
   struct MeshPeerPath *p;
+  struct MeshPeer *peer;
+  char *s;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Got results!\n");
   p = path_build_from_dht (get_path, get_path_length,
                            put_path, put_path_length);
+  s = path_2s (p);
+  LOG (GNUNET_ERROR_TYPE_INFO, "Got path from DHT: %s\n", s);
+  GNUNET_free_non_null (s);
+  peer = GMP_get_short (p->peers[p->length - 1]);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Got HELLO for %s\n", GMP_2s (peer));
   h->callback (h->cls, p);
   path_destroy (p);
-  LOG (GNUNET_ERROR_TYPE_ERROR, "Got type %u!\n", type);
-  LOG (GNUNET_ERROR_TYPE_ERROR, "Got size %u!\n", size);
   hello = (struct GNUNET_HELLO_Message *) data;
-  LOG (GNUNET_ERROR_TYPE_ERROR, "HELLO size %u!\n", GNUNET_HELLO_size (hello));
+  GMP_set_hello (peer, hello);
+  GMP_try_connect (peer);
   return;
 }
 
@@ -248,13 +253,15 @@ announce_id (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct GNUNET_HashCode phash;
   const struct GNUNET_HELLO_Message *hello;
   size_t size;
+  struct GNUNET_TIME_Absolute expiration;
+  struct GNUNET_TIME_Relative retry_time;
 
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
   {
     announce_id_task = GNUNET_SCHEDULER_NO_TASK;
     return;
   }
-  LOG (GNUNET_ERROR_TYPE_ERROR, "Announce ID\n");
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Announce ID\n");
 
   /* TODO
    * - Set data expiration in function of X
@@ -266,11 +273,13 @@ announce_id (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     /* Peerinfo gave us no hello yet, try again in a second. */
     announce_id_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
                                                      &announce_id, cls);
-    LOG (GNUNET_ERROR_TYPE_ERROR, "  no hello, waiting!\n");
+    LOG (GNUNET_ERROR_TYPE_DEBUG, "  no hello, waiting!\n");
     return;
   }
+  expiration = GNUNET_HELLO_get_last_expiration (hello);
+  retry_time = GNUNET_TIME_absolute_get_remaining (expiration);
 
-  LOG (GNUNET_ERROR_TYPE_ERROR, "Hello %p size: %u\n", hello, size);
+  LOG (GNUNET_ERROR_TYPE_DEBUG, "Hello %p size: %u\n", hello, size);
   memset (&phash, 0, sizeof (phash));
   memcpy (&phash, &my_full_id, sizeof (my_full_id));
   GNUNET_DHT_put (dht_handle,   /* DHT handle */
@@ -281,8 +290,8 @@ announce_id (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
                   GNUNET_BLOCK_TYPE_DHT_HELLO,       /* Block type */
                   size,  /* Size of the data */
                   (const char *) hello, /* Data itself */
-                  GNUNET_TIME_UNIT_FOREVER_ABS,  /* Data expiration */
-                  GNUNET_TIME_UNIT_FOREVER_REL, /* Retry time */
+                  expiration,  /* Data expiration */
+                  retry_time, /* Retry time */
                   NULL,         /* Continuation */
                   NULL);        /* Continuation closure */
   announce_id_task =
@@ -384,7 +393,7 @@ GMD_search (const struct GNUNET_PeerIdentity *peer_id,
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "  Starting DHT GET for peer %s\n", GNUNET_i2s (peer_id));
   memset (&phash, 0, sizeof (phash));
-  memcpy (&phash, &my_full_id, sizeof (my_full_id));
+  memcpy (&phash, peer_id, sizeof (*peer_id));
   h = GNUNET_new (struct GMD_search_handle);
   h->peer_id = GNUNET_PEER_intern (peer_id);
   h->callback = callback;