X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcore.h;h=03e328ca835e9e505e9f51a50c22debbeb5282b0;hb=fca0750a1b767e2ccc88a585ec598ca29e622a1e;hp=20c3ddc4b0dcdd4ace05893a0cb76e05e330688d;hpb=87b254030acd37b6714565c5ac2e803da743d777;p=oweals%2Fgnunet.git diff --git a/src/core/core.h b/src/core/core.h index 20c3ddc4b..03e328ca8 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -1,10 +1,10 @@ /* This file is part of GNUnet. - (C) 2009 Christian Grothoff (and other contributing authors) + (C) 2009, 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, or (at your + by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but @@ -23,18 +23,18 @@ * @brief common internal definitions for core service * @author Christian Grothoff */ +#ifndef CORE_H +#define CORE_H + +#include "gnunet_bandwidth_lib.h" +#include "gnunet_transport_service.h" #include "gnunet_crypto_lib.h" #include "gnunet_time_lib.h" /** * General core debugging. */ -#define DEBUG_CORE GNUNET_YES - -/** - * Debugging interaction core-clients. - */ -#define DEBUG_CORE_CLIENT GNUNET_YES +#define DEBUG_CORE GNUNET_EXTRA_LOGGING /** * Definition of bits in the InitMessage's options field that specify @@ -43,15 +43,15 @@ * transmitted to the client. */ #define GNUNET_CORE_OPTION_NOTHING 0 -#define GNUNET_CORE_OPTION_SEND_PRE_CONNECT 1 -#define GNUNET_CORE_OPTION_SEND_CONNECT 2 -#define GNUNET_CORE_OPTION_SEND_DISCONNECT 4 +#define GNUNET_CORE_OPTION_SEND_STATUS_CHANGE 4 #define GNUNET_CORE_OPTION_SEND_FULL_INBOUND 8 #define GNUNET_CORE_OPTION_SEND_HDR_INBOUND 16 #define GNUNET_CORE_OPTION_SEND_FULL_OUTBOUND 32 #define GNUNET_CORE_OPTION_SEND_HDR_OUTBOUND 64 +GNUNET_NETWORK_STRUCT_BEGIN + /** * Message transmitted core clients to gnunet-service-core * to start the interaction. This header is followed by @@ -94,40 +94,79 @@ struct InitReplyMessage /** * Public key of the local peer. */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded publicKey; + struct GNUNET_PeerIdentity my_identity; }; /** * Message sent by the service to clients to notify them - * about a peer connecting or disconnecting. + * about a peer connecting. */ struct ConnectNotifyMessage { /** * Header with type GNUNET_MESSAGE_TYPE_CORE_NOTIFY_CONNECT - * or GNUNET_MESSAGE_TYPE_CORE_NOTIFY_DISCONNECT. */ struct GNUNET_MessageHeader header; /** - * Distance to the peer. + * Number of ATS key-value pairs that follow this struct */ - uint32_t distance GNUNET_PACKED; + uint32_t ats_count GNUNET_PACKED; /** - * Currently observed latency. + * Identity of the connecting peer. */ - struct GNUNET_TIME_RelativeNBO latency; + struct GNUNET_PeerIdentity peer; + +}; + +/** + * Message sent by the service to clients to notify them + * about a peer changing status. + */ +struct PeerStatusNotifyMessage +{ /** - * Identity of the connecting peer. + * Header with type GNUNET_MESSAGE_TYPE_CORE_NOTIFY_PEER_STATUS + */ + struct GNUNET_MessageHeader header; + + /** + * Number of ATS key-value pairs that follow this struct + * (excluding the 0-terminator). + */ + uint32_t ats_count GNUNET_PACKED; + + /** + * When the peer would time out (unless we see activity) + */ + struct GNUNET_TIME_AbsoluteNBO timeout; + + /** + * Available bandwidth from the peer. + */ + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in; + + /** + * Available bandwidth to the peer. + */ + struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out; + + /** + * Identity of the peer. */ struct GNUNET_PeerIdentity peer; -}; + /** + * First of the ATS information blocks (we must have at least + * one due to the 0-termination requirement). + */ + struct GNUNET_ATS_Information ats; +}; /** @@ -154,7 +193,6 @@ struct DisconnectNotifyMessage }; - /** * Message sent by the service to clients to notify them about * messages being received or transmitted. This overall message is @@ -173,105 +211,96 @@ struct NotifyTrafficMessage struct GNUNET_MessageHeader header; /** - * Distance to the peer. - */ - uint32_t distance GNUNET_PACKED; - - /** - * Currently observed latency. + * Number of ATS key-value pairs that follow this struct + * (excluding the 0-terminator). */ - struct GNUNET_TIME_RelativeNBO latency; + uint32_t ats_count GNUNET_PACKED; /** * Identity of the receiver or sender. */ struct GNUNET_PeerIdentity peer; + /* Followed by ATS information blocks: + * struct GNUNET_ATS_Information ats[ats_count] + */ + + /* Followed by payload (message or just header), variable size */ }; /** - * Message sent to the core asking for configuration - * information and possibly preference changes. + * Client notifying core about the maximum-priority + * message it has in the queue for a particular target. */ -struct RequestInfoMessage +struct SendMessageRequest { /** - * Header with type GNUNET_MESSAGE_TYPE_CORE_REQUEST_CONFIGURE + * Header with type GNUNET_MESSAGE_TYPE_CORE_SEND_REQUEST */ struct GNUNET_MessageHeader header; /** - * Always zero. + * How important is this message? */ - uint32_t reserved GNUNET_PACKED; + uint32_t priority GNUNET_PACKED; /** - * Limit the number of bytes of outbound traffic to this - * peer to at most the specified amount (naturally, the - * amount is also limited by the receiving peer). + * By what time would the sender really like to see this + * message transmitted? */ - uint32_t limit_outbound_bpm GNUNET_PACKED; + struct GNUNET_TIME_AbsoluteNBO deadline; /** - * Number of bytes of inbound traffic to reserve, can - * be negative (to unreserve). NBO. + * Identity of the intended target. */ - int32_t reserve_inbound GNUNET_PACKED; + struct GNUNET_PeerIdentity peer; /** - * Increment the current traffic preference for the given peer by - * the specified amont. The traffic preference is used to determine - * the share of bandwidth this peer will typcially be assigned. + * How large is the client's message queue for this peer? */ - uint64_t preference_change GNUNET_PACKED; + uint32_t queue_size GNUNET_PACKED; /** - * Identity of the peer being configured. + * How large is the message? */ - struct GNUNET_PeerIdentity peer; + uint16_t size GNUNET_PACKED; + + /** + * Counter for this peer to match SMRs to replies. + */ + uint16_t smr_id GNUNET_PACKED; }; /** - * Response from the core to a "RequestInfoMessage" - * providing traffic status information for a peer. + * Core notifying client that it is allowed to now + * transmit a message to the given target + * (response to GNUNET_MESSAGE_TYPE_CORE_SEND_REQUEST). */ -struct ConfigurationInfoMessage +struct SendMessageReady { /** - * Header with type GNUNET_MESSAGE_TYPE_CORE_CONFIGURATION_INFO + * Header with type GNUNET_MESSAGE_TYPE_CORE_SEND_READY */ struct GNUNET_MessageHeader header; /** - * Amount of traffic (inbound number of bytes) that was reserved in - * response to the configuration change request. Negative for - * "unreserved" bytes. - */ - int32_t reserved_amount GNUNET_PACKED; - - /** - * Available bandwidth in (in bytes per minute) for this peer. - * 0 if we have been disconnected. + * How many bytes are allowed for transmission? + * Guaranteed to be at least as big as the requested size, + * or ZERO if the request is rejected (will timeout, + * peer disconnected, queue full, etc.). */ - uint32_t bpm_in GNUNET_PACKED; + uint16_t size GNUNET_PACKED; /** - * Available bandwidth out (in bytes per minute) for this peer, - * 0 if we have been disconnected. + * smr_id from the request. */ - uint32_t bpm_out GNUNET_PACKED; + uint16_t smr_id GNUNET_PACKED; /** - * Current traffic preference for the peer. - * 0 if we have been disconnected. - */ - uint64_t preference; - - /** - * Identity of the receiver or sender. + * Identity of the intended target. */ struct GNUNET_PeerIdentity peer; @@ -279,8 +308,8 @@ struct ConfigurationInfoMessage /** - * Client asking core to transmit a particular message to - * a particular target. + * Client asking core to transmit a particular message to a particular + * target (response to GNUNET_MESSAGE_TYPE_CORE_SEND_READY). */ struct SendMessage { @@ -301,38 +330,23 @@ struct SendMessage struct GNUNET_TIME_AbsoluteNBO deadline; /** - * Identity of the receiver or sender. + * Identity of the intended receiver. */ struct GNUNET_PeerIdentity peer; -}; - - -/** - * Client asking core to connect to a particular target. There is no - * response from the core to this type of request (however, if an - * actual connection is created or destroyed, be it because of this - * type request or not, the core generally needs to notify the - * clients). - */ -struct ConnectMessage -{ - /** - * Header with type GNUNET_MESSAGE_TYPE_REQUEST_CONNECT or - * GNUNET_MESSAGE_TYPE_REQUEST_DISCONNECT. - */ - struct GNUNET_MessageHeader header; - /** - * For alignment. + * GNUNET_YES if corking is allowed, GNUNET_NO if not. */ - uint32_t reserved GNUNET_PACKED; + uint32_t cork GNUNET_PACKED; /** - * Identity of the other peer. + * Always 0. */ - struct GNUNET_PeerIdentity peer; + uint64_t reserved GNUNET_PACKED; }; + +GNUNET_NETWORK_STRUCT_END +#endif /* end of core.h */