multicast: removed replay cancellation as responses are limited
[oweals/gnunet.git] / src / include / gnunet_set_service.h
index 2d40b30521ce93fb86252c4702c65a777ddb11ac..f9ae122b445fc5c17ec5b95f422598211528b8d6 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2013, 2014 Christian Grothoff (and other contributing authors)
+      Copyright (C) 2013, 2014 Christian Grothoff (and other contributing authors)
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
       You should have received a copy of the GNU General Public License
       along with GNUnet; see the file COPYING.  If not, write to the
-      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-      Boston, MA 02111-1307, USA.
+      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+      Boston, MA 02110-1301, USA.
  */
 
 /**
@@ -99,9 +99,32 @@ enum GNUNET_SET_Status
    * Everything went ok, we are transmitting an element of the
    * result (in set, or to be removed from set, depending on
    * the `enum GNUNET_SET_ResultMode`).
+   *
+   * Only applies to
+   * #GNUNET_SET_RESULT_FULL,
+   * #GNUNET_SET_RESULT_ADDED,
+   * #GNUNET_SET_RESULT_REMOVED,
    */
   GNUNET_SET_STATUS_OK,
 
+  /**
+   * Element should be added to the result set
+   * of the local peer, i.e. the local peer is
+   * missing an element.
+   *
+   * Only applies to #GNUNET_SET_RESULT_SYMMETRIC
+   */
+  GNUNET_SET_STATUS_ADD_LOCAL,
+
+  /**
+   * Element should be added to the result set
+   * of the remove peer, i.e. the remote peer is
+   * missing an element.
+   *
+   * Only applies to #GNUNET_SET_RESULT_SYMMETRIC
+   */
+  GNUNET_SET_STATUS_ADD_REMOTE,
+
   /**
    * The other peer refused to to the operation with us,
    * or something went wrong.
@@ -129,20 +152,32 @@ enum GNUNET_SET_ResultMode
 {
   /**
    * Client gets every element in the resulting set.
+   *
+   * Only supported for set intersection.
    */
   GNUNET_SET_RESULT_FULL,
 
   /**
-   * Client gets only elements that have been added to the set.
-   * Only works with set union.
+   * Client gets notified of the required changes
+   * for both the local and the remote set.
+   *
+   * Only supported for set 
+   */
+  GNUNET_SET_RESULT_SYMMETRIC,
+
+  /**
+   * Client gets only elements that have been removed from the set.
+   *
+   * Only supported for set intersection.
    */
-  GNUNET_SET_RESULT_ADDED,
+  GNUNET_SET_RESULT_REMOVED,
 
   /**
    * Client gets only elements that have been removed from the set.
-   * Only works with set intersection.
+   *
+   * Only supported for set union.
    */
-  GNUNET_SET_RESULT_REMOVED
+  GNUNET_SET_RESULT_ADDED
 };
 
 
@@ -223,6 +258,11 @@ typedef void
 
 
 
+typedef void
+(*GNUNET_SET_CopyReadyCallback) (void *cls,
+                                 struct GNUNET_SET_Handle *copy);
+
+
 /**
  * Create an empty set, supporting the specified operation.
  *
@@ -279,6 +319,12 @@ GNUNET_SET_remove_element (struct GNUNET_SET_Handle *set,
                            void *cont_cls);
 
 
+void
+GNUNET_SET_copy_lazy (struct GNUNET_SET_Handle *set,
+                      GNUNET_SET_CopyReadyCallback cb,
+                      void *cls);
+
+
 /**
  * Destroy the set handle, and free all associated resources.
  * Iterations must have completed (or be explicitly canceled)
@@ -386,9 +432,9 @@ GNUNET_SET_commit (struct GNUNET_SET_OperationHandle *oh,
 
 
 /**
- * Cancel the given set operation.
- * May not be called after the operation's `GNUNET_SET_ResultIterator` has been
- * called with a status that indicates error, timeout or done.
+ * Cancel the given set operation.  May not be called after the
+ * operation's `GNUNET_SET_ResultIterator` has been called with a
+ * status that indicates error, timeout or done.
  *
  * @param oh set operation to cancel
  */