/**
* 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;
/**
* Array of fssuer ids
*/
struct GNUNET_PeerIdentity *issuer_id;
+
+ struct NodeComCtx *e_req_head;
+ struct NodeComCtx *e_req_tail;
};
struct Experimentation_Issuer
struct GNUNET_PeerIdentity issuer_id;
};
+GNUNET_NETWORK_STRUCT_BEGIN
+
/**
* Experimentation request message
* Used to detect experimentation capability
uint32_t issuer_count;
};
-void
-GNUNET_EXPERIMENT_nodes_request_start (struct Node *n, struct Experiment *e);
+/**
+ * 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_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
*/
void
-GNUNET_EXPERIMENTATION_nodes_start ();
+GED_nodes_start ();
/**
* Stop the nodes management
*/
void
-GNUNET_EXPERIMENTATION_nodes_stop ();
+GED_nodes_stop ();
/**
* @return the string to print
*/
const char *
-GNUNET_EXPERIMENTATION_capability_to_str (uint32_t cap);
+GED_capability_to_str (uint32_t cap);
/**
* @return GNUNET_YES or GNUNET_NO
*/
int
-GNUNET_EXPERIMENTATION_capabilities_have (uint32_t have, uint32_t desired);
+GED_capabilities_have (uint32_t have, uint32_t desired);
/**
* Start the detecting capabilities
*/
void
-GNUNET_EXPERIMENTATION_capabilities_start ();
+GED_capabilities_start ();
/**
* Stop the detecting capabilities
*/
void
-GNUNET_EXPERIMENTATION_capabilities_stop ();
+GED_capabilities_stop ();
/**
* @return GNUNET_YES or GNUNET_NO
*/
int
-GNUNET_EXPERIMENTATION_experiments_issuer_accepted (struct GNUNET_PeerIdentity *issuer_ID);
+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
-GNUNET_EXPERIMENTATION_experiments_get (struct Node *n,
+GED_experiments_get (struct Node *n,
struct GNUNET_PeerIdentity *issuer,
GNUNET_EXPERIMENTATION_experiments_get_cb get_cb);
* @return GNUNET_OK on success, GNUNET_SYSERR on error
*/
int
-GNUNET_EXPERIMENTATION_experiments_start ();
+GED_experiments_start ();
/**
* Stop experiments management
*/
void
-GNUNET_EXPERIMENTATION_experiments_stop ();
+GED_experiments_stop ();
+
+/**
+ * Handle a START message from a remote node
+ *
+ * @param n the node
+ * @param e the experiment
+ */
+void
+GED_scheduler_handle_start (struct Node *n, struct Experiment *e);
/**
- * Start the scheduler component
+ * Handle a START_ACL message from a remote node
+ *
+ * @param n the node
+ * @param e the experiment
+ */
+void
+GED_scheduler_handle_start_ack (struct Node *n, struct Experiment *e);
+
+/**
+ * Handle a STOP message from a remote node
+ *
+ * @param n the node
+ * @param e the experiment
+ */
+void
+GED_scheduler_handle_stop (struct Node *n, struct Experiment *e);
+
+
+/**
+ * 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
-GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e);
+GED_scheduler_add (struct Node *n, struct Experiment *e, int outbound);
/**
* Start the scheduler component
*/
void
-GNUNET_EXPERIMENTATION_scheduler_start ();
+GED_scheduler_start ();
/**
* Stop the scheduler component
*/
void
-GNUNET_EXPERIMENTATION_scheduler_stop ();
+GED_scheduler_stop ();
/**
* Start the storage component
*/
void
-GNUNET_EXPERIMENTATION_storage_start ();
+GED_storage_start ();
* Stop the storage component
*/
void
-GNUNET_EXPERIMENTATION_storage_stop ();
+GED_storage_stop ();
/* end of gnunet-daemon-experimentation.h */