check
[oweals/gnunet.git] / src / block / plugin_block_fs.c
index 362932991c5595309ad7ce592d0abac309813481..caf009ddfe5f5eb047325b9f354100a8d34f7c40 100644 (file)
@@ -25,7 +25,8 @@
  */
 
 #include "platform.h"
-#include "plugin_block.h"
+#include "gnunet_block_plugin.h"
+#include "block_fs.h"
 #include "gnunet_signatures.h"
 
 #define DEBUG_FS_BLOCK GNUNET_NO
  */
 #define BLOOMFILTER_K 16
 
-/**
- * Mingle hash with the mingle_number to produce different bits.
- */
-static void
-mingle_hash (const GNUNET_HashCode * in,
-            int32_t mingle_number, 
-            GNUNET_HashCode * hc)
-{
-  GNUNET_HashCode m;
-
-  GNUNET_CRYPTO_hash (&mingle_number, 
-                     sizeof (int32_t), 
-                     &m);
-  GNUNET_CRYPTO_hash_xor (&m, in, hc);
-}
-
-
 /**
  * Function called to validate a reply or a request.  For
  * request evaluation, simply pass "NULL" for the reply_block.
@@ -90,16 +74,18 @@ block_plugin_fs_evaluate (void *cls,
 
   switch (type)
     {
-    case GNUNET_BLOCK_TYPE_DBLOCK:
-    case GNUNET_BLOCK_TYPE_IBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_DBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_IBLOCK:
       if (xquery_size != 0) 
        {
          GNUNET_break_op (0);
          return GNUNET_BLOCK_EVALUATION_REQUEST_INVALID;
        }
+      if (reply_block == NULL)
+       return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
       return GNUNET_BLOCK_EVALUATION_OK_LAST;
-    case GNUNET_BLOCK_TYPE_KBLOCK:
-    case GNUNET_BLOCK_TYPE_NBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_KBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_NBLOCK:
       if (xquery_size != 0) 
        {
          GNUNET_break_op (0);
@@ -110,7 +96,7 @@ block_plugin_fs_evaluate (void *cls,
       GNUNET_CRYPTO_hash (reply_block,
                          reply_block_size,
                          &chash);
-      mingle_hash (&chash, bf_mutator, &mhash);
+      GNUNET_BLOCK_mingle_hash (&chash, bf_mutator, &mhash);
       if (NULL != *bf)
        {
          if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test (*bf,
@@ -125,7 +111,7 @@ block_plugin_fs_evaluate (void *cls,
        }
       GNUNET_CONTAINER_bloomfilter_add (*bf, &mhash);
       return GNUNET_BLOCK_EVALUATION_OK_MORE;
-    case GNUNET_BLOCK_TYPE_SBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_SBLOCK:
       if (xquery_size != sizeof (GNUNET_HashCode)) 
        {
          GNUNET_break_op (0);
@@ -134,8 +120,11 @@ block_plugin_fs_evaluate (void *cls,
       if (reply_block == NULL)
        return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
       nsid = xquery;
-      if (reply_block_size < sizeof (struct NBlock))
-       return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
+      if (reply_block_size < sizeof (struct SBlock))
+       {
+         GNUNET_break_op (0);
+         return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
+       }
       sb = reply_block;
       GNUNET_CRYPTO_hash (&sb->subspace,
                          sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded),
@@ -144,14 +133,15 @@ block_plugin_fs_evaluate (void *cls,
                       &sh,
                       sizeof (GNUNET_HashCode)))
        {
-         GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                     _("Reply mismatched in terms of namespace.  Discarded.\n"));
+         GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING,
+                          "block-fs",
+                          _("Reply mismatched in terms of namespace.  Discarded.\n"));
          return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
        }
       GNUNET_CRYPTO_hash (reply_block,
                          reply_block_size,
                          &chash);
-      mingle_hash (&chash, bf_mutator, &mhash);
+      GNUNET_BLOCK_mingle_hash (&chash, bf_mutator, &mhash);
       if (NULL != *bf)
        {
          if (GNUNET_YES == GNUNET_CONTAINER_bloomfilter_test (*bf,
@@ -196,15 +186,15 @@ block_plugin_fs_get_key (void *cls,
 
   switch (type)
     {
-    case GNUNET_BLOCK_TYPE_DBLOCK:
-    case GNUNET_BLOCK_TYPE_IBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_DBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_IBLOCK:
       GNUNET_CRYPTO_hash (block, block_size, key);
       return GNUNET_OK;
-    case GNUNET_BLOCK_TYPE_KBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_KBLOCK:
       if (block_size < sizeof (struct KBlock))
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       kb = block;
       if (block_size - sizeof (struct KBlock) !=
@@ -213,7 +203,7 @@ block_plugin_fs_get_key (void *cls,
          - sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) ) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (GNUNET_OK !=
          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_KBLOCK,
@@ -222,25 +212,25 @@ block_plugin_fs_get_key (void *cls,
                                    &kb->keyspace)) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (key != NULL)
        GNUNET_CRYPTO_hash (&kb->keyspace,
                            sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded),
                            key);
       return GNUNET_OK;
-    case GNUNET_BLOCK_TYPE_SBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_SBLOCK:
       if (block_size < sizeof (struct SBlock))
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       sb = block;
       if (block_size !=
          ntohl (sb->purpose.size) + sizeof (struct GNUNET_CRYPTO_RsaSignature))
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (GNUNET_OK !=
          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_SBLOCK,
@@ -249,16 +239,16 @@ block_plugin_fs_get_key (void *cls,
                                    &sb->subspace)) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (key != NULL)
        *key = sb->identifier;
       return GNUNET_OK;
-    case GNUNET_BLOCK_TYPE_NBLOCK:
+    case GNUNET_BLOCK_TYPE_FS_NBLOCK:
       if (block_size < sizeof (struct NBlock))
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       nb = block;
       if (block_size - sizeof (struct NBlock) !=
@@ -267,13 +257,13 @@ block_plugin_fs_get_key (void *cls,
          - sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded) ) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (block_size !=
          ntohl (nb->ksk_purpose.size) + sizeof (struct GNUNET_CRYPTO_RsaSignature))
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (GNUNET_OK !=
          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_NBLOCK_KSIG,
@@ -282,7 +272,7 @@ block_plugin_fs_get_key (void *cls,
                                    &nb->keyspace)) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       if (GNUNET_OK !=
          GNUNET_CRYPTO_rsa_verify (GNUNET_SIGNATURE_PURPOSE_FS_NBLOCK,
@@ -291,7 +281,7 @@ block_plugin_fs_get_key (void *cls,
                                    &nb->subspace)) 
        {
          GNUNET_break_op (0);
-         return GNUNET_SYSERR;
+         return GNUNET_NO;
        }
       /* FIXME: we used to xor ID with NSID,
         why not here? */
@@ -310,15 +300,15 @@ block_plugin_fs_get_key (void *cls,
  * Entry point for the plugin.
  */
 void *
-gnunet_plugin_block_fs_init (void *cls)
+libgnunet_plugin_block_fs_init (void *cls)
 {
   static enum GNUNET_BLOCK_Type types[] = 
     {
-      GNUNET_BLOCK_TYPE_DBLOCK,
-      GNUNET_BLOCK_TYPE_IBLOCK,
-      GNUNET_BLOCK_TYPE_KBLOCK,
-      GNUNET_BLOCK_TYPE_SBLOCK,
-      GNUNET_BLOCK_TYPE_NBLOCK,
+      GNUNET_BLOCK_TYPE_FS_DBLOCK,
+      GNUNET_BLOCK_TYPE_FS_IBLOCK,
+      GNUNET_BLOCK_TYPE_FS_KBLOCK,
+      GNUNET_BLOCK_TYPE_FS_SBLOCK,
+      GNUNET_BLOCK_TYPE_FS_NBLOCK,
       GNUNET_BLOCK_TYPE_ANY /* end of list */
     };
   struct GNUNET_BLOCK_PluginFunctions *api;
@@ -335,7 +325,7 @@ gnunet_plugin_block_fs_init (void *cls)
  * Exit point from the plugin.
  */
 void *
-gnunet_plugin_block_fs_done (void *cls)
+libgnunet_plugin_block_fs_done (void *cls)
 {
   struct GNUNET_TRANSPORT_PluginFunctions *api = cls;