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;
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);
/**
* its ID.
*/
CancelImpl cancel;
-
- /**
- * Callback for iterating over all set elements.
- */
- IterateImpl iterate;
};
/**
* 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;
};
/**
* 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.
* 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;
};
/**
* 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;
};
+/**
+ * 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);
/**
* Get the table with implementing functions for
* set union.
+ *
+ * @return the operation specific VTable
*/
const struct SetVT *
_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);