- use proper signedness
[oweals/gnunet.git] / src / regex / regex_internal_dht.c
index 26562d35a3e3d23d2ccfb03b8d8f485f5572b3ef..f7d383406d9a5361a2fd0fd7b03333fe568d9945 100644 (file)
@@ -62,7 +62,7 @@ struct REGEX_INTERNAL_Announcement
   /**
    * Our private key.
    */
-  const struct GNUNET_CRYPTO_EccPrivateKey *priv;
+  const struct GNUNET_CRYPTO_EddsaPrivateKey *priv;
 
   /**
    * Optional statistics handle to report usage. Can be NULL.
@@ -92,17 +92,26 @@ regex_iterator (void *cls,
   struct REGEX_INTERNAL_Announcement *h = cls;
   struct RegexBlock *block;
   size_t size;
+  unsigned int i;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG,
+  LOG (GNUNET_ERROR_TYPE_INFO,
        "DHT PUT for state %s with proof `%s' and %u edges\n",
        GNUNET_h2s (key),
        proof,
        num_edges);
+  for (i = 0; i < num_edges; i++)
+  {
+    LOG (GNUNET_ERROR_TYPE_INFO,
+         "  edge %s towards %s (%s)\n",
+         edges[i].label,
+         GNUNET_h2s (&edges[i].destination),
+         proof);
+  }
   if (GNUNET_YES == accepting)
   {
     struct RegexAcceptBlock ab;
 
-    LOG (GNUNET_ERROR_TYPE_DEBUG,
+    LOG (GNUNET_ERROR_TYPE_INFO,
          "State %s is accepting, putting own id\n",
          GNUNET_h2s (key));
     size = sizeof (struct RegexAcceptBlock);
@@ -112,9 +121,10 @@ regex_iterator (void *cls,
     ab.purpose.purpose = ntohl (GNUNET_SIGNATURE_PURPOSE_REGEX_ACCEPT);
     ab.expiration_time = GNUNET_TIME_absolute_hton (GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_DHT_MAX_EXPIRATION));
     ab.key = *key;
-    GNUNET_CRYPTO_ecc_key_get_public_for_signature (h->priv, &ab.public_key);
+    GNUNET_CRYPTO_eddsa_key_get_public (h->priv,
+                                                   &ab.peer.public_key);
     GNUNET_assert (GNUNET_OK ==
-                   GNUNET_CRYPTO_ecc_sign (h->priv,
+                   GNUNET_CRYPTO_eddsa_sign (h->priv,
                                            &ab.purpose,
                                            &ab.signature));
 
@@ -134,15 +144,15 @@ regex_iterator (void *cls,
                     NULL, NULL);
   }
   block = REGEX_BLOCK_create (proof,
-                             num_edges, edges,
-                             accepting,
-                             &size);
+                              num_edges, edges,
+                              accepting,
+                              &size);
   (void)
   GNUNET_DHT_put (h->dht, key,
                   DHT_REPLICATION,
                   DHT_OPT,
-                  GNUNET_BLOCK_TYPE_REGEX, 
-                 size, block,
+                  GNUNET_BLOCK_TYPE_REGEX,
+                  size, block,
                   GNUNET_TIME_relative_to_absolute (DHT_TTL),
                   DHT_TTL,
                   NULL, NULL);
@@ -157,19 +167,19 @@ regex_iterator (void *cls,
 /**
  * Announce a regular expression: put all states of the automaton in the DHT.
  * Does not free resources, must call REGEX_INTERNAL_announce_cancel for that.
- * 
+ *
  * @param dht An existing and valid DHT service handle. CANNOT be NULL.
  * @param priv our private key, must remain valid until the announcement is cancelled
  * @param regex Regular expression to announce.
  * @param compression How many characters per edge can we squeeze?
  * @param stats Optional statistics handle to report usage. Can be NULL.
- * 
+ *
  * @return Handle to reuse o free cached resources.
  *         Must be freed by calling REGEX_INTERNAL_announce_cancel.
  */
 struct REGEX_INTERNAL_Announcement *
 REGEX_INTERNAL_announce (struct GNUNET_DHT_Handle *dht,
-                        const struct GNUNET_CRYPTO_EccPrivateKey *priv,
+                        const struct GNUNET_CRYPTO_EddsaPrivateKey *priv,
                         const char *regex,
                         uint16_t compression,
                         struct GNUNET_STATISTICS_Handle *stats)
@@ -177,7 +187,7 @@ REGEX_INTERNAL_announce (struct GNUNET_DHT_Handle *dht,
   struct REGEX_INTERNAL_Announcement *h;
 
   GNUNET_assert (NULL != dht);
-  h = GNUNET_malloc (sizeof (struct REGEX_INTERNAL_Announcement));
+  h = GNUNET_new (struct REGEX_INTERNAL_Announcement);
   h->regex = regex;
   h->dht = dht;
   h->stats = stats;
@@ -191,14 +201,14 @@ REGEX_INTERNAL_announce (struct GNUNET_DHT_Handle *dht,
 /**
  * Announce again a regular expression previously announced.
  * Does use caching to speed up process.
- * 
+ *
  * @param h Handle returned by a previous REGEX_INTERNAL_announce call.
  */
 void
 REGEX_INTERNAL_reannounce (struct REGEX_INTERNAL_Announcement *h)
 {
   GNUNET_assert (NULL != h->dfa); /* make sure to call announce first */
-  LOG (GNUNET_ERROR_TYPE_INFO, 
+  LOG (GNUNET_ERROR_TYPE_INFO,
        "REGEX_INTERNAL_reannounce: %s\n",
        h->regex);
   REGEX_INTERNAL_iterate_reachable_edges (h->dfa, &regex_iterator, h);
@@ -208,7 +218,7 @@ REGEX_INTERNAL_reannounce (struct REGEX_INTERNAL_Announcement *h)
 /**
  * Clear all cached data used by a regex announce.
  * Does not close DHT connection.
- * 
+ *
  * @param h Handle returned by a previous REGEX_INTERNAL_announce call.
  */
 void
@@ -254,7 +264,7 @@ struct RegexSearchContext
 
 /**
  * Type of values in 'dht_get_results'.
- */ 
+ */
 struct Result
 {
   /**
@@ -296,7 +306,7 @@ struct REGEX_INTERNAL_Search
   struct GNUNET_CONTAINER_MultiHashMap *dht_get_handles;
 
   /**
-   * Results from running DHT GETs, values are of type 
+   * Results from running DHT GETs, values are of type
    * 'struct Result'.
    */
   struct GNUNET_CONTAINER_MultiHashMap *dht_get_results;
@@ -310,7 +320,7 @@ struct REGEX_INTERNAL_Search
    * Number of contexts (branches/steps in search).
    */
   unsigned int n_contexts;
-  
+
   /**
    * @param callback Callback for found peers.
    */
@@ -364,23 +374,19 @@ dht_get_string_accept_handler (void *cls, struct GNUNET_TIME_Absolute exp,
   const struct RegexAcceptBlock *block = data;
   struct RegexSearchContext *ctx = cls;
   struct REGEX_INTERNAL_Search *info = ctx->info;
-  struct GNUNET_PeerIdentity pid;
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Regex result accept for %s (key %s)\n",
        info->description, GNUNET_h2s(key));
 
-  GNUNET_STATISTICS_update (info->stats, 
+  GNUNET_STATISTICS_update (info->stats,
                            "# regex accepting blocks found",
                             1, GNUNET_NO);
-  GNUNET_STATISTICS_update (info->stats, 
+  GNUNET_STATISTICS_update (info->stats,
                            "# regex accepting block bytes found",
                             size, GNUNET_NO);
-  GNUNET_CRYPTO_hash (&block->public_key,
-                     sizeof (struct GNUNET_CRYPTO_EccPublicSignKey),
-                     &pid.hashPubKey);
   info->callback (info->callback_cls,
-                  &pid,
+                  &block->peer,
                   get_path, get_path_length,
                   put_path, put_path_length);
 }
@@ -389,7 +395,7 @@ dht_get_string_accept_handler (void *cls, struct GNUNET_TIME_Absolute exp,
 /**
  * Find a path to a peer that offers a regex servcie compatible
  * with a given string.
- * 
+ *
  * @param key The key of the accepting state.
  * @param ctx Context containing info about the string, tunnel, etc.
  */
@@ -451,7 +457,7 @@ dht_get_string_handler (void *cls, struct GNUNET_TIME_Absolute exp,
   size_t len;
   struct Result *copy;
 
-  LOG (GNUNET_ERROR_TYPE_INFO, 
+  LOG (GNUNET_ERROR_TYPE_INFO,
        "DHT GET result for %s (%s)\n",
        GNUNET_h2s (key), ctx->info->description);
   copy = GNUNET_malloc (sizeof (struct Result) + size);
@@ -497,18 +503,18 @@ regex_result_iterator (void *cls,
   const struct RegexBlock *block = result->data;
   struct RegexSearchContext *ctx = cls;
 
-  if ( (GNUNET_YES == 
+  if ( (GNUNET_YES ==
        GNUNET_BLOCK_is_accepting (block, result->size)) &&
        (ctx->position == strlen (ctx->info->description)) )
   {
-    LOG (GNUNET_ERROR_TYPE_INFO, 
+    LOG (GNUNET_ERROR_TYPE_INFO,
         "Found accepting known block\n");
     regex_find_path (key, ctx);
     return GNUNET_YES; // We found an accept state!
   }
-  LOG (GNUNET_ERROR_TYPE_DEBUG, 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
        "* %u, %u, [%u]\n",
-       ctx->position, 
+       ctx->position,
        strlen (ctx->info->description),
        GNUNET_BLOCK_is_accepting (block, result->size));
   regex_next_edge (block, result->size, ctx);
@@ -548,12 +554,12 @@ regex_edge_iterator (void *cls,
   if (len > current_len)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Token too long, END\n");
-    return GNUNET_YES; 
+    return GNUNET_YES;
   }
   if (0 != strncmp (current, token, len))
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG, "Token doesn't match, END\n");
-    return GNUNET_YES; 
+    return GNUNET_YES;
   }
 
   if (len > ctx->longest_match)
@@ -592,7 +598,7 @@ regex_next_edge (const struct RegexBlock *block,
   int result;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Next edge\n");
-  /* Find the longest match for the current string position, 
+  /* Find the longest match for the current string position,
    * among tokens in the given block */
   ctx->longest_match = 0;
   result = REGEX_BLOCK_iterate (block, size,
@@ -602,13 +608,13 @@ regex_next_edge (const struct RegexBlock *block,
   /* Did anything match? */
   if (0 == ctx->longest_match)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, 
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
         "no match in block\n");
     return;
   }
 
   hash = &ctx->hash;
-  new_ctx = GNUNET_malloc (sizeof (struct RegexSearchContext));
+  new_ctx = GNUNET_new (struct RegexSearchContext);
   new_ctx->info = info;
   new_ctx->position = ctx->position + ctx->longest_match;
   GNUNET_array_append (info->contexts, info->n_contexts, new_ctx);
@@ -617,7 +623,7 @@ regex_next_edge (const struct RegexBlock *block,
   if (GNUNET_YES ==
       GNUNET_CONTAINER_multihashmap_contains (info->dht_get_handles, hash))
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, 
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
         "GET for %s running, END\n",
          GNUNET_h2s (hash));
     GNUNET_CONTAINER_multihashmap_get_multiple (info->dht_get_results,
@@ -630,11 +636,11 @@ regex_next_edge (const struct RegexBlock *block,
   GNUNET_STATISTICS_update (info->stats, "# regex nodes traversed",
                             1, GNUNET_NO);
 
-  LOG (GNUNET_ERROR_TYPE_INFO, 
+  LOG (GNUNET_ERROR_TYPE_INFO,
        "looking for %s\n",
        GNUNET_h2s (hash));
   rest = &new_ctx->info->description[new_ctx->position];
-  get_h = 
+  get_h =
       GNUNET_DHT_get_start (info->dht,    /* handle */
                             GNUNET_BLOCK_TYPE_REGEX, /* type */
                             hash,     /* key to search */
@@ -665,7 +671,7 @@ regex_next_edge (const struct RegexBlock *block,
  * @param callback Callback for found peers.
  * @param callback_cls Closure for @c callback.
  * @param stats Optional statistics handle to report usage. Can be NULL.
- * 
+ *
  * @return Handle to stop search and free resources.
  *         Must be freed by calling REGEX_INTERNAL_search_cancel.
  */
@@ -687,7 +693,7 @@ REGEX_INTERNAL_search (struct GNUNET_DHT_Handle *dht,
   LOG (GNUNET_ERROR_TYPE_INFO, "REGEX_INTERNAL_search: %s\n", string);
   GNUNET_assert (NULL != dht);
   GNUNET_assert (NULL != callback);
-  h = GNUNET_malloc (sizeof (struct REGEX_INTERNAL_Search));
+  h = GNUNET_new (struct REGEX_INTERNAL_Search);
   h->dht = dht;
   h->description = GNUNET_strdup (string);
   h->callback = callback;
@@ -699,12 +705,15 @@ REGEX_INTERNAL_search (struct GNUNET_DHT_Handle *dht,
   /* Initialize context */
   len = strlen (string);
   size = REGEX_INTERNAL_get_first_key (string, len, &key);
-  ctx = GNUNET_malloc (sizeof (struct RegexSearchContext));
+  LOG (GNUNET_ERROR_TYPE_INFO,
+       "  initial key for %s: %s (%.*s)\n",
+       string, GNUNET_h2s (&key), size, string);
+  ctx = GNUNET_new (struct RegexSearchContext);
   ctx->position = size;
   ctx->info = h;
   GNUNET_array_append (h->contexts, h->n_contexts, ctx);
-  LOG (GNUNET_ERROR_TYPE_DEBUG, 
-       "consumed %u bits out of %u, now looking for %s\n", 
+  LOG (GNUNET_ERROR_TYPE_DEBUG,
+       "consumed %u bits out of %u, now looking for %s\n",
        size, len,
        GNUNET_h2s (&key));