summaryrefslogtreecommitdiff
path: root/src/til_stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/til_stream.h')
-rw-r--r--src/til_stream.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/til_stream.h b/src/til_stream.h
index 3e83c7d..3f0a618 100644
--- a/src/til_stream.h
+++ b/src/til_stream.h
@@ -32,8 +32,19 @@ typedef struct til_tap_t til_tap_t;
*/
typedef int (til_stream_iter_func_t)(void *context, til_stream_pipe_t *pipe, const void *owner, const void *owner_foo, const til_tap_t *driving_tap);
+/* this provides a way to intercept pipe creations/deletions when they occur,
+ * allowing another module to snipe ownership when they appear and cleanup
+ * its resources when they disappear.
+ */
+typedef struct til_stream_hooks_t {
+ int (*pipe_ctor)(void *context, til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap, const void **res_owner, const void **res_owner_foo, const til_tap_t **res_tap); /* called immediately *before* pipe would be created by tap using these parameters, return <0 on error, 0 on unhandled by hook, 1 on handled with desired owner/owner_foo/tap stored in res_* */
+ int (*pipe_dtor)(void *context, til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, const til_tap_t *tap); /* called immediately *after* pipe "destroyed" (withdrawn from stream) */
+} til_stream_hooks_t;
+
til_stream_t * til_stream_new(void);
til_stream_t * til_stream_free(til_stream_t *stream);
+int til_stream_set_hooks(til_stream_t *stream, const til_stream_hooks_t *hooks, void *context);
+int til_stream_unset_hooks(til_stream_t *stream, const til_stream_hooks_t *hooks);
/* bare interface for non-module-context owned taps */
int til_stream_tap(til_stream_t *stream, const void *owner, const void *owner_foo, const char *parent_path, uint32_t parent_hash, const til_tap_t *tap);
© All Rights Reserved