summaryrefslogtreecommitdiff
path: root/src/supplemental
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2021-12-31 14:13:08 -0800
committerGarrett D'Amore <garrett@damore.org>2021-12-31 16:11:25 -0800
commit5e06e98541ff223e7a18b6a61120532acd09d410 (patch)
tree73d3b17ae7676a1e730e190d29f9e2661959b6a2 /src/supplemental
parent2f66b99830e6dc731e4f631ea743771df701659e (diff)
downloadnng-5e06e98541ff223e7a18b6a61120532acd09d410.tar.gz
nng-5e06e98541ff223e7a18b6a61120532acd09d410.tar.bz2
nng-5e06e98541ff223e7a18b6a61120532acd09d410.zip
Replace nni_aio_prov_set_extra with nni_aio_prov_set_data.
This takes one less parameter, and is simpler. It will let us reclaim the aio_prov_extra data space as well, so that we can use it for other purposes.
Diffstat (limited to 'src/supplemental')
-rw-r--r--src/supplemental/http/http_conn.c99
-rw-r--r--src/supplemental/websocket/websocket.c4
2 files changed, 44 insertions, 59 deletions
diff --git a/src/supplemental/http/http_conn.c b/src/supplemental/http/http_conn.c
index 646a3067..03d1a1f5 100644
--- a/src/supplemental/http/http_conn.c
+++ b/src/supplemental/http/http_conn.c
@@ -1,5 +1,5 @@
//
-// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2021 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2019 Devolutions <info@devolutions.net>
//
@@ -40,16 +40,9 @@ enum write_flavor {
HTTP_WR_RES,
};
-#define SET_RD_FLAVOR(aio, f) \
- nni_aio_set_prov_extra(aio, 0, ((void *) (intptr_t)(f)))
-#define GET_RD_FLAVOR(aio) (int) ((intptr_t) nni_aio_get_prov_extra(aio, 0))
-#define SET_WR_FLAVOR(aio, f) \
- nni_aio_set_prov_extra(aio, 0, ((void *) (intptr_t)(f)))
-#define GET_WR_FLAVOR(aio) (int) ((intptr_t) nni_aio_get_prov_extra(aio, 0))
-
struct nng_http_conn {
nng_stream *sock;
- void * ctx;
+ void *ctx;
bool closed;
nni_list rdq; // high level http read requests
nni_list wrq; // high level http write requests
@@ -61,11 +54,14 @@ struct nng_http_conn {
nni_mtx mtx;
- uint8_t *rd_buf;
- size_t rd_get;
- size_t rd_put;
- size_t rd_bufsz;
- bool rd_buffered;
+ enum read_flavor rd_flavor;
+ uint8_t *rd_buf;
+ size_t rd_get;
+ size_t rd_put;
+ size_t rd_bufsz;
+ bool rd_buffered;
+
+ enum write_flavor wr_flavor;
};
void
@@ -140,7 +136,7 @@ http_rd_buf(nni_http_conn *conn, nni_aio *aio)
rbuf += conn->rd_get;
- switch (GET_RD_FLAVOR(aio)) {
+ switch (conn->rd_flavor) {
case HTTP_RD_RAW:
raw = true; // FALLTHROUGH
case HTTP_RD_FULL:
@@ -185,7 +181,7 @@ http_rd_buf(nni_http_conn *conn, nni_aio *aio)
case HTTP_RD_REQ:
rv = nni_http_req_parse(
- nni_aio_get_prov_extra(aio, 1), rbuf, cnt, &n);
+ nni_aio_get_prov_data(aio), rbuf, cnt, &n);
conn->rd_get += n;
if (conn->rd_get == conn->rd_put) {
conn->rd_get = conn->rd_put = 0;
@@ -202,7 +198,7 @@ http_rd_buf(nni_http_conn *conn, nni_aio *aio)
case HTTP_RD_RES:
rv = nni_http_res_parse(
- nni_aio_get_prov_extra(aio, 1), rbuf, cnt, &n);
+ nni_aio_get_prov_data(aio), rbuf, cnt, &n);
conn->rd_get += n;
if (conn->rd_get == conn->rd_put) {
conn->rd_get = conn->rd_put = 0;
@@ -219,7 +215,7 @@ http_rd_buf(nni_http_conn *conn, nni_aio *aio)
case HTTP_RD_CHUNK:
rv = nni_http_chunks_parse(
- nni_aio_get_prov_extra(aio, 1), rbuf, cnt, &n);
+ nni_aio_get_prov_data(aio), rbuf, cnt, &n);
conn->rd_get += n;
if (conn->rd_get == conn->rd_put) {
conn->rd_get = conn->rd_put = 0;
@@ -278,12 +274,12 @@ static void
http_rd_cb(void *arg)
{
nni_http_conn *conn = arg;
- nni_aio * aio = conn->rd_aio;
- nni_aio * uaio;
+ nni_aio *aio = conn->rd_aio;
+ nni_aio *uaio;
size_t cnt;
int rv;
unsigned niov;
- nni_iov * iov;
+ nni_iov *iov;
nni_mtx_lock(&conn->mtx);
@@ -365,7 +361,7 @@ http_rd_cancel(nni_aio *aio, void *arg, int rv)
}
static void
-http_rd_submit(nni_http_conn *conn, nni_aio *aio)
+http_rd_submit(nni_http_conn *conn, nni_aio *aio, enum read_flavor flavor)
{
int rv;
@@ -380,6 +376,7 @@ http_rd_submit(nni_http_conn *conn, nni_aio *aio)
nni_aio_finish_error(aio, rv);
return;
}
+ conn->rd_flavor = flavor;
nni_list_append(&conn->rdq, aio);
if (conn->rd_uaio == NULL) {
http_rd_start(conn);
@@ -411,8 +408,8 @@ static void
http_wr_cb(void *arg)
{
nni_http_conn *conn = arg;
- nni_aio * aio = conn->wr_aio;
- nni_aio * uaio;
+ nni_aio *aio = conn->wr_aio;
+ nni_aio *uaio;
int rv;
size_t n;
@@ -442,7 +439,7 @@ http_wr_cb(void *arg)
n = nni_aio_count(aio);
nni_aio_bump_count(uaio, n);
- if (GET_WR_FLAVOR(uaio) == HTTP_WR_RAW) {
+ if (conn->wr_flavor == HTTP_WR_RAW) {
// For raw data, we just send partial completion
// notices to the consumer.
goto done;
@@ -484,7 +481,7 @@ http_wr_cancel(nni_aio *aio, void *arg, int rv)
}
static void
-http_wr_submit(nni_http_conn *conn, nni_aio *aio)
+http_wr_submit(nni_http_conn *conn, nni_aio *aio, enum write_flavor flavor)
{
int rv;
@@ -499,6 +496,7 @@ http_wr_submit(nni_http_conn *conn, nni_aio *aio)
nni_aio_finish_error(aio, rv);
return;
}
+ conn->wr_flavor = flavor;
nni_list_append(&conn->wrq, aio);
if (conn->wr_uaio == NULL) {
@@ -509,55 +507,50 @@ http_wr_submit(nni_http_conn *conn, nni_aio *aio)
void
nni_http_read_req(nni_http_conn *conn, nni_http_req *req, nni_aio *aio)
{
- SET_RD_FLAVOR(aio, HTTP_RD_REQ);
- nni_aio_set_prov_extra(aio, 1, req);
+ nni_aio_set_prov_data(aio, req);
nni_mtx_lock(&conn->mtx);
- http_rd_submit(conn, aio);
+ http_rd_submit(conn, aio, HTTP_RD_REQ);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_read_res(nni_http_conn *conn, nni_http_res *res, nni_aio *aio)
{
- SET_RD_FLAVOR(aio, HTTP_RD_RES);
- nni_aio_set_prov_extra(aio, 1, res);
+ nni_aio_set_prov_data(aio, res);
nni_mtx_lock(&conn->mtx);
- http_rd_submit(conn, aio);
+ http_rd_submit(conn, aio, HTTP_RD_RES);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_read_chunks(nni_http_conn *conn, nni_http_chunks *cl, nni_aio *aio)
{
- SET_RD_FLAVOR(aio, HTTP_RD_CHUNK);
- nni_aio_set_prov_extra(aio, 1, cl);
+ nni_aio_set_prov_data(aio, cl);
nni_mtx_lock(&conn->mtx);
- http_rd_submit(conn, aio);
+ http_rd_submit(conn, aio, HTTP_RD_CHUNK);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_read_full(nni_http_conn *conn, nni_aio *aio)
{
- SET_RD_FLAVOR(aio, HTTP_RD_FULL);
- nni_aio_set_prov_extra(aio, 1, NULL);
+ nni_aio_set_prov_data(aio, NULL);
nni_mtx_lock(&conn->mtx);
- http_rd_submit(conn, aio);
+ http_rd_submit(conn, aio, HTTP_RD_FULL);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_read(nni_http_conn *conn, nni_aio *aio)
{
- SET_RD_FLAVOR(aio, HTTP_RD_RAW);
- nni_aio_set_prov_extra(aio, 1, NULL);
+ nni_aio_set_prov_data(aio, NULL);
nni_mtx_lock(&conn->mtx);
- http_rd_submit(conn, aio);
+ http_rd_submit(conn, aio, HTTP_RD_RAW);
nni_mtx_unlock(&conn->mtx);
}
@@ -565,9 +558,9 @@ void
nni_http_write_req(nni_http_conn *conn, nni_http_req *req, nni_aio *aio)
{
int rv;
- void * buf;
+ void *buf;
size_t bufsz;
- void * data;
+ void *data;
size_t size;
nni_iov iov[2];
int niov;
@@ -587,10 +580,8 @@ nni_http_write_req(nni_http_conn *conn, nni_http_req *req, nni_aio *aio)
}
nni_aio_set_iov(aio, niov, iov);
- SET_WR_FLAVOR(aio, HTTP_WR_REQ);
-
nni_mtx_lock(&conn->mtx);
- http_wr_submit(conn, aio);
+ http_wr_submit(conn, aio, HTTP_WR_REQ);
nni_mtx_unlock(&conn->mtx);
}
@@ -598,9 +589,9 @@ void
nni_http_write_res(nni_http_conn *conn, nni_http_res *res, nni_aio *aio)
{
int rv;
- void * buf;
+ void *buf;
size_t bufsz;
- void * data;
+ void *data;
size_t size;
nni_iov iov[2];
int nio;
@@ -620,30 +611,24 @@ nni_http_write_res(nni_http_conn *conn, nni_http_res *res, nni_aio *aio)
}
nni_aio_set_iov(aio, nio, iov);
- SET_WR_FLAVOR(aio, HTTP_WR_RES);
-
nni_mtx_lock(&conn->mtx);
- http_wr_submit(conn, aio);
+ http_wr_submit(conn, aio, HTTP_WR_RES);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_write(nni_http_conn *conn, nni_aio *aio)
{
- SET_WR_FLAVOR(aio, HTTP_WR_RAW);
-
nni_mtx_lock(&conn->mtx);
- http_wr_submit(conn, aio);
+ http_wr_submit(conn, aio, HTTP_WR_RAW);
nni_mtx_unlock(&conn->mtx);
}
void
nni_http_write_full(nni_http_conn *conn, nni_aio *aio)
{
- SET_WR_FLAVOR(aio, HTTP_WR_FULL);
-
nni_mtx_lock(&conn->mtx);
- http_wr_submit(conn, aio);
+ http_wr_submit(conn, aio, HTTP_WR_FULL);
nni_mtx_unlock(&conn->mtx);
}
diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c
index 416d968c..d1c9c8d5 100644
--- a/src/supplemental/websocket/websocket.c
+++ b/src/supplemental/websocket/websocket.c
@@ -714,7 +714,7 @@ ws_write_cancel(nni_aio *aio, void *arg, int rv)
nni_mtx_unlock(&ws->mtx);
return;
}
- frame = nni_aio_get_prov_extra(aio, 0);
+ frame = nni_aio_get_prov_data(aio);
if (frame == ws->txframe) {
nni_aio_abort(ws->txaio, rv);
// We will wait for callback on the txaio to finish aio.
@@ -2739,7 +2739,7 @@ ws_str_send(void *arg, nni_aio *aio)
ws_frame_fini(frame);
return;
}
- nni_aio_set_prov_extra(aio, 0, frame);
+ nni_aio_set_prov_data(aio, frame);
nni_list_append(&ws->sendq, aio);
nni_list_append(&ws->txq, frame);
ws_start_write(ws);