From 41dec6436242c4daccdd9fdee3ac052004c439bd Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 16 Mar 2026 21:09:38 +0000 Subject: Refactor ftrig using sass; clean up API a bit, update its users --- src/include/s6/ftrigr.h | 102 ++++++++++++------------------------------------ 1 file changed, 25 insertions(+), 77 deletions(-) (limited to 'src/include') diff --git a/src/include/s6/ftrigr.h b/src/include/s6/ftrigr.h index a7b8f3d..30a7ca6 100644 --- a/src/include/s6/ftrigr.h +++ b/src/include/s6/ftrigr.h @@ -1,99 +1,47 @@ /* ISC license. */ -#ifndef FTRIGR_H -#define FTRIGR_H +#ifndef S6_FTRIGR_H +#define S6_FTRIGR_H -#include +#include #include -#include #include -#include #include -#include -#include +#include +#include -#include +#define FTRIGR_REPEAT SASS_FLAG_KEEP - - /* Constants */ - -#define FTRIGR_IPCPATH SKALIBS_SPROOT "/run/service/ftrigrd/s" - -#define FTRIGRD_PROG S6_EXTBINPREFIX "s6-ftrigrd" -#define FTRIGR_BANNER1 "ftrigr v1.0 (b)\n" -#define FTRIGR_BANNER1_LEN (sizeof FTRIGR_BANNER1 - 1) -#define FTRIGR_BANNER2 "ftrigr v1.0 (a)\n" -#define FTRIGR_BANNER2_LEN (sizeof FTRIGR_BANNER2 - 1) - - - /* Internals of the ftrigr_t */ - -typedef enum fr1state_e fr1state_t, *fr1state_t_ref ; -enum fr1state_e -{ - FR1STATE_WAITACK, - FR1STATE_WAITACKDATA, - FR1STATE_LISTENING, - FR1STATE_ERROR -} ; - -typedef struct ftrigr1_s ftrigr1_t, *ftrigr1_t_ref ; -struct ftrigr1_s -{ - uint32_t options ; - fr1state_t state ; - stralloc what ; -} ; -#define FTRIGR1_ZERO { .options = 0, .state = FR1STATE_ERROR, .what = STRALLOC_ZERO } -extern ftrigr1_t const ftrigr1_zero ; - - - /* The ftrigr_t itself */ - -typedef struct ftrigr_s ftrigr, ftrigr_t, *ftrigr_ref, *ftrigr_t_ref ; +typedef struct ftrigr_s ftrigr, *ftrigr_ref ; struct ftrigr_s { - textclient connection ; - genalloc list ; /* array of uint16_t */ - size_t head ; - gensetdyn data ; /* set of ftrigr1_t */ + sassclient client ; + genalloc data ; /* ftrigr_data */ } ; -#define FTRIGR_ZERO { .connection = TEXTCLIENT_ZERO, .list = GENALLOC_ZERO, .head = 0, .data = GENSETDYN_INIT(ftrigr1_t, 2, 0, 1) } -extern ftrigr_t const ftrigr_zero ; - +#define FTRIGR_ZERO { .client = SASSCLIENT_ZERO, .data = GENALLOC_ZERO } - /* Starting and ending a session */ - -extern int ftrigr_start (ftrigr_t *, char const *, tain const *, tain *) ; -#define ftrigr_start_g(a, path, deadline) ftrigr_start(a, path, (deadline), &STAMP) -extern int ftrigr_startf (ftrigr_t *, tain const *, tain *) ; +extern int ftrigr_startf (ftrigr *, tain const *, tain *) ; #define ftrigr_startf_g(a, deadline) ftrigr_startf(a, (deadline), &STAMP) -extern void ftrigr_end (ftrigr_t *) ; - - - /* Instant primitives for async programming */ - -#define ftrigr_fd(a) textclient_fd(&(a)->connection) -extern int ftrigr_updateb (ftrigr_t *) ; -extern int ftrigr_update (ftrigr_t *) ; -extern int ftrigr_check (ftrigr_t *, uint16_t, char *) ; -extern int ftrigr_checksa (ftrigr_t *, uint16_t, stralloc *) ; -extern void ftrigr_ack (ftrigr_t *, size_t) ; - +extern int ftrigr_start (ftrigr *, unsigned int) ; +extern void ftrigr_end (ftrigr *) ; - /* Synchronous functions with timeouts */ +#define ftrigr_fd(a) sassclient_fd(&(a)->client) +extern int ftrigr_update (ftrigr *) ; +extern int ftrigr_peek (ftrigr *, uint32_t, struct iovec *) ; +extern int ftrigr_peek1 (ftrigr *, uint32_t, char *) ; +extern int ftrigr_ack (ftrigr *, uint32_t) ; +extern void ftrigr_release (ftrigr *, uint32_t) ; -#define FTRIGR_REPEAT 0x0001 +extern int ftrigr_subscribe (ftrigr *, uint32_t *, uint32_t, uint32_t, char const *, char const *, tain const *, tain *) ; +#define ftrigr_subscribe_g(a, id, flags, timeout, path, re, deadline) ftrigr_subscribe(a, id, flags, timeout, path, re, (deadline), &STAMP) -extern uint16_t ftrigr_subscribe (ftrigr_t *, char const *, char const *, uint32_t, tain const *, tain *) ; -#define ftrigr_subscribe_g(a, path, re, options, deadline) ftrigr_subscribe(a, path, re, options, (deadline), &STAMP) -extern int ftrigr_unsubscribe (ftrigr_t *, uint16_t, tain const *, tain *) ; +extern int ftrigr_unsubscribe (ftrigr *, uint32_t, tain const *, tain *) ; #define ftrigr_unsubscribe_g(a, id, deadline) ftrigr_unsubscribe(a, id, (deadline), &STAMP) -extern int ftrigr_wait_and (ftrigr_t *, uint16_t const *, unsigned int, tain const *, tain *) ; +extern int ftrigr_wait_and (ftrigr *, uint32_t const *, unsigned int, tain const *, tain *) ; #define ftrigr_wait_and_g(a, list, len, deadline) ftrigr_wait_and(a, list, len, (deadline), &STAMP) -extern int ftrigr_wait_or (ftrigr_t *, uint16_t const *, unsigned int, tain const *, tain *, char *) ; -#define ftrigr_wait_or_g(a, list, len, deadline, what) ftrigr_wait_or(a, list, len, deadline, &STAMP, what) +extern int ftrigr_wait_or (ftrigr *, uint32_t const *, unsigned int, struct iovec *, tain const *, tain *) ; +#define ftrigr_wait_or_g(a, list, n, v, deadline) ftrigr_wait_or(a, list, n, v, (deadline), &STAMP) #endif -- cgit v1.3.1