GNUnet 0.21.1
gnunet-service-set_protocol.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 */
26#ifndef SET_PROTOCOL_H
27#define SET_PROTOCOL_H
28
29#include "platform.h"
30#include "gnunet_common.h"
31
32
34
36{
41
46
51
56
57 /* rest: optional message */
58};
59
60
68{
73
78 uint8_t order;
79
83 uint8_t reserved1;
84
89
94
99
100 /* rest: buckets */
101};
102
103
105{
110
115
120
121 /* rest: inquiry IBF keys */
122};
123
124
131{
136
141};
142
143
148{
153
158
164
169
174
179
183};
184
185
193{
198
203
208};
209
210
215{
220
221 uint64_t set_size;
222};
223
225
226#endif
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32;.
#define GNUNET_PACKED
gcc-ism to get packed structs.
Bloom filter messages exchanged for set intersection calculation.
struct GNUNET_HashCode element_xor_hash
XOR of all hashes over all elements remaining in the set.
uint32_t bits_per_element
Number of bits (k-value) used in encoding the bloomfilter.
uint32_t sender_element_count
Number of elements the sender still has in the set.
uint32_t bloomfilter_total_length
Total length of the bloomfilter data.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_BF.
uint32_t sender_mutator
Mutator used with this bloomfilter.
A 512-bit hashcode.
Header for all communications.
Message containing buckets of an invertible bloom filter.
uint32_t offset
Offset of the strata in the rest of the message.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_UNION_P2P_IBF.
uint8_t reserved1
Padding, must be 0.
uint16_t reserved2
Padding, must be 0.
uint8_t order
Order of the whole ibf, where num_buckets = 2^order.
uint32_t salt
Salt used when hashing elements for this IBF.
estimate_best_mode_of_operation (uint64_t avg_element_size, uint64_t local_set_size,...
uint32_t reserved
Reserved, set to 0.
uint32_t salt
Salt used when hashing elements for this inquiry.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_UNION_P2P_IBF.
Last message, send to confirm the final set.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_DONE.
uint32_t final_element_count
Final number of elements in intersection.
struct GNUNET_HashCode element_xor_hash
XOR of all hashes over all elements remaining in the set.
During intersection, the first (and possibly second) message send it the number of elements in the se...
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_INTERSECTION_P2P_ELEMENT_INFO.
uint32_t sender_element_count
mutator used with this bloomfilter.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_P2P_OPERATION_REQUEST.
uint32_t operation
Operation to request, values from enum GNUNET_SET_OperationType
uint32_t element_count
For Intersection: my element count.
struct GNUNET_HashCode app_idX
Application-specific identifier of the request.
Strata estimator together with the peer's overall set size.
struct GNUNET_MessageHeader header
Type: GNUNET_MESSAGE_TYPE_SET_UNION_P2P_SE(C)
uint64_t set_size
Size of the local set.