- Remove printf, use GNUNET_log INFO
[oweals/gnunet.git] / src / include / gnunet_helper_lib.h
index 9c1bc21e2841925927bb038f01b9e761b3660837..191d97b80e71b9d5bfd25df50ec3021ac63dd5dd 100644 (file)
@@ -24,6 +24,7 @@
  * @author Philipp Toelke
  * @author Christian Grothoff
  */
+
 #ifndef GNUNET_HELPER_LIB_H
 #define GNUNET_HELPER_LIB_H
 
@@ -37,24 +38,41 @@ struct GNUNET_HELPER_Handle;
 
 
 /**
- * @brief Starts a helper and begins reading from it
+ * Callback that will be called when the helper process dies. This is not called
+ * when the helper process is stoped using GNUNET_HELPER_stop()
  *
+ * @param cls the closure from GNUNET_HELPER_start()
+ */
+typedef void (*GNUNET_HELPER_ExceptionCallback) (void *cls);
+
+
+/**
+ * Starts a helper and begins reading from it. The helper process is
+ * restarted when it dies except when it is stopped using GNUNET_HELPER_stop()
+ * or when the exp_cb callback is not NULL.
+ *
+ * @param with_control_pipe does the helper support the use of a control pipe for signalling?
  * @param binary_name name of the binary to run
  * @param binary_argv NULL-terminated list of arguments to give when starting the binary (this
  *                    argument must not be modified by the client for
  *                     the lifetime of the helper handle)
  * @param cb function to call if we get messages from the helper
- * @param cb_cls Closure for the callback
+ * @param exp_cb the exception callback to call. Set this to NULL if the helper
+ *          process has to be restarted automatically when it dies/crashes
+ * @param cb_cls closure for the above callbacks
  * @return the new Handle, NULL on error
  */
 struct GNUNET_HELPER_Handle *
-GNUNET_HELPER_start (const char *binary_name,
+GNUNET_HELPER_start (int with_control_pipe,
+                    const char *binary_name,
                     char *const binary_argv[],
-                    GNUNET_SERVER_MessageTokenizerCallback cb, void *cb_cls);
+                    GNUNET_SERVER_MessageTokenizerCallback cb,
+                    GNUNET_HELPER_ExceptionCallback exp_cb,
+                    void *cb_cls);
 
 
 /**
- * @brief Kills the helper, closes the pipe and frees the handle
+ * Kills the helper, closes the pipe and frees the handle
  *
  * @param h handle to helper to stop
  */
@@ -62,6 +80,16 @@ void
 GNUNET_HELPER_stop (struct GNUNET_HELPER_Handle *h);
 
 
+/**
+ * Kills the helper by closing its stdin (the helper is expected to catch the
+ * resulting SIGPIPE and shutdown), closes the pipe and frees the handle
+ *
+ * @param h handle to helper to stop
+ */
+void
+GNUNET_HELPER_soft_stop (struct GNUNET_HELPER_Handle *h);
+
+
 /**
  * Continuation function.
  *