cb wrapper for connecting peers
[oweals/gnunet.git] / src / transport / gnunet-service-transport_ats-new.h
1 /*
2      This file is part of GNUnet.
3      (C) 2010,2011 Christian Grothoff (and other contributing authors)
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., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20 /**
21  * @file transport/gnunet-service-transport_ats-new.h
22  * @brief automatic transport selection and outbound bandwidth determination
23  * @author Christian Grothoff
24  * @author Matthias Wachs
25  *
26  * TODO:
27  * - turn into service
28  * - extend API to express communication preferences to ATS 
29  *   (to be called DIRECTLY from apps, not from transport/core!)
30  */
31 #ifndef GNUNET_SERVICE_TRANSPORT_ATS_H
32 #define GNUNET_SERVICE_TRANSPORT_ATS_H
33
34 #include "gnunet_constants.h"
35 #include "gnunet_util_lib.h"
36 #include "gnunet_transport_service.h"
37 #include "gnunet_transport_plugin.h"
38
39
40 /**
41  * Handle to the ATS subsystem.
42  */
43 struct GST_AtsHandle;
44
45
46 /**
47  * Signature of a function called by ATS to notify the callee that the
48  * assigned bandwidth or address for a given peer was changed.  If the
49  * callback is called with address/bandwidth assignments of zero, the
50  * ATS disconnect function will still be called once the disconnect 
51  * actually happened.
52  *
53  * @param cls closure
54  * @param peer identity of the peer
55  * @param plugin_name name of the transport plugin, NULL to disconnect
56  * @param session session to use (if available)
57  * @param plugin_addr address to use (if available)
58  * @param plugin_addr_len number of bytes in addr
59  * @param bandwidth assigned outbound bandwidth for the connection
60  */
61 typedef void (*GNUNET_TRANSPORT_ATS_AllocationNotification)(void *cls,
62                                                             const struct GNUNET_PeerIdentity *peer,
63                                                             const char *plugin_name,
64                                                             struct Session *session,
65                                                             const void *plugin_addr,
66                                                             size_t plugin_addr_len,
67                                                             struct GNUNET_BANDWIDTH_Value32NBO bandwidth);
68
69
70 /**
71  * Initialize the ATS subsystem.
72  *
73  * @param cfg configuration to use
74  * @param alloc_cb notification to call whenever the allocation changed
75  * @param alloc_cb_cls closure for 'alloc_cb'
76  * @return ats context
77  */
78 struct GST_AtsHandle *
79 GST_ats_init (const struct GNUNET_CONFIGURATION_Handle *cfg,
80               GNUNET_TRANSPORT_ATS_AllocationNotification alloc_cb,
81               void *alloc_cb_cls);
82
83 /**
84  * Shutdown the ATS subsystem.
85  *
86  * @param atc handle
87  */
88 void
89 GST_ats_shutdown (struct GST_AtsHandle *atc);
90
91
92 /**
93  * We established a new connection with a peer (for example, because
94  * core asked for it or because the other peer connected to us).
95  * Calculate bandwidth assignments including the new peer.
96  *
97  * @param atc handle
98  * @param peer identity of the new peer
99  * @param plugin_name name of the currently used transport plugin
100  * @param session session in use (if available)
101  * @param plugin_addr address in use (if available)
102  * @param plugin_addr_len number of bytes in plugin_addr
103  * @param ats performance data for the connection
104  * @param ats_count number of performance records in 'ats'
105  */
106 void
107 GST_ats_peer_connect (struct GST_AtsHandle *atc,
108                       const struct GNUNET_PeerIdentity *peer,
109                       const char *plugin_name,
110                       struct Session *session,
111                       const void *plugin_addr,
112                       size_t plugin_addr_len,
113                       const struct GNUNET_TRANSPORT_ATS_Information *ats,
114                       uint32_t ats_count);
115
116
117 /**
118  * We disconnected from the given peer (for example, because ats, core
119  * or blacklist asked for it or because the other peer disconnected).
120  * Calculate bandwidth assignments without the peer.
121  *
122  * @param atc handle
123  * @param peer identity of the peer
124  */
125 void
126 GST_ats_peer_disconnect (struct GST_AtsHandle *atc,
127                          const struct GNUNET_PeerIdentity *peer);
128
129
130 /**
131  * A session got destroyed, stop including it as a valid address.
132  *
133  * @param atc handle
134  * @param peer identity of the peer
135  * @param session session handle that is no longer valid
136  */
137 void
138 GST_ats_session_destroyed (struct GST_AtsHandle *atc,
139                            const struct GNUNET_PeerIdentity *peer,
140                            const struct Session *session);
141
142
143 /**
144  * We have updated performance statistics for a given address.  Note
145  * that this function can be called for addresses that are currently
146  * in use as well as addresses that are valid but not actively in use.
147  * Furthermore, the peer may not even be connected to us right now (in
148  * which case the call may be ignored or the information may be stored
149  * for later use).  Update bandwidth assignments.
150  *
151  * @param atc handle
152  * @param peer identity of the new peer
153  * @param plugin_name name of the transport plugin
154  * @param session session handle (if available)
155  * @param plugin_addr address  (if available)
156  * @param plugin_addr_len number of bytes in plugin_addr
157  * @param ats performance data for the address
158  * @param ats_count number of performance records in 'ats'
159  */
160 void
161 GST_ats_address_update (struct GST_AtsHandle *atc,
162                         const struct GNUNET_PeerIdentity *peer,
163                         const char *plugin_name,
164                         struct Session *session,
165                         const void *plugin_addr,
166                         size_t plugin_addr_len,
167                         const struct GNUNET_TRANSPORT_ATS_Information *ats,
168                         uint32_t ats_count);
169
170
171 #endif
172 /* end of file gnunet-service-transport_ats.h */