gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r22338 - gnunet/src/mesh


From: gnunet
Subject: [GNUnet-SVN] r22338 - gnunet/src/mesh
Date: Wed, 27 Jun 2012 12:41:05 +0200

Author: bartpolot
Date: 2012-06-27 12:41:05 +0200 (Wed, 27 Jun 2012)
New Revision: 22338

Added:
   gnunet/src/mesh/mesh_block_lib.c
   gnunet/src/mesh/mesh_block_lib.h
Modified:
   gnunet/src/mesh/Makefile.am
   gnunet/src/mesh/gnunet-service-mesh_new.c
   gnunet/src/mesh/mesh_protocol.h
   gnunet/src/mesh/plugin_block_mesh.c
Log:
- move mesh regex block code to a lib

Modified: gnunet/src/mesh/Makefile.am
===================================================================
--- gnunet/src/mesh/Makefile.am 2012-06-27 10:30:38 UTC (rev 22337)
+++ gnunet/src/mesh/Makefile.am 2012-06-27 10:41:05 UTC (rev 22338)
@@ -22,7 +22,8 @@
  gnunet-service-mesh  gnunet-service-mesh_new
 
 lib_LTLIBRARIES = \
-  libgnunetmesh.la
+  libgnunetmesh.la \
+  libgnunetmeshblock.la
 
 plugin_LTLIBRARIES = \
  libgnunet_plugin_block_mesh.la
@@ -47,7 +48,7 @@
   $(top_builddir)/src/block/libgnunetblock.la \
   $(top_builddir)/src/util/libgnunetutil.la
  gnunet_service_mesh_DEPENDENCIES = \
-  $(top_builddir)/src/core/libgnunetcore.la\
+  $(top_builddir)/src/core/libgnunetcore.la \
   $(top_builddir)/src/dht/libgnunetdht.la \
   $(top_builddir)/src/util/libgnunetutil.la
 
@@ -55,6 +56,7 @@
  gnunet-service-mesh_new.c \
  mesh_tunnel_tree.c mesh_tunnel_tree.h
 gnunet_service_mesh_new_LDADD = \
+  libgnunetmeshblock.la \
   $(top_builddir)/src/core/libgnunetcore.la\
   $(top_builddir)/src/dht/libgnunetdht.la \
   $(top_builddir)/src/regex/libgnunetregex.la \
@@ -74,6 +76,17 @@
   $(GN_LIB_LDFLAGS) $(WINFLAGS) \
   -version-info 1:0:0
 
+libgnunetmeshblock_la_SOURCES = \
+  mesh_block_lib.c
+libgnunetmeshblock_la_LIBADD = \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  $(XLIB) \
+  $(LTLIBINTL)
+libgnunetmeshblock_la_LDFLAGS = \
+  $(GN_LIB_LDFLAGS) $(WINFLAGS) \
+  -version-info 1:0:0
+
+
 check_PROGRAMS = \
  test_mesh_api \
  test_mesh_tree_api \

Modified: gnunet/src/mesh/gnunet-service-mesh_new.c
===================================================================
--- gnunet/src/mesh/gnunet-service-mesh_new.c   2012-06-27 10:30:38 UTC (rev 
22337)
+++ gnunet/src/mesh/gnunet-service-mesh_new.c   2012-06-27 10:41:05 UTC (rev 
22338)
@@ -4029,6 +4029,7 @@
   size_t len;
 
   // FIXME: does proof have to be NULL terminated?
+  ctx->dht_get_handle = NULL;
   proof = (char *) &block[1];
   if (GNUNET_OK != GNUNET_REGEX_check_proof (proof, key))
   {
@@ -4050,6 +4051,21 @@
     return;
   }
   // FIXME complete
+  ctx->n_dht_gets++;
+  ctx->dht_get_handle = GNUNET_realloc (ctx->dht_get_handle,
+                                        sizeof(struct GNUNET_DHT_GetHandle *)
+                                        * ctx->n_dht_gets);
+
+  /* Start search in DHT */
+  ctx->dht_get_handle[ctx->n_dht_gets - 1] = 
+      GNUNET_DHT_get_start (dht_handle,    /* handle */
+                            GNUNET_BLOCK_TYPE_MESH_REGEX, /* type */
+                            &key,     /* key to search */
+                            DHT_REPLICATION_LEVEL, /* replication level */
+                            GNUNET_DHT_RO_DEMULTIPLEX_EVERYWHERE,
+                            NULL,       /* xquery */ // FIXME BLOOMFILTER
+                            0,     /* xquery bits */ // FIXME BLOOMFILTER SIZE
+                            &dht_get_string_handler, ctx);
   return;
 }
 

Added: gnunet/src/mesh/mesh_block_lib.c
===================================================================
--- gnunet/src/mesh/mesh_block_lib.c                            (rev 0)
+++ gnunet/src/mesh/mesh_block_lib.c    2012-06-27 10:41:05 UTC (rev 22338)
@@ -0,0 +1,131 @@
+/*
+     This file is part of GNUnet.
+     (C) 2001 - 2011 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @author Bartlomiej Polot
+ * @file mesh/mesh_block_lib.c
+ */
+
+#ifdef __cplusplus
+extern "C"
+{
+#if 0
+  /* keep Emacsens' auto-indent happy */
+}
+#endif
+#endif
+
+#include "mesh_block_lib.h"
+
+/**
+ * Iterator over edges in a block.
+ *
+ * @param cls Closure.
+ * @param token Token that follows to next state.
+ * @param len Lenght of token.
+ * @param key Hash of next state.
+ */
+static int
+check_edge (void *cls,
+            const char *token,
+            size_t len,
+            const struct GNUNET_HashCode *key)
+{
+  return GNUNET_YES;
+}
+
+
+/**
+ * Check if the regex block is well formed, including all edges
+ *
+ * @param block The start of the block.
+ * @param size The size of the block.
+ *
+ * @return GNUNET_OK in case it's fine, GNUNET_SYSERR otherwise.
+ */
+int
+GNUNET_MESH_regex_block_check (const struct MeshRegexBlock *block,
+                               size_t size)
+{
+  return GNUNET_MESH_regex_block_iterate(NULL, block, size, &check_edge);
+}
+
+
+/**
+ * Iterate over all edges of a block of a regex state.
+ *
+ * @param cls Closure for the iterator.
+ * @param block Block to iterate over.
+ * @param size Size of block.
+ * @param iterator Function to call on each edge in the block.
+ *
+ * @return How many bytes of block have been processed
+ */
+int
+GNUNET_MESH_regex_block_iterate (void *cls,
+                                 const struct MeshRegexBlock *block,
+                                 size_t size,
+                                 GNUNET_MESH_EgdeIterator iterator)
+{
+  struct MeshRegexEdge *edge;
+  unsigned int n;
+  unsigned int n_token;
+  unsigned int i;
+  size_t offset;
+  char *aux;
+
+  offset = sizeof (struct MeshRegexBlock);
+  if (offset > size) // Is it safe to access the regex block?
+    return GNUNET_SYSERR;
+  n = ntohl (block->n_proof);
+  offset =+ n;
+  if (offset > size) // Is it safe to access the regex proof?
+    return GNUNET_SYSERR;
+  aux = (char *) &block[1];  // Skip regex block
+  aux = &aux[n];             // Skip regex proof
+  n = ntohl (block->n_edges);
+  for (i = 0; i < n; n++) // aux always points at the end of the previous block
+  {
+    offset += sizeof (struct MeshRegexEdge);
+    if (offset > size) // Is it safe to access the next edge block?
+      return GNUNET_SYSERR;
+    edge = (struct MeshRegexEdge *) aux;
+    n_token = ntohl (edge->n_token);
+    offset += n_token;
+    if (offset > size) // Is it safe to access the edge token?
+      return GNUNET_SYSERR;
+    aux = (char *) &edge[1]; // Skip edge block
+    if (NULL != iterator)
+        if (GNUNET_NO == iterator (cls, aux, n_token, &edge->key))
+            return GNUNET_OK;
+    aux = &aux[n_token];     // Skip edge token
+  }
+  // The total size should be exactly the size of (regex + all edges) blocks
+  return (offset == size) ? GNUNET_OK : GNUNET_SYSERR;
+}
+
+#if 0                           /* keep Emacsens' auto-indent happy */
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+/* end of mesh_protocol.h */

Added: gnunet/src/mesh/mesh_block_lib.h
===================================================================
--- gnunet/src/mesh/mesh_block_lib.h                            (rev 0)
+++ gnunet/src/mesh/mesh_block_lib.h    2012-06-27 10:41:05 UTC (rev 22338)
@@ -0,0 +1,94 @@
+/*
+     This file is part of GNUnet.
+     (C) 2012 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @author Bartlomiej Polot
+ * @file mesh/mesh_block_lib.h
+ */
+
+#ifndef MESH_BLOCK_LIB_H_
+#define MESH_BLOCK_LIB_H_
+
+#ifdef __cplusplus
+extern "C"
+{
+#if 0
+  /* keep Emacsens' auto-indent happy */
+}
+#endif
+#endif
+
+#include "platform.h"
+#include "block_mesh.h"
+
+/**
+ * Check if the regex block is well formed, including all edges
+ *
+ * @param block The start of the block.
+ * @param size The size of the block.
+ *
+ * @return GNUNET_OK in case it's fine, GNUNET_SYSERR otherwise.
+ */
+int
+GNUNET_MESH_regex_block_check (const struct MeshRegexBlock *block,
+                               size_t size);
+
+/**
+ * Iterator over edges in a block.
+ *
+ * @param cls Closure.
+ * @param token Token that follows to next state.
+ * @param len Lenght of token.
+ * @param key Hash of next state.
+ *
+ * @return GNUNET_YES if should keep iterating, GNUNET_NO otherwise.
+ */
+typedef int (*GNUNET_MESH_EgdeIterator)(void *cls,
+                                        const char *token,
+                                        size_t len,
+                                        const struct GNUNET_HashCode *key);
+
+
+/**
+ * Iterate over all edges of a block of a regex state.
+ *
+ * @param cls Closure for the iterator.
+ * @param block Block to iterate over.
+ * @param size Size of block.
+ * @param iterator Function to call on each edge in the block.
+ *
+ * @return GNUNET_SYSERR if an error has been encountered, GNUNET_OK otherwise
+ */
+int
+GNUNET_MESH_regex_block_iterate (void *cls,
+                                 const struct MeshRegexBlock *block,
+                                 size_t size,
+                                 GNUNET_MESH_EgdeIterator iterator);
+
+#if 0                           /* keep Emacsens' auto-indent happy */
+{
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+/* ifndef MESH_BLOCK_LIB_H */
+#endif
+/* end of mesh_block_lib.h */

Modified: gnunet/src/mesh/mesh_protocol.h
===================================================================
--- gnunet/src/mesh/mesh_protocol.h     2012-06-27 10:30:38 UTC (rev 22337)
+++ gnunet/src/mesh/mesh_protocol.h     2012-06-27 10:41:05 UTC (rev 22338)
@@ -287,6 +287,6 @@
 }
 #endif
 
-/* ifndef MES_PROTOCOL_H */
+/* ifndef MESH_PROTOCOL_H */
 #endif
 /* end of mesh_protocol.h */

Modified: gnunet/src/mesh/plugin_block_mesh.c
===================================================================
--- gnunet/src/mesh/plugin_block_mesh.c 2012-06-27 10:30:38 UTC (rev 22337)
+++ gnunet/src/mesh/plugin_block_mesh.c 2012-06-27 10:41:05 UTC (rev 22338)
@@ -27,6 +27,7 @@
 #include "platform.h"
 #include "gnunet_block_plugin.h"
 #include "block_mesh.h"
+#include "mesh_block_lib.h"
 
 /**
  * Number of bits we set per entry in the bloomfilter.
@@ -36,52 +37,6 @@
 
 
 /**
- * Check if the regex block is well formed, including all edges
- * 
- * @param block The start of the block.
- * @param size The size of the block.
- * 
- * @return GNUNET_OK in case it's fine, GNUNET_SYSERR otherwise.
- */
-static int
-check_mesh_regex_block (const struct MeshRegexBlock *block, size_t size)
-{
-  struct MeshRegexEdge *edge;
-  unsigned int n;
-  unsigned int n_token;
-  unsigned int i;
-  size_t offset;
-  char *aux;
-
-  offset = sizeof (struct MeshRegexBlock);
-  if (offset > size) // Is it safe to access the regex block?
-    return GNUNET_SYSERR;
-  n = ntohl (block->n_proof);
-  offset =+ n;
-  if (offset > size) // Is it safe to access the regex proof?
-    return GNUNET_SYSERR;
-  aux = (char *) &block[1];  // Skip regex block
-  aux = &aux[n];             // Skip regex proof
-  n = ntohl (block->n_edges);
-  for (i = 0; i < n; n++) // aux always points at the end of the previous block
-  {
-    offset += sizeof (struct MeshRegexEdge);
-    if (offset > size) // Is it safe to access the next edge block?
-      return GNUNET_SYSERR;
-    edge = (struct MeshRegexEdge *) aux;
-    n_token = ntohl (edge->n_token);
-    offset += n_token;
-    if (offset > size) // Is it safe to access the edge token?
-      return GNUNET_SYSERR;
-    aux = (char *) &edge[1]; // Skip edge block
-    aux = &aux[n_token];     // Skip edge token
-  }
-  // The total size should be exactly the size of (regex + all edges) blocks
-  return (offset == size) ? GNUNET_OK : GNUNET_SYSERR;
-}
-
-
-/**
  * Function called to validate a reply or a request.  For
  * request evaluation, simply pass "NULL" for the reply_block.
  * Note that it is assumed that the reply has already been
@@ -158,7 +113,8 @@
     }
     if (NULL == reply_block)
       return GNUNET_BLOCK_EVALUATION_REQUEST_VALID;
-    if (GNUNET_OK != check_mesh_regex_block (reply_block, reply_block_size))
+    if (GNUNET_OK != GNUNET_MESH_regex_block_check (reply_block,
+                                                    reply_block_size))
       return GNUNET_BLOCK_EVALUATION_RESULT_INVALID;
     if (NULL != bf)
     {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]