aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-12-22 11:52:04 -0800
committerGarrett D'Amore <garrett@damore.org>2024-12-22 11:52:04 -0800
commit497b8e22047fb0efa3397289d23656d6483fdd6d (patch)
tree8f2caf7dddc49e144b7e715ed64999792e796f66
parent8d1b52931b1d7ad8fabffe0098b9bc31c0b61a9b (diff)
downloadnng-497b8e22047fb0efa3397289d23656d6483fdd6d.tar.gz
nng-497b8e22047fb0efa3397289d23656d6483fdd6d.tar.bz2
nng-497b8e22047fb0efa3397289d23656d6483fdd6d.zip
http: setting response status never fails (breaking API change)
-rw-r--r--docs/man/nng_http_res_set_status.3http.adoc11
-rw-r--r--docs/ref/migrate/nng1.md3
-rw-r--r--include/nng/supplemental/http/http.h2
-rw-r--r--src/supplemental/http/http_api.h2
-rw-r--r--src/supplemental/http/http_msg.c8
-rw-r--r--src/supplemental/http/http_public.c5
-rw-r--r--src/supplemental/http/http_server.c13
-rw-r--r--src/supplemental/http/http_server_test.c4
-rw-r--r--src/supplemental/websocket/websocket.c6
9 files changed, 23 insertions, 31 deletions
diff --git a/docs/man/nng_http_res_set_status.3http.adoc b/docs/man/nng_http_res_set_status.3http.adoc
index e57764d4..a1374941 100644
--- a/docs/man/nng_http_res_set_status.3http.adoc
+++ b/docs/man/nng_http_res_set_status.3http.adoc
@@ -20,7 +20,7 @@ nng_http_res_set_status - set HTTP response status
#include <nng/nng.h>
#include <nng/supplemental/http/http.h>
-int nng_http_res_set_status(nng_http_res *res, uint16_t status);
+void nng_http_res_set_status(nng_http_res *res, uint16_t status);
----
== DESCRIPTION
@@ -106,15 +106,6 @@ TIP: It is a good idea to also set the reason message with
xref:nng_http_res_set_reason.3http.adoc[`nng_http_set_reason()`].
This will help any humans who may have to diagnose a failure.
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ENOTSUP`:: No support for HTTP in the library.
-
== SEE ALSO
[.text-left]
diff --git a/docs/ref/migrate/nng1.md b/docs/ref/migrate/nng1.md
index bca68e38..8a1af631 100644
--- a/docs/ref/migrate/nng1.md
+++ b/docs/ref/migrate/nng1.md
@@ -221,7 +221,8 @@ accessors functions are provided:
## HTTP API
-The [`nng_http_req_set_method`] no longer returns a value. It never fails, but it may truncate an unreasonably long value.
+- [`nng_http_req_set_method`] no longer returns a value. It never fails, but it may truncate an unreasonably long value.
+- [`nng_http_res_set_status`] no longer returns a value, and cannot fail.
## Security Descriptors (Windows Only)
diff --git a/include/nng/supplemental/http/http.h b/include/nng/supplemental/http/http.h
index 8cceae9e..fa485243 100644
--- a/include/nng/supplemental/http/http.h
+++ b/include/nng/supplemental/http/http.h
@@ -183,7 +183,7 @@ NNG_DECL void nng_http_res_free(nng_http_res *);
NNG_DECL uint16_t nng_http_res_get_status(const nng_http_res *);
// nng_http_res_set_status sets the HTTP status code.
-NNG_DECL int nng_http_res_set_status(nng_http_res *, uint16_t);
+NNG_DECL void nng_http_res_set_status(nng_http_res *, uint16_t);
// nng_http_res_get_reason returns the human readable status message
// that the server responds (or responded) with.
diff --git a/src/supplemental/http/http_api.h b/src/supplemental/http/http_api.h
index 27559a48..349f3a49 100644
--- a/src/supplemental/http/http_api.h
+++ b/src/supplemental/http/http_api.h
@@ -139,7 +139,7 @@ extern void nni_http_req_set_method(nni_http_req *, const char *);
extern int nni_http_req_set_version(nni_http_req *, const char *);
extern int nni_http_req_set_uri(nni_http_req *, const char *);
extern uint16_t nni_http_res_get_status(const nni_http_res *);
-extern int nni_http_res_set_status(nni_http_res *, uint16_t);
+extern void nni_http_res_set_status(nni_http_res *, uint16_t);
extern const char *nni_http_res_get_version(const nni_http_res *);
extern int nni_http_res_set_version(nni_http_res *, const char *);
extern const char *nni_http_res_get_reason(const nni_http_res *);
diff --git a/src/supplemental/http/http_msg.c b/src/supplemental/http/http_msg.c
index 564a4763..1a288bee 100644
--- a/src/supplemental/http/http_msg.c
+++ b/src/supplemental/http/http_msg.c
@@ -746,11 +746,10 @@ nni_http_req_set_method(nni_http_req *req, const char *meth)
(void) snprintf(req->meth, sizeof(req->meth), "%s", meth);
}
-int
+void
nni_http_res_set_status(nni_http_res *res, uint16_t status)
{
res->code = status;
- return (0);
}
uint16_t
@@ -849,8 +848,9 @@ http_res_parse_line(nni_http_res *res, uint8_t *line)
return (NNG_EPROTO);
}
- if (((rv = nni_http_res_set_status(res, (uint16_t) status)) != 0) ||
- ((rv = nni_http_res_set_version(res, version)) != 0) ||
+ nni_http_res_set_status(res, (uint16_t) status);
+
+ if (((rv = nni_http_res_set_version(res, version)) != 0) ||
((rv = nni_http_res_set_reason(res, reason)) != 0)) {
return (rv);
}
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index c9983df5..e3093d45 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -348,15 +348,14 @@ nng_http_res_get_reason(const nng_http_res *res)
#endif
}
-int
+void
nng_http_res_set_status(nng_http_res *res, uint16_t status)
{
#ifdef NNG_SUPP_HTTP
- return (nni_http_res_set_status(res, status));
+ nni_http_res_set_status(res, status);
#else
NNI_ARG_UNUSED(res);
NNI_ARG_UNUSED(status);
- return (NNG_ENOTSUP);
#endif
}
diff --git a/src/supplemental/http/http_server.c b/src/supplemental/http/http_server.c
index ba89626b..fa9ad2f4 100644
--- a/src/supplemental/http/http_server.c
+++ b/src/supplemental/http/http_server.c
@@ -1416,7 +1416,6 @@ http_handle_file(nni_aio *aio)
return;
}
if (((rv = nni_http_res_alloc(&res)) != 0) ||
- ((rv = nni_http_res_set_status(res, NNG_HTTP_STATUS_OK)) != 0) ||
((rv = nni_http_res_set_header(res, "Content-Type", ctype)) !=
0) ||
((rv = nni_http_res_copy_data(res, data, size)) != 0)) {
@@ -1426,6 +1425,8 @@ http_handle_file(nni_aio *aio)
return;
}
+ nni_http_res_set_status(res, NNG_HTTP_STATUS_OK);
+
nni_free(data, size);
nni_aio_set_output(aio, 0, res);
nni_aio_finish(aio, 0, 0);
@@ -1610,7 +1611,6 @@ http_handle_dir(nni_aio *aio)
}
if (((rv = nni_http_res_alloc(&res)) != 0) ||
- ((rv = nni_http_res_set_status(res, NNG_HTTP_STATUS_OK)) != 0) ||
((rv = nni_http_res_set_header(res, "Content-Type", ctype)) !=
0) ||
((rv = nni_http_res_copy_data(res, data, size)) != 0)) {
@@ -1620,6 +1620,8 @@ http_handle_dir(nni_aio *aio)
return;
}
+ nni_http_res_set_status(res, NNG_HTTP_STATUS_OK);
+
nni_free(data, size);
nni_aio_set_output(aio, 0, res);
nni_aio_finish(aio, 0, 0);
@@ -1707,7 +1709,6 @@ http_handle_redirect(nni_aio *aio)
// discard it.
if ((rv != 0) || ((rv = nni_http_res_alloc(&r)) != 0) ||
((rv = nni_http_alloc_html_error(&html, hr->code, msg)) != 0) ||
- ((rv = nni_http_res_set_status(r, hr->code)) != 0) ||
((rv = nni_http_res_set_header(r, "Connection", "close")) != 0) ||
((rv = nni_http_res_set_header(
r, "Content-Type", "text/html; charset=UTF-8")) != 0) ||
@@ -1722,6 +1723,9 @@ http_handle_redirect(nni_aio *aio)
nni_aio_finish_error(aio, rv);
return;
}
+
+ nni_http_res_set_status(r, hr->code);
+
if (loc != hr->where) {
nni_strfree(loc);
}
@@ -1807,13 +1811,14 @@ http_handle_static(nni_aio *aio)
if (((rv = nni_http_res_alloc(&r)) != 0) ||
((rv = nni_http_res_set_header(r, "Content-Type", ctype)) != 0) ||
- ((rv = nni_http_res_set_status(r, NNG_HTTP_STATUS_OK)) != 0) ||
((rv = nni_http_res_set_data(r, hs->data, hs->size)) != 0)) {
nni_http_res_free(r);
nni_aio_finish_error(aio, rv);
return;
}
+ nni_http_res_set_status(r, NNG_HTTP_STATUS_OK);
+
nni_aio_set_output(aio, 0, r);
nni_aio_finish(aio, 0, 0);
}
diff --git a/src/supplemental/http/http_server_test.c b/src/supplemental/http/http_server_test.c
index ddae77d3..f29fa52b 100644
--- a/src/supplemental/http/http_server_test.c
+++ b/src/supplemental/http/http_server_test.c
@@ -155,12 +155,12 @@ httpecho(nng_aio *aio)
if (((rv = nng_http_res_alloc(&res)) != 0) ||
((rv = nng_http_res_copy_data(res, body, len)) != 0) ||
((rv = nng_http_res_set_header(
- res, "Content-type", "text/plain")) != 0) ||
- ((rv = nng_http_res_set_status(res, NNG_HTTP_STATUS_OK)) != 0)) {
+ res, "Content-type", "text/plain")) != 0)) {
nng_http_res_free(res);
nng_aio_finish(aio, rv);
return;
}
+ nng_http_res_set_status(res, NNG_HTTP_STATUS_OK);
nng_aio_set_output(aio, 0, res);
nng_aio_finish(aio, 0);
}
diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c
index e7372a49..3dfb3e8e 100644
--- a/src/supplemental/websocket/websocket.c
+++ b/src/supplemental/websocket/websocket.c
@@ -1604,11 +1604,7 @@ ws_handler(nni_aio *aio)
goto err;
}
- if (nni_http_res_set_status(res, NNG_HTTP_STATUS_SWITCHING) != 0) {
- nni_http_res_free(res);
- status = NNG_HTTP_STATUS_INTERNAL_SERVER_ERROR;
- goto err;
- }
+ nni_http_res_set_status(res, NNG_HTTP_STATUS_SWITCHING);
if ((SETH("Connection", "Upgrade") != 0) ||
(SETH("Upgrade", "websocket") != 0) ||