void *update_cb_cls;
/**
- * PID of the process that we started last.
+ * PID of the process we used to run gnunet-arm or SSH to start the peer.
*/
- struct GNUNET_OS_Process *proc;
+ struct GNUNET_OS_Process *proc_arm_start;
+
+ /**
+ * PID of the process we used to run gnunet-arm or SSH to stop the peer.
+ */
+ struct GNUNET_OS_Process *proc_arm_stop;
+
+ /**
+ * PID of the process we used to run gnunet-arm or SSH to manage services at the peer.
+ */
+ struct GNUNET_OS_Process *proc_arm_srv_start;
+
+ /**
+ * PID of the process we used to run gnunet-arm or SSH to manage services at the peer.
+ */
+ struct GNUNET_OS_Process *proc_arm_srv_stop;
+
+ /**
+ * PID of the process we used to run copy files
+ */
+ struct GNUNET_OS_Process *proc_arm_copying;
+
+ /**
+ * PID of the process we used to run gnunet-peerinfo.
+ */
+ struct GNUNET_OS_Process *proc_arm_peerinfo;
/**
* Handle to the server.
*/
struct GNUNET_TRANSPORT_Handle *th;
+ /**
+ * Handle for getting HELLOs from transport
+ */
+ struct GNUNET_TRANSPORT_GetHelloHandle *ghh;
+
/**
* HELLO message for this peer
*/
second_daemon,
const char *emsg);
+
/**
* Prototype of a callback function indicating that two peers
* are currently connected.
* Check whether the given daemon is running.
*
* @param daemon the daemon to check
- *
* @return GNUNET_YES if the daemon is up, GNUNET_NO if the
* daemon is down, GNUNET_SYSERR on error.
*/
int
-GNUNET_TESTING_daemon_running (struct GNUNET_TESTING_Daemon *daemon);
+GNUNET_TESTING_test_daemon_running (struct GNUNET_TESTING_Daemon *daemon);
+
+
+/**
+ * Obtain the peer identity of the peer with the given configuration
+ * handle. This function reads the private key of the peer, obtains
+ * the public key and hashes it.
+ *
+ * @param cfg configuration of the peer
+ * @param pid where to store the peer identity
+ * @return GNUNET_OK on success, GNUNET_SYSERR on failure
+ */
+int
+GNUNET_TESTING_get_peer_identity (const struct GNUNET_CONFIGURATION_Handle *cfg,
+ struct GNUNET_PeerIdentity *pid);
/**
*/
void
GNUNET_TESTING_daemon_start_service (struct GNUNET_TESTING_Daemon *d,
- char *service,
+ const char *service,
struct GNUNET_TIME_Relative timeout,
GNUNET_TESTING_NotifyDaemonRunning cb,
void *cb_cls);
*/
struct GNUNET_TESTING_Daemon *
GNUNET_TESTING_daemon_get_by_id (struct GNUNET_TESTING_PeerGroup *pg,
- struct GNUNET_PeerIdentity *peer_id);
+ const struct GNUNET_PeerIdentity *peer_id);
/**
int delete_files, int allow_restart);
+
+/**
+ * Create a new configuration using the given configuration
+ * as a template; however, each PORT in the existing cfg
+ * must be renumbered by incrementing "*port". If we run
+ * out of "*port" numbers, return NULL.
+ *
+ * @param cfg template configuration
+ * @param off the current peer offset
+ * @param port port numbers to use, update to reflect
+ * port numbers that were used
+ * @param upnum number to make unix domain socket names unique
+ * @param hostname hostname of the controlling host, to allow control connections from
+ * @param fdnum number used to offset the unix domain socket for grouped processes
+ * (such as statistics or peerinfo, which can be shared among others)
+ *
+ * @return new configuration, NULL on error
+ */
+struct GNUNET_CONFIGURATION_Handle *
+GNUNET_TESTING_create_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg, uint32_t off,
+ uint16_t * port, uint32_t * upnum, const char *hostname,
+ uint32_t * fdnum);
+
/**
* Changes the configuration of a GNUnet daemon.
*
*/
void
GNUNET_TESTING_daemon_stop_service (struct GNUNET_TESTING_Daemon *d,
- char *service,
+ const char *service,
struct GNUNET_TIME_Relative timeout,
GNUNET_TESTING_NotifyCompletion cb,
void *cb_cls);
/**
- * Establish a connection between two GNUnet daemons.
+ * Handle for an active request to connect two peers.
+ */
+struct GNUNET_TESTING_ConnectContext;
+
+
+/**
+ * Establish a connection between two GNUnet daemons. The daemons
+ * must both be running and not be stopped until either the
+ * 'cb' callback is called OR the connection request has been
+ * explicitly cancelled.
*
* @param d1 handle for the first daemon
* @param d2 handle for the second daemon
* the HELLO has already been exchanged
* @param cb function to call at the end
* @param cb_cls closure for cb
+ * @return handle to cancel the request, NULL on error
*/
struct GNUNET_TESTING_ConnectContext *
GNUNET_TESTING_daemons_connect (struct GNUNET_TESTING_Daemon *d1,
void *cb_cls);
+
/**
* Cancel an attempt to connect two daemons.
*
*cc);
+
/**
* Restart all peers in the given group.
*