X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Finclude%2Fgnunet_helper_lib.h;h=191d97b80e71b9d5bfd25df50ec3021ac63dd5dd;hb=6973ade884b8e22e7fcaa51a90d00a8caa2d2fa4;hp=9c1bc21e2841925927bb038f01b9e761b3660837;hpb=6623d76dcb3659204935e462a8d0d415c7748a99;p=oweals%2Fgnunet.git diff --git a/src/include/gnunet_helper_lib.h b/src/include/gnunet_helper_lib.h index 9c1bc21e2..191d97b80 100644 --- a/src/include/gnunet_helper_lib.h +++ b/src/include/gnunet_helper_lib.h @@ -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. *