naett.c

Tiny cross-platform HTTP / HTTPS client library in C.
git clone git://git.finwo.net/lib/naett.c
Log | Files | Refs | README | LICENSE

commit b4bf8d0478de47d220361c5325e086ea8244ebf8
parent c5cbe982ef79b7bd8f8f4b1954bc0a9a75ff885f
Author: Erik Agsjö <erik.agsjo@gmail.com>
Date:   Thu,  2 Dec 2021 09:03:31 +0100

More util functions

Diffstat:
Mnaett.h | 12++++++++++++
Msrc/naett_core.c | 16++++++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/naett.h b/naett.h @@ -22,6 +22,7 @@ typedef struct naettReq naettReq; typedef struct naettRes naettRes; typedef int (*naettReadFunc)(void* dest, int bufferSize, void* userData); typedef int (*naettWriteFunc)(const void* source, int bytes, void* userData); +typedef int (*naettHeaderLister)(const char* name, const char* value, void* userData); // Option to `naettRequest` typedef struct naettOption naettOption; @@ -102,6 +103,17 @@ const void* naettGetBody(naettRes* response, int* outSize); const char* naettGetHeader(naettRes* response, const char* name); /** + * @brief Enumerates all response headers as long as the `lister` + * returns true. + */ +void naettListHeaders(naettRes* response, naettHeaderLister lister, void* userData); + +/** + * @brief Returns the request that initiated this response + */ +naettReq* naettGetRequest(naettRes* response); + +/** * @brief Closes a response object. */ void naettClose(naettRes* response); diff --git a/src/naett_core.c b/src/naett_core.c @@ -287,6 +287,22 @@ const char* naettGetHeader(naettRes* response, const char* name) { return NULL; } +void naettListHeaders(naettRes* response, naettHeaderLister lister, void* userData) { + InternalResponse* res = (InternalResponse*)response; + KVLink* node = res->headers; + while (node) { + if (!lister(node->key, node->value, userData)) { + return; + } + node = node->next; + } +} + +naettReq* naettGetRequest(naettRes* response) { + InternalResponse* res = (InternalResponse*)response; + return (naettReq*) res->request; +} + int naettComplete(const naettRes* response) { InternalResponse* res = (InternalResponse*)response; return res->complete;