/* This file is part of GNUnet. Copyright (C) 2009, 2010, 2011 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 3, 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. */ /** * @file core/gnunet-service-core_clients.h * @brief code for managing interactions with clients of core service * @author Christian Grothoff */ #ifndef GNUNET_SERVICE_CORE_CLIENTS_H #define GNUNET_SERVICE_CORE_CLIENTS_H #include "gnunet_util_lib.h" #include "gnunet-service-core.h" #include "gnunet-service-core_typemap.h" /** * Send a message to one of our clients. * * @param client target for the message * @param msg message to transmit * @param can_drop could this message be dropped if the * client's queue is getting too large? */ void GSC_CLIENTS_send_to_client (struct GNUNET_SERVER_Client *client, const struct GNUNET_MessageHeader *msg, int can_drop); /** * 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 disconnect * @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); /** * 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 disconnect * @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); /** * 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); /** * 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); /** * Initialize clients subsystem. * * @param server handle to server clients connect to */ void GSC_CLIENTS_init (struct GNUNET_SERVER_Handle *server); /** * Shutdown clients subsystem. */ void GSC_CLIENTS_done (void); #endif /* end of gnunet-service-core_clients.h */