2 This file is part of GNUnet.
3 (C) 2009 Christian Grothoff (and other contributing authors)
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 2, or (at your
8 option) any later version.
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.
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.
23 * @brief common internal definitions for core service
24 * @author Christian Grothoff
26 #include "gnunet_crypto_lib.h"
27 #include "gnunet_time_lib.h"
30 * General core debugging.
32 #define DEBUG_CORE GNUNET_NO
35 * Debugging interaction core-clients.
37 #define DEBUG_CORE_CLIENT GNUNET_NO
40 * Definition of bits in the InitMessage's options field that specify
41 * which events this client cares about. Note that inbound messages
42 * for handlers that were specifically registered are always
43 * transmitted to the client.
45 #define GNUNET_CORE_OPTION_NOTHING 0
46 #define GNUNET_CORE_OPTION_SEND_CONNECT 1
47 #define GNUNET_CORE_OPTION_SEND_DISCONNECT 2
48 #define GNUNET_CORE_OPTION_SEND_BFC 4
49 #define GNUNET_CORE_OPTION_SEND_FULL_INBOUND 8
50 #define GNUNET_CORE_OPTION_SEND_HDR_INBOUND 16
51 #define GNUNET_CORE_OPTION_SEND_FULL_OUTBOUND 32
52 #define GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND 64
56 * Message transmitted core clients to gnunet-service-core
57 * to start the interaction. This header is followed by
58 * uint16_t type values specifying which messages this
59 * client is interested in.
65 * Header with type GNUNET_MESSAGE_TYPE_CORE_INIT.
67 struct GNUNET_MessageHeader header;
70 * Options, see GNUNET_CORE_OPTION_ values.
72 uint32_t options GNUNET_PACKED;
78 * Message transmitted by the gnunet-service-core process
79 * to its clients in response to an INIT message.
81 struct InitReplyMessage
85 * Header with type GNUNET_MESSAGE_TYPE_CORE_INIT_REPLY
87 struct GNUNET_MessageHeader header;
92 uint32_t reserved GNUNET_PACKED;
95 * Public key of the local peer.
97 struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded publicKey;
103 * Message sent by the service to clients to notify them
104 * about a peer connecting or disconnecting.
106 struct ConnectNotifyMessage
109 * Header with type GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT
110 * or GNUNET_MESSAGE_TYPE_CORE_NOTIFY_DISCONNECT.
112 struct GNUNET_MessageHeader header;
117 uint32_t reserved GNUNET_PACKED;
120 * Identity of the connecting peer.
122 struct GNUNET_PeerIdentity peer;
129 * Message sent by the service to clients to notify them about
130 * messages being received or transmitted. This overall message is
131 * followed by the real message, or just the header of the real
132 * message (depending on the client's preferences). The receiver can
133 * tell if he got the full message or only a partial message by
134 * looking at the size field in the header of NotifyTrafficMessage and
135 * checking it with the size field in the message that follows.
137 struct NotifyTrafficMessage
140 * Header with type GNUNET_MESSAGE_TYPE_CORE_NOTIFY_INBOUND
141 * or GNUNET_MESSAGE_TYPE_CORE_NOTIFY_OUTBOUND.
143 struct GNUNET_MessageHeader header;
148 uint32_t reserved GNUNET_PACKED;
151 * Identity of the receiver or sender.
153 struct GNUNET_PeerIdentity peer;
159 * Message sent to the core asking for configuration
160 * information and possibly preference changes.
162 struct RequestConfigureMessage
165 * Header with type GNUNET_MESSAGE_TYPE_CORE_REQUEST_CONFIGURE
167 struct GNUNET_MessageHeader header;
172 uint32_t reserved GNUNET_PACKED;
175 * Limit the number of bytes of outbound traffic to this
176 * peer to at most the specified amount (naturally, the
177 * amount is also limited by the receiving peer).
179 uint32_t limit_outbound_bpm GNUNET_PACKED;
182 * Number of bytes of inbound traffic to reserve, can
183 * be negative (to unreserve). NBO.
185 int32_t reserve_inbound GNUNET_PACKED;
188 * Increment the current traffic preference for the given peer by
189 * the specified amont. The traffic preference is used to determine
190 * the share of bandwidth this peer will typcially be assigned.
192 uint64_t preference_change GNUNET_PACKED;
195 * Identity of the peer being configured.
197 struct GNUNET_PeerIdentity peer;
203 * Response from the core to a "RequestConfigureMessage"
204 * providing traffic status information for a peer.
206 struct ConfigurationInfoMessage
209 * Header with type GNUNET_MESSAGE_TYPE_CORE_CONFIGURATION_INFO
211 struct GNUNET_MessageHeader header;
214 * Amount of traffic (inbound number of bytes) that was reserved in
215 * response to the configuration change request. Negative for
216 * "unreserved" bytes.
218 int32_t reserved_amount GNUNET_PACKED;
221 * Available bandwidth in (in bytes per minute) for this peer.
222 * 0 if we have been disconnected.
224 uint32_t bpm_in GNUNET_PACKED;
227 * Available bandwidth out (in bytes per minute) for this peer,
228 * 0 if we have been disconnected.
230 uint32_t bpm_out GNUNET_PACKED;
233 * Latest transport latency estimate for the peer.
234 * FOREVER if we have been disconnected.
236 struct GNUNET_TIME_RelativeNBO latency;
239 * Current traffic preference for the peer.
240 * 0 if we have been disconnected.
245 * Identity of the receiver or sender.
247 struct GNUNET_PeerIdentity peer;
253 * Core asking a client to generate traffic for a particular
256 struct SolicitTrafficMessage
259 * Header with type GNUNET_MESSAGE_TYPE_CORE_SOLICIT_TRAFFIC
260 * or GNUNET_MESSAGE_TYPE_CORE_RECV_OK
262 struct GNUNET_MessageHeader header;
265 * Number of bytes of traffic being solicited.
267 uint32_t solicit_size GNUNET_PACKED;
270 * Identity of the receiver or sender.
272 struct GNUNET_PeerIdentity peer;
278 * Client asking core to transmit a particular message to
279 * a particular target. Does NOT have to be solicited.
284 * Header with type GNUNET_MESSAGE_TYPE_CORE_SEND
286 struct GNUNET_MessageHeader header;
289 * How important is this message?
291 uint32_t priority GNUNET_PACKED;
294 * By what time would the sender really like to see this
295 * message transmitted?
297 struct GNUNET_TIME_AbsoluteNBO deadline;
300 * Identity of the receiver or sender.
302 struct GNUNET_PeerIdentity peer;