transport: [fix] Typos in comments
[oweals/gnunet.git] / src / transport / gnunet-service-transport_neighbours.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2010-2015 GNUnet e.V.
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 3, or (at your
8      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      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18      Boston, MA 02110-1301, USA.
19 */
20
21 /**
22  * @file transport/gnunet-service-transport_neighbours.h
23  * @brief neighbour management API
24  * @author Christian Grothoff
25  */
26 #ifndef GNUNET_SERVICE_TRANSPORT_NEIGHBOURS_H
27 #define GNUNET_SERVICE_TRANSPORT_NEIGHBOURS_H
28
29 #include "gnunet_statistics_service.h"
30 #include "gnunet_transport_service.h"
31 #include "gnunet_transport_plugin.h"
32 #include "gnunet-service-transport.h"
33 #include "transport.h"
34 #include "gnunet_util_lib.h"
35
36
37 /**
38  * Initialize the neighbours subsystem.
39  *
40  * @param max_fds maximum number of fds to use
41  */
42 void
43 GST_neighbours_start (unsigned int max_fds);
44
45
46 /**
47  * Cleanup the neighbours subsystem.
48  */
49 void
50 GST_neighbours_stop (void);
51
52
53 /**
54  * Test if we're connected to the given peer.
55  *
56  * @param target peer to test
57  * @return #GNUNET_YES if we are connected, #GNUNET_NO if not
58  */
59 int
60 GST_neighbours_test_connected (const struct GNUNET_PeerIdentity *target);
61
62
63 /**
64  * Function called after the transmission is done.
65  *
66  * @param cls closure
67  * @param success #GNUNET_OK on success, #GNUNET_NO on failure, #GNUNET_SYSERR if we're not connected
68  * @param bytes_payload how much payload was transmitted
69  * @param bytes_on_wire how many bytes were used on the wire
70  */
71 typedef void
72 (*GST_NeighbourSendContinuation) (void *cls,
73                                   int success,
74                                   size_t bytes_payload,
75                                   size_t bytes_on_wire);
76
77
78 /**
79  * Transmit a message to the given target using the active connection.
80  *
81  * @param target destination
82  * @param msg message to send
83  * @param msg_size number of bytes in @a msg
84  * @param timeout when to fail with timeout
85  * @param cont function to call when done
86  * @param cont_cls closure for @a cont
87  */
88 void
89 GST_neighbours_send (const struct GNUNET_PeerIdentity *target,
90                      const void *msg,
91                      size_t msg_size,
92                      struct GNUNET_TIME_Relative timeout,
93                      GST_NeighbourSendContinuation cont, void *cont_cls);
94
95
96 /**
97  * We have received a message from the given sender.
98  * How long should we delay before receiving more?
99  * (Also used to keep the peer marked as live).
100  *
101  * @param sender sender of the message
102  * @param size size of the message
103  * @param do_forward set to #GNUNET_YES if the message should be forwarded to clients
104  *                   #GNUNET_NO if the neighbour is not connected or violates the quota
105  * @return how long to wait before reading more from this sender
106  */
107 struct GNUNET_TIME_Relative
108 GST_neighbours_calculate_receive_delay (const struct GNUNET_PeerIdentity *sender,
109                                         ssize_t size,
110                                         int *do_forward);
111
112
113 /**
114  * Keep the connection to the given neighbour alive longer,
115  * we received a KEEPALIVE (or equivalent); send a response.
116  *
117  * @param neighbour neighbour to keep alive (by sending keep alive response)
118  * @param m the keep alive message containing the nonce to respond to
119  */
120 void
121 GST_neighbours_keepalive (const struct GNUNET_PeerIdentity *neighbour,
122                           const struct GNUNET_MessageHeader *m);
123
124
125 /**
126  * We received a KEEP_ALIVE_RESPONSE message and use this to calculate
127  * latency to this peer.  Pass the updated information (existing ats
128  * plus calculated latency) to ATS.
129  *
130  * @param neighbour neighbour to keep alive
131  * @param m the message containing the keep alive response
132  */
133 void
134 GST_neighbours_keepalive_response (const struct GNUNET_PeerIdentity *neighbour,
135                                    const struct GNUNET_MessageHeader *m);
136
137
138 /**
139  * If we have an active connection to the given target, it must be shutdown.
140  *
141  * @param target peer to disconnect from
142  */
143 void
144 GST_neighbours_force_disconnect (const struct GNUNET_PeerIdentity *target);
145
146
147 /**
148  * Function called for each neighbour.
149  *
150  * @param cls closure
151  * @param peer identity of the neighbour
152  * @param address the address of the neighbour
153  * @param state current state the peer is in
154  * @param state_timeout timeout for this state
155  * @param bandwidth_in inbound quota in NBO
156  * @param bandwidth_out outbound quota in NBO
157  */
158 typedef void
159 (*GST_NeighbourIterator) (void *cls,
160                           const struct GNUNET_PeerIdentity *peer,
161                           const struct GNUNET_HELLO_Address *address,
162                           enum GNUNET_TRANSPORT_PeerState state,
163                           struct GNUNET_TIME_Absolute state_timeout,
164                           struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
165                           struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out);
166
167
168 /**
169  * Iterate over all connected neighbours.
170  *
171  * @param cb function to call
172  * @param cb_cls closure for @a cb
173  */
174 void
175 GST_neighbours_iterate (GST_NeighbourIterator cb, void *cb_cls);
176
177
178 /**
179  * A session was terminated. Take note.
180  *
181  * @param peer identity of the peer where the session died
182  * @param session session that is gone
183  * @return #GNUNET_YES if this was a session used, #GNUNET_NO if
184  *        this session was not in use
185  */
186 int
187 GST_neighbours_session_terminated (const struct GNUNET_PeerIdentity *peer,
188                                    struct GNUNET_ATS_Session *session);
189
190
191 /**
192  * Track information about data we received from the
193  * given address (used to notify ATS about our utilization
194  * of allocated resources).
195  *
196  * @param address the address we got data from
197  * @param message the message we received (really only the size is used)
198  */
199 void
200 GST_neighbours_notify_data_recv (const struct GNUNET_HELLO_Address *address,
201                                  const struct GNUNET_MessageHeader *message);
202
203
204 /**
205  * Track information about data we transmitted using the given @a
206  * address and @a session (used to notify ATS about our utilization of
207  * allocated resources).
208  *
209  * @param address the address we transmitted data to
210  * @param session session we used to transmit data
211  * @param message the message we sent (really only the size is used)
212  */
213 void
214 GST_neighbours_notify_data_sent (const struct GNUNET_HELLO_Address *address,
215                                  struct GNUNET_ATS_Session *session,
216                                  size_t size);
217
218
219 /**
220  * For an existing neighbour record, set the active connection to
221  * use the given address.
222  *
223  * @param address address of the other peer to start using
224  * @param session session to use (or NULL)
225  * @param bandwidth_in inbound quota to be used when connection is up
226  * @param bandwidth_out outbound quota to be used when connection is up
227  */
228 void
229 GST_neighbours_switch_to_address (const struct GNUNET_HELLO_Address *address,
230                                   struct GNUNET_ATS_Session *session,
231                                   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
232                                   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out);
233
234
235 /**
236  * We received a 'SESSION_CONNECT' message from the other peer.
237  * Consider switching to it.
238  *
239  * @param message possibly a 'struct GNUNET_ATS_SessionConnectMessage' (check format)
240  * @param peer identity of the peer to switch the address for
241  * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error
242  */
243 int
244 GST_neighbours_handle_session_syn (const struct GNUNET_MessageHeader *message,
245                                    const struct GNUNET_PeerIdentity *peer);
246
247
248 /**
249  * We received a 'SESSION_CONNECT_ACK' message from the other peer.
250  * Consider switching to it.
251  *
252  * @param message possibly a `struct GNUNET_ATS_SessionConnectMessage` (check format)
253  * @param address address of the other peer
254  * @param session session to use (or NULL)
255  * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error
256  */
257 int
258 GST_neighbours_handle_session_syn_ack (const struct GNUNET_MessageHeader *message,
259                                        const struct GNUNET_HELLO_Address *address,
260                                        struct GNUNET_ATS_Session *session);
261
262
263 /**
264  * We received a 'SESSION_ACK' message from the other peer.
265  * If we sent a 'CONNECT_ACK' last, this means we are now
266  * connected.  Otherwise, do nothing.
267  *
268  * @param message possibly a 'struct GNUNET_ATS_SessionConnectMessage' (check format)
269  * @param address address of the other peer
270  * @param session session to use (or NULL)
271  * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error
272  */
273 int
274 GST_neighbours_handle_session_ack (const struct GNUNET_MessageHeader *message,
275                                    const struct GNUNET_HELLO_Address *address,
276                                    struct GNUNET_ATS_Session *session);
277
278
279 /**
280  * Obtain current address information for the given neighbour.
281  *
282  * @param peer
283  * @return address currently used
284  */
285 const struct GNUNET_HELLO_Address *
286 GST_neighbour_get_current_address (const struct GNUNET_PeerIdentity *peer);
287
288
289 /**
290  * We received a quoat message from the given peer,
291  * validate and process.
292  *
293  * @param peer sender of the message
294  * @param msg the quota message
295  */
296 void
297 GST_neighbours_handle_quota_message (const struct GNUNET_PeerIdentity *peer,
298                                      const struct GNUNET_MessageHeader *msg);
299
300
301 /**
302  * We received a disconnect message from the given peer,
303  * validate and process.
304  *
305  * @param peer sender of the message
306  * @param msg the disconnect message
307  */
308 void
309 GST_neighbours_handle_disconnect_message (const struct GNUNET_PeerIdentity *peer,
310                                           const struct GNUNET_MessageHeader *msg);
311
312
313 #endif
314 /* end of file gnunet-service-transport_neighbours.h */