new timeout tests for WLAN and bluetooth
[oweals/gnunet.git] / src / set / gnunet-service-set.h
index 7a2c5ba8daa45c9e033e742ad09dd3e7bbdc9f3b..95a24119b3c0722b564f03c9ef950974a8807454 100644 (file)
@@ -91,7 +91,12 @@ struct OperationSpecification
   uint32_t salt;
 
   /**
-   * ID used to identify responses to a client.
+   * Remote peers element count
+   */
+  uint32_t remote_element_count;
+
+  /**
+   * ID used to identify an operation between service and client
    */
   uint32_t client_request_id;
 
@@ -168,16 +173,12 @@ typedef void (*OpCreateImpl) (struct Operation *op);
 typedef int (*MsgHandlerImpl) (struct Operation *op,
                                const struct GNUNET_MessageHeader *msg);
 
-typedef void (*CancelImpl) (struct Operation *op);
-
-
 /**
- * Signature of functions that implement sending all the set's
- * elements to the client.
+ * Signature of functions that implement operation cancellation
  *
- * @param set set that should be iterated over
+ * @param op operation state
  */
-typedef void (*IterateImpl) (struct Set *set);
+typedef void (*CancelImpl) (struct Operation *op);
 
 
 /**
@@ -233,11 +234,6 @@ struct SetVT
    * its ID.
    */
   CancelImpl cancel;
-
-  /**
-   * Callback for iterating over all set elements.
-   */
-  IterateImpl iterate;
 };
 
 
@@ -285,6 +281,8 @@ struct ElementEntry
   /**
    * GNUNET_YES if the element is a remote element, and does not belong
    * to the operation's set.
+   *
+   * //TODO: Move to Union, unless additional set-operations are implemented ever
    */
   int remote;
 };
@@ -295,13 +293,15 @@ struct Operation
   /**
    * V-Table for the operation belonging
    * to the tunnel contest.
+   *
+   * Used for all operation specific operations after receiving the ops request
    */
   const struct SetVT *vt;
 
   /**
    * Tunnel to the peer.
    */
-  struct GNUNET_MESH_Tunnel *tunnel;
+  struct GNUNET_MESH_Channel *channel;
 
   /**
    * Message queue for the tunnel.
@@ -344,6 +344,12 @@ struct Operation
     * a linked list.
     */
   struct Operation *prev;
+
+  /**
+   * Set to GNUNET_YES if the set service should not free
+   * the operation, as it is still needed (e.g. in some scheduled task).
+   */
+  int keep;
 };
 
 
@@ -372,6 +378,9 @@ struct Set
   /**
    * Virtual table for this set.
    * Determined by the operation type of this set.
+   *
+   * Used only for Add/remove of elements and when receiving an incoming
+   * operation from a remote peer.
    */
   const struct SetVT *vt;
 
@@ -421,6 +430,13 @@ struct Set
 };
 
 
+/**
+ * Destroy the given operation.  Call the implementation-specific cancel function
+ * of the operation.  Disconnects from the remote peer.
+ * Does not disconnect the client, as there may be multiple operations per set.
+ *
+ * @param op operation to destroy
+ */
 void
 _GSS_operation_destroy (struct Operation *op);
 
@@ -428,6 +444,8 @@ _GSS_operation_destroy (struct Operation *op);
 /**
  * Get the table with implementing functions for
  * set union.
+ *
+ * @return the operation specific VTable
  */
 const struct SetVT *
 _GSS_union_vt (void);
@@ -436,6 +454,8 @@ _GSS_union_vt (void);
 /**
  * Get the table with implementing functions for
  * set intersection.
+ *
+ * @return the operation specific VTable
  */
 const struct SetVT *
 _GSS_intersection_vt (void);