gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r25891 - gnunet/src/testbed


From: gnunet
Subject: [GNUnet-SVN] r25891 - gnunet/src/testbed
Date: Fri, 25 Jan 2013 11:31:11 +0100

Author: harsha
Date: 2013-01-25 11:31:11 +0100 (Fri, 25 Jan 2013)
New Revision: 25891

Added:
   gnunet/src/testbed/gnunet-service-testbed.h
Modified:
   gnunet/src/testbed/Makefile.am
   gnunet/src/testbed/gnunet-service-testbed.c
Log:
- move data structures to shared header

Modified: gnunet/src/testbed/Makefile.am
===================================================================
--- gnunet/src/testbed/Makefile.am      2013-01-25 09:27:45 UTC (rev 25890)
+++ gnunet/src/testbed/Makefile.am      2013-01-25 10:31:11 UTC (rev 25891)
@@ -37,7 +37,8 @@
   $(ll_noinst_binaries)
 
 gnunet_service_testbed_SOURCES = \
-  gnunet-service-testbed.c
+  gnunet-service-testbed.c \
+  gnunet-service-testbed.h
 gnunet_service_testbed_LDADD = $(XLIB) \
  $(top_builddir)/src/util/libgnunetutil.la \
  $(top_builddir)/src/core/libgnunetcore.la \

Modified: gnunet/src/testbed/gnunet-service-testbed.c
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.c 2013-01-25 09:27:45 UTC (rev 
25890)
+++ gnunet/src/testbed/gnunet-service-testbed.c 2013-01-25 10:31:11 UTC (rev 
25891)
@@ -25,69 +25,12 @@
  */
 
 #include "platform.h"
-#include "gnunet_service_lib.h"
-#include "gnunet_server_lib.h"
-#include "gnunet_transport_service.h"
-#include "gnunet_core_service.h"
-#include "gnunet_hello_lib.h"
+#include "gnunet-service-testbed.h"
+
 #include <zlib.h>
 
-#include "gnunet_testbed_service.h"
-#include "testbed.h"
-#include "testbed_api.h"
-#include "testbed_api_hosts.h"
-#include "gnunet_testing_lib.h"
 
 /**
- * Generic logging
- */
-#define LOG(kind,...)                           \
-  GNUNET_log (kind, __VA_ARGS__)
-
-/**
- * Debug logging
- */
-#define LOG_DEBUG(...)                          \
-  LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
-
-/**
- * By how much should the arrays lists grow
- */
-#define LIST_GROW_STEP 10
-
-/**
- * Default timeout for operations which may take some time
- */
-#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 15)
-
-/**
- * The main context information associated with the client which started us
- */
-struct Context
-{
-  /**
-   * The client handle associated with this context
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * The network address of the master controller
-   */
-  char *master_ip;
-
-  /**
-   * The TESTING system handle for starting peers locally
-   */
-  struct GNUNET_TESTING_System *system;
-  
-  /**
-   * Our host id according to this context
-   */
-  uint32_t host_id;
-};
-
-
-/**
  * The message queue for sending messages to clients
  */
 struct MessageQueue
@@ -115,735 +58,6 @@
 
 
 /**
- * The structure for identifying a shared service
- */
-struct SharedService
-{
-  /**
-   * The name of the shared service
-   */
-  char *name;
-
-  /**
-   * Number of shared peers per instance of the shared service
-   */
-  uint32_t num_shared;
-
-  /**
-   * Number of peers currently sharing the service
-   */
-  uint32_t num_sharing;
-};
-
-
-/**
- * A routing entry
- */
-struct Route
-{
-  /**
-   * destination host
-   */
-  uint32_t dest;
-
-  /**
-   * The destination host is reachable thru
-   */
-  uint32_t thru;
-};
-
-
-/**
- * Context information used while linking controllers
- */
-struct LinkControllersContext;
-
-
-/**
- * A DLL of host registrations to be made
- */
-struct HostRegistration
-{
-  /**
-   * next registration in the DLL
-   */
-  struct HostRegistration *next;
-
-  /**
-   * previous registration in the DLL
-   */
-  struct HostRegistration *prev;
-
-  /**
-   * The callback to call after this registration's status is available
-   */
-  GNUNET_TESTBED_HostRegistrationCompletion cb;
-
-  /**
-   * The closure for the above callback
-   */
-  void *cb_cls;
-
-  /**
-   * The host that has to be registered
-   */
-  struct GNUNET_TESTBED_Host *host;
-};
-
-
-/**
- * This context information will be created for each host that is registered at
- * slave controllers during overlay connects.
- */
-struct RegisteredHostContext
-{
-  /**
-   * The host which is being registered
-   */
-  struct GNUNET_TESTBED_Host *reg_host;
-
-  /**
-   * The host of the controller which has to connect to the above rhost
-   */
-  struct GNUNET_TESTBED_Host *host;
-
-  /**
-   * The gateway to which this operation is forwarded to
-   */
-  struct Slave *gateway;
-
-  /**
-   * The gateway through which peer2's controller can be reached
-   */
-  struct Slave *gateway2;
-
-  /**
-   * Handle for sub-operations
-   */
-  struct GNUNET_TESTBED_Operation *sub_op;
-
-  /**
-   * The client which initiated the link controller operation
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * Head of the ForwardedOverlayConnectContext DLL
-   */
-  struct ForwardedOverlayConnectContext *focc_dll_head;
-
-  /**
-   * Tail of the ForwardedOverlayConnectContext DLL
-   */
-  struct ForwardedOverlayConnectContext *focc_dll_tail;
-  
-  /**
-   * Enumeration of states for this context
-   */
-  enum RHCState {
-
-    /**
-     * The initial state
-     */
-    RHC_INIT = 0,
-
-    /**
-     * State where we attempt to get peer2's controller configuration
-     */
-    RHC_GET_CFG,
-
-    /**
-     * State where we attempt to link the controller of peer 1 to the 
controller
-     * of peer2
-     */
-    RHC_LINK,
-
-    /**
-     * State where we attempt to do the overlay connection again
-     */
-    RHC_OL_CONNECT
-    
-  } state;
-
-};
-
-
-/**
- * Structure representing a connected(directly-linked) controller
- */
-struct Slave
-{
-  /**
-   * The controller process handle if we had started the controller
-   */
-  struct GNUNET_TESTBED_ControllerProc *controller_proc;
-
-  /**
-   * The controller handle
-   */
-  struct GNUNET_TESTBED_Controller *controller;
-
-  /**
-   * The configuration of the slave. Cannot be NULL
-   */
-  struct GNUNET_CONFIGURATION_Handle *cfg;
-
-  /**
-   * handle to lcc which is associated with this slave startup. Should be set 
to
-   * NULL when the slave has successfully started up
-   */
-  struct LinkControllersContext *lcc;
-
-  /**
-   * Head of the host registration DLL
-   */
-  struct HostRegistration *hr_dll_head;
-
-  /**
-   * Tail of the host registration DLL
-   */
-  struct HostRegistration *hr_dll_tail;
-
-  /**
-   * The current host registration handle
-   */
-  struct GNUNET_TESTBED_HostRegistrationHandle *rhandle;
-
-  /**
-   * Hashmap to hold Registered host contexts
-   */
-  struct GNUNET_CONTAINER_MultiHashMap *reghost_map;
-
-  /**
-   * The id of the host this controller is running on
-   */
-  uint32_t host_id;
-
-};
-
-
-/**
- * States of LCFContext
- */
-enum LCFContextState
-{
-  /**
-   * The Context has been initialized; Nothing has been done on it
-   */
-  INIT,
-
-  /**
-   * Delegated host has been registered at the forwarding controller
-   */
-  DELEGATED_HOST_REGISTERED,
-  
-  /**
-   * The slave host has been registred at the forwarding controller
-   */
-  SLAVE_HOST_REGISTERED,
-  
-  /**
-   * The context has been finished (may have error)
-   */
-  FINISHED
-};
-
-
-/**
- * Link controllers request forwarding context
- */
-struct LCFContext
-{
-  /**
-   * The gateway which will pass the link message to delegated host
-   */
-  struct Slave *gateway;
-
-  /**
-   * The controller link message that has to be forwarded to
-   */
-  struct GNUNET_TESTBED_ControllerLinkMessage *msg;
-
-  /**
-   * The client which has asked to perform this operation
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * Handle for operations which are forwarded while linking controllers
-   */
-  struct ForwardedOperationContext *fopc;
-
-  /**
-   * The id of the operation which created this context
-   */
-  uint64_t operation_id;
-
-  /**
-   * The state of this context
-   */
-  enum LCFContextState state;
-
-  /**
-   * The delegated host
-   */
-  uint32_t delegated_host_id;
-
-  /**
-   * The slave host
-   */
-  uint32_t slave_host_id;
-
-};
-
-
-/**
- * Structure of a queue entry in LCFContext request queue
- */
-struct LCFContextQueue
-{
-  /**
-   * The LCFContext
-   */
-  struct LCFContext *lcf;
-
-  /**
-   * Head prt for DLL
-   */
-  struct LCFContextQueue *next;
-
-  /**
-   * Tail ptr for DLL
-   */
-  struct LCFContextQueue *prev;
-};
-
-
-/**
- * A peer
- */
-
-struct Peer
-{
-  
-  union
-  {
-    struct
-    {
-      /**
-       * The peer handle from testing API
-       */
-      struct GNUNET_TESTING_Peer *peer;
-
-      /**
-       * The modified (by GNUNET_TESTING_peer_configure) configuration this
-       * peer is configured with
-       */
-      struct GNUNET_CONFIGURATION_Handle *cfg;
-      
-      /**
-       * Is the peer running
-       */
-      int is_running;
-
-    } local;
-
-    struct
-    {
-      /**
-       * The slave this peer is started through
-       */
-      struct Slave *slave;
-
-      /**
-       * The id of the remote host this peer is running on
-       */
-      uint32_t remote_host_id;
-
-    } remote;
-
-  } details;
-
-  /**
-   * Is this peer locally created?
-   */
-  int is_remote;
-
-  /**
-   * Our local reference id for this peer
-   */
-  uint32_t id;
-
-  /**
-   * References to peers are using in forwarded overlay contexts and remote
-   * overlay connect contexts. A peer can only be destroyed after all such
-   * contexts are destroyed. For this, we maintain a reference counter. When we
-   * use a peer in any such context, we increment this counter. We decrement it
-   * when we are destroying these contexts
-   */
-  uint32_t reference_cnt;
-
-  /**
-   * While destroying a peer, due to the fact that there could be references to
-   * this peer, we delay the peer destroy to a further time. We do this by 
using
-   * this flag to destroy the peer while destroying a context in which this 
peer
-   * has been used. When the flag is set to 1 and reference_cnt = 0 we destroy
-   * the peer
-   */
-  uint32_t destroy_flag;
-
-};
-
-
-/**
- * Context information for transport try connect
- */
-struct TryConnectContext
-{
-  /**
-   * The identity of the peer to which the transport has to attempt a 
connection
-   */
-  struct GNUNET_PeerIdentity *pid;
-
-  /**
-   * The transport handle
-   */
-  struct GNUNET_TRANSPORT_Handle *th;
-
-  /**
-   * the try connect handle
-   */
-  struct GNUNET_TRANSPORT_TryConnectHandle *tch;
-
-  /**
-   * The task handle
-   */
-  GNUNET_SCHEDULER_TaskIdentifier task;
-
-  /**
-   * The id of the operation which is resposible for this context
-   */
-  uint64_t op_id;
-
-  /**
-   * The number of times we attempted to connect
-   */
-  unsigned int retries;
-
-};
-
-
-/**
- * Context information for connecting 2 peers in overlay
- */
-struct OverlayConnectContext
-{
-  /**
-   * The next pointer for maintaining a DLL
-   */
-  struct OverlayConnectContext *next;
-
-  /**
-   * The prev pointer for maintaining a DLL
-   */
-  struct OverlayConnectContext *prev;
-  
-  /**
-   * The client which has requested for overlay connection
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * the peer which has to connect to the other peer
-   */
-  struct Peer *peer;
-
-  /**
-   * Transport handle of the first peer to get its HELLO
-   */
-  struct GNUNET_TRANSPORT_Handle *p1th;
-
-  /**
-   * Core handles of the first peer; used to notify when second peer connects 
to it
-   */
-  struct GNUNET_CORE_Handle *ch;
-
-  /**
-   * HELLO of the other peer
-   */
-  struct GNUNET_MessageHeader *hello;
-
-  /**
-   * Get hello handle to acquire HELLO of first peer
-   */
-  struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
-
-  /**
-   * The handle for offering HELLO
-   */
-  struct GNUNET_TRANSPORT_OfferHelloHandle *ohh;
-
-  /**
-   * The error message we send if this overlay connect operation has timed out
-   */
-  char *emsg;
-
-  /**
-   * Operation context for suboperations
-   */
-  struct OperationContext *opc;
-
-  /**
-   * Controller of peer 2; NULL if the peer is local
-   */
-  struct GNUNET_TESTBED_Controller *peer2_controller;
-
-  /**
-   * The transport try connect context
-   */
-  struct TryConnectContext tcc;
-
-  /**
-   * The peer identity of the first peer
-   */
-  struct GNUNET_PeerIdentity peer_identity;
-
-  /**
-   * The peer identity of the other peer
-   */
-  struct GNUNET_PeerIdentity other_peer_identity;
-
-  /**
-   * The id of the operation responsible for creating this context
-   */
-  uint64_t op_id;
-
-  /**
-   * The id of the task for sending HELLO of peer 2 to peer 1 and ask peer 1 to
-   * connect to peer 2
-   */
-  GNUNET_SCHEDULER_TaskIdentifier send_hello_task;
-
-  /**
-   * The id of the overlay connect timeout task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier timeout_task;
-
-  /**
-   * The id of the cleanup task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier cleanup_task;
-
-  /**
-   * The id of peer A
-   */
-  uint32_t peer_id;
-
-  /**
-   * The id of peer B
-   */
-  uint32_t other_peer_id;
-
-};
-
-
-/**
- * Context information for RequestOverlayConnect
- * operations. RequestOverlayConnect is used when peers A, B reside on 
different
- * hosts and the host controller for peer B is asked by the host controller of
- * peer A to make peer B connect to peer A
- */
-struct RequestOverlayConnectContext
-{
-  /**
-   * the next pointer for DLL
-   */
-  struct RequestOverlayConnectContext *next;
-
-  /**
-   * the prev pointer for DLL
-   */
-  struct RequestOverlayConnectContext *prev;
-
-  /**
-   * The peer handle of peer B
-   */
-  struct Peer *peer;
-  
-  /**
-   * Peer A's HELLO
-   */
-  struct GNUNET_MessageHeader *hello;
-
-  /**
-   * The handle for offering HELLO
-   */
-  struct GNUNET_TRANSPORT_OfferHelloHandle *ohh;
-
-  /**
-   * The transport try connect context
-   */
-  struct TryConnectContext tcc;
-
-  /**
-   * The peer identity of peer A
-   */
-  struct GNUNET_PeerIdentity a_id;
-
-  /**
-   * Task for offering HELLO of A to B and doing try_connect
-   */
-  GNUNET_SCHEDULER_TaskIdentifier attempt_connect_task_id;
-  
-  /**
-   * Task to timeout RequestOverlayConnect
-   */
-  GNUNET_SCHEDULER_TaskIdentifier timeout_rocc_task_id;
-  
-  /**
-   * The id of the operation responsible for creating this context
-   */
-  uint64_t op_id;
-};
-
-
-/**
- * Context information for operations forwarded to subcontrollers
- */
-struct ForwardedOperationContext
-{
-  /**
-   * The next pointer for DLL
-   */
-  struct ForwardedOperationContext *next;
-
-  /**
-   * The prev pointer for DLL
-   */
-  struct ForwardedOperationContext *prev;
-  
-  /**
-   * The generated operation context
-   */
-  struct OperationContext *opc;
-
-  /**
-   * The client to which we have to reply
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * Closure pointer
-   */
-  void *cls;
-
-  /**
-   * Task ID for the timeout task
-   */
-  GNUNET_SCHEDULER_TaskIdentifier timeout_task;
-
-  /**
-   * The id of the operation that has been forwarded
-   */
-  uint64_t operation_id;
-
-  /**
-   * The type of the operation which is forwarded
-   */
-  enum OperationType type;
-
-};
-
-
-/**
- * Context information used while linking controllers
- */
-struct LinkControllersContext
-{
-  /**
-   * The client which initiated the link controller operation
-   */
-  struct GNUNET_SERVER_Client *client;
-
-  /**
-   * The ID of the operation
-   */
-  uint64_t operation_id;
-
-};
-
-
-/**
- * Context information to used during operations which forward the overlay
- * connect message
- */
-struct ForwardedOverlayConnectContext
-{
-  /**
-   * next ForwardedOverlayConnectContext in the DLL
-   */
-  struct ForwardedOverlayConnectContext *next;
-
-  /**
-   * previous ForwardedOverlayConnectContext in the DLL
-   */
-  struct ForwardedOverlayConnectContext *prev;
-
-  /**
-   * A copy of the original overlay connect message
-   */
-  struct GNUNET_MessageHeader *orig_msg;
-
-  /**
-   * The id of the operation which created this context information
-   */
-  uint64_t operation_id;
-
-  /**
-   * the id of peer 1
-   */
-  uint32_t peer1;
-  
-  /**
-   * The id of peer 2
-   */
-  uint32_t peer2;
-  
-  /**
-   * Id of the host where peer2 is running
-   */
-  uint32_t peer2_host_id;
-};
-
-
-/**
- * Hello cache entry
- */
-struct HelloCacheEntry
-{
-  /**
-   * DLL next ptr for least recently used hello cache entries
-   */
-  struct HelloCacheEntry *next;
-
-  /**
-   * DLL prev ptr for least recently used hello cache entries
-   */
-  struct HelloCacheEntry *prev;
-
-  /**
-   * The key for this entry
-   */
-  struct GNUNET_HashCode key;
-  
-  /**
-   * The HELLO message
-   */
-  struct GNUNET_MessageHeader *hello;
-};
-
-
-/**
  * The master context; generated with the first INIT message
  */
 static struct Context *master_context;

Added: gnunet/src/testbed/gnunet-service-testbed.h
===================================================================
--- gnunet/src/testbed/gnunet-service-testbed.h                         (rev 0)
+++ gnunet/src/testbed/gnunet-service-testbed.h 2013-01-25 10:31:11 UTC (rev 
25891)
@@ -0,0 +1,810 @@
+/*
+  This file is part of GNUnet.
+  (C) 2012 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
+  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., 59 Temple Place - Suite 330,
+  Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file testbed/gnunet-service-testbed.h
+ * @brief data structures shared amongst components of TESTBED service
+ * @author Sree Harsha Totakura
+ */
+
+#include "gnunet_util_lib.h"
+#include "gnunet_testbed_service.h"
+#include "gnunet_transport_service.h"
+#include "gnunet_core_service.h"
+
+#include "testbed.h"
+#include "testbed_api.h"
+#include "testbed_api_operations.h"
+#include "testbed_api_hosts.h"
+#include "gnunet_testing_lib.h"
+
+
+/**
+ * Generic logging
+ */
+#define LOG(kind,...)                           \
+  GNUNET_log (kind, __VA_ARGS__)
+
+/**
+ * Debug logging
+ */
+#define LOG_DEBUG(...)                          \
+  LOG (GNUNET_ERROR_TYPE_DEBUG, __VA_ARGS__)
+
+/**
+ * By how much should the arrays lists grow
+ */
+#define LIST_GROW_STEP 10
+
+/**
+ * Default timeout for operations which may take some time
+ */
+#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 15)
+
+
+/**
+ * A routing entry
+ */
+struct Route
+{
+  /**
+   * destination host
+   */
+  uint32_t dest;
+
+  /**
+   * The destination host is reachable thru
+   */
+  uint32_t thru;
+};
+
+
+/**
+ * Context information for operations forwarded to subcontrollers
+ */
+struct ForwardedOperationContext
+{
+  /**
+   * The next pointer for DLL
+   */
+  struct ForwardedOperationContext *next;
+
+  /**
+   * The prev pointer for DLL
+   */
+  struct ForwardedOperationContext *prev;
+  
+  /**
+   * The generated operation context
+   */
+  struct OperationContext *opc;
+
+  /**
+   * The client to which we have to reply
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * Closure pointer
+   */
+  void *cls;
+
+  /**
+   * Task ID for the timeout task
+   */
+  GNUNET_SCHEDULER_TaskIdentifier timeout_task;
+
+  /**
+   * The id of the operation that has been forwarded
+   */
+  uint64_t operation_id;
+
+  /**
+   * The type of the operation which is forwarded
+   */
+  enum OperationType type;
+
+};
+
+
+/**
+ * A DLL of host registrations to be made
+ */
+struct HostRegistration
+{
+  /**
+   * next registration in the DLL
+   */
+  struct HostRegistration *next;
+
+  /**
+   * previous registration in the DLL
+   */
+  struct HostRegistration *prev;
+
+  /**
+   * The callback to call after this registration's status is available
+   */
+  GNUNET_TESTBED_HostRegistrationCompletion cb;
+
+  /**
+   * The closure for the above callback
+   */
+  void *cb_cls;
+
+  /**
+   * The host that has to be registered
+   */
+  struct GNUNET_TESTBED_Host *host;
+};
+
+
+/**
+ * Context information used while linking controllers
+ */
+struct LinkControllersContext
+{
+  /**
+   * The client which initiated the link controller operation
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * The ID of the operation
+   */
+  uint64_t operation_id;
+
+};
+
+
+/**
+ * Structure representing a connected(directly-linked) controller
+ */
+struct Slave
+{
+  /**
+   * The controller process handle if we had started the controller
+   */
+  struct GNUNET_TESTBED_ControllerProc *controller_proc;
+
+  /**
+   * The controller handle
+   */
+  struct GNUNET_TESTBED_Controller *controller;
+
+  /**
+   * The configuration of the slave. Cannot be NULL
+   */
+  struct GNUNET_CONFIGURATION_Handle *cfg;
+
+  /**
+   * handle to lcc which is associated with this slave startup. Should be set 
to
+   * NULL when the slave has successfully started up
+   */
+  struct LinkControllersContext *lcc;
+
+  /**
+   * Head of the host registration DLL
+   */
+  struct HostRegistration *hr_dll_head;
+
+  /**
+   * Tail of the host registration DLL
+   */
+  struct HostRegistration *hr_dll_tail;
+
+  /**
+   * The current host registration handle
+   */
+  struct GNUNET_TESTBED_HostRegistrationHandle *rhandle;
+
+  /**
+   * Hashmap to hold Registered host contexts
+   */
+  struct GNUNET_CONTAINER_MultiHashMap *reghost_map;
+
+  /**
+   * The id of the host this controller is running on
+   */
+  uint32_t host_id;
+
+};
+
+
+/**
+ * A peer
+ */
+
+struct Peer
+{
+  
+  union
+  {
+    struct
+    {
+      /**
+       * The peer handle from testing API
+       */
+      struct GNUNET_TESTING_Peer *peer;
+
+      /**
+       * The modified (by GNUNET_TESTING_peer_configure) configuration this
+       * peer is configured with
+       */
+      struct GNUNET_CONFIGURATION_Handle *cfg;
+      
+      /**
+       * Is the peer running
+       */
+      int is_running;
+
+    } local;
+
+    struct
+    {
+      /**
+       * The slave this peer is started through
+       */
+      struct Slave *slave;
+
+      /**
+       * The id of the remote host this peer is running on
+       */
+      uint32_t remote_host_id;
+
+    } remote;
+
+  } details;
+
+  /**
+   * Is this peer locally created?
+   */
+  int is_remote;
+
+  /**
+   * Our local reference id for this peer
+   */
+  uint32_t id;
+
+  /**
+   * References to peers are using in forwarded overlay contexts and remote
+   * overlay connect contexts. A peer can only be destroyed after all such
+   * contexts are destroyed. For this, we maintain a reference counter. When we
+   * use a peer in any such context, we increment this counter. We decrement it
+   * when we are destroying these contexts
+   */
+  uint32_t reference_cnt;
+
+  /**
+   * While destroying a peer, due to the fact that there could be references to
+   * this peer, we delay the peer destroy to a further time. We do this by 
using
+   * this flag to destroy the peer while destroying a context in which this 
peer
+   * has been used. When the flag is set to 1 and reference_cnt = 0 we destroy
+   * the peer
+   */
+  uint32_t destroy_flag;
+
+};
+
+
+/**
+ * Context information for transport try connect
+ */
+struct TryConnectContext
+{
+  /**
+   * The identity of the peer to which the transport has to attempt a 
connection
+   */
+  struct GNUNET_PeerIdentity *pid;
+
+  /**
+   * The transport handle
+   */
+  struct GNUNET_TRANSPORT_Handle *th;
+
+  /**
+   * the try connect handle
+   */
+  struct GNUNET_TRANSPORT_TryConnectHandle *tch;
+
+  /**
+   * The task handle
+   */
+  GNUNET_SCHEDULER_TaskIdentifier task;
+
+  /**
+   * The id of the operation which is resposible for this context
+   */
+  uint64_t op_id;
+
+  /**
+   * The number of times we attempted to connect
+   */
+  unsigned int retries;
+
+};
+
+
+/**
+ * Context information for connecting 2 peers in overlay
+ */
+struct OverlayConnectContext
+{
+  /**
+   * The next pointer for maintaining a DLL
+   */
+  struct OverlayConnectContext *next;
+
+  /**
+   * The prev pointer for maintaining a DLL
+   */
+  struct OverlayConnectContext *prev;
+  
+  /**
+   * The client which has requested for overlay connection
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * the peer which has to connect to the other peer
+   */
+  struct Peer *peer;
+
+  /**
+   * Transport handle of the first peer to get its HELLO
+   */
+  struct GNUNET_TRANSPORT_Handle *p1th;
+
+  /**
+   * Core handles of the first peer; used to notify when second peer connects 
to it
+   */
+  struct GNUNET_CORE_Handle *ch;
+
+  /**
+   * HELLO of the other peer
+   */
+  struct GNUNET_MessageHeader *hello;
+
+  /**
+   * Get hello handle to acquire HELLO of first peer
+   */
+  struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
+
+  /**
+   * The handle for offering HELLO
+   */
+  struct GNUNET_TRANSPORT_OfferHelloHandle *ohh;
+
+  /**
+   * The error message we send if this overlay connect operation has timed out
+   */
+  char *emsg;
+
+  /**
+   * Operation context for suboperations
+   */
+  struct OperationContext *opc;
+
+  /**
+   * Controller of peer 2; NULL if the peer is local
+   */
+  struct GNUNET_TESTBED_Controller *peer2_controller;
+
+  /**
+   * The transport try connect context
+   */
+  struct TryConnectContext tcc;
+
+  /**
+   * The peer identity of the first peer
+   */
+  struct GNUNET_PeerIdentity peer_identity;
+
+  /**
+   * The peer identity of the other peer
+   */
+  struct GNUNET_PeerIdentity other_peer_identity;
+
+  /**
+   * The id of the operation responsible for creating this context
+   */
+  uint64_t op_id;
+
+  /**
+   * The id of the task for sending HELLO of peer 2 to peer 1 and ask peer 1 to
+   * connect to peer 2
+   */
+  GNUNET_SCHEDULER_TaskIdentifier send_hello_task;
+
+  /**
+   * The id of the overlay connect timeout task
+   */
+  GNUNET_SCHEDULER_TaskIdentifier timeout_task;
+
+  /**
+   * The id of the cleanup task
+   */
+  GNUNET_SCHEDULER_TaskIdentifier cleanup_task;
+
+  /**
+   * The id of peer A
+   */
+  uint32_t peer_id;
+
+  /**
+   * The id of peer B
+   */
+  uint32_t other_peer_id;
+
+};
+
+
+/**
+ * Context information for RequestOverlayConnect
+ * operations. RequestOverlayConnect is used when peers A, B reside on 
different
+ * hosts and the host controller for peer B is asked by the host controller of
+ * peer A to make peer B connect to peer A
+ */
+struct RequestOverlayConnectContext
+{
+  /**
+   * the next pointer for DLL
+   */
+  struct RequestOverlayConnectContext *next;
+
+  /**
+   * the prev pointer for DLL
+   */
+  struct RequestOverlayConnectContext *prev;
+
+  /**
+   * The peer handle of peer B
+   */
+  struct Peer *peer;
+  
+  /**
+   * Peer A's HELLO
+   */
+  struct GNUNET_MessageHeader *hello;
+
+  /**
+   * The handle for offering HELLO
+   */
+  struct GNUNET_TRANSPORT_OfferHelloHandle *ohh;
+
+  /**
+   * The transport try connect context
+   */
+  struct TryConnectContext tcc;
+
+  /**
+   * The peer identity of peer A
+   */
+  struct GNUNET_PeerIdentity a_id;
+
+  /**
+   * Task for offering HELLO of A to B and doing try_connect
+   */
+  GNUNET_SCHEDULER_TaskIdentifier attempt_connect_task_id;
+  
+  /**
+   * Task to timeout RequestOverlayConnect
+   */
+  GNUNET_SCHEDULER_TaskIdentifier timeout_rocc_task_id;
+  
+  /**
+   * The id of the operation responsible for creating this context
+   */
+  uint64_t op_id;
+};
+
+
+/**
+ * Context information to used during operations which forward the overlay
+ * connect message
+ */
+struct ForwardedOverlayConnectContext
+{
+  /**
+   * next ForwardedOverlayConnectContext in the DLL
+   */
+  struct ForwardedOverlayConnectContext *next;
+
+  /**
+   * previous ForwardedOverlayConnectContext in the DLL
+   */
+  struct ForwardedOverlayConnectContext *prev;
+
+  /**
+   * A copy of the original overlay connect message
+   */
+  struct GNUNET_MessageHeader *orig_msg;
+
+  /**
+   * The id of the operation which created this context information
+   */
+  uint64_t operation_id;
+
+  /**
+   * the id of peer 1
+   */
+  uint32_t peer1;
+  
+  /**
+   * The id of peer 2
+   */
+  uint32_t peer2;
+  
+  /**
+   * Id of the host where peer2 is running
+   */
+  uint32_t peer2_host_id;
+};
+
+
+/**
+ * The main context information associated with the client which started us
+ */
+struct Context
+{
+  /**
+   * The client handle associated with this context
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * The network address of the master controller
+   */
+  char *master_ip;
+
+  /**
+   * The TESTING system handle for starting peers locally
+   */
+  struct GNUNET_TESTING_System *system;
+  
+  /**
+   * Our host id according to this context
+   */
+  uint32_t host_id;
+};
+
+
+/**
+ * The structure for identifying a shared service
+ */
+struct SharedService
+{
+  /**
+   * The name of the shared service
+   */
+  char *name;
+
+  /**
+   * Number of shared peers per instance of the shared service
+   */
+  uint32_t num_shared;
+
+  /**
+   * Number of peers currently sharing the service
+   */
+  uint32_t num_sharing;
+};
+
+
+/**
+ * This context information will be created for each host that is registered at
+ * slave controllers during overlay connects.
+ */
+struct RegisteredHostContext
+{
+  /**
+   * The host which is being registered
+   */
+  struct GNUNET_TESTBED_Host *reg_host;
+
+  /**
+   * The host of the controller which has to connect to the above rhost
+   */
+  struct GNUNET_TESTBED_Host *host;
+
+  /**
+   * The gateway to which this operation is forwarded to
+   */
+  struct Slave *gateway;
+
+  /**
+   * The gateway through which peer2's controller can be reached
+   */
+  struct Slave *gateway2;
+
+  /**
+   * Handle for sub-operations
+   */
+  struct GNUNET_TESTBED_Operation *sub_op;
+
+  /**
+   * The client which initiated the link controller operation
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * Head of the ForwardedOverlayConnectContext DLL
+   */
+  struct ForwardedOverlayConnectContext *focc_dll_head;
+
+  /**
+   * Tail of the ForwardedOverlayConnectContext DLL
+   */
+  struct ForwardedOverlayConnectContext *focc_dll_tail;
+  
+  /**
+   * Enumeration of states for this context
+   */
+  enum RHCState {
+
+    /**
+     * The initial state
+     */
+    RHC_INIT = 0,
+
+    /**
+     * State where we attempt to get peer2's controller configuration
+     */
+    RHC_GET_CFG,
+
+    /**
+     * State where we attempt to link the controller of peer 1 to the 
controller
+     * of peer2
+     */
+    RHC_LINK,
+
+    /**
+     * State where we attempt to do the overlay connection again
+     */
+    RHC_OL_CONNECT
+    
+  } state;
+
+};
+
+
+/**
+ * States of LCFContext
+ */
+enum LCFContextState
+{
+  /**
+   * The Context has been initialized; Nothing has been done on it
+   */
+  INIT,
+
+  /**
+   * Delegated host has been registered at the forwarding controller
+   */
+  DELEGATED_HOST_REGISTERED,
+  
+  /**
+   * The slave host has been registred at the forwarding controller
+   */
+  SLAVE_HOST_REGISTERED,
+  
+  /**
+   * The context has been finished (may have error)
+   */
+  FINISHED
+};
+
+
+/**
+ * Link controllers request forwarding context
+ */
+struct LCFContext
+{
+  /**
+   * The gateway which will pass the link message to delegated host
+   */
+  struct Slave *gateway;
+
+  /**
+   * The controller link message that has to be forwarded to
+   */
+  struct GNUNET_TESTBED_ControllerLinkMessage *msg;
+
+  /**
+   * The client which has asked to perform this operation
+   */
+  struct GNUNET_SERVER_Client *client;
+
+  /**
+   * Handle for operations which are forwarded while linking controllers
+   */
+  struct ForwardedOperationContext *fopc;
+
+  /**
+   * The id of the operation which created this context
+   */
+  uint64_t operation_id;
+
+  /**
+   * The state of this context
+   */
+  enum LCFContextState state;
+
+  /**
+   * The delegated host
+   */
+  uint32_t delegated_host_id;
+
+  /**
+   * The slave host
+   */
+  uint32_t slave_host_id;
+
+};
+
+
+/**
+ * Structure of a queue entry in LCFContext request queue
+ */
+struct LCFContextQueue
+{
+  /**
+   * The LCFContext
+   */
+  struct LCFContext *lcf;
+
+  /**
+   * Head prt for DLL
+   */
+  struct LCFContextQueue *next;
+
+  /**
+   * Tail ptr for DLL
+   */
+  struct LCFContextQueue *prev;
+};
+
+
+/**
+ * Hello cache entry
+ */
+struct HelloCacheEntry
+{
+  /**
+   * DLL next ptr for least recently used hello cache entries
+   */
+  struct HelloCacheEntry *next;
+
+  /**
+   * DLL prev ptr for least recently used hello cache entries
+   */
+  struct HelloCacheEntry *prev;
+
+  /**
+   * The key for this entry
+   */
+  struct GNUNET_HashCode key;
+  
+  /**
+   * The HELLO message
+   */
+  struct GNUNET_MessageHeader *hello;
+};
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]