-more datacache integration work
[oweals/gnunet.git] / src / testbed / gnunet-service-testbed.h
index 149a1ad77979d115d02c179a93690da0906aea80..b6300aeb93325b3e0e760259f7f814824d09a9ec 100644 (file)
@@ -1,10 +1,10 @@
 /*
   This file is part of GNUnet.
-  (C) 2008--2013 Christian Grothoff (and other contributing authors)
+  Copyright (C) 2008--2013 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 2, or (at your
+  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
@@ -106,7 +106,7 @@ struct ForwardedOperationContext
   /**
    * Task ID for the timeout task
    */
-  GNUNET_SCHEDULER_TaskIdentifier timeout_task;
+  struct GNUNET_SCHEDULER_Task * timeout_task;
 
   /**
    * The id of the operation that has been forwarded
@@ -344,23 +344,6 @@ struct ForwardedOverlayConnectContext
 };
 
 
-/**
- * The type for data structures which commonly arrive at the slave_event_callback
- */
-enum ClosureType
-{
-  /**
-   * Type for RegisteredHostContext closures
-   */
-  CLOSURE_TYPE_RHC = 1,
-
-  /**
-   * Type for LinkControllersForwardingContext closures
-   */
-  CLOSURE_TYPE_LCF
-};
-
-
 /**
  * This context information will be created for each host that is registered at
  * slave controllers during overlay connects.
@@ -429,7 +412,7 @@ struct HandlerContext_ShutdownPeers
 /**
  * Our configuration
  */
-struct GNUNET_CONFIGURATION_Handle *our_config;
+extern struct GNUNET_CONFIGURATION_Handle *GST_config;
 
 /**
  * The master context; generated with the first INIT message
@@ -471,6 +454,11 @@ const extern struct GNUNET_TIME_Relative GST_timeout;
  */
 extern unsigned int GST_peer_list_size;
 
+/**
+ * The current number of peers running locally under this controller
+ */
+extern unsigned int GST_num_local_peers;
+
 /**
  * The size of the host list
  */
@@ -482,16 +470,16 @@ extern unsigned int GST_host_list_size;
 extern char *GST_stats_dir;
 
 /**
- * Condition to check if host id is invalid
+ * Condition to check if host id is valid
  */
-#define INVALID_HOST_ID(id) \
-  ( ((id) >= GST_host_list_size) || (NULL == GST_host_list[id]) )
+#define VALID_HOST_ID(id) \
+  ( ((id) < GST_host_list_size) && (NULL != GST_host_list[id]) )
 
 /**
- * Condition to check if peer id is invalid
+ * Condition to check if peer id is valid
  */
-#define INVALID_PEER_ID(id) \
-  ( ((id) >= GST_peer_list_size) || (NULL == GST_peer_list[id]) )
+#define VALID_PEER_ID(id) \
+  ( ((id) < GST_peer_list_size) && (NULL != GST_peer_list[id]) )
 
 
 /**
@@ -733,6 +721,20 @@ GST_handle_manage_peer_service (void *cls, struct GNUNET_SERVER_Client *client,
                                 const struct GNUNET_MessageHeader *message);
 
 
+/**
+ * Handler for GNUNET_MESSAGE_TYPDE_TESTBED_RECONFIGURE_PEER type messages.
+ * Should stop the peer asyncronously, destroy it and create it again with the
+ * new configuration.
+ *
+ * @param cls NULL
+ * @param client identification of the client
+ * @param message the actual message
+ */
+void
+GST_handle_peer_reconfigure (void *cls, struct GNUNET_SERVER_Client *client,
+                             const struct GNUNET_MessageHeader *message);
+
+
 /**
  * Frees the ManageServiceContext queue
  */
@@ -786,6 +788,13 @@ void
 GST_free_roccq ();
 
 
+/**
+ * Cleans up the Peer reconfigure context list
+ */
+void
+GST_free_prcq ();
+
+
 /**
  * Initializes the cache
  *
@@ -824,113 +833,6 @@ GST_cache_add_hello (const unsigned int peer_id,
                      const struct GNUNET_MessageHeader *hello);
 
 
-/**
- * Functions of this type are called when the needed handle is available for
- * usage. These functions are to be registered with either of the functions
- * GST_cache_get_handle_transport() or GST_cache_get_handle_core(). The
- * corresponding handles will be set and if they are not, then it signals an
- * error while opening the handles.
- *
- * @param cls the closure passed to GST_cache_get_handle_transport() or
- *          GST_cache_get_handle_core()
- * @param ch the handle to CORE. Can be NULL if it is not requested
- * @param th the handle to TRANSPORT. Can be NULL if it is not requested
- * @param peer_id the identity of the peer. Will be NULL if ch is NULL. In other
- *          cases, its value being NULL means that CORE connection has failed.
- */
-typedef void (*GST_cache_handle_ready_cb) (void *cls,
-                                           struct GNUNET_CORE_Handle * ch,
-                                           struct GNUNET_TRANSPORT_Handle * th,
-                                           const struct GNUNET_PeerIdentity *
-                                           peer_id);
-
-
-/**
- * Callback to notify when the target peer given to
- * GST_cache_get_handle_transport() is connected. Note that this callback may
- * not be called if the target peer is already connected. Use
- * GNUNET_TRANSPORT_check_neighbour_connected() to check if the target peer is
- * already connected or not. This callback will be called only once or never (in
- * case the target cannot be connected).
- *
- * @param cls the closure given to GST_cache_get_handle_done() for this callback
- * @param target the peer identity of the target peer. The pointer should be
- *          valid until GST_cache_get_handle_done() is called.
- */
-typedef void (*GST_cache_peer_connect_notify) (void *cls,
-                                               const struct GNUNET_PeerIdentity
-                                               * target);
-
-
-/**
- * Get a transport handle with the given configuration. If the handle is already
- * cached before, it will be retured in the given callback; the peer_id is used to lookup in the
- * cache. If not a new operation is started to open the transport handle and
- * will be given in the callback when it is available.
- *
- * @param peer_id the index of the peer
- * @param cfg the configuration with which the transport handle has to be
- *          created if it was not present in the cache
- * @param cb the callback to notify when the transport handle is available
- * @param cb_cls the closure for the above callback
- * @param target the peer identify of the peer whose connection to our TRANSPORT
- *          subsystem will be notified through the connect_notify_cb. Can be NULL
- * @param connect_notify_cb the callback to call when the given target peer is
- *          connected. This callback will only be called once or never again (in
- *          case the target peer cannot be connected). Can be NULL
- * @param connect_notify_cb_cls the closure for the above callback
- * @return the handle which can be used cancel or mark that the handle is no
- *           longer being used
- */
-struct GSTCacheGetHandle *
-GST_cache_get_handle_transport (unsigned int peer_id,
-                                const struct GNUNET_CONFIGURATION_Handle *cfg,
-                                GST_cache_handle_ready_cb cb, void *cb_cls,
-                                const struct GNUNET_PeerIdentity *target,
-                                GST_cache_peer_connect_notify connect_notify_cb,
-                                void *connect_notify_cb_cls);
-
-
-/**
- * Get a CORE handle with the given configuration. If the handle is already
- * cached before, it will be retured in the given callback; the peer_id is used
- * to lookup in the cache. If the handle is not cached before, a new operation
- * is started to open the CORE handle and will be given in the callback when it
- * is available along with the peer identity
- *
- * @param peer_id the index of the peer
- * @param cfg the configuration with which the transport handle has to be
- *          created if it was not present in the cache
- * @param cb the callback to notify when the transport handle is available
- * @param cb_cls the closure for the above callback
- * @param target the peer identify of the peer whose connection to our CORE
- *          subsystem will be notified through the connect_notify_cb. Can be NULL
- * @param connect_notify_cb the callback to call when the given target peer is
- *          connected. This callback will only be called once or never again (in
- *          case the target peer cannot be connected). Can be NULL
- * @param connect_notify_cb_cls the closure for the above callback
- * @return the handle which can be used cancel or mark that the handle is no
- *           longer being used
- */
-struct GSTCacheGetHandle *
-GST_cache_get_handle_core (unsigned int peer_id,
-                           const struct GNUNET_CONFIGURATION_Handle *cfg,
-                           GST_cache_handle_ready_cb cb, void *cb_cls,
-                           const struct GNUNET_PeerIdentity *target,
-                           GST_cache_peer_connect_notify connect_notify_cb,
-                           void *connect_notify_cb_cls);
-
-
-/**
- * Mark the GetCacheHandle as being done if a handle has been provided already
- * or as being cancelled if the callback for the handle hasn't been called.
- *
- * @param cgh the CacheGetHandle handle
- */
-void
-GST_cache_get_handle_done (struct GSTCacheGetHandle *cgh);
-
-
 /**
  * Initialize logging CPU and IO statisticfs.  Checks the configuration for
  * "STATS_DIR" and logs to a file in that directory.  The file is name is