X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_client_lib.h;h=c8c5c2885cecb74fca5ff2d9a58a73eea08cbde1;hb=2bbb2934dbbe471640c67c3bc672120f35708fd1;hp=6a77aa391c4e23f7557b02b456accc98e183777b;hpb=0a217a8df1657b4334b55b0e4a6c7837a8dbcfd9;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_client_lib.h b/src/include/gnunet_client_lib.h index 6a77aa391..c8c5c2885 100644 --- a/src/include/gnunet_client_lib.h +++ b/src/include/gnunet_client_lib.h @@ -1,27 +1,35 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors) + Copyright (C) 2001-2013, 2016 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 2, 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. + 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 . - 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. + SPDX-License-Identifier: AGPL3.0-or-later */ /** - * @file include/gnunet_client_lib.h - * @brief functions related to accessing services * @author Christian Grothoff + * + * @file + * Functions related to accessing services + + * @defgroup client Client library + * Generic client-side communication with services + * + * @see [Documentation](https://gnunet.org/ipc) + * + * @{ */ #ifndef GNUNET_CLIENT_LIB_H @@ -35,117 +43,25 @@ extern "C" #endif #endif -#include "gnunet_common.h" -#include "gnunet_configuration_lib.h" -#include "gnunet_network_lib.h" -#include "gnunet_scheduler_lib.h" -#include "gnunet_time_lib.h" - -/** - * Opaque handle for a connection to a service. - */ -struct GNUNET_CLIENT_Connection; - -/** - * Get a connection with a service. - * - * @param sched scheduler to use - * @param service_name name of the service - * @param cfg configuration to use - * @return NULL on error (service unknown to configuration) - */ -struct GNUNET_CLIENT_Connection *GNUNET_CLIENT_connect (struct - GNUNET_SCHEDULER_Handle - *sched, - const char - *service_name, - struct - GNUNET_CONFIGURATION_Handle - *cfg); - -/** - * Destroy connection with the service. This will - * automatically cancel any pending "receive" request - * (however, the handler will *NOT* be called, not - * even with a NULL message). - */ -void GNUNET_CLIENT_disconnect (struct GNUNET_CLIENT_Connection *sock); - -/** - * Type of a function to call when we receive a message - * from the service. - * - * @param cls closure - * @param msg message received, NULL on timeout or fatal error - */ -typedef void (*GNUNET_CLIENT_MessageHandler) (void *cls, - const struct - GNUNET_MessageHeader * msg); - -/** - * Read from the service. - * - * @param sched scheduler to use - * @param sock the service - * @param handler function to call with the message - * @param cls closure for handler - * @param timeout how long to wait until timing out - */ -void GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock, - GNUNET_CLIENT_MessageHandler handler, - void *cls, struct GNUNET_TIME_Relative timeout); +#include "gnunet_mq_lib.h" /** - * Ask the client to call us once the specified number of bytes - * are free in the transmission buffer. May call the notify - * method immediately if enough space is available. + * Create a message queue to connect to a GNUnet service. + * If handlers are specfied, receive messages from the connection. * - * @param client connection to the service - * @param size number of bytes to send - * @param timeout after how long should we give up (and call - * notify with buf NULL and size 0)? - * @param notify function to call - * @param notify_cls closure for notify - * @return NULL if someone else is already waiting to be notified - * non-NULL if the notify callback was queued (can be used to cancel - * using GNUNET_NETWORK_notify_transmit_ready_cancel) + * @param connection the client connection + * @param handlers handlers for receiving messages, can be NULL + * @param error_handler error handler + * @param error_handler_cls closure for the @a error_handler + * @return the message queue, NULL on error */ -struct GNUNET_NETWORK_TransmitHandle - *GNUNET_CLIENT_notify_transmit_ready (struct GNUNET_CLIENT_Connection *sock, - size_t size, - struct GNUNET_TIME_Relative timeout, - GNUNET_NETWORK_TransmitReadyNotify - notify, void *notify_cls); - - -/** - * Request that the service should shutdown. - * Afterwards, the connection should be disconnected. - * - * @param sched scheduler to use - * @param sock the socket connected to the service - */ -void GNUNET_CLIENT_service_shutdown (struct GNUNET_CLIENT_Connection *sock); - - -/** - * Wait until the service is running. - * - * @param sched scheduler to use - * @param service name of the service to wait for - * @param cfg configuration to use - * @param timeout how long to wait at most in ms - * @param task task to run if service is running - * (reason will be "PREREQ_DONE" (service running) - * or "TIMEOUT" (service not known to be running)) - * @param task_cls closure for task - */ -void GNUNET_CLIENT_service_test (struct GNUNET_SCHEDULER_Handle *sched, - const char *service, - struct GNUNET_CONFIGURATION_Handle *cfg, - struct GNUNET_TIME_Relative timeout, - GNUNET_SCHEDULER_Task task, void *task_cls); +struct GNUNET_MQ_Handle * +GNUNET_CLIENT_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, + const char *service_name, + const struct GNUNET_MQ_MessageHandler *handlers, + GNUNET_MQ_ErrorHandler error_handler, + void *error_handler_cls); #if 0 /* keep Emacsens' auto-indent happy */ @@ -157,4 +73,7 @@ void GNUNET_CLIENT_service_test (struct GNUNET_SCHEDULER_Handle *sched, /* ifndef GNUNET_CLIENT_LIB_H */ #endif + +/** @} */ /* end of group client */ + /* end of gnunet_client_lib.h */