From 243a34d725873ca40b4ef514c26a4b7ae87bbe83 Mon Sep 17 00:00:00 2001 From: Dirk Engling Date: Sat, 24 Oct 2026 12:55:37 +0200 Subject: Replace libowfat's array with our new blob abstraction --- ot_http.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'ot_http.c') diff --git a/ot_http.c b/ot_http.c index 3174002..85bfcb6 100644 --- a/ot_http.c +++ b/ot_http.c @@ -15,7 +15,6 @@ #include /* Libowfat */ -#include "array.h" #include "iob.h" #include "ip6.h" @@ -54,20 +53,25 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { return; } - /* whoever sends data is not interested in its input-array */ + /* whoever sends data is not interested in its input buffer */ if (ws->keep_alive && ws->header_size != ws->request_size) { size_t rest = ws->request_size - ws->header_size; - if (array_start(&cookie->request)) { - memmove(array_start(&cookie->request), ws->request + ws->header_size, rest); - array_truncate(&cookie->request, 1, rest); - } else - array_catb(&cookie->request, ws->request + ws->header_size, rest); + if (cookie->request.data) { + memmove(cookie->request.data, ws->request + ws->header_size, rest); + buf_truncate(&cookie->request, rest); + } else if (buf_cat(&cookie->request, ws->request + ws->header_size, rest)) { + /* Without room for what the client pipelined behind this request, answer + this one and let the connection close, rather than keeping it open + around a request we have silently dropped */ + buf_reset(&cookie->request); + ws->keep_alive = 0; + } } else - array_reset(&cookie->request); + buf_reset(&cookie->request); written_size = write(sock, ws->reply, ws->reply_size); if ((written_size < 0) || ((written_size == ws->reply_size) && !ws->keep_alive)) { - array_reset(&cookie->request); + buf_reset(&cookie->request); free(cookie); io_close(sock); return; @@ -78,7 +82,7 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { tai6464 t; if (!(outbuf = malloc(ws->reply_size - written_size))) { - array_reset(&cookie->request); + buf_reset(&cookie->request); free(cookie); io_close(sock); return; @@ -90,7 +94,7 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { if (!cookie->batch || OT_IOB_INIT(cookie->batch) == -1) { free(cookie->batch); free(outbuf); - array_reset(&cookie->request); + buf_reset(&cookie->request); free(cookie); io_close(sock); return; @@ -155,7 +159,7 @@ ssize_t http_sendiovecdata(const int64 sock, struct ot_workstruct *ws, size_t io } /* If this socket collected request in a buffer, free it now */ - array_reset(&cookie->request); + buf_reset(&cookie->request); /* If we came here, wait for the answer is over */ if (cookie->flag & STRUCT_HTTP_FLAG_WAITINGFORTASK) { -- cgit v1.3