aboutsummaryrefslogtreecommitdiff
path: root/src/cadet/gnunet-service-cadet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cadet/gnunet-service-cadet.h')
-rw-r--r--src/cadet/gnunet-service-cadet.h328
1 files changed, 0 insertions, 328 deletions
diff --git a/src/cadet/gnunet-service-cadet.h b/src/cadet/gnunet-service-cadet.h
deleted file mode 100644
index 3d61b9973..000000000
--- a/src/cadet/gnunet-service-cadet.h
+++ /dev/null
@@ -1,328 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2001-2017 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
21/**
22 * @file cadet/gnunet-service-cadet.h
23 * @brief Information we track per peer.
24 * @author Bartlomiej Polot
25 * @author Christian Grothoff
26 */
27#ifndef GNUNET_SERVICE_CADET_H
28#define GNUNET_SERVICE_CADET_H
29
30#include "gnunet_util_lib.h"
31#include "cadet_protocol.h"
32
33/**
34 * A client to the CADET service. Each client gets a unique handle.
35 */
36struct CadetClient;
37
38/**
39 * A peer in the GNUnet network. Each peer we care about must have one globally
40 * unique such handle within this process.
41 */
42struct CadetPeer;
43
44/**
45 * Tunnel from us to another peer. There can only be at most one
46 * tunnel per peer.
47 */
48struct CadetTunnel;
49
50/**
51 * Entry in the message queue of a `struct CadetTunnel`.
52 */
53struct CadetTunnelQueueEntry;
54
55/**
56 * A path of peer in the GNUnet network. There must only be at most
57 * once such path. Paths may share disjoint prefixes, but must all
58 * end at a unique suffix. Paths must also not be proper subsets of
59 * other existing paths.
60 */
61struct CadetPeerPath;
62
63/**
64 * Entry in a peer path.
65 */
66struct CadetPeerPathEntry
67{
68 /**
69 * DLL of paths where the same @e peer is at the same offset.
70 */
71 struct CadetPeerPathEntry *next;
72
73 /**
74 * DLL of paths where the same @e peer is at the same offset.
75 */
76 struct CadetPeerPathEntry *prev;
77
78 /**
79 * The peer at this offset of the path.
80 */
81 struct CadetPeer *peer;
82
83 /**
84 * Path this entry belongs to.
85 */
86 struct CadetPeerPath *path;
87
88 /**
89 * Connection using this path, or NULL for none.
90 */
91 struct CadetConnection *cc;
92
93 /**
94 * Path's historic score up to this point. Basically, how often did
95 * we succeed or fail to use the path up to this entry in a
96 * connection. Positive values indicate good experiences, negative
97 * values bad experiences. Code updating the score must guard
98 * against overflows.
99 */
100 int score;
101};
102
103/**
104 * Entry in list of connections used by tunnel, with metadata.
105 */
106struct CadetTConnection
107{
108 /**
109 * Next in DLL.
110 */
111 struct CadetTConnection *next;
112
113 /**
114 * Prev in DLL.
115 */
116 struct CadetTConnection *prev;
117
118 /**
119 * Connection handle.
120 */
121 struct CadetConnection *cc;
122
123 /**
124 * Tunnel this connection belongs to.
125 */
126 struct CadetTunnel *t;
127
128 /**
129 * Creation time, to keep oldest connection alive.
130 */
131 struct GNUNET_TIME_Absolute created;
132
133 /**
134 * Connection throughput, to keep fastest connection alive.
135 */
136 uint32_t throughput;
137
138 /**
139 * Is the connection currently ready for transmission?
140 */
141 int is_ready;
142};
143
144
145/**
146 * Port opened by a client.
147 */
148struct OpenPort
149{
150 /**
151 * Client that opened the port.
152 */
153 struct CadetClient *c;
154
155 /**
156 * Port number.
157 */
158 struct GNUNET_HashCode port;
159
160 /**
161 * Port hashed with our PID (matches incoming OPEN messages).
162 */
163 struct GNUNET_HashCode h_port;
164};
165
166
167/**
168 * Active path through the network (used by a tunnel). There may
169 * be at most one connection per path.
170 */
171struct CadetConnection;
172
173/**
174 * Description of a segment of a `struct CadetConnection` at the
175 * intermediate peers. Routes are basically entries in a peer's
176 * routing table for forwarding traffic. At both endpoints, the
177 * routes are terminated by a `struct CadetConnection`, which knows
178 * the complete `struct CadetPath` that is formed by the individual
179 * routes.
180 */
181struct CadetRoute;
182
183/**
184 * Logical end-to-end connection between clients. There can be
185 * any number of channels between clients.
186 */
187struct CadetChannel;
188
189/**
190 * Handle to our configuration.
191 */
192extern const struct GNUNET_CONFIGURATION_Handle *cfg;
193
194/**
195 * Handle to the statistics service.
196 */
197extern struct GNUNET_STATISTICS_Handle *stats;
198
199/**
200 * Handle to communicate with ATS.
201 */
202extern struct GNUNET_ATS_ConnectivityHandle *ats_ch;
203
204/**
205 * Local peer own ID.
206 */
207extern struct GNUNET_PeerIdentity my_full_id;
208
209/**
210 * Own private key.
211 */
212extern struct GNUNET_CRYPTO_EddsaPrivateKey *my_private_key;
213
214/**
215 * All ports clients of this peer have opened. Maps from
216 * a hashed port to a `struct OpenPort`.
217 */
218extern struct GNUNET_CONTAINER_MultiHashMap *open_ports;
219
220/**
221 * Map from `struct GNUNET_CADET_ConnectionTunnelIdentifier`
222 * hash codes to `struct CadetConnection` objects.
223 */
224extern struct GNUNET_CONTAINER_MultiShortmap *connections;
225
226/**
227 * Map from ports to channels where the ports were closed at the
228 * time we got the inbound connection.
229 * Indexed by h_port, contains `struct CadetChannel`.
230 */
231extern struct GNUNET_CONTAINER_MultiHashMap *loose_channels;
232
233/**
234 * Map from PIDs to `struct CadetPeer` entries.
235 */
236extern struct GNUNET_CONTAINER_MultiPeerMap *peers;
237
238/**
239 * How many messages are needed to trigger an AXOLOTL ratchet advance.
240 */
241extern unsigned long long ratchet_messages;
242
243/**
244 * How long until we trigger a ratched advance due to time.
245 */
246extern struct GNUNET_TIME_Relative ratchet_time;
247
248/**
249 * How frequently do we send KEEPALIVE messages on idle connections?
250 */
251extern struct GNUNET_TIME_Relative keepalive_period;
252
253/**
254 * Signal that shutdown is happening: prevent recovery measures.
255 */
256extern int shutting_down;
257
258/**
259 * Set to non-zero values to create random drops to test retransmissions.
260 */
261extern unsigned long long drop_percent;
262
263
264/**
265 * Send a message to a client.
266 *
267 * @param c client to get the message
268 * @param env envelope with the message
269 */
270void
271GSC_send_to_client (struct CadetClient *c,
272 struct GNUNET_MQ_Envelope *env);
273
274
275/**
276 * A channel was destroyed by the other peer. Tell our client.
277 *
278 * @param c client that lost a channel
279 * @param ccn channel identification number for the client
280 * @param ch the channel object
281 */
282void
283GSC_handle_remote_channel_destroy (struct CadetClient *c,
284 struct GNUNET_CADET_ClientChannelNumber ccn,
285 struct CadetChannel *ch);
286
287/**
288 * A client that created a loose channel that was not bound to a port
289 * disconnected, drop it from the #loose_channels list.
290 *
291 * @param h_port the hashed port the channel was trying to bind to
292 * @param ch the channel that was lost
293 */
294void
295GSC_drop_loose_channel (const struct GNUNET_HashCode *h_port,
296 struct CadetChannel *ch);
297
298
299/**
300 * Bind incoming channel to this client, and notify client
301 * about incoming connection.
302 *
303 * @param c client to bind to
304 * @param ch channel to be bound
305 * @param dest peer that establishes the connection
306 * @param port port number
307 * @param options options
308 * @return local channel number assigned to the new client
309 */
310struct GNUNET_CADET_ClientChannelNumber
311GSC_bind (struct CadetClient *c,
312 struct CadetChannel *ch,
313 struct CadetPeer *dest,
314 const struct GNUNET_HashCode *port,
315 uint32_t options);
316
317
318/**
319 * Return identifier for a client as a string.
320 *
321 * @param c client to identify
322 * @return string for debugging
323 */
324const char *
325GSC_2s (struct CadetClient *c);
326
327
328#endif