messages for inter-controller overlay connect
[oweals/gnunet.git] / src / include / gnunet_os_lib.h
index 67b6cce0c34675a24cea8b7115979eb178fe8960..1d4828f48943a35d424eedb60ed932aeb77c7ab9 100644 (file)
@@ -54,6 +54,51 @@ extern "C"
 #include "gnunet_configuration_lib.h"
 #include "gnunet_scheduler_lib.h"
 
+
+/**
+ * Flags that determine which of the standard streams
+ * should be inherited by the child process.
+ */
+enum GNUNET_OS_InheritStdioFlags
+{
+
+  /**
+   * No standard streams should be inherited.
+   */
+  GNUNET_OS_INHERIT_STD_NONE = 0,
+
+  /**
+   * When this flag is set, the child process will
+   * inherit stdin of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_IN = 1,
+  
+  /**
+   * When this flag is set, the child process will
+   * inherit stdout of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_OUT = 2,
+
+  /**
+   * When this flag is set, the child process will
+   * inherit stderr of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_ERR = 4,
+
+  /**
+   * When these flags are set, the child process will
+   * inherit stdout and stderr of the parent.
+   */
+  GNUNET_OS_INHERIT_STD_OUT_AND_ERR = 6,
+
+  /**
+   * Use this option to have all of the standard streams
+   * (stdin, stdout and stderror) be inherited.
+   */
+  GNUNET_OS_INHERIT_STD_ALL = 7
+};
+
+
 /**
  * Process information (OS-dependent)
  */
@@ -257,6 +302,7 @@ GNUNET_OS_set_process_priority (struct GNUNET_OS_Process *proc,
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -265,6 +311,7 @@ GNUNET_OS_set_process_priority (struct GNUNET_OS_Process *proc,
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_vap (int pipe_control,
+                             enum GNUNET_OS_InheritStdioFlags std_inheritance,
                             struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, 
@@ -275,6 +322,7 @@ GNUNET_OS_start_process_vap (int pipe_control,
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -283,6 +331,7 @@ GNUNET_OS_start_process_vap (int pipe_control,
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process (int pipe_control,
+                         enum GNUNET_OS_InheritStdioFlags std_inheritance,
                         struct GNUNET_DISK_PipeHandle *pipe_stdin,
                          struct GNUNET_DISK_PipeHandle *pipe_stdout,
                          const char *filename, ...);
@@ -292,6 +341,7 @@ GNUNET_OS_start_process (int pipe_control,
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param pipe_stdin pipe to use to send input to child process (or NULL)
  * @param pipe_stdout pipe to use to get output from child process (or NULL)
  * @param filename name of the binary
@@ -300,6 +350,7 @@ GNUNET_OS_start_process (int pipe_control,
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_va (int pipe_control,
+                            enum GNUNET_OS_InheritStdioFlags std_inheritance,
                            struct GNUNET_DISK_PipeHandle *pipe_stdin,
                             struct GNUNET_DISK_PipeHandle *pipe_stdout,
                             const char *filename, va_list va);
@@ -308,6 +359,7 @@ GNUNET_OS_start_process_va (int pipe_control,
  * Start a process.
  *
  * @param pipe_control should a pipe be used to send signals to the child?
+ * @param std_inheritance a set of GNUNET_OS_INHERIT_STD_* flags
  * @param lsocks array of listen sockets to dup systemd-style (or NULL);
  *         must be NULL on platforms where dup is not supported
  * @param filename name of the binary
@@ -317,6 +369,7 @@ GNUNET_OS_start_process_va (int pipe_control,
  */
 struct GNUNET_OS_Process *
 GNUNET_OS_start_process_v (int pipe_control,
+                           enum GNUNET_OS_InheritStdioFlags std_inheritance,
                           const SOCKTYPE *lsocks, 
                           const char *filename,
                            char *const argv[]);