X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fgnunet-service-core.h;h=86ac333b5405655235c73cca6dd0b617bc4e172b;hb=81ea73fcf38405a714d949189ed0ec6bc5b6bea6;hp=e48ad8badbadde02ab5b2e1a99e362130ad66901;hpb=83b19539f4d322b43683f5838b72e9ec2c8e6073;p=oweals%2Fgnunet.git diff --git a/src/core/gnunet-service-core.h b/src/core/gnunet-service-core.h index e48ad8bad..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,7 +27,10 @@ #define GNUNET_SERVICE_CORE_H #include "gnunet_statistics_service.h" +#include "gnunet_core_service.h" #include "core.h" +#include "gnunet-service-core_typemap.h" + /** * Opaque handle to a client. @@ -55,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? @@ -73,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? @@ -93,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. */