X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_core_service.h;h=b38f38b69421e49c9f8e4ebb7b7f9d2ac67caa67;hb=ec50a665dc884f7997419d0351ae8ade9c1aeabe;hp=3dd3e2b2dc211c5a95c552e66823f741c69fb5ae;hpb=b23f7bcde58fdada9170f16af39ab1e84f4c3a68;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_core_service.h b/src/include/gnunet_core_service.h index 3dd3e2b2d..b38f38b69 100644 --- a/src/include/gnunet_core_service.h +++ b/src/include/gnunet_core_service.h @@ -1,21 +1,19 @@ /* This file is part of GNUnet. - Copyright (C) 2009-2014 Christian Grothoff (and other contributing authors) + Copyright (C) 2009-2017 GNUnet e.V. - 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 3, or (at your - option) any later version. + GNUnet is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . */ /** * @author Christian Grothoff @@ -25,6 +23,9 @@ * * @defgroup core Core service * Encrypted direct communication between peers + * + * @see [Documentation](https://gnunet.org/gnunet-core-subsystem) + * * @{ */ #ifndef GNUNET_CORE_SERVICE_H @@ -88,9 +89,10 @@ struct GNUNET_CORE_Handle; * @param cls closure * @param peer peer identity this notification is about */ -typedef void +typedef void * (*GNUNET_CORE_ConnectEventHandler) (void *cls, - const struct GNUNET_PeerIdentity *peer); + const struct GNUNET_PeerIdentity *peer, + struct GNUNET_MQ_Handle *mq); /** @@ -101,50 +103,8 @@ typedef void */ typedef void (*GNUNET_CORE_DisconnectEventHandler) (void *cls, - const struct GNUNET_PeerIdentity *peer); - - -/** - * Functions with this signature are called whenever a message is - * received or transmitted. - * - * @param cls closure (set from #GNUNET_CORE_connect) - * @param peer the other peer involved (sender or receiver, NULL - * for loopback messages where we are both sender and receiver) - * @param message the actual message - * @return #GNUNET_OK to keep the connection open, - * #GNUNET_SYSERR to close connection to the peer (signal serious error) - */ -typedef int -(*GNUNET_CORE_MessageCallback) (void *cls, - const struct GNUNET_PeerIdentity *other, - const struct GNUNET_MessageHeader *message); - - -/** - * Message handler. Each struct specifies how to handle on particular - * type of message received. - */ -struct GNUNET_CORE_MessageHandler -{ - /** - * Function to call for messages of @e type. - */ - GNUNET_CORE_MessageCallback callback; - - /** - * Type of the message this handler covers. - */ - uint16_t type; - - /** - * Expected size of messages of this type. Use 0 for variable-size. - * If non-zero, messages of the given type will be discarded if they - * do not have the right size. - */ - uint16_t expected_size; - -}; + const struct GNUNET_PeerIdentity *peer, + void *peer_cls); /** @@ -181,26 +141,6 @@ typedef void * connected to the core service * @param connects function to call on peer connect, can be NULL * @param disconnects function to call on peer disconnect / timeout, can be NULL - * @param inbound_notify function to call for all inbound messages, can be NULL - * note that the core is allowed to drop notifications about inbound - * messages if the client does not process them fast enough (for this - * notification type, a bounded queue is used) - * @param inbound_hdr_only set to #GNUNET_YES if @a inbound_notify will only read the - * `struct GNUNET_MessageHeader` and hence we do not need to give it the full message; - * can be used to improve efficiency, ignored if inbound_notify is NULL - * note that the core is allowed to drop notifications about inbound - * messages if the client does not process them fast enough (for this - * notification type, a bounded queue is used) - * @param outbound_notify function to call for all outbound messages, can be NULL; - * note that the core is allowed to drop notifications about outbound - * messages if the client does not process them fast enough (for this - * notification type, a bounded queue is used) - * @param outbound_hdr_only set to #GNUNET_YES if @a outbound_notify will only read the - * `struct GNUNET_MessageHeader` and hence we do not need to give it the full message - * can be used to improve efficiency, ignored if outbound_notify is NULL - * note that the core is allowed to drop notifications about outbound - * messages if the client does not process them fast enough (for this - * notification type, a bounded queue is used) * @param handlers callbacks for messages we care about, NULL-terminated * note that the core is allowed to drop notifications about inbound * messages if the client does not process them fast enough (for this @@ -214,17 +154,11 @@ GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, GNUNET_CORE_StartupCallback init, GNUNET_CORE_ConnectEventHandler connects, GNUNET_CORE_DisconnectEventHandler disconnects, - GNUNET_CORE_MessageCallback inbound_notify, - int inbound_hdr_only, - GNUNET_CORE_MessageCallback outbound_notify, - int outbound_hdr_only, - const struct GNUNET_CORE_MessageHandler *handlers); + const struct GNUNET_MQ_MessageHandler *handlers); /** - * Disconnect from the core service. This function can only - * be called *after* all pending #GNUNET_CORE_notify_transmit_ready - * requests have been explicitly cancelled. + * Disconnect from the core service. * * @param handle connection to core to disconnect */ @@ -233,54 +167,31 @@ GNUNET_CORE_disconnect (struct GNUNET_CORE_Handle *handle); /** - * Handle for a transmission request. - */ -struct GNUNET_CORE_TransmitHandle; - - -/** - * Ask the core to call @a notify once it is ready to transmit the - * given number of bytes to the specified @a target. Must only be - * called after a connection to the respective peer has been - * established (and the client has been informed about this). You may - * have one request of this type pending for each connected peer at - * any time. If a peer disconnects, the application MUST call - * #GNUNET_CORE_notify_transmit_ready_cancel() on the respective - * transmission request, if one such request is pending. + * Inquire with CORE what options should be set for a message + * so that it is transmitted with the given @a priority and + * the given @a cork value. * - * @param handle connection to core service - * @param cork is corking allowed for this transmission? - * @param priority how important is the message? - * @param maxdelay how long can the message wait? Only effective if @a cork is #GNUNET_YES - * @param target who should receive the message, never NULL (can be this peer's identity for loopback) - * @param notify_size how many bytes of buffer space does @a notify want? - * @param notify function to call when buffer space is available; - * will be called with NULL on timeout; clients MUST cancel - * all pending transmission requests DURING the disconnect - * handler - * @param notify_cls closure for @a notify - * @return non-NULL if the notify callback was queued, - * NULL if we can not even queue the request (request already pending); - * if NULL is returned, @a notify will NOT be called. + * @param cork desired corking + * @param priority desired message priority + * @param[out] flags set to `flags` value for #GNUNET_MQ_set_options() + * @return `extra` argument to give to #GNUNET_MQ_set_options() */ -struct GNUNET_CORE_TransmitHandle * -GNUNET_CORE_notify_transmit_ready (struct GNUNET_CORE_Handle *handle, - int cork, - enum GNUNET_CORE_Priority priority, - struct GNUNET_TIME_Relative maxdelay, - const struct GNUNET_PeerIdentity *target, - size_t notify_size, - GNUNET_CONNECTION_TransmitReadyNotify notify, - void *notify_cls); +const void * +GNUNET_CORE_get_mq_options (int cork, + enum GNUNET_CORE_Priority priority, + uint64_t *flags); /** - * Cancel the specified transmission-ready notification. + * Obtain the message queue for a connected peer. * - * @param th handle that was returned by #GNUNET_CORE_notify_transmit_ready(). + * @param h the core handle + * @param pid the identity of the peer + * @return NULL if @a pid is not connected */ -void -GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle *th); +struct GNUNET_MQ_Handle * +GNUNET_CORE_get_mq (const struct GNUNET_CORE_Handle *h, + const struct GNUNET_PeerIdentity *pid); /** @@ -307,7 +218,7 @@ enum GNUNET_CORE_KxState /** * No handshake yet. */ - GNUNET_CORE_KX_STATE_DOWN, + GNUNET_CORE_KX_STATE_DOWN = 0, /** * We've sent our session key. @@ -321,7 +232,7 @@ enum GNUNET_CORE_KxState /** * The other peer has confirmed our session key + PING with a PONG - * message encrypted with his session key (which we got). Key + * message encrypted with their session key (which we got). Key * exchange is done. */ GNUNET_CORE_KX_STATE_UP, @@ -450,8 +361,9 @@ GNUNET_CORE_mq_create (struct GNUNET_CORE_Handle *h, } #endif -/** @} */ /* end of group core */ - /* ifndef GNUNET_CORE_SERVICE_H */ #endif + +/** @} */ /* end of group core */ + /* end of gnunet_core_service.h */