diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-07-04 04:03:12 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-07-04 04:03:12 +0000 |
| commit | 24daa5813f277023f7b8453338870369bf00a3ca (patch) | |
| tree | fc19981595bd9be15daef821c0b5259c4f4907cb /src/libtipidee/tipidee_fcgi_put.c | |
| parent | 45808dbc6dc1b90fa512add692252bc15760a214 (diff) | |
| download | tipidee-24daa5813f277023f7b8453338870369bf00a3ca.tar.gz | |
Implement FastCGI, initial version
Diffstat (limited to 'src/libtipidee/tipidee_fcgi_put.c')
| -rw-r--r-- | src/libtipidee/tipidee_fcgi_put.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/libtipidee/tipidee_fcgi_put.c b/src/libtipidee/tipidee_fcgi_put.c new file mode 100644 index 0000000..0f4b493 --- /dev/null +++ b/src/libtipidee/tipidee_fcgi_put.c @@ -0,0 +1,34 @@ +/* ISC license. */ + +#include <stdint.h> + +#include <skalibs/uint16.h> +#include <skalibs/buffer.h> +#include <skalibs/unix-timed.h> + +#include <tipidee/fcgi.h> + +static uint16_t putit (tipidee_fcgi *fc, uint8_t rectype, char const *s, uint16_t len, tain *stamp) +{ + char hdr[8] = { 1, (char)rectype, fc->id >> 8, fc->id & 0xff, 0, 0, 0, 0 } ; + uint16_t w ; + uint16_pack_big(hdr + 4, len) ; + w = buffer_timed_put(&fc->b, hdr, 8, &fc->deadline, stamp) ; + if (w < 8) return 0 ; + return buffer_timed_put(&fc->b, s, len, &fc->deadline, stamp) ; +} + +size_t tipidee_fcgi_put (tipidee_fcgi *fc, uint8_t rectype, char const *s, size_t len, tain *stamp) +{ + size_t w = 0 ; + while (len > 0xffffu) + { + uint16_t r = putit(fc, rectype, s, 0xffffu, stamp) ; + w += r ; + if (r < 0xffffu) return w ; + s += 0xffff ; + len -= 0xffff ; + } + w += putit(fc, rectype, s, len, stamp) ; + return w ; +} |
