diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-21 09:54:38 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-02-21 09:54:38 +0000 |
| commit | 6a9f70ae5e126e6685b05670ff2bda026a56cfe5 (patch) | |
| tree | 83afdbb4a68e07a2ea69c602ca99aeb1c67cb121 /src/libunixonacid/sassserver.c | |
| parent | 5fec93446e61b2f2c9b68ba50cdad3f83c914cbd (diff) | |
| download | skalibs-6a9f70ae5e126e6685b05670ff2bda026a56cfe5.tar.gz | |
Add flags management to sass, refactor some things
Diffstat (limited to 'src/libunixonacid/sassserver.c')
| -rw-r--r-- | src/libunixonacid/sassserver.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/libunixonacid/sassserver.c b/src/libunixonacid/sassserver.c index 51569e9..f009c1a 100644 --- a/src/libunixonacid/sassserver.c +++ b/src/libunixonacid/sassserver.c @@ -15,6 +15,7 @@ #include <skalibs/avltree.h> #include <skalibs/textmessage.h> #include <skalibs/textclient.h> +#include <skalibs/sass.h> #include <skalibs/sassserver.h> typedef struct sassserver_query_s sassserver_query, sassserver_query_ref ; @@ -94,7 +95,7 @@ void sassserver_async_failure (uint32_t handle, int e) sassserver_remove(handle) ; } -void sassserver_async_successv (uint32_t handle, struct iovec const *v, unsigned int n) +void sassserver_async_successv (uint32_t handle, uint32_t flags, struct iovec const *v, unsigned int n) { sassserver_query *p = SASSSERVER_QUERY(handle) ; char pack[8] = "\0\0\0\0\0\0\0" ; @@ -104,13 +105,13 @@ void sassserver_async_successv (uint32_t handle, struct iovec const *v, unsigned uint32_pack_big(pack, p->id) ; if (!textmessage_putv(textmessage_sender_x, vv, n+1)) strerr_diefu1sys(111, "textmessage_putv") ; - sassserver_remove(handle) ; + if (!(flags & SASS_FLAGS_KEEP)) sassserver_remove(handle) ; } -void sassserver_async_success (uint32_t handle, char const *s, size_t len) +void sassserver_async_success (uint32_t handle, uint32_t flags, char const *s, size_t len) { struct iovec v = { .iov_base = (char *)s, .iov_len = len } ; - sassserver_async_successv(handle, &v, 1) ; + sassserver_async_successv(handle, flags, &v, 1) ; } static inline void sassserver_uniquify (tain *deadline) @@ -144,14 +145,16 @@ static int sassserver_parse_protocol (struct iovec const *v, void *aux) { sassserver_query *p ; uint32_t handle ; + uint32_t flags ; uint32_t timeout ; uint32_t opcode ; uint32_t len ; int e ; - if (vlen < 16) strerr_dief1x(100, "invalid client request") ; + if (vlen < 20) strerr_dief1x(100, "invalid client request") ; if (!gensetdyn_new(&sassserver_queries, &handle)) strerr_diefu1sys(111, "gensetdyn_new") ; p = SASSSERVER_QUERY(handle) ; uint32_unpack_big(s, &p->id) ; s += 4 ; vlen -= 4 ; + uint32_unpack_big(s, &flags) ; s += 4 ; vlen -= 4 ; uint32_unpack_big(s, &timeout) ; s += 4 ; vlen -= 4 ; uint32_unpack_big(s, &opcode) ; s += 4 ; vlen -= 4 ; uint32_unpack_big(s, &len) ; s += 4 ; vlen -= 4 ; @@ -170,7 +173,7 @@ static int sassserver_parse_protocol (struct iovec const *v, void *aux) p->data = alloc(sassserver_datasize) ; if (!p->data) strerr_diefu1sys(111, "alloc") ; } - e = (*sassserver_sendf)(p->data, handle, opcode, s, len) ; + e = (*sassserver_sendf)(p->data, handle, flags, opcode, s, len) ; if (e) sassserver_remove(handle) ; sassserver_sync_answer(e) ; break ; |
