aboutsummaryrefslogtreecommitdiffstats
path: root/src/libunixonacid/sassserver_init_structures.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-04-07 14:28:10 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-04-07 14:28:10 +0000
commitb8afece8d141369c25027b73680deccf48ddb948 (patch)
treeb01d7ec3e3bcb72e6ceacf2a2612a4fadc63b9da /src/libunixonacid/sassserver_init_structures.c
parentcce8bb24ca6ebc98b787f087d76334f5e38daf2a (diff)
downloadskalibs-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.c47
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) ;
+}