aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2025-01-12 14:48:48 -0800
committerGarrett D'Amore <garrett@damore.org>2025-01-12 14:48:48 -0800
commite198d155ae66fb0940362e7a6b8251999956059b (patch)
treed99ec92aaeb0c60d1475ebebc6228e135ef18bae
parent2ddaecdadb8a931188b3f3e6b8ad43b9cba45d0f (diff)
downloadnng-e198d155ae66fb0940362e7a6b8251999956059b.tar.gz
nng-e198d155ae66fb0940362e7a6b8251999956059b.tar.bz2
nng-e198d155ae66fb0940362e7a6b8251999956059b.zip
http: status is an enum
This is slightly less efficient, but it provides for better debugging and type safety.
-rw-r--r--include/nng/http.h14
-rw-r--r--src/supplemental/http/http_api.h20
-rw-r--r--src/supplemental/http/http_conn.c34
-rw-r--r--src/supplemental/http/http_public.c10
-rw-r--r--src/supplemental/http/http_server.c38
5 files changed, 58 insertions, 58 deletions
diff --git a/include/nng/http.h b/include/nng/http.h
index 0d271a23..a2198cce 100644
--- a/include/nng/http.h
+++ b/include/nng/http.h
@@ -25,7 +25,7 @@ extern "C" {
#include <nng/nng.h>
// HTTP status codes. This list is not exhaustive.
-enum nng_http_status {
+typedef enum {
NNG_HTTP_STATUS_CONTINUE = 100,
NNG_HTTP_STATUS_SWITCHING = 101,
NNG_HTTP_STATUS_PROCESSING = 102,
@@ -86,7 +86,7 @@ enum nng_http_status {
NNG_HTTP_STATUS_LOOP_DETECTED = 508,
NNG_HTTP_STATUS_NOT_EXTENDED = 510,
NNG_HTTP_STATUS_NETWORK_AUTH_REQUIRED = 511,
-};
+} nng_http_status;
#define NNG_HTTP_VERSION_1_0 "HTTP/1.0"
#define NNG_HTTP_VERSION_1_1 "HTTP/1.1"
@@ -153,7 +153,7 @@ NNG_DECL nng_err nng_http_set_uri(nng_http *, const char *, const char *);
NNG_DECL const char *nng_http_get_uri(nng_http *);
// nng_http_get_status gets the status of the last transaction
-NNG_DECL uint16_t nng_http_get_status(nng_http *);
+NNG_DECL nng_http_status nng_http_get_status(nng_http *);
// nng_http_reason gets the message associated with status of the last
// transaction
@@ -162,7 +162,7 @@ NNG_DECL const char *nng_http_get_reason(nng_http *);
// nng_http_set_status sets the status for the transaction (server API),
// and also sets the reason (message) for it. (If NULL is used for the reason,
// then a builtin value is used based on the code.)
-NNG_DECL void nng_http_set_status(nng_http *, uint16_t, const char *);
+NNG_DECL void nng_http_set_status(nng_http *, nng_http_status, const char *);
// nng_http_set_version is used to change the version of a request.
// Normally the version is "HTTP/1.1". Note that the framework does
@@ -254,7 +254,7 @@ NNG_DECL nng_err nng_http_handler_alloc_static(
// The status is given, along with the new URL. If the status is 0,
// then 301 will be used instead.
NNG_DECL nng_err nng_http_handler_alloc_redirect(
- nng_http_handler **, const char *, uint16_t, const char *);
+ nng_http_handler **, const char *, nng_http_status, const char *);
// nng_http_handler_alloc_file creates a "directory" based handler, that
// serves up static content from the given directory tree. Directories
@@ -363,14 +363,14 @@ NNG_DECL nng_err nng_http_server_get_addr(nng_http_server *, nng_sockaddr *);
// to be sent for the given error code. This is used when the error is
// generated internally by the framework.
NNG_DECL nng_err nng_http_server_set_error_page(
- nng_http_server *, uint16_t, const char *);
+ nng_http_server *, nng_http_status, const char *);
// nng_http_server_set_error_file works like nng_http_server_error_page,
// except that the content is loaded from the named file path. The contents
// are loaded at the time this function is called, so this function should be
// called anytime the contents of the named file have changed.
NNG_DECL nng_err nng_http_server_set_error_file(
- nng_http_server *, uint16_t, const char *);
+ nng_http_server *, nng_http_status, const char *);
// nng_http_server_error takes replaces the body of the response with
// a custom error page previously set for the server, using the status
diff --git a/src/supplemental/http/http_api.h b/src/supplemental/http/http_api.h
index 63a4adab..846d1c19 100644
--- a/src/supplemental/http/http_api.h
+++ b/src/supplemental/http/http_api.h
@@ -106,7 +106,7 @@ extern int nni_http_conn_getopt(
// must not use them for any other purpose.
extern int nni_http_req_alloc(nni_http_req **, const nng_url *);
-extern int nni_http_res_set_error(nni_http_res *, uint16_t);
+extern int nni_http_res_set_error(nni_http_res *, nng_http_status);
extern void nni_http_req_free(nni_http_req *);
extern void nni_http_res_free(nni_http_res *);
extern void nni_http_write_req(nni_http_conn *, nni_aio *);
@@ -202,7 +202,7 @@ extern void nni_http_server_close(nni_http_server *);
// nni_http_server_set_error_page sets an error page for the named status.
extern int nni_http_server_set_error_page(
- nni_http_server *, uint16_t, const char *);
+ nni_http_server *, nng_http_status, const char *);
// nni_http_server_res_error takes replaces the body of the res with
// a custom error page previously set for the server, using the status
@@ -255,7 +255,7 @@ extern int nni_http_handler_init_static(
// nni_http_handler_init_redirect creates a handler that redirects the request.
extern int nni_http_handler_init_redirect(
- nni_http_handler **, const char *, uint16_t, const char *);
+ nni_http_handler **, const char *, nng_http_status, const char *);
// nni_http_handler_fini destroys a handler. This should only be done before
// the handler is added, or after it is deleted. The server automatically
@@ -356,21 +356,21 @@ extern void nni_http_set_method(nng_http *conn, const char *method);
extern const char *nni_http_get_method(nng_http *conn);
extern void nni_http_set_status(
- nng_http *conn, uint16_t status, const char *reason);
+ nng_http *conn, nng_http_status status, const char *reason);
-extern uint16_t nni_http_get_status(nng_http *);
-extern const char *nni_http_get_reason(nng_http *);
+extern nng_http_status nni_http_get_status(nng_http *);
+extern const char *nni_http_get_reason(nng_http *);
// nni_http_set_error flags an error using the built in HTML page.
// unless body is not NULL. To pass no content, pass an empty string for body.
-extern int nni_http_set_error(
- nng_http *conn, uint16_t status, const char *reason, const char *body);
+extern int nni_http_set_error(nng_http *conn, nng_http_status status,
+ const char *reason, const char *body);
// nni_http_set_redirect is used to set the redirection.
// It uses a built-in error page, with a message about the redirection, and
// sets the response Location: header accordingly.
-extern int nni_http_set_redirect(
- nng_http *conn, uint16_t status, const char *reason, const char *dest);
+extern int nni_http_set_redirect(nng_http *conn, nng_http_status status,
+ const char *reason, const char *dest);
extern int nni_http_set_uri(
nng_http *conn, const char *uri, const char *query);
diff --git a/src/supplemental/http/http_conn.c b/src/supplemental/http/http_conn.c
index d4cea914..169ac75e 100644
--- a/src/supplemental/http/http_conn.c
+++ b/src/supplemental/http/http_conn.c
@@ -62,13 +62,13 @@ struct nng_http_conn {
nng_http_req req;
nng_http_res res;
- uint16_t code;
- char meth[32];
- char host[260]; // 253 per IETF, plus 6 for :port plus null
- char ubuf[200]; // Most URIs are smaller than this
- const char *vers;
- char *uri;
- char *rsn;
+ nng_http_status code;
+ char meth[32];
+ char host[260]; // 253 per IETF, plus 6 for :port plus null
+ char ubuf[200]; // Most URIs are smaller than this
+ const char *vers;
+ char *uri;
+ char *rsn;
uint8_t *buf;
size_t bufsz;
@@ -880,7 +880,7 @@ nni_http_get_method(nng_http *conn)
return (conn->meth);
}
-uint16_t
+nng_http_status
nni_http_get_status(nng_http *conn)
{
if (conn->code == 0) {
@@ -890,11 +890,11 @@ nni_http_get_status(nng_http *conn)
}
const char *
-nni_http_reason(uint16_t code)
+nni_http_reason(nng_http_status code)
{
static struct {
- uint16_t code;
- const char *mesg;
+ nng_http_status code;
+ const char *mesg;
} http_status[] = {
// 200, listed first because most likely
{ NNG_HTTP_STATUS_OK, "OK" },
@@ -996,7 +996,7 @@ nni_http_get_reason(nng_http *conn)
}
void
-nni_http_set_status(nng_http *conn, uint16_t status, const char *reason)
+nni_http_set_status(nng_http *conn, nng_http_status status, const char *reason)
{
conn->code = status;
char *dup = NULL;
@@ -1023,7 +1023,7 @@ nni_http_is_error(nng_http *conn)
}
static int
-http_conn_set_error(nng_http *conn, uint16_t status, const char *reason,
+http_conn_set_error(nng_http *conn, nng_http_status status, const char *reason,
const char *body, const char *redirect)
{
char content[1024];
@@ -1082,15 +1082,15 @@ http_conn_set_error(nng_http *conn, uint16_t status, const char *reason,
}
int
-nni_http_set_error(
- nng_http *conn, uint16_t status, const char *reason, const char *body)
+nni_http_set_error(nng_http *conn, nng_http_status status, const char *reason,
+ const char *body)
{
return (http_conn_set_error(conn, status, reason, body, NULL));
}
int
-nni_http_set_redirect(
- nng_http *conn, uint16_t status, const char *reason, const char *redirect)
+nni_http_set_redirect(nng_http *conn, nng_http_status status,
+ const char *reason, const char *redirect)
{
char *loc;
bool static_value = false;
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index 1152729d..84477cc1 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -138,7 +138,7 @@ nng_http_get_version(nng_http *conn)
}
void
-nng_http_set_status(nng_http *conn, uint16_t status, const char *reason)
+nng_http_set_status(nng_http *conn, nng_http_status status, const char *reason)
{
#ifdef NNG_SUPP_HTTP
nni_http_set_status(conn, status, reason);
@@ -149,7 +149,7 @@ nng_http_set_status(nng_http *conn, uint16_t status, const char *reason)
#endif
}
-uint16_t
+nng_http_status
nng_http_get_status(nng_http *conn)
{
#ifdef NNG_SUPP_HTTP
@@ -347,8 +347,8 @@ nng_http_handler_alloc_directory(
}
nng_err
-nng_http_handler_alloc_redirect(
- nng_http_handler **hp, const char *uri, uint16_t status, const char *where)
+nng_http_handler_alloc_redirect(nng_http_handler **hp, const char *uri,
+ nng_http_status status, const char *where)
{
#ifdef NNG_SUPP_HTTP
return (nni_http_handler_init_redirect(hp, uri, status, where));
@@ -502,7 +502,7 @@ nng_http_server_del_handler(nng_http_server *srv, nng_http_handler *h)
nng_err
nng_http_server_set_error_page(
- nng_http_server *srv, uint16_t code, const char *body)
+ nng_http_server *srv, nng_http_status code, const char *body)
{
#ifdef NNG_SUPP_HTTP
return (nni_http_server_set_error_page(srv, code, body));
diff --git a/src/supplemental/http/http_server.c b/src/supplemental/http/http_server.c
index 0092299d..ce696ac5 100644
--- a/src/supplemental/http/http_server.c
+++ b/src/supplemental/http/http_server.c
@@ -66,9 +66,9 @@ typedef struct http_sconn {
} http_sconn;
typedef struct http_error {
- nni_list_node node;
- uint16_t code;
- char *body;
+ nni_list_node node;
+ nng_http_status code;
+ char *body;
} http_error;
struct nng_http_server {
@@ -327,7 +327,7 @@ http_sconn_txdone(void *arg)
}
static void
-http_sconn_error(http_sconn *sc, uint16_t err)
+http_sconn_error(http_sconn *sc, nng_http_status err)
{
nng_http_set_status(sc->conn, err, NULL);
if (nni_http_server_error(sc->server, sc->conn) != 0) {
@@ -650,9 +650,9 @@ http_sconn_cbdone(void *arg)
return;
}
if (!nni_http_res_sent(sc->conn)) {
- const char *val;
- const char *method;
- uint16_t status;
+ const char *val;
+ const char *method;
+ nng_http_status status;
val = nni_http_get_header(sc->conn, "Connection");
status = nni_http_get_status(sc->conn);
method = nni_http_get_method(sc->conn);
@@ -947,7 +947,7 @@ nni_http_server_close(nni_http_server *s)
}
static int
-http_server_set_err(nni_http_server *s, uint16_t code, char *body)
+http_server_set_err(nni_http_server *s, nng_http_status code, char *body)
{
http_error *epage;
@@ -973,7 +973,7 @@ http_server_set_err(nni_http_server *s, uint16_t code, char *body)
int
nni_http_server_set_error_page(
- nni_http_server *s, uint16_t code, const char *html)
+ nni_http_server *s, nng_http_status code, const char *html)
{
char *body;
int rv;
@@ -991,10 +991,10 @@ nni_http_server_set_error_page(
int
nni_http_server_error(nni_http_server *s, nng_http *conn)
{
- http_error *epage;
- char *body = NULL;
- uint16_t code = nni_http_get_status(conn);
- int rv;
+ http_error *epage;
+ char *body = NULL;
+ nng_http_status code = nni_http_get_status(conn);
+ int rv;
nni_mtx_lock(&s->errors_mtx);
NNI_LIST_FOREACH (&s->errors, epage) {
@@ -1168,7 +1168,7 @@ http_handle_file(nng_http *conn, void *arg, nni_aio *aio)
// them up chunkwise. Applications could even come up with their own
// caching version of the http handler.
if ((rv = nni_file_get(hf->path, &data, &size)) != 0) {
- uint16_t status;
+ nng_http_status status;
switch (rv) {
case NNG_ENOMEM:
status = NNG_HTTP_STATUS_INTERNAL_SERVER_ERROR;
@@ -1350,7 +1350,7 @@ http_handle_dir(nng_http *conn, void *arg, nng_aio *aio)
nni_free(pn, pnsz);
if (rv != 0) {
- uint16_t status;
+ nng_http_status status;
switch (rv) {
case NNG_ENOMEM:
@@ -1418,9 +1418,9 @@ nni_http_handler_init_directory(
}
typedef struct http_redirect {
- uint16_t code;
- char *where;
- char *from;
+ nng_http_status code;
+ char *where;
+ char *from;
} http_redirect;
static void
@@ -1483,7 +1483,7 @@ http_redirect_free(void *arg)
int
nni_http_handler_init_redirect(nni_http_handler **hpp, const char *uri,
- uint16_t status, const char *where)
+ nng_http_status status, const char *where)
{
nni_http_handler *h;
int rv;