From: Christian Grothoff Date: Fri, 29 Jul 2016 20:31:52 +0000 (+0000) Subject: starting point for MQ-core API X-Git-Tag: initial-import-from-subversion-38251~469 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=1e2d3aaecc2a4130e35d46a7c03b9d80d34d6673;p=oweals%2Fgnunet.git starting point for MQ-core API --- diff --git a/src/core/core_api.c b/src/core/core_api.c index caf614afc..acdac5fa4 100644 --- a/src/core/core_api.c +++ b/src/core/core_api.c @@ -916,6 +916,44 @@ GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, } +/** + * Connect to the core service. Note that the connection may complete + * (or fail) asynchronously. This function primarily causes the given + * callback notification functions to be invoked whenever the + * specified event happens. The maximum number of queued + * notifications (queue length) is per client; the queue is shared + * across all types of notifications. So a slow client that registers + * for @a outbound_notify also risks missing @a inbound_notify messages. + * Certain events (such as connect/disconnect notifications) are not + * subject to queue size limitations. + * + * @param cfg configuration to use + * @param cls closure for the various callbacks that follow (including handlers in the handlers array) + * @param init callback to call once we have successfully + * 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 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 + * notification type, a bounded queue is used) + * @return handle to the core service (only useful for disconnect until @a init is called), + * NULL on error (in this case, init is never called) + */ +struct GNUNET_CORE_Handle * +GNUNET_CORE_connecT (const struct GNUNET_CONFIGURATION_Handle *cfg, + void *cls, + GNUNET_CORE_StartupCallback init, + GNUNET_CORE_ConnecTEventHandler connects, + GNUNET_CORE_DisconnecTEventHandler disconnects, + const struct GNUNET_MQ_MessageHandler *handlers) +{ + GNUNET_break (0); // not implemented + // NOTE: re-enable core-related tests in ats-tests/ once implemented! + return NULL; +} + + /** * Disconnect from the core service. This function can only * be called *after* all pending #GNUNET_CORE_notify_transmit_ready() diff --git a/src/include/gnunet_core_service.h b/src/include/gnunet_core_service.h index e8709d0f1..16b6aebc9 100644 --- a/src/include/gnunet_core_service.h +++ b/src/include/gnunet_core_service.h @@ -107,6 +107,30 @@ typedef void const struct GNUNET_PeerIdentity *peer); +/** + * Method called whenever a given peer connects. + * + * @param cls closure + * @param peer peer identity this notification is about + */ +typedef void * +(*GNUNET_CORE_ConnecTEventHandler) (void *cls, + const struct GNUNET_PeerIdentity *peer, + struct GNUNET_MQ_Handle *mq); + + +/** + * Method called whenever a peer disconnects. + * + * @param cls closure + * @param peer peer identity this notification is about + */ +typedef void +(*GNUNET_CORE_DisconnecTEventHandler) (void *cls, + const struct GNUNET_PeerIdentity *peer, + void *peer_cls); + + /** * Functions with this signature are called whenever a message is * received or transmitted. @@ -224,6 +248,39 @@ GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, const struct GNUNET_CORE_MessageHandler *handlers); +/** + * Connect to the core service. Note that the connection may complete + * (or fail) asynchronously. This function primarily causes the given + * callback notification functions to be invoked whenever the + * specified event happens. The maximum number of queued + * notifications (queue length) is per client; the queue is shared + * across all types of notifications. So a slow client that registers + * for @a outbound_notify also risks missing @a inbound_notify messages. + * Certain events (such as connect/disconnect notifications) are not + * subject to queue size limitations. + * + * @param cfg configuration to use + * @param cls closure for the various callbacks that follow (including handlers in the handlers array) + * @param init callback to call once we have successfully + * 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 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 + * notification type, a bounded queue is used) + * @return handle to the core service (only useful for disconnect until @a init is called), + * NULL on error (in this case, init is never called) + */ +struct GNUNET_CORE_Handle * +GNUNET_CORE_connecT (const struct GNUNET_CONFIGURATION_Handle *cfg, + void *cls, + GNUNET_CORE_StartupCallback init, + GNUNET_CORE_ConnecTEventHandler connects, + GNUNET_CORE_DisconnecTEventHandler disconnects, + 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