gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r36445 - gnunet/src/set


From: gnunet
Subject: [GNUnet-SVN] r36445 - gnunet/src/set
Date: Tue, 6 Oct 2015 01:16:17 +0200

Author: dold
Date: 2015-10-06 01:16:17 +0200 (Tue, 06 Oct 2015)
New Revision: 36445

Modified:
   gnunet/src/set/Makefile.am
   gnunet/src/set/gnunet-service-set.c
   gnunet/src/set/gnunet-service-set_union.c
   gnunet/src/set/set.h
   gnunet/src/set/set_api.c
Log:
include element type in hash


Modified: gnunet/src/set/Makefile.am
===================================================================
--- gnunet/src/set/Makefile.am  2015-10-05 22:27:46 UTC (rev 36444)
+++ gnunet/src/set/Makefile.am  2015-10-05 23:16:17 UTC (rev 36445)
@@ -53,6 +53,7 @@
   $(top_builddir)/src/core/libgnunetcore.la \
   $(top_builddir)/src/cadet/libgnunetcadet.la \
   $(top_builddir)/src/block/libgnunetblock.la \
+  $(top_builddir)/src/set/libgnunetset.la \
   $(GN_LIBINTL)
 
 libgnunetset_la_SOURCES = \

Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2015-10-05 22:27:46 UTC (rev 36444)
+++ gnunet/src/set/gnunet-service-set.c 2015-10-05 23:16:17 UTC (rev 36445)
@@ -825,9 +825,8 @@
              "Client inserts element of size %u\n",
               el.size);
   el.data = &msg[1];
-  GNUNET_CRYPTO_hash (el.data,
-                      el.size,
-                      &hash);
+  el.element_type = ntohs (msg->element_type);
+  GNUNET_SET_element_hash (&el, &hash);
 
   ee = GNUNET_CONTAINER_multihashmap_get (set->content->elements,
                                           &hash);
@@ -840,6 +839,7 @@
             el.data,
             el.size);
     ee->element.data = &ee[1];
+    ee->element.element_type = el.element_type;
     ee->remote = GNUNET_NO;
     ee->mutations = NULL;
     ee->mutations_size = 0;
@@ -885,9 +885,8 @@
              "Client removes element of size %u\n",
               el.size);
   el.data = &msg[1];
-  GNUNET_CRYPTO_hash (el.data,
-                      el.size,
-                      &hash);
+  el.element_type = ntohs (msg->element_type);
+  GNUNET_SET_element_hash (&el, &hash);
   ee = GNUNET_CONTAINER_multihashmap_get (set->content->elements,
                                           &hash);
   if (NULL == ee)
@@ -1009,7 +1008,7 @@
     memcpy (&msg[1],
             ee->element.data,
             ee->element.size);
-    msg->element_type = ee->element.element_type;
+    msg->element_type = htons (ee->element.element_type);
     msg->iteration_id = htons (set->iteration_id);
   }
   GNUNET_MQ_send (set->client_mq, ev);

Modified: gnunet/src/set/gnunet-service-set_union.c
===================================================================
--- gnunet/src/set/gnunet-service-set_union.c   2015-10-05 22:27:46 UTC (rev 
36444)
+++ gnunet/src/set/gnunet-service-set_union.c   2015-10-05 23:16:17 UTC (rev 
36445)
@@ -1078,9 +1078,7 @@
   ee->element.data = &ee[1];
   ee->element.element_type = ntohs (emsg->element_type);
   ee->remote = GNUNET_YES;
-  GNUNET_CRYPTO_hash (ee->element.data,
-                      ee->element.size,
-                      &ee->element_hash);
+  GNUNET_SET_element_hash (&ee->element, &ee->element_hash);
 
   if (GNUNET_NO == GNUNET_CONTAINER_multihashmap_remove 
(op->state->demanded_hashes, &ee->element_hash, NULL))
   {

Modified: gnunet/src/set/set.h
===================================================================
--- gnunet/src/set/set.h        2015-10-05 22:27:46 UTC (rev 36444)
+++ gnunet/src/set/set.h        2015-10-05 23:16:17 UTC (rev 36445)
@@ -28,6 +28,7 @@
 
 #include "platform.h"
 #include "gnunet_common.h"
+#include "gnunet_set_service.h"
 
 GNUNET_NETWORK_STRUCT_BEGIN
 

Modified: gnunet/src/set/set_api.c
===================================================================
--- gnunet/src/set/set_api.c    2015-10-05 22:27:46 UTC (rev 36444)
+++ gnunet/src/set/set_api.c    2015-10-05 23:16:17 UTC (rev 36445)
@@ -330,7 +330,7 @@
   if (NULL != iter)
   {
     element.size = msize - sizeof (struct GNUNET_SET_IterResponseMessage);
-    element.element_type = htons (msg->element_type);
+    element.element_type = ntohs (msg->element_type);
     element.data = &msg[1];
     iter (set->iterator_cls,
           &element);
@@ -443,7 +443,7 @@
        "Treating result as element\n");
   e.data = &msg[1];
   e.size = ntohs (mh->size) - sizeof (struct GNUNET_SET_ResultMessage);
-  e.element_type = msg->element_type;
+  e.element_type = ntohs (msg->element_type);
   if (NULL != oh->result_cb)
     oh->result_cb (oh->result_cls,
                    &e,
@@ -655,7 +655,7 @@
   }
   mqm = GNUNET_MQ_msg_extra (msg, element->size,
                              GNUNET_MESSAGE_TYPE_SET_ADD);
-  msg->element_type = element->element_type;
+  msg->element_type = htons (element->element_type);
   memcpy (&msg[1],
           element->data,
           element->size);
@@ -697,7 +697,7 @@
   mqm = GNUNET_MQ_msg_extra (msg,
                              element->size,
                              GNUNET_MESSAGE_TYPE_SET_REMOVE);
-  msg->element_type = element->element_type;
+  msg->element_type = htons (element->element_type);
   memcpy (&msg[1],
           element->data,
           element->size);
@@ -1144,8 +1144,14 @@
 void
 GNUNET_SET_element_hash (const struct GNUNET_SET_Element *element, struct 
GNUNET_HashCode *ret_hash)
 {
-  /* FIXME: The element type should also be hashed. */
-  GNUNET_CRYPTO_hash (element->data, element->size, ret_hash);
+  struct GNUNET_HashContext *ctx = GNUNET_CRYPTO_hash_context_start ();
+
+  /* It's not guaranteed that the element data is always after the element 
header,
+     so we need to hash the chunks separately. */
+  GNUNET_CRYPTO_hash_context_read (ctx, &element->size, sizeof (uint16_t));
+  GNUNET_CRYPTO_hash_context_read (ctx, &element->element_type, sizeof 
(uint16_t));
+  GNUNET_CRYPTO_hash_context_read (ctx, element->data, element->size);
+  GNUNET_CRYPTO_hash_context_finish (ctx, ret_hash);
 }
 
 /* end of set_api.c */




reply via email to

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