diff options
| author | Dirk Engling <erdgeist@erdgeist.org> | 2026-10-24 12:55:37 +0200 |
|---|---|---|
| committer | Dirk Engling <erdgeist@erdgeist.org> | 2026-10-24 12:55:37 +0200 |
| commit | 243a34d725873ca40b4ef514c26a4b7ae87bbe83 (patch) | |
| tree | c27d1a6645b297a4777d55213ab7bbf7d976e36e /ot_http.c | |
| parent | 1c73d4452b75d936b1ed8158a1a333017b065a92 (diff) | |
Replace libowfat's array with our new blob abstraction
Diffstat (limited to 'ot_http.c')
| -rw-r--r-- | ot_http.c | 28 |
1 files changed, 16 insertions, 12 deletions
| @@ -15,7 +15,6 @@ | |||
| 15 | #include <unistd.h> | 15 | #include <unistd.h> |
| 16 | 16 | ||
| 17 | /* Libowfat */ | 17 | /* Libowfat */ |
| 18 | #include "array.h" | ||
| 19 | #include "iob.h" | 18 | #include "iob.h" |
| 20 | #include "ip6.h" | 19 | #include "ip6.h" |
| 21 | 20 | ||
| @@ -54,20 +53,25 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { | |||
| 54 | return; | 53 | return; |
| 55 | } | 54 | } |
| 56 | 55 | ||
| 57 | /* whoever sends data is not interested in its input-array */ | 56 | /* whoever sends data is not interested in its input buffer */ |
| 58 | if (ws->keep_alive && ws->header_size != ws->request_size) { | 57 | if (ws->keep_alive && ws->header_size != ws->request_size) { |
| 59 | size_t rest = ws->request_size - ws->header_size; | 58 | size_t rest = ws->request_size - ws->header_size; |
| 60 | if (array_start(&cookie->request)) { | 59 | if (cookie->request.data) { |
| 61 | memmove(array_start(&cookie->request), ws->request + ws->header_size, rest); | 60 | memmove(cookie->request.data, ws->request + ws->header_size, rest); |
| 62 | array_truncate(&cookie->request, 1, rest); | 61 | buf_truncate(&cookie->request, rest); |
| 63 | } else | 62 | } else if (buf_cat(&cookie->request, ws->request + ws->header_size, rest)) { |
| 64 | array_catb(&cookie->request, ws->request + ws->header_size, rest); | 63 | /* Without room for what the client pipelined behind this request, answer |
| 64 | this one and let the connection close, rather than keeping it open | ||
| 65 | around a request we have silently dropped */ | ||
| 66 | buf_reset(&cookie->request); | ||
| 67 | ws->keep_alive = 0; | ||
| 68 | } | ||
| 65 | } else | 69 | } else |
| 66 | array_reset(&cookie->request); | 70 | buf_reset(&cookie->request); |
| 67 | 71 | ||
| 68 | written_size = write(sock, ws->reply, ws->reply_size); | 72 | written_size = write(sock, ws->reply, ws->reply_size); |
| 69 | if ((written_size < 0) || ((written_size == ws->reply_size) && !ws->keep_alive)) { | 73 | if ((written_size < 0) || ((written_size == ws->reply_size) && !ws->keep_alive)) { |
| 70 | array_reset(&cookie->request); | 74 | buf_reset(&cookie->request); |
| 71 | free(cookie); | 75 | free(cookie); |
| 72 | io_close(sock); | 76 | io_close(sock); |
| 73 | return; | 77 | return; |
| @@ -78,7 +82,7 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { | |||
| 78 | tai6464 t; | 82 | tai6464 t; |
| 79 | 83 | ||
| 80 | if (!(outbuf = malloc(ws->reply_size - written_size))) { | 84 | if (!(outbuf = malloc(ws->reply_size - written_size))) { |
| 81 | array_reset(&cookie->request); | 85 | buf_reset(&cookie->request); |
| 82 | free(cookie); | 86 | free(cookie); |
| 83 | io_close(sock); | 87 | io_close(sock); |
| 84 | return; | 88 | return; |
| @@ -90,7 +94,7 @@ static void http_senddata(const int64 sock, struct ot_workstruct *ws) { | |||
| 90 | if (!cookie->batch || OT_IOB_INIT(cookie->batch) == -1) { | 94 | if (!cookie->batch || OT_IOB_INIT(cookie->batch) == -1) { |
| 91 | free(cookie->batch); | 95 | free(cookie->batch); |
| 92 | free(outbuf); | 96 | free(outbuf); |
| 93 | array_reset(&cookie->request); | 97 | buf_reset(&cookie->request); |
| 94 | free(cookie); | 98 | free(cookie); |
| 95 | io_close(sock); | 99 | io_close(sock); |
| 96 | return; | 100 | return; |
| @@ -155,7 +159,7 @@ ssize_t http_sendiovecdata(const int64 sock, struct ot_workstruct *ws, size_t io | |||
| 155 | } | 159 | } |
| 156 | 160 | ||
| 157 | /* If this socket collected request in a buffer, free it now */ | 161 | /* If this socket collected request in a buffer, free it now */ |
| 158 | array_reset(&cookie->request); | 162 | buf_reset(&cookie->request); |
| 159 | 163 | ||
| 160 | /* If we came here, wait for the answer is over */ | 164 | /* If we came here, wait for the answer is over */ |
| 161 | if (cookie->flag & STRUCT_HTTP_FLAG_WAITINGFORTASK) { | 165 | if (cookie->flag & STRUCT_HTTP_FLAG_WAITINGFORTASK) { |
