-towards fixing FTBFS in experimentation
[oweals/gnunet.git] / src / experimentation / gnunet-daemon-experimentation.h
index 9d2c6297530828bf51789dc2a3dffe0438b0d9e4..838d06b698a6ed2d36f248c71a89def29678bcec 100644 (file)
 /**
  * Statistics handle shared between components
  */
-extern struct GNUNET_STATISTICS_Handle *GSE_stats;
+extern struct GNUNET_STATISTICS_Handle *GED_stats;
 
 
 /**
  * Configuration handle shared between components
  */
-extern struct GNUNET_CONFIGURATION_Handle *GSE_cfg;
+extern struct GNUNET_CONFIGURATION_Handle *GED_cfg;
 
 
 /**
@@ -166,8 +166,8 @@ struct Node
         */
        struct GNUNET_PeerIdentity *issuer_id;
 
-       struct ExperimentStartCtx *e_req_head;
-       struct ExperimentStartCtx *e_req_tail;
+       struct NodeComCtx *e_req_head;
+       struct NodeComCtx *e_req_tail;
 };
 
 struct Experimentation_Issuer
@@ -175,6 +175,8 @@ struct Experimentation_Issuer
        struct GNUNET_PeerIdentity issuer_id;
 };
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * Experimentation request message
  * Used to detect experimentation capability
@@ -208,12 +210,76 @@ struct Experimentation_Response
        uint32_t issuer_count;
 };
 
+
+/**
+ * Experiment start message
+ *
+ * struct is followed by string with length len_name
+ */
+struct GED_start_message
+{
+       struct GNUNET_MessageHeader header;
+
+       /**
+        * String length of experiment name following the struct
+        */
+       uint32_t len_name;
+
+       /* Experiment issuer */
+       struct GNUNET_PeerIdentity issuer;
+
+       /* Experiment version as timestamp of creation */
+       struct GNUNET_TIME_AbsoluteNBO version_nbo;
+};
+
+struct GED_start_ack_message
+{
+       struct GNUNET_MessageHeader header;
+
+       /**
+        * String length of experiment name following the struct
+        */
+       uint32_t len_name;
+
+       /* Experiment issuer */
+       struct GNUNET_PeerIdentity issuer;
+
+       /* Experiment version as timestamp of creation */
+       struct GNUNET_TIME_AbsoluteNBO version_nbo;
+};
+
+struct GED_stop_message
+{
+       struct GNUNET_MessageHeader header;
+
+       /**
+        * String length of experiment name following the struct
+        */
+       uint32_t len_name;
+
+       /* Experiment issuer */
+       struct GNUNET_PeerIdentity issuer;
+
+       /* Experiment version as timestamp of creation */
+       struct GNUNET_TIME_AbsoluteNBO version_nbo;
+};
+
+GNUNET_NETWORK_STRUCT_END
+
+
 int
 GED_nodes_rts (struct Node *n);
 
 int
-GED_nodes_request_start (struct Node *n, struct Experiment *e);
+GED_nodes_send_start (struct Node *n, struct Experiment *e);
 
+/**
+ * Confirm a experiment START with a node
+ *
+ * @return GNUNET_NO if core was busy with sending, GNUNET_OK otherwise
+ */
+int
+GED_nodes_send_start_ack (struct Node *n, struct Experiment *e);
 
 /**
  * Start the nodes management
@@ -273,8 +339,23 @@ int
 GED_experiments_issuer_accepted (struct GNUNET_PeerIdentity *issuer_ID);
 
 
+/*
+ * Find an experiment based on issuer name and version
+ *
+ * @param issuer the issuer
+ * @param name experiment name
+ * @param version experiment version
+ * @return the experiment or NULL if not found
+ */
+struct Experiment *
+GED_experiments_find (const struct GNUNET_PeerIdentity *issuer,
+                                                                                       const char *name,
+                                                                                       const struct GNUNET_TIME_Absolute version);
+
+
 typedef void (*GNUNET_EXPERIMENTATION_experiments_get_cb) (struct Node *n, struct Experiment *e);
 
+
 void
 GED_experiments_get (struct Node *n,
                                                                                                                                                                struct GNUNET_PeerIdentity *issuer,
@@ -325,10 +406,14 @@ GED_scheduler_handle_stop (struct Node *n, struct Experiment *e);
 
 
 /**
- * Start the scheduler component
+ * Add a new experiment for a node
+ *
+ * @param n the node
+ * @param e the experiment
+ * @param outbound are we initiator (GNUNET_YES) or client (GNUNET_NO)?
  */
 void
-GED_scheduler_add (struct Node *n, struct Experiment *e);
+GED_scheduler_add (struct Node *n, struct Experiment *e, int outbound);
 
 /**
  * Start the scheduler component