Using regex for exit/vpn
[oweals/gnunet.git] / src / include / gnunet_arm_service.h
index 07722c97fae53f5206379ccfcb466736e2ee8121..0aa916bd46f3597acb801c5c6b03155293809725 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
@@ -37,29 +37,98 @@ extern "C"
 
 #include "gnunet_configuration_lib.h"
 #include "gnunet_scheduler_lib.h"
+#include "gnunet_os_lib.h"
 #include "gnunet_time_lib.h"
 
 /**
  * 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, 
+                                    enum GNUNET_ARM_ProcessStatus result);
+
+/**
+ * Callback function invoked when list operation is complete.
+ *
+ * @param cls closure
+ * @param result outcome of the operation (GNUNET_YES if successful)
+ * @param count number of strings in the list
+ * @param list list of running services
  */
-typedef void (*GNUNET_ARM_Callback) (void *cls, int success);
+typedef void (*GNUNET_ARM_List_Callback) (void *cls, 
+                                          int result,
+                                          unsigned int count,
+                                          const char *const *list);
 
 
 /**
  * Handle for interacting with ARM.
- */ 
+ */
 struct GNUNET_ARM_Handle;
 
 
@@ -70,14 +139,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);
 
 
 /**
@@ -103,13 +170,14 @@ GNUNET_ARM_disconnect (struct GNUNET_ARM_Handle *h);
  *
  * @param h handle to ARM
  * @param service_name name of the service
+ * @param std_inheritance flags controlling std descriptors inheritance
  * @param timeout how long to wait before failing for good
  * @param cb callback to invoke when service is ready
  * @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,
+                          enum GNUNET_OS_InheritStdioFlags std_inheritance,
                           struct GNUNET_TIME_Relative timeout,
                           GNUNET_ARM_Callback cb, void *cb_cls);
 
@@ -126,12 +194,23 @@ 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);
 
 
+/**
+ * List all running services.
+ * 
+ * @param h handle to ARM
+ * @param timeout how long to wait before failing for good
+ * @param cb callback to invoke when service is ready
+ * @param cb_cls closure for callback
+ */
+void
+GNUNET_ARM_list_running_services (struct GNUNET_ARM_Handle *h,
+                                  struct GNUNET_TIME_Relative timeout,
+                                  GNUNET_ARM_List_Callback cb, void *cb_cls);
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {