arg
[oweals/gnunet.git] / src / fs / gnunet-service-fs_pr.h
index 4357565c75705246b869846f9d49559828739814..2f828e2816cf865fbcdaa4484a6d0f1b49a371bc 100644 (file)
@@ -91,6 +91,16 @@ struct GSF_PendingRequestData
    */
   struct GNUNET_PeerIdentity target;
 
+  /**
+   * Fields for the plan module to track a DLL with the request.
+   */
+  struct GSF_RequestPlan *rp_head;
+
+  /**
+   * Fields for the plan module to track a DLL with the request.
+   */
+  struct GSF_RequestPlan *rp_tail;
+
   /**
    * Current TTL for the request.
    */
@@ -148,20 +158,22 @@ struct GSF_PendingRequestData
  * expiration.
  *
  * @param cls user-specified closure
+ * @param eval evaluation of the result
  * @param pr handle to the original pending request
+ * @param reply_anonymity_level anonymity level for the reply, UINT32_MAX for "unknown"
  * @param expiration when does 'data' expire?
+ * @param type type of the block
  * @param data response data, NULL on request expiration
  * @param data_len number of bytes in data
- * @param more GNUNET_YES if the request remains active (may call
- *             this function again), GNUNET_NO if the request is
- *             finished (client must not call GSF_pending_request_cancel_)
  */
 typedef void (*GSF_PendingRequestReplyHandler)(void *cls,
+                                              enum GNUNET_BLOCK_EvaluationResult eval,
                                               struct GSF_PendingRequest *pr,
+                                              uint32_t reply_anonymity_level,
                                               struct GNUNET_TIME_Absolute expiration,
+                                              enum GNUNET_BLOCK_Type type,
                                               const void *data,
-                                              size_t data_len,
-                                              int more);
+                                              size_t data_len);
 
 
 /**
@@ -178,6 +190,8 @@ typedef void (*GSF_PendingRequestReplyHandler)(void *cls,
  * @param anonymity_level desired anonymity level
  * @param priority maximum outgoing cummulative request priority to use
  * @param ttl current time-to-live for the request
+ * @param sender_pid peer ID to use for the sender when forwarding, 0 for none;
+ *                   reference counter is taken over by this function
  * @param replies_seen hash codes of known local replies
  * @param replies_seen_count size of the 'replies_seen' array
  * @param rh handle to call when we get a reply
@@ -196,6 +210,7 @@ GSF_pending_request_create_ (enum GSF_PendingRequestOptions options,
                             uint32_t anonymity_level,
                             uint32_t priority,
                             int32_t ttl,
+                            GNUNET_PEER_Id sender_pid,
                             const GNUNET_HashCode *replies_seen,
                             unsigned int replies_seen_count,
                             GSF_PendingRequestReplyHandler rh,
@@ -231,14 +246,12 @@ GSF_pending_request_get_data_ (struct GSF_PendingRequest *pr);
  * transmission to other peers (or at least determine its size).
  *
  * @param pr request to generate the message for
- * @param do_route are we routing the reply
  * @param buf_size number of bytes available in buf
  * @param buf where to copy the message (can be NULL)
  * @return number of bytes needed (if buf_size too small) or used
  */
 size_t
 GSF_pending_request_get_message_ (struct GSF_PendingRequest *pr,
-                                 int do_route,
                                  size_t buf_size,
                                  void *buf);
 
@@ -296,29 +309,38 @@ GSF_handle_p2p_content_ (struct GSF_ConnectedPeer *cp,
 
 
 /**
- * Iterator called on each result obtained for a DHT
- * operation that expects a reply
+ * Consider looking up the data in the DHT (anonymity-level permitting).
+ *
+ * @param pr the pending request to process
+ */
+void
+GSF_dht_lookup_ (struct GSF_PendingRequest *pr);
+
+
+/**
+ * Function to be called after we're done processing
+ * replies from the local lookup.
+ *
+ * @param cls closure
+ * @param pr the pending request we were processing
+ * @param result final datastore lookup result
+ */
+typedef void (*GSF_LocalLookupContinuation)(void *cls,
+                                           struct GSF_PendingRequest *pr,
+                                           enum GNUNET_BLOCK_EvaluationResult result);
+
+
+/**
+ * Look up the request in the local datastore.
  *
- * @param cls closure, the 'struct GSF_PendingRequest *'.
- * @param exp when will this value expire
- * @param key key of the result
- * @param get_path NULL-terminated array of pointers
- *                 to the peers on reverse GET path (or NULL if not recorded)
- * @param put_path NULL-terminated array of pointers
- *                 to the peers on the PUT path (or NULL if not recorded)
- * @param type type of the result
- * @param size number of bytes in data
- * @param data pointer to the result data
+ * @param pr the pending request to process
+ * @param cont function to call at the end
+ * @param cont_cls closure for cont
  */
 void
-GSF_handle_dht_reply_ (void *cls,
-                      struct GNUNET_TIME_Absolute exp,
-                      const GNUNET_HashCode * key,
-                      const struct GNUNET_PeerIdentity * const *get_path,
-                      const struct GNUNET_PeerIdentity * const *put_path,
-                      enum GNUNET_BLOCK_Type type,
-                      size_t size,
-                      const void *data);
+GSF_local_lookup_ (struct GSF_PendingRequest *pr,
+                  GSF_LocalLookupContinuation cont,
+                  void *cont_cls);
 
 
 /**