GNUnet  0.11.x
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 
55  struct GNUNET_HashCode app_idX;
56 
57  /* rest: optional message */
58 };
59 
60 
67 struct IBFMessage
68 {
73 
78  uint8_t order;
79 
83  uint8_t reserved1;
84 
89 
94 
98  uint32_t salt GNUNET_PACKED;
99 
100  /* rest: buckets */
101 };
102 
103 
105 {
110 
114  uint32_t salt GNUNET_PACKED;
115 
120 
121  /* rest: inquiry IBF keys */
122 };
123 
124 
131 {
136 
141 };
142 
143 
147 struct BFMessage
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.