GNUnet  0.10.x
gnunet_set_service.h
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet
3  Copyright (C) 2013, 2014 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 
36 #ifndef GNUNET_SET_SERVICE_H
37 #define GNUNET_SET_SERVICE_H
38 
39 #ifdef __cplusplus
40 extern "C"
41 {
42 #if 0 /* keep Emacsens' auto-indent happy */
43 }
44 #endif
45 #endif
46 
47 #include "gnunet_common.h"
48 #include "gnunet_time_lib.h"
50 
51 
55 #define GNUNET_SET_CONTEXT_MESSAGE_MAX_SIZE ((1<<16) - 1024)
56 
57 
61 struct GNUNET_SET_Handle;
62 
66 struct GNUNET_SET_Request;
67 
72 
77 
78 
83 {
88 
93 
98 };
99 
100 
105 {
117 
126 
135 
141 
148 
153 };
154 
155 
156 
161 {
168 
176 
183 
190 };
191 
192 
197 {
201  uint16_t size;
202 
206  uint16_t element_type;
207 
211  const void *data;
212 };
213 
214 
221 {
245 };
246 
247 
252 {
257 
261  union {
262  uint64_t num;
263  } v;
264 };
265 
266 
272 typedef void
273 (*GNUNET_SET_Continuation) (void *cls);
274 
275 
285 typedef void
287  const struct GNUNET_SET_Element *element,
288  uint64_t current_size,
290 
299 typedef int
301  const struct GNUNET_SET_Element *element);
302 
303 
319 typedef void
321  const struct GNUNET_PeerIdentity *other_peer,
322  const struct GNUNET_MessageHeader *context_msg,
323  struct GNUNET_SET_Request *request);
324 
325 
326 
327 typedef void
329  struct GNUNET_SET_Handle *copy);
330 
331 
343 struct GNUNET_SET_Handle *
346 
347 
361 int
363  const struct GNUNET_SET_Element *element,
365  void *cont_cls);
366 
367 
381 int
383  const struct GNUNET_SET_Element *element,
385  void *cont_cls);
386 
387 
388 void
391  void *cls);
392 
393 
402 void
404 
405 
421 GNUNET_SET_prepare (const struct GNUNET_PeerIdentity *other_peer,
422  const struct GNUNET_HashCode *app_id,
423  const struct GNUNET_MessageHeader *context_msg,
424  enum GNUNET_SET_ResultMode result_mode,
425  struct GNUNET_SET_Option options[],
427  void *result_cls);
428 
429 
446  enum GNUNET_SET_OperationType op_type,
447  const struct GNUNET_HashCode *app_id,
449  void *listen_cls);
450 
451 
460 void
462 
463 
480  enum GNUNET_SET_ResultMode result_mode,
481  struct GNUNET_SET_Option options[],
483  void *result_cls);
484 
485 
499 int
501  struct GNUNET_SET_Handle *set);
502 
503 
511 void
513 
514 
528 int
531  void *iter_cls);
532 
533 
541 void
543 
544 
552 struct GNUNET_SET_Element *
553 GNUNET_SET_element_dup (const struct GNUNET_SET_Element *element);
554 
555 
563 void
564 GNUNET_SET_element_hash (const struct GNUNET_SET_Element *element,
565  struct GNUNET_HashCode *ret_hash);
566 
567 
568 #if 0 /* keep Emacsens' auto-indent happy */
569 {
570 #endif
571 #ifdef __cplusplus
572 }
573 #endif
574 
575 #endif
576  /* end of group */
Client gets only elements that have been added to the set.
static void listen_cb(void *cls)
We have been notified that our listen socket has something to read.
A purely local set that does not support any operation.
struct GNUNET_SET_ListenHandle * GNUNET_SET_listen(const struct GNUNET_CONFIGURATION_Handle *cfg, enum GNUNET_SET_OperationType op_type, const struct GNUNET_HashCode *app_id, GNUNET_SET_ListenCallback listen_cb, void *listen_cls)
Wait for set operation requests for the given application ID.
Definition: set_api.c:1013
void * result_cls
Closure for result_cb.
Definition: set_api.c:146
int GNUNET_SET_remove_element(struct GNUNET_SET_Handle *set, const struct GNUNET_SET_Element *element, GNUNET_SET_Continuation cont, void *cont_cls)
Remove an element to the given set.
Definition: set_api.c:733
static struct GNUNET_VPN_RedirectionRequest * request
Opaque redirection request handle.
Definition: gnunet-vpn.c:41
int GNUNET_SET_add_element(struct GNUNET_SET_Handle *set, const struct GNUNET_SET_Element *element, GNUNET_SET_Continuation cont, void *cont_cls)
Add an element to the given set.
Definition: set_api.c:686
Handle for a set operation request from another peer.
Definition: set_api.c:115
struct GNUNET_GETOPT_CommandLineOption options[]
Definition: 002.c:5
void(* GNUNET_SET_ResultIterator)(void *cls, const struct GNUNET_SET_Element *element, uint64_t current_size, enum GNUNET_SET_Status status)
Callback for set operation results.
Element should be added to the result set of the remote peer, i.e.
Element stored in a set.
struct GNUNET_SET_Handle * GNUNET_SET_create(const struct GNUNET_CONFIGURATION_Handle *cfg, enum GNUNET_SET_OperationType op)
Create an empty set, supporting the specified operation.
Definition: set_api.c:656
Element should be added to the result set of the local peer, i.e.
Do not use the optimized set operation, but send full sets.
void * listen_cls
Closure for listen_cb.
Definition: set_api.c:210
void(* GNUNET_SET_CopyReadyCallback)(void *cls, struct GNUNET_SET_Handle *copy)
GNUNET_SET_OptionType
Possible options to pass to a set operation.
static struct GNUNET_HashCode app_id
struct GNUNET_SET_OperationHandle * GNUNET_SET_prepare(const struct GNUNET_PeerIdentity *other_peer, const struct GNUNET_HashCode *app_id, const struct GNUNET_MessageHeader *context_msg, enum GNUNET_SET_ResultMode result_mode, struct GNUNET_SET_Option options[], GNUNET_SET_ResultIterator result_cb, void *result_cls)
Prepare a set operation to be evaluated with another peer.
Definition: set_api.c:812
Client gets every element in the resulting set.
void(* GNUNET_SET_Continuation)(void *cls)
Continuation used for some of the set operations.
void GNUNET_SET_copy_lazy(struct GNUNET_SET_Handle *set, GNUNET_SET_CopyReadyCallback cb, void *cls)
Definition: set_api.c:1190
Success, all elements have been sent (and received).
int(* GNUNET_SET_ElementIterator)(void *cls, const struct GNUNET_SET_Element *element)
Iterator for set elements.
void GNUNET_SET_element_hash(const struct GNUNET_SET_Element *element, struct GNUNET_HashCode *ret_hash)
Hash a set element.
Definition: set_api.c:1242
const void * data
Actual data of the element.
void GNUNET_SET_destroy(struct GNUNET_SET_Handle *set)
Destroy the set handle, and free all associated resources.
Definition: set_api.c:771
GNUNET_SET_ResultIterator result_cb
Function to be called when we have a result, or an error.
Definition: set_api.c:141
Only use optimized set operations, even though for this particular set operation they might be much s...
The other peer refused to to the operation with us, or something went wrong.
Success, all elements have been returned (but the other peer might still be receiving some from us...
static struct GNUNET_TRANSPORT_OfferHelloHandle * oh
Active HELLO offering to transport service.
Everything went ok, we are transmitting an element of the result (in set, or to be removed from set...
GNUNET_SET_Status
Status for the result callback.
GNUNET_SET_ResultMode
The way results are given to the client.
uint16_t status
See PRISM_STATUS_*-constants.
A 512-bit hashcode.
Client gets notified of the required changes for both the local and the remote set.
Opaque handle to a set.
Definition: set_api.c:49
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition: gnunet-arm.c:104
void GNUNET_SET_listen_cancel(struct GNUNET_SET_ListenHandle *lh)
Cancel the given listen operation.
Definition: set_api.c:1047
GNUNET_SET_OperationType
The operation that a set set supports.
Option for set operations.
Handle to an operation.
Definition: set_api.c:135
The identity of the host (wraps the signing key of the peer).
int GNUNET_SET_commit(struct GNUNET_SET_OperationHandle *oh, struct GNUNET_SET_Handle *set)
Commit a set to be used with a set operation.
Definition: set_api.c:1124
configuration data
Definition: configuration.c:85
uint16_t size
Number of bytes in the buffer pointed to by data.
Opaque handle to a listen operation.
Definition: set_api.c:186
Client gets only elements that have been removed from the set.
void GNUNET_SET_operation_cancel(struct GNUNET_SET_OperationHandle *oh)
Cancel the given set operation.
Definition: set_api.c:515
struct GNUNET_SET_Element * GNUNET_SET_element_dup(const struct GNUNET_SET_Element *element)
Create a copy of an element.
Definition: set_api.c:1219
enum GNUNET_TESTBED_UnderlayLinkModelType type
the type of this model
Header for all communications.
Set intersection, only return elements that are in both sets.
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
static struct GNUNET_ARM_Operation * op
Current operation.
Definition: gnunet-arm.c:139
Set union, return all elements that are in at least one of the sets.
int GNUNET_SET_iterate(struct GNUNET_SET_Handle *set, GNUNET_SET_ElementIterator iter, void *iter_cls)
Iterate over all elements in the given set.
Definition: set_api.c:1168
void GNUNET_SET_iterate_cancel(struct GNUNET_SET_Handle *set)
Stop iteration over all elements in the given set.
void(* GNUNET_SET_ListenCallback)(void *cls, const struct GNUNET_PeerIdentity *other_peer, const struct GNUNET_MessageHeader *context_msg, struct GNUNET_SET_Request *request)
Called when another peer wants to do a set operation with the local peer.
uint16_t element_type
Application-specific element type.
struct GNUNET_SET_OperationHandle * GNUNET_SET_accept(struct GNUNET_SET_Request *request, enum GNUNET_SET_ResultMode result_mode, struct GNUNET_SET_Option options[], GNUNET_SET_ResultIterator result_cb, void *result_cls)
Accept a request we got via GNUNET_SET_listen().
Definition: set_api.c:1081
Fail set operations when the other peer shows weird behavior that might by a Byzantine fault...