extend API to enalbe exclusive port ranges to be specified for testing-system objects
[oweals/gnunet.git] / src / include / gnunet_dht_service.h
index df9233f4d4aca8bfef6442a63dc8da2b2c4c4c48..83774826e54e58ff7e7521bca9ff3fd8e244052a 100644 (file)
@@ -121,6 +121,28 @@ GNUNET_DHT_disconnect (struct GNUNET_DHT_Handle *handle);
 
 /* *************** Standard API: get and put ******************* */
 
+
+/**
+ * Opaque handle to cancel a PUT operation.
+ */
+struct GNUNET_DHT_PutHandle;
+
+
+/**
+ * Type of a PUT continuation.  You must not call
+ * "GNUNET_DHT_disconnect" in this continuation.
+ *
+ * @param cls closure
+ * @param success GNUNET_OK if the PUT was transmitted,
+ *                GNUNET_NO on timeout,
+ *                GNUNET_SYSERR on disconnect from service
+ *                after the PUT message was transmitted
+ *                (so we don't know if it was received or not)
+ */
+typedef void (*GNUNET_DHT_PutContinuation)(void *cls,
+                                          int success);
+
+
 /**
  * Perform a PUT operation storing data in the DHT.
  *
@@ -135,19 +157,37 @@ GNUNET_DHT_disconnect (struct GNUNET_DHT_Handle *handle);
  * @param exp desired expiration time for the value
  * @param timeout how long to wait for transmission of this request
  * @param cont continuation to call when done (transmitting request to service)
- *        You must not call GNUNET_DHT_DISCONNECT in this continuation
+ *        You must not call "GNUNET_DHT_disconnect" in this continuation
  * @param cont_cls closure for cont
+ * @return handle to cancel the "PUT" operation, NULL on error
+ *        (size too big)
  */
-void
-GNUNET_DHT_put (struct GNUNET_DHT_Handle *handle, const GNUNET_HashCode * key,
+struct GNUNET_DHT_PutHandle *
+GNUNET_DHT_put (struct GNUNET_DHT_Handle *handle, const struct GNUNET_HashCode * key,
                 uint32_t desired_replication_level,
                 enum GNUNET_DHT_RouteOption options,
                 enum GNUNET_BLOCK_Type type, size_t size, const char *data,
                 struct GNUNET_TIME_Absolute exp,
-                struct GNUNET_TIME_Relative timeout, GNUNET_SCHEDULER_Task cont,
+                struct GNUNET_TIME_Relative timeout,
+               GNUNET_DHT_PutContinuation cont,
                 void *cont_cls);
 
 
+/**
+ * Cancels a DHT PUT operation.  Note that the PUT request may still
+ * go out over the network (we can't stop that); However, if the PUT
+ * has not yet been sent to the service, cancelling the PUT will stop
+ * this from happening (but there is no way for the user of this API
+ * to tell if that is the case).  The only use for this API is to 
+ * prevent a later call to 'cont' from "GNUNET_DHT_put" (i.e. because
+ * the system is shutting down).
+ *
+ * @param ph put operation to cancel ('cont' will no longer be called)
+ */
+void
+GNUNET_DHT_put_cancel (struct GNUNET_DHT_PutHandle *ph);
+
+
 /**
  * Iterator called on each result obtained for a DHT
  * operation that expects a reply
@@ -165,7 +205,7 @@ GNUNET_DHT_put (struct GNUNET_DHT_Handle *handle, const GNUNET_HashCode * key,
  */
 typedef void (*GNUNET_DHT_GetIterator) (void *cls,
                                         struct GNUNET_TIME_Absolute exp,
-                                        const GNUNET_HashCode * key,
+                                        const struct GNUNET_HashCode * key,
                                         const struct GNUNET_PeerIdentity *
                                         get_path, unsigned int get_path_length,
                                         const struct GNUNET_PeerIdentity *
@@ -180,7 +220,6 @@ typedef void (*GNUNET_DHT_GetIterator) (void *cls,
  * also "GNUNET_BLOCK_evaluate".
  *
  * @param handle handle to the DHT service
- * @param timeout how long to wait for transmission of this request to the service
  * @param type expected type of the response object
  * @param key the key to look up
  * @param desired_replication_level estimate of how many
@@ -195,8 +234,7 @@ typedef void (*GNUNET_DHT_GetIterator) (void *cls,
  */
 struct GNUNET_DHT_GetHandle *
 GNUNET_DHT_get_start (struct GNUNET_DHT_Handle *handle,
-                      struct GNUNET_TIME_Relative timeout,
-                      enum GNUNET_BLOCK_Type type, const GNUNET_HashCode * key,
+                      enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode * key,
                       uint32_t desired_replication_level,
                       enum GNUNET_DHT_RouteOption options, const void *xquery,
                       size_t xquery_size, GNUNET_DHT_GetIterator iter,
@@ -241,7 +279,7 @@ typedef void (*GNUNET_DHT_MonitorGetCB) (void *cls,
                                          uint32_t desired_replication_level, 
                                          unsigned int path_length,
                                          const struct GNUNET_PeerIdentity *path,
-                                         const GNUNET_HashCode * key);
+                                         const struct GNUNET_HashCode * key);
 
 /**
  * Callback called on each GET reply going through the DHT.
@@ -266,7 +304,7 @@ typedef void (*GNUNET_DHT_MonitorGetRespCB) (void *cls,
                                              * put_path,
                                              unsigned int put_path_length,
                                              struct GNUNET_TIME_Absolute exp,
-                                             const GNUNET_HashCode * key,
+                                             const struct GNUNET_HashCode * key,
                                              const void *data,
                                              size_t size);
 
@@ -293,7 +331,7 @@ typedef void (*GNUNET_DHT_MonitorPutCB) (void *cls,
                                          unsigned int path_length,
                                          const struct GNUNET_PeerIdentity *path,
                                          struct GNUNET_TIME_Absolute exp,
-                                         const GNUNET_HashCode * key,
+                                         const struct GNUNET_HashCode * key,
                                          const void *data,
                                          size_t size);
 
@@ -313,7 +351,7 @@ typedef void (*GNUNET_DHT_MonitorPutCB) (void *cls,
 struct GNUNET_DHT_MonitorHandle *
 GNUNET_DHT_monitor_start (struct GNUNET_DHT_Handle *handle,
                           enum GNUNET_BLOCK_Type type,
-                          const GNUNET_HashCode *key,
+                          const struct GNUNET_HashCode *key,
                           GNUNET_DHT_MonitorGetCB get_cb,
                           GNUNET_DHT_MonitorGetRespCB get_resp_cb,
                           GNUNET_DHT_MonitorPutCB put_cb,