diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-04-07 14:28:10 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-04-07 14:28:10 +0000 |
| commit | b8afece8d141369c25027b73680deccf48ddb948 (patch) | |
| tree | b01d7ec3e3bcb72e6ceacf2a2612a4fadc63b9da /src/libunixonacid/sassserver_init_structures.c | |
| parent | cce8bb24ca6ebc98b787f087d76334f5e38daf2a (diff) | |
| download | skalibs-b8afece8d141369c25027b73680deccf48ddb948.tar.gz | |
Support running from a socket again in sassserver
A sassserver can run the same when forked or spawned from a
local service, that's the point of textclient. Most sassservers
don't need local service support in any way, and cutting the
support from that saves pulling a good amount of code, but some
do. Put back local service support while refactoring the code
so running as a child from the client (common case) doesn't pull
the socket code.
Diffstat (limited to 'src/libunixonacid/sassserver_init_structures.c')
| -rw-r--r-- | src/libunixonacid/sassserver_init_structures.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/libunixonacid/sassserver_init_structures.c b/src/libunixonacid/sassserver_init_structures.c new file mode 100644 index 0000000..ddb1d28 --- /dev/null +++ b/src/libunixonacid/sassserver_init_structures.c @@ -0,0 +1,47 @@ +/* ISC license. */ + +#include <stdint.h> + +#include <skalibs/tai.h> +#include <skalibs/gensetdyn.h> +#include <skalibs/avltree.h> +#include <skalibs/sassserver.h> +#include "sassserver-internal.h" + +static void *sassserver_deadline_dtok (uint32_t d, void *aux) +{ + return &GENSETDYN_P(sassserver_query, (gensetdyn *)aux, d)->deadline ; +} + +static int sassserver_deadline_cmp (void const *a, void const *b, void *aux) +{ + tain const *aa = a ; + tain const *bb = b ; + (void)aux ; + return tain_less(aa, bb) ? -1 : tain_less(bb, aa) ; +} + +static void *sassserver_id_dtok (uint32_t d, void *aux) +{ + return &GENSETDYN_P(sassserver_query, (gensetdyn *)aux, d)->id ; +} + +static int sassserver_id_cmp (void const *a, void const *b, void *aux) +{ + uint32_t const *aa = a ; + uint32_t const *bb = b ; + (void)aux ; + return *aa < *bb ? -1 : *aa > *bb ; +} + +void sassserver_init_structures (sassserver *a, sassserver_send_func_ref sendf, sassserver_cancel_func_ref cancelf, size_t datasize, free_func_ref cleanupf, void *aux) +{ + a->sendf = sendf ; + a->cancelf = cancelf ; + a->datasize = datasize ; + a->cleanupf = cleanupf ; + a->aux = aux ; + gensetdyn_init(&a->queries, sizeof(sassserver_query), 8, 3, 8) ; + avltree_init(&a->by_deadline, 8, 3, 8, &sassserver_deadline_dtok, &sassserver_deadline_cmp, &a->queries) ; + avltree_init(&a->by_id, 8, 3, 8, &sassserver_id_dtok, &sassserver_id_cmp, &a->queries) ; +} |
