aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-02-20 23:17:30 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-02-20 23:17:30 +0000
commit5fec93446e61b2f2c9b68ba50cdad3f83c914cbd (patch)
tree766959b3dcb2de6e168e853816ba85d5aec781da /src
parent48489c67e90a664466ec71c74bda80b1fc0da879 (diff)
downloadskalibs-5fec93446e61b2f2c9b68ba50cdad3f83c914cbd.tar.gz
Fix sassserver typos and bad APIs
Diffstat (limited to 'src')
-rw-r--r--src/include/skalibs/sassserver.h6
-rw-r--r--src/libunixonacid/sassserver.c23
2 files changed, 16 insertions, 13 deletions
diff --git a/src/include/skalibs/sassserver.h b/src/include/skalibs/sassserver.h
index fcd1286..b17df8b 100644
--- a/src/include/skalibs/sassserver.h
+++ b/src/include/skalibs/sassserver.h
@@ -9,14 +9,14 @@
#include <skalibs/tai.h>
#include <skalibs/iopause.h>
-typedef void *sassserver_send_func (uint32_t, uint32_t, char const *, size_t) ;
+typedef int sassserver_send_func (void *, uint32_t, uint32_t, char const *, size_t) ;
typedef sassserver_send_func *sassserver_send_func_ref ;
typedef void sassserver_cancel_func (void *) ;
typedef sassserver_cancel_func *sassserver_cancel_func_ref ;
-extern void sassserver_init (char const *, char const *, sassserver_send_func_ref, sassserver_cancel_func_ref, tain const *, tain *stamp) ;
-#define sassserver_init_g(banner1, banner2, deadline) sassserver_init(banner1, banner2, (deadline), &STAMP)
+extern void sassserver_init (char const *, char const *, sassserver_send_func_ref, sassserver_cancel_func_ref, size_t, tain const *, tain *stamp) ;
+#define sassserver_init_g(banner1, banner2, sendf, cancelf, esize, deadline) sassserver_init(banner1, banner2, sendf, cancelf, esize, (deadline), &STAMP)
extern unsigned int sassserver_prepare_iopause (iopause_fd *, tain *) ;
extern void sassserver_timeout (void) ;
extern int sassserver_event (iopause_fd const *) ;
diff --git a/src/libunixonacid/sassserver.c b/src/libunixonacid/sassserver.c
index 7ca3ad7..51569e9 100644
--- a/src/libunixonacid/sassserver.c
+++ b/src/libunixonacid/sassserver.c
@@ -6,6 +6,7 @@
#include <errno.h>
#include <skalibs/uint32.h>
+#include <skalibs/alloc.h>
#include <skalibs/error.h>
#include <skalibs/strerr.h>
#include <skalibs/tai.h>
@@ -26,18 +27,19 @@ struct sassserver_query_s
static sassserver_send_func_ref sassserver_sendf ;
static sassserver_cancel_func_ref sassserver_cancelf ;
+static size_t sassserver_datasize ;
static gensetdyn sassserver_queries = GENSETDYN_INIT(sassserver_query, 8, 3, 8) ;
#define SASSSERVER_QUERY(i) GENSETDYN_P(sassserver_query, &sassserver_queries, (i))
-void *sassserver_data (uint32_t handle)
+static void *sassserver_deadline_dtok (uint32_t d, void *aux)
{
- return SASSSERVER_QUERY(handle)->data ;
+ return &GENSETDYN_P(sassserver_query, (gensetdyn *)aux, d)->deadline ;
}
-static void *sassserver_deadline_dtok (uint32_t d, void *aux)
+void *sassserver_data (uint32_t handle)
{
- return &GENSETDYN_P(sassserver_query, (gensetdyn *)aux, d)->deadline ;
+ return SASSSERVER_QUERY(handle)->data ;
}
static int sassserver_deadline_cmp (void const *a, void const *b, void *aux)
@@ -145,6 +147,7 @@ static int sassserver_parse_protocol (struct iovec const *v, void *aux)
uint32_t timeout ;
uint32_t opcode ;
uint32_t len ;
+ int e ;
if (vlen < 16) strerr_dief1x(100, "invalid client request") ;
if (!gensetdyn_new(&sassserver_queries, &handle)) strerr_diefu1sys(111, "gensetdyn_new") ;
p = SASSSERVER_QUERY(handle) ;
@@ -162,14 +165,14 @@ static int sassserver_parse_protocol (struct iovec const *v, void *aux)
sassserver_uniquify(&p->deadline) ;
if (!avltree_insert(&sassserver_by_deadline, handle)) strerr_diefu1sys(111, "avltree_insert") ;
if (!avltree_insert(&sassserver_by_id, handle)) strerr_diefu1sys(111, "avltree_insert") ;
- p->data = (*sassserver_sendf)(handle, opcode, s, len) ;
if (!p->data)
{
- int e = errno ;
- sassserver_remove(handle) ;
- sassserver_sync_answer(e) ;
+ p->data = alloc(sassserver_datasize) ;
+ if (!p->data) strerr_diefu1sys(111, "alloc") ;
}
- else sassserver_sync_answer(0) ;
+ e = (*sassserver_sendf)(p->data, handle, opcode, s, len) ;
+ if (e) sassserver_remove(handle) ;
+ sassserver_sync_answer(e) ;
break ;
}
default : strerr_dief1x(100, "invalid client request") ;
@@ -177,7 +180,7 @@ static int sassserver_parse_protocol (struct iovec const *v, void *aux)
return 1 ;
}
-void sassserver_init (char const *banner1, char const *banner2, sassserver_send_func_ref sendf, sassserver_cancel_func_ref cancelf, tain const *deadline, tain *stamp)
+void sassserver_init (char const *banner1, char const *banner2, sassserver_send_func_ref sendf, sassserver_cancel_func_ref cancelf, size_t datasize, tain const *deadline, tain *stamp)
{
if (!textclient_server_01x_init(banner1, strlen(banner1), banner2, strlen(banner2), deadline, stamp))
strerr_diefu1sys(111, "sync with client") ;