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
 
       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
       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_configuration_lib.h"
 #include "gnunet_scheduler_lib.h"
+#include "gnunet_os_lib.h"
 #include "gnunet_time_lib.h"
 
 /**
  * Version of the arm API.
  */
 #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
 
 
 /**
  * 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.
 
 
 /**
  * Handle for interacting with ARM.
- */ 
+ */
 struct GNUNET_ARM_Handle;
 
 
 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 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,
  * @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 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
  * @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);
 
                           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
  * @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);
 
 
                          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 */
 {
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {