X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fgnunet-service-core.h;h=86ac333b5405655235c73cca6dd0b617bc4e172b;hb=81ea73fcf38405a714d949189ed0ec6bc5b6bea6;hp=2d5156efec14a24916a7635f54997ef4675f794f;hpb=78659ecd60209b7bd0e4ed6060bc0e8c33247b37;p=oweals%2Fgnunet.git diff --git a/src/core/gnunet-service-core.h b/src/core/gnunet-service-core.h index 2d5156efe..86ac333b5 100644 --- a/src/core/gnunet-service-core.h +++ b/src/core/gnunet-service-core.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2009, 2010, 2011 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 @@ -14,8 +14,8 @@ 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., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -27,10 +27,11 @@ #define GNUNET_SERVICE_CORE_H #include "gnunet_statistics_service.h" +#include "gnunet_core_service.h" +#include "core.h" +#include "gnunet-service-core_typemap.h" -#define DEBUG_CORE GNUNET_EXTRA_LOGGING - /** * Opaque handle to a client. */ @@ -39,7 +40,7 @@ struct GSC_Client; /** * Record kept for each request for transmission issued by a - * client that is still pending. (This struct is used by + * client that is still pending. (This struct is used by * both the 'CLIENTS' and 'SESSIONS' subsystems.) */ struct GSC_ClientActiveRequest @@ -57,15 +58,20 @@ struct GSC_ClientActiveRequest */ struct GSC_ClientActiveRequest *prev; + /** + * Handle to the client. + */ + struct GSC_Client *client_handle; + /** * Which peer is the message going to be for? */ struct GNUNET_PeerIdentity target; /** - * Handle to the client. + * At what time did we first see this request? */ - struct GSC_Client *client_handle; + struct GNUNET_TIME_Absolute received_time; /** * By what time would the client want to see this message out? @@ -75,7 +81,7 @@ struct GSC_ClientActiveRequest /** * How important is this request. */ - uint32_t priority; + enum GNUNET_CORE_Priority priority; /** * Has this request been solicited yet? @@ -95,6 +101,84 @@ struct GSC_ClientActiveRequest }; +/** + * Tell a client that we are ready to receive the message. + * + * @param car request that is now ready; the responsibility + * for the handle remains shared between CLIENTS + * and SESSIONS after this call. + */ +void +GSC_CLIENTS_solicit_request (struct GSC_ClientActiveRequest *car); + + +/** + * We will never be ready to transmit the given message in (disconnect + * or invalid request). Frees resources associated with @a car. We + * don't explicitly tell the client, he'll learn with the disconnect + * (or violated the protocol). + * + * @param car request that now permanently failed; the + * responsibility for the handle is now returned + * to CLIENTS (SESSIONS is done with it). + * @param drop_client #GNUNET_YES if the client violated the protocol + * and we should thus drop the connection + */ +void +GSC_CLIENTS_reject_request (struct GSC_ClientActiveRequest *car, + int drop_client); + + +/** + * Notify a particular client about a change to existing connection to + * one of our neighbours (check if the client is interested). Called + * from #GSC_SESSIONS_notify_client_about_sessions(). + * + * @param client client to notify + * @param neighbour identity of the neighbour that changed status + * @param tmap_old previous type map for the neighbour, NULL for connect + * @param tmap_new updated type map for the neighbour, NULL for disconnect + */ +void +GSC_CLIENTS_notify_client_about_neighbour (struct GSC_Client *client, + const struct GNUNET_PeerIdentity *neighbour, + const struct GSC_TypeMap *tmap_old, + const struct GSC_TypeMap *tmap_new); + + +/** + * Deliver P2P message to interested clients. Caller must have checked + * that the sending peer actually lists the given message type as one + * of its types. + * + * @param sender peer who sent us the message + * @param msg the message + * @param msize number of bytes to transmit + * @param options options for checking which clients should + * receive the message + */ +void +GSC_CLIENTS_deliver_message (const struct GNUNET_PeerIdentity *sender, + const struct GNUNET_MessageHeader *msg, + uint16_t msize, + uint32_t options); + + +/** + * Notify all clients about a change to existing session. + * Called from SESSIONS whenever there is a change in sessions + * or types processed by the respective peer. + * + * @param neighbour identity of the neighbour that changed status + * @param tmap_old previous type map for the neighbour, NULL for connect + * @param tmap_new updated type map for the neighbour, NULL for disconnect + */ +void +GSC_CLIENTS_notify_clients_about_neighbour (const struct GNUNET_PeerIdentity *neighbour, + const struct GSC_TypeMap *tmap_old, + const struct GSC_TypeMap *tmap_new); + + /** * Our configuration. */