uncrustify as demanded.
[oweals/gnunet.git] / src / core / gnunet-service-core.h
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2009, 2010, 2011 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 core/gnunet-service-core.h
23  * @brief Globals for gnunet-service-core
24  * @author Christian Grothoff
25  */
26 #ifndef GNUNET_SERVICE_CORE_H
27 #define GNUNET_SERVICE_CORE_H
28
29 #include "gnunet_statistics_service.h"
30 #include "gnunet_core_service.h"
31 #include "core.h"
32 #include "gnunet-service-core_typemap.h"
33
34
35 /**
36  * Opaque handle to a client.
37  */
38 struct GSC_Client;
39
40
41 /**
42  * Record kept for each request for transmission issued by a
43  * client that is still pending. (This struct is used by
44  * both the 'CLIENTS' and 'SESSIONS' subsystems.)
45  */
46 struct GSC_ClientActiveRequest {
47   /**
48    * Active requests are kept in a doubly-linked list of
49    * the respective target peer.
50    */
51   struct GSC_ClientActiveRequest *next;
52
53   /**
54    * Active requests are kept in a doubly-linked list of
55    * the respective target peer.
56    */
57   struct GSC_ClientActiveRequest *prev;
58
59   /**
60    * Handle to the client.
61    */
62   struct GSC_Client *client_handle;
63
64   /**
65    * Which peer is the message going to be for?
66    */
67   struct GNUNET_PeerIdentity target;
68
69   /**
70    * At what time did we first see this request?
71    */
72   struct GNUNET_TIME_Absolute received_time;
73
74   /**
75    * By what time would the client want to see this message out?
76    */
77   struct GNUNET_TIME_Absolute deadline;
78
79   /**
80    * How important is this request.
81    */
82   enum GNUNET_MQ_PriorityPreferences priority;
83
84   /**
85    * Has this request been solicited yet?
86    */
87   int was_solicited;
88
89   /**
90    * How many bytes does the client intend to send?
91    */
92   uint16_t msize;
93
94   /**
95    * Unique request ID (in big endian).
96    */
97   uint16_t smr_id;
98 };
99
100
101 /**
102  * Tell a client that we are ready to receive the message.
103  *
104  * @param car request that is now ready; the responsibility
105  *        for the handle remains shared between CLIENTS
106  *        and SESSIONS after this call.
107  */
108 void
109 GSC_CLIENTS_solicit_request(struct GSC_ClientActiveRequest *car);
110
111
112 /**
113  * We will never be ready to transmit the given message in (disconnect
114  * or invalid request).  Frees resources associated with @a car.  We
115  * don't explicitly tell the client, it'll learn with the disconnect
116  * (or violated the protocol).
117  *
118  * @param car request that now permanently failed; the
119  *        responsibility for the handle is now returned
120  *        to CLIENTS (SESSIONS is done with it).
121  * @param drop_client #GNUNET_YES if the client violated the protocol
122  *        and we should thus drop the connection
123  */
124 void
125 GSC_CLIENTS_reject_request(struct GSC_ClientActiveRequest *car,
126                            int drop_client);
127
128
129 /**
130  * Notify a particular client about a change to existing connection to
131  * one of our neighbours (check if the client is interested).  Called
132  * from #GSC_SESSIONS_notify_client_about_sessions().
133  *
134  * @param client client to notify
135  * @param neighbour identity of the neighbour that changed status
136  * @param tmap_old previous type map for the neighbour, NULL for connect
137  * @param tmap_new updated type map for the neighbour, NULL for disconnect
138  */
139 void
140 GSC_CLIENTS_notify_client_about_neighbour(
141   struct GSC_Client *client,
142   const struct GNUNET_PeerIdentity *neighbour,
143   const struct GSC_TypeMap *tmap_old,
144   const struct GSC_TypeMap *tmap_new);
145
146
147 /**
148  * Deliver P2P message to interested clients.  Caller must have checked
149  * that the sending peer actually lists the given message type as one
150  * of its types.
151  *
152  * @param sender peer who sent us the message
153  * @param msg the message
154  * @param msize number of bytes to transmit
155  * @param options options for checking which clients should
156  *        receive the message
157  */
158 void
159 GSC_CLIENTS_deliver_message(const struct GNUNET_PeerIdentity *sender,
160                             const struct GNUNET_MessageHeader *msg,
161                             uint16_t msize,
162                             uint32_t options);
163
164
165 /**
166  * Notify all clients about a change to existing session.
167  * Called from SESSIONS whenever there is a change in sessions
168  * or types processed by the respective peer.
169  *
170  * @param neighbour identity of the neighbour that changed status
171  * @param tmap_old previous type map for the neighbour, NULL for connect
172  * @param tmap_new updated type map for the neighbour, NULL for disconnect
173  */
174 void
175 GSC_CLIENTS_notify_clients_about_neighbour(
176   const struct GNUNET_PeerIdentity *neighbour,
177   const struct GSC_TypeMap *tmap_old,
178   const struct GSC_TypeMap *tmap_new);
179
180
181 /**
182  * Our configuration.
183  */
184 extern const struct GNUNET_CONFIGURATION_Handle *GSC_cfg;
185
186 /**
187  * For creating statistics.
188  */
189 extern struct GNUNET_STATISTICS_Handle *GSC_stats;
190
191 /**
192  * Our identity.
193  */
194 extern struct GNUNET_PeerIdentity GSC_my_identity;
195
196
197 #endif