gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r31542 - gnunet/src/set
Date: Wed, 18 Dec 2013 17:24:35 +0100

Author: cfuchs
Date: 2013-12-18 17:24:35 +0100 (Wed, 18 Dec 2013)
New Revision: 31542

Modified:
   gnunet/src/set/gnunet-service-set_intersection.c
Log:
- implemented output mode GNUNET_SET_RESULT_REMOVED in intersection

Modified: gnunet/src/set/gnunet-service-set_intersection.c
===================================================================
--- gnunet/src/set/gnunet-service-set_intersection.c    2013-12-18 16:14:49 UTC 
(rev 31541)
+++ gnunet/src/set/gnunet-service-set_intersection.c    2013-12-18 16:24:35 UTC 
(rev 31542)
@@ -157,6 +157,37 @@
 
 
 /**
+ * Send a result message to the client indicating
+ * we removed an element
+ *
+ * @param op union operation
+ * @param element element to send
+ */
+static void
+send_client_element (struct Operation *op,
+                     struct GNUNET_SET_Element *element)
+{
+  struct GNUNET_MQ_Envelope *ev;
+  struct GNUNET_SET_ResultMessage *rm;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "sending removed element (size %u) to 
client\n", element->size);
+  GNUNET_assert (0 != op->spec->client_request_id);
+  ev = GNUNET_MQ_msg_extra (rm, element->size, GNUNET_MESSAGE_TYPE_SET_RESULT);
+  if (NULL == ev)
+  {
+    GNUNET_MQ_discard (ev);
+    GNUNET_break (0);
+    return;
+  }
+  rm->result_status = htons (GNUNET_SET_STATUS_OK);
+  rm->request_id = htonl (op->spec->client_request_id);
+  rm->element_type = element->type;
+  memcpy (&rm[1], element->data, element->size);
+  GNUNET_MQ_send (op->spec->set->client_mq, ev);
+}
+
+
+/**
  * Alice's version:
  *
  * fills the contained-elements hashmap with all relevant
@@ -188,8 +219,11 @@
                            op->spec->salt,
                            &mutated_hash);
   if (GNUNET_NO == GNUNET_CONTAINER_bloomfilter_test (op->state->remote_bf,
-                                                      &mutated_hash))
+                                                      &mutated_hash)){
+    if (GNUNET_SET_RESULT_REMOVED == op->spec->result_mode)
+      send_client_element (op, &ee->element);
     return GNUNET_YES;
+  }
 
   op->state->my_element_count++;
   GNUNET_assert (GNUNET_YES ==
@@ -263,6 +297,8 @@
                    GNUNET_CONTAINER_multihashmap_remove 
(op->state->my_elements,
                                                          &ee->element_hash,
                                                          ee));
+    if (GNUNET_SET_RESULT_REMOVED == op->spec->result_mode)
+      send_client_element (op, &ee->element);
   }
 
   return GNUNET_YES;




reply via email to

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