Merge branch 'master' of gnunet.org:gnunet
[oweals/gnunet.git] / src / include / gnunet_client_lib.h
index b73691b7908f497dcbb5fde5b70eb64344bd5d21..c8c5c2885cecb74fca5ff2d9a58a73eea08cbde1 100644 (file)
@@ -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 <http://www.gnu.org/licenses/>.
 
-     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,
-                                                        const 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_connection_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,
-                                 const 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 */