gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r31426 - gnunet/src/set
Date: Mon, 16 Dec 2013 17:30:13 +0100

Author: cfuchs
Date: 2013-12-16 17:30:13 +0100 (Mon, 16 Dec 2013)
New Revision: 31426

Modified:
   gnunet/src/set/gnunet-service-set.c
   gnunet/src/set/gnunet-service-set_intersection.c
Log:
- begin work on enhanced multipart receiving
- added msg handlers for multipart bfs

Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2013-12-16 16:24:09 UTC (rev 31425)
+++ gnunet/src/set/gnunet-service-set.c 2013-12-16 16:30:13 UTC (rev 31426)
@@ -1381,6 +1381,7 @@
     {dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SE, 0},
     {dispatch_p2p_message, 
GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_ELEMENT_INFO, 0},
     {dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF, 0},
+    {dispatch_p2p_message, GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF_PART, 
0},
     {NULL, 0, 0}
   };
   static const uint32_t mesh_ports[] = {GNUNET_APPLICATION_TYPE_SET, 0};

Modified: gnunet/src/set/gnunet-service-set_intersection.c
===================================================================
--- gnunet/src/set/gnunet-service-set_intersection.c    2013-12-16 16:24:09 UTC 
(rev 31425)
+++ gnunet/src/set/gnunet-service-set_intersection.c    2013-12-16 16:30:13 UTC 
(rev 31426)
@@ -54,6 +54,10 @@
    */
   PHASE_BF_EXCHANGE,
   /**
+   * Multipart continuation of BF_exchange
+   */
+  PHASE_BF_AWAIT_MULTIPART,
+  /**
    * if both peers have an equal peercount, they enter this state for
    * one more turn, to see if they actually have agreed on a correct set.
    * if a peer finds the same element count after the next iteration,
@@ -421,7 +425,7 @@
                                          op);
 
   // send our bloomfilter
-  if (GNUNET_SERVER_MAX_MESSAGE_SIZE <= bf_size + sizeof (struct BFMessage)) {
+  if (GNUNET_SERVER_MAX_MESSAGE_SIZE > bf_size + sizeof (struct BFMessage)) {
     // singlepart
     chunk_size = bf_size;
     ev = GNUNET_MQ_msg_extra (msg, chunk_size, 
GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF);
@@ -452,9 +456,8 @@
 
   GNUNET_MQ_send (op->mq, ev);
 
-  if (op->state->local_bf_data) {
+  if (op->state->local_bf_data)
     send_bloomfilter_multipart (op, chunk_size);
-  }
 }
 
 
@@ -537,6 +540,26 @@
   GNUNET_MQ_send (op->mq, ev);
 }
 
+/**
+ * Handle an BF multipart message from a remote peer.
+ *
+ * @param cls the intersection operation
+ * @param mh the header of the message
+ */
+static void
+handle_p2p_bf_part (void *cls, const struct GNUNET_MessageHeader *mh)
+{
+  struct Operation *op = cls;
+  const struct BFPart *msg = (const struct BFPart *) mh;
+  
+  if (op->state->phase != PHASE_BF_AWAIT_MULTIPART){
+    GNUNET_break_op (0);
+    fail_intersection_operation(op);
+    return;
+  }
+  
+  
+}
 
 /**
  * Handle an BF message from a remote peer.
@@ -556,8 +579,8 @@
   op->spec->salt = ntohl (msg->sender_mutator);
 
   op->state->remote_bf = GNUNET_CONTAINER_bloomfilter_init ((const char*) 
&msg[1],
-                                                            ntohl 
(msg->bloomfilter_length),
-                                                            
GNUNET_CONSTANTS_BLOOMFILTER_K);
+                                                            ntohl 
(msg->bloomfilter_total_length),
+                                                            ntohl 
(msg->bits_per_element));
   op->state->local_bf = GNUNET_CONTAINER_bloomfilter_init (NULL,
                                                            BLOOMFILTER_SIZE,
                                                            
GNUNET_CONSTANTS_BLOOMFILTER_K);
@@ -856,6 +879,9 @@
   case GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF:
     handle_p2p_bf (op, mh);
     break;
+  case GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF_PART:
+    handle_p2p_bf_part (op, mh);
+    break;
   case GNUNET_MESSAGE_TYPE_SET_P2P_DONE:
     handle_p2p_done (op, mh);
     break;




reply via email to

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