GNUnet  0.11.x
gnunet-service-fs_pr.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2009, 2010, 2011 GNUnet e.V.
4 
5  GNUnet is free software: you can redistribute it and/or modify it
6  under the terms of the GNU Affero General Public License as published
7  by the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  GNUnet is distributed in the hope that it will be useful, but
11  WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Affero General Public License for more details.
14 
15  You should have received a copy of the GNU Affero General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 
18  SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 
26 #ifndef GNUNET_SERVICE_FS_PR_H
27 #define GNUNET_SERVICE_FS_PR_H
28 
29 #include "gnunet-service-fs.h"
30 
31 
36 {
41 
46 
51 
56 
61 
66 
73 };
74 
75 
82 {
87 
92  const struct GNUNET_PeerIdentity *target;
93 
98 
103 
108 
113 
117  uint32_t anonymity_level;
118 
122  uint32_t priority;
123 
128 
136 
143  uint32_t respect_offered;
144 
149 
154 
158  unsigned int results_found;
159 
165 };
166 
167 
186 typedef void
189  struct GSF_PendingRequest *pr,
190  uint32_t reply_anonymity_level,
192  struct GNUNET_TIME_Absolute
194  enum GNUNET_BLOCK_Type type,
195  const void *data,
196  size_t data_len);
197 
198 
221 struct GSF_PendingRequest *
223  enum GNUNET_BLOCK_Type type,
224  const struct GNUNET_HashCode *query,
225  const struct GNUNET_PeerIdentity *target,
226  const char *bf_data,
227  size_t bf_size,
228  uint32_t mingle,
229  uint32_t anonymity_level,
230  uint32_t priority,
231  int32_t ttl,
234  const struct GNUNET_HashCode *replies_seen,
235  unsigned int replies_seen_count,
237  void *rh_cls);
238 
239 
248 void
250  const struct GNUNET_HashCode *replies_seen,
251  unsigned int replies_seen_count);
252 
253 
260 struct GSF_PendingRequestData *
262 
263 
270 int
272 
273 
283 int
285  struct GSF_PendingRequest *prb);
286 
287 
295 struct GNUNET_MQ_Envelope *
297 
298 
305 void
307  int full_cleanup);
308 
309 
319 typedef int
321  const struct GNUNET_HashCode *key,
322  struct GSF_PendingRequest *pr);
323 
324 
331 void
333  void *cls);
334 
335 
345 void
346 handle_p2p_put (void *cls,
347  const struct PutMessage *put);
348 
349 
355 void
357 
358 
364 void
366 
367 
376 typedef void
378  struct GSF_PendingRequest *pr,
380 
381 
389 void
392  void *cont_cls);
393 
394 
402 int
404  const struct GNUNET_PeerIdentity *target);
405 
406 
410 void
412 
413 
417 void
419 
420 
421 #endif
422 /* end of gnunet-service-fs_pr.h */
void GSF_cadet_lookup_(struct GSF_PendingRequest *pr)
Consider downloading via cadet (if possible)
void GSF_dht_lookup_(struct GSF_PendingRequest *pr)
Consider looking up the data in the DHT (anonymity-level permitting).
const struct GNUNET_PeerIdentity * target
Identity of a peer hosting the content, otherwise NULl.
int GSF_pending_request_test_active_(struct GSF_PendingRequest *pr)
Check if the given request is still active.
struct GSF_PendingRequest * GSF_pending_request_create_(enum GSF_PendingRequestOptions options, enum GNUNET_BLOCK_Type type, const struct GNUNET_HashCode *query, const struct GNUNET_PeerIdentity *target, const char *bf_data, size_t bf_size, uint32_t mingle, uint32_t anonymity_level, uint32_t priority, int32_t ttl, GNUNET_PEER_Id sender_pid, GNUNET_PEER_Id origin_pid, const struct GNUNET_HashCode *replies_seen, unsigned int replies_seen_count, GSF_PendingRequestReplyHandler rh, void *rh_cls)
Create a new pending request.
Request is allowed to refresh bloomfilter and change mingle value.
void GSF_pending_request_update_(struct GSF_PendingRequest *pr, const struct GNUNET_HashCode *replies_seen, unsigned int replies_seen_count)
Update a given pending request with additional replies that have been seen.
void GSF_local_lookup_(struct GSF_PendingRequest *pr, GSF_LocalLookupContinuation cont, void *cont_cls)
Look up the request in the local datastore.
static GNUNET_CronTime last_transmission
struct GNUNET_MQ_Envelope * GSF_pending_request_get_message_(struct GSF_PendingRequest *pr)
Generate the message corresponding to the given pending request for transmission to other peers...
Response from FS service with a result for a previous FS search.
Definition: fs.h:328
uint32_t num_transmissions
Counter for how often this request has been transmitted (estimate, because we might have the same req...
GNUNET_BLOCK_Type
Blocks in the datastore and the datacache must have a unique type.
void GSF_pending_request_cancel_(struct GSF_PendingRequest *pr, int full_cleanup)
Explicitly cancel a pending request.
struct GNUNET_TIME_Absolute ttl
Current TTL for the request.
No special options (P2P-default).
unsigned int results_found
Number of results we have found for this request so far.
uint32_t anonymity_level
Desired anonymity level.
struct GSF_PendingRequestPlanBijection * pr_head
Fields for the plan module to track a DLL with the request.
void GSF_iterate_pending_requests_(GSF_PendingRequestIterator it, void *cls)
Iterate over all pending requests.
Request priority is allowed to be exceeded.
shared data structures of gnunet-service-fs.c
struct GNUNET_TIME_Absolute start_time
When did we start with the request.
struct GNUNET_HashCode query
Primary query hash for this request.
void(* GSF_LocalLookupContinuation)(void *cls, struct GSF_PendingRequest *pr, enum GNUNET_BLOCK_EvaluationResult result)
Function to be called after we&#39;re done processing replies from the local lookup.
unsigned int replies_seen_count
Number of valid entries in the &#39;replies_seen&#39; array.
Request persists indefinitely (no expiration).
void GSF_pending_request_init_(void)
Setup the subsystem.
Public data (in the sense of not encapsulated within &#39;gnunet-service-fs_pr&#39;, not in the sense of netw...
GNUNET_PEER_Id origin_pid
Identity of the peer that we should never forward this query to since it originated this query (0 for...
unsigned int GNUNET_PEER_Id
A GNUNET_PEER_Id is simply a shorter version of a "struct GNUNET_PeerIdentifier" that can be used ins...
void handle_p2p_put(void *cls, const struct PutMessage *put)
Handle P2P "CONTENT" message.
int GSF_pending_request_test_target_(struct GSF_PendingRequest *pr, const struct GNUNET_PeerIdentity *target)
Is the given target a legitimate peer for forwarding the given request?
int(* GSF_PendingRequestIterator)(void *cls, const struct GNUNET_HashCode *key, struct GSF_PendingRequest *pr)
Signature of function called on each request.
struct GSF_PendingRequestData * GSF_pending_request_get_data_(struct GSF_PendingRequest *pr)
Obtain the public data associated with a pending request.
static int result
Global testing status.
void * rh_cls
Closure for rh.
uint32_t respect_offered
How much respect did we (in total) offer for this request so far (estimate, because we might have the...
void GSF_pending_request_done_(void)
Shutdown the subsystem.
enum GNUNET_BLOCK_Type type
Type of the requested block.
Request must only be processed locally.
A 512-bit hashcode.
GSF_PendingRequestReplyHandler rh
Function to call if we encounter a reply.
static char * expiration
Credential TTL.
Definition: gnunet-abd.c:96
struct GSF_PendingRequestPlanBijection * pr_tail
Fields for the plan module to track a DLL with the request.
struct GNUNET_HashCode key
The key used in the DHT.
uint32_t original_priority
Priority that this request (originally) had for us.
GNUNET_BLOCK_EvaluationResult
Possible ways for how a block may relate to a query.
The identity of the host (wraps the signing key of the peer).
Option mask for typical local requests.
enum GSF_PendingRequestOptions options
Options for the request.
Request must only be forwarded (no routing)
void(* GSF_PendingRequestReplyHandler)(void *cls, enum GNUNET_BLOCK_EvaluationResult eval, struct GSF_PendingRequest *pr, uint32_t reply_anonymity_level, struct GNUNET_TIME_Absolute expiration, struct GNUNET_TIME_Absolute last_transmission, enum GNUNET_BLOCK_Type type, const void *data, size_t data_len)
Handle a reply to a pending request.
int GSF_pending_request_is_compatible_(struct GSF_PendingRequest *pra, struct GSF_PendingRequest *prb)
Test if two pending requests are compatible (would generate the same query modulo filters and should ...
Time for absolute times used by GNUnet, in microseconds.
uint32_t priority
Priority that this request (still) has for us.
An active request.
uint32_t data
The data value.
int has_started
Has this request been started yet (local/p2p operations)? Or are we still constructing it...
GSF_PendingRequestOptions
Options for pending requests (bits to be ORed).
GNUNET_PEER_Id sender_pid
Identity of the peer that we should use for the &#39;sender&#39; (recipient of the response) when forwarding ...
struct GNUNET_HashCode * replies_seen
Array of hash codes of replies we&#39;ve already seen.
M:N binding of plans to pending requests.