implementing GNUNET_TESTING_get_peer_identity (addressing #2083)
[oweals/gnunet.git] / src / include / gnunet_arm_service.h
index 8e68cd5ee2fdcf796029710daba45d44def41448..af1c8cd9441601a9898adf8742daf777845c90ee 100644 (file)
@@ -4,7 +4,7 @@
 
       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
@@ -42,24 +42,79 @@ extern "C"
 /**
  * Version of the arm API.
  */
-#define GNUNET_ARM_VERSION 0x00000000
+#define GNUNET_ARM_VERSION 0x00000001
+
+
+/**
+ * Values characterizing GNUnet process states.
+ */
+enum GNUNET_ARM_ProcessStatus
+{
+  /**
+   * Service name is unknown to ARM.
+   */
+  GNUNET_ARM_PROCESS_UNKNOWN = -1,
+
+  /**
+   * Service is now down (due to client request).
+   */
+  GNUNET_ARM_PROCESS_DOWN = 0,
+
+  /**
+   * Service is already running.
+   */
+  GNUNET_ARM_PROCESS_ALREADY_RUNNING = 1,
+
+  /**
+   * Service is currently being started (due to client request).
+   */
+  GNUNET_ARM_PROCESS_STARTING = 2,
+  
+  /**
+   * Service is already being stopped by some other client.
+   */
+  GNUNET_ARM_PROCESS_ALREADY_STOPPING = 3,
+
+  /**
+   * Service is already down (no action taken)
+   */
+  GNUNET_ARM_PROCESS_ALREADY_DOWN = 4,
+
+  /**
+   * ARM is currently being shut down (no more process starts)
+   */
+  GNUNET_ARM_PROCESS_SHUTDOWN = 5,
+
+  /**
+   * Error in communication with ARM
+   */
+  GNUNET_ARM_PROCESS_COMMUNICATION_ERROR = 6,
+
+  /**
+   * Timeout in communication with ARM
+   */
+  GNUNET_ARM_PROCESS_COMMUNICATION_TIMEOUT = 7,
+
+  /**
+   * Failure to perform operation
+   */
+  GNUNET_ARM_PROCESS_FAILURE = 8
+};
 
 
 /**
  * Callback function invoked when operation is complete.
  *
  * @param cls closure
- * @param success GNUNET_YES if we think the service is running
- *                GNUNET_NO if we think the service is stopped
- *                GNUNET_SYSERR if we think ARM was not running or
- *                          if the service status is unknown
+ * @param result outcome of the operation
  */
-typedef void (*GNUNET_ARM_Callback) (void *cls, int success);
+typedef void (*GNUNET_ARM_Callback) (void *cls, 
+                                    enum GNUNET_ARM_ProcessStatus result);
 
 
 /**
  * Handle for interacting with ARM.
- */ 
+ */
 struct GNUNET_ARM_Handle;
 
 
@@ -70,14 +125,12 @@ struct GNUNET_ARM_Handle;
  * @param cfg configuration to use (needed to contact ARM;
  *        the ARM service may internally use a different
  *        configuration to determine how to start the service).
- * @param sched scheduler to use
  * @param service service that *this* process is implementing/providing, can be NULL
  * @return context to use for further ARM operations, NULL on error
  */
 struct GNUNET_ARM_Handle *
 GNUNET_ARM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                   struct GNUNET_SCHEDULER_Handle *sched,
-                   const char *service);
+                    const char *service);
 
 
 /**
@@ -108,8 +161,7 @@ GNUNET_ARM_disconnect (struct GNUNET_ARM_Handle *h);
  * @param cb_cls closure for callback
  */
 void
-GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h,
-                         const char *service_name,
+GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h, const char *service_name,
                           struct GNUNET_TIME_Relative timeout,
                           GNUNET_ARM_Callback cb, void *cb_cls);
 
@@ -126,43 +178,11 @@ GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h,
  * @param cb_cls closure for callback
  */
 void
-GNUNET_ARM_stop_service (struct GNUNET_ARM_Handle *h,
-                        const char *service_name,
+GNUNET_ARM_stop_service (struct GNUNET_ARM_Handle *h, const char *service_name,
                          struct GNUNET_TIME_Relative timeout,
                          GNUNET_ARM_Callback cb, void *cb_cls);
 
 
-/**
- * Start multiple services in the specified order.  Convenience
- * function.  Works asynchronously, failures are not reported.
- *
- * @param cfg configuration to use (needed to contact ARM;
- *        the ARM service may internally use a different
- *        configuration to determine how to start the service).
- * @param sched scheduler to use
- * @param ... NULL-terminated list of service names (const char*)
- */
-void
-GNUNET_ARM_start_services (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                          struct GNUNET_SCHEDULER_Handle *sched,
-                          ...);
-
-
-/**
- * Stop multiple services in the specified order.  Convenience
- * function.  Works asynchronously, failures are not reported.
- *
- * @param cfg configuration to use (needed to contact ARM;
- *        the ARM service may internally use a different
- *        configuration to determine how to start the service).
- * @param sched scheduler to use
- * @param ... NULL-terminated list of service names (const char*)
- */
-void
-GNUNET_ARM_stop_services (const struct GNUNET_CONFIGURATION_Handle *cfg,
-                         struct GNUNET_SCHEDULER_Handle *sched,
-                         ...);
-
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {