From bce6a79fc55852032e9d653b099a121353aaa238 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Sun, 5 Jan 2025 11:47:03 -0800 Subject: http: changing transaction API to inline req and res structures This is a step towards simplifying this API and ultimately simplifying the HTTP callback API used for the server side. --- src/supplemental/http/http_msg.h | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/supplemental/http/http_msg.h (limited to 'src/supplemental/http/http_msg.h') diff --git a/src/supplemental/http/http_msg.h b/src/supplemental/http/http_msg.h new file mode 100644 index 00000000..7d9e7dcf --- /dev/null +++ b/src/supplemental/http/http_msg.h @@ -0,0 +1,57 @@ +// +// Copyright 2025 Staysail Systems, Inc. +// Copyright 2018 Capitar IT Group BV +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +#ifndef NNG_SUPPLEMENTAL_HTTP_HTTP_MSG +#define NNG_SUPPLEMENTAL_HTTP_HTTP_MSG + +#include "core/defs.h" +#include "core/list.h" + +// Note that as we parse headers, the rule is that if a header is already +// present, then we can append it to the existing header, separated by +// a comma. From experience, for example, Firefox uses a Connection: +// header with two values, "keepalive", and "upgrade". +typedef struct http_header { + char *name; + char *value; + nni_list_node node; +} http_header; + +typedef struct nni_http_entity { + char *data; + size_t size; // allocated/expected size + size_t len; // current length + bool own; // if true, data is "ours", and should be freed +} nni_http_entity; + +struct nng_http_req { + nni_list hdrs; + nni_http_entity data; + char meth[32]; + char *uri; + const char *vers; + char *buf; + size_t bufsz; + bool parsed; +}; + +struct nng_http_res { + nni_list hdrs; + nni_http_entity data; + uint16_t code; + char *rsn; + const char *vers; + char *buf; + size_t bufsz; + bool parsed; + bool iserr; +}; + +#endif -- cgit v1.2.3-70-g09d2