diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-20 23:17:30 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-20 23:17:30 +0000 |
| commit | 5fec93446e61b2f2c9b68ba50cdad3f83c914cbd (patch) | |
| tree | 766959b3dcb2de6e168e853816ba85d5aec781da /src | |
| parent | 48489c67e90a664466ec71c74bda80b1fc0da879 (diff) | |
| download | skalibs-5fec93446e61b2f2c9b68ba50cdad3f83c914cbd.tar.gz | |
Fix sassserver typos and bad APIs
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/skalibs/sassserver.h | 6 | ||||
| -rw-r--r-- | src/libunixonacid/sassserver.c | 23 |
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") ; |
