diff options
| author | Garrett D'Amore <garrett@damore.org> | 2025-10-26 10:54:58 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2025-10-27 07:13:40 -0700 |
| commit | be13c2e8845423cec17af429fc4e16a5d9749e47 (patch) | |
| tree | 82614e403a41aac6581a9a223ef9eba5be557222 /src/supplemental | |
| parent | 11c53f3d7f747d14fd69ce98c63d629bc821ef68 (diff) | |
| download | nng-be13c2e8845423cec17af429fc4e16a5d9749e47.tar.gz nng-be13c2e8845423cec17af429fc4e16a5d9749e47.tar.bz2 nng-be13c2e8845423cec17af429fc4e16a5d9749e47.zip | |
Replace nng_pipe_get_addr, nng_stream_get_addr, and the NNG_OPT_REMADDR option.
More direct access methods are provided instead.
This results in much lower friction when using, and is a step on the path
to removing NNG_OPT_LOCADDR as well.
We need to figure a solution for NNG_OPT_LOCADDR for dialers; for
listeners there is little use in it either, and it will be removed.
(Dialers will probably get a new NNG_OPT_BIND_IP option.)
Diffstat (limited to 'src/supplemental')
| -rw-r--r-- | src/supplemental/http/http_public.c | 8 | ||||
| -rw-r--r-- | src/supplemental/http/http_server_test.c | 6 | ||||
| -rw-r--r-- | src/supplemental/tls/tls_stream.c | 16 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket_test.c | 63 |
4 files changed, 39 insertions, 54 deletions
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c index c5ace172..8d91109b 100644 --- a/src/supplemental/http/http_public.c +++ b/src/supplemental/http/http_public.c @@ -565,14 +565,12 @@ nng_http_server_get_tls(nng_http_server *srv, nng_tls_config **cfg) } nng_err -nng_http_server_get_addr(nng_http_server *srv, nng_sockaddr *addr) +nng_http_server_get_port(nng_http_server *srv, int *port) { #ifdef NNG_SUPP_HTTP - size_t size = sizeof(nng_sockaddr); - if (srv == NULL || addr == NULL) - return NNG_EINVAL; + size_t size = sizeof(*port); return (nni_http_server_get( - srv, NNG_OPT_LOCADDR, addr, &size, NNI_TYPE_SOCKADDR)); + srv, NNG_OPT_BOUND_PORT, port, &size, NNI_TYPE_INT32)); #else NNI_ARG_UNUSED(srv); NNI_ARG_UNUSED(addr); diff --git a/src/supplemental/http/http_server_test.c b/src/supplemental/http/http_server_test.c index d299cb97..19449b9c 100644 --- a/src/supplemental/http/http_server_test.c +++ b/src/supplemental/http/http_server_test.c @@ -190,7 +190,7 @@ httpaddrcheck(nng_http *conn, void *arg, nng_aio *aio) static void server_setup(struct server_test *st, nng_http_handler *h) { - nng_sockaddr sa; + int port; memset(st, 0, sizeof(*st)); NUTS_PASS(nng_url_parse(&st->url, "http://127.0.0.1:0")); NUTS_PASS(nng_aio_alloc(&st->aio, NULL, NULL)); @@ -200,8 +200,8 @@ server_setup(struct server_test *st, nng_http_handler *h) NUTS_PASS(nng_http_server_add_handler(st->s, h)); } NUTS_PASS(nng_http_server_start(st->s)); - NUTS_PASS(nng_http_server_get_addr(st->s, &sa)); - nng_url_resolve_port(st->url, nng_sockaddr_port(&sa)); + NUTS_PASS(nng_http_server_get_port(st->s, &port)); + nng_url_resolve_port(st->url, (uint32_t) port); nng_url_sprintf(st->urlstr, sizeof(st->urlstr), st->url); NUTS_PASS(nng_http_client_alloc(&st->cli, st->url)); diff --git a/src/supplemental/tls/tls_stream.c b/src/supplemental/tls/tls_stream.c index d0a1fabd..b523e583 100644 --- a/src/supplemental/tls/tls_stream.c +++ b/src/supplemental/tls/tls_stream.c @@ -111,10 +111,10 @@ tls_stream_recv(void *arg, nng_aio *aio) static void tls_stream_conn_cb(void *arg) { - tls_stream *ts = arg; - nng_stream *bio; - int rv; - nng_sockaddr sa; + tls_stream *ts = arg; + nng_stream *bio; + int rv; + const nng_sockaddr *sa; if ((rv = nni_aio_result(&ts->conn_aio)) != 0) { nni_aio_finish_error(ts->user_aio, rv); @@ -123,13 +123,9 @@ tls_stream_conn_cb(void *arg) } bio = nni_aio_get_output(&ts->conn_aio, 0); - if ((rv = nng_stream_get_addr(bio, NNG_OPT_REMADDR, &sa)) != 0) { - nni_aio_finish_error(ts->user_aio, rv); - nni_tls_stream_free(ts); - return; - }; + sa = nng_stream_peer_addr(bio); - if ((rv = nni_tls_start(&ts->conn, &tls_stream_bio, bio, &sa)) != 0) { + if ((rv = nni_tls_start(&ts->conn, &tls_stream_bio, bio, sa)) != 0) { // NB: if this fails, it *will* have set the bio either way. // So nni_tls_stream_free will also free the bio. nni_aio_finish_error(ts->user_aio, rv); diff --git a/src/supplemental/websocket/websocket_test.c b/src/supplemental/websocket/websocket_test.c index ffce8019..368ef3ec 100644 --- a/src/supplemental/websocket/websocket_test.c +++ b/src/supplemental/websocket/websocket_test.c @@ -18,10 +18,8 @@ void test_websocket_wildcard(void) { - nng_stream_dialer *d = NULL; - nng_stream_listener *l = NULL; - nng_sockaddr sa1; - nng_sockaddr sa2; + nng_stream_dialer *d = NULL; + nng_stream_listener *l = NULL; nng_aio *daio = NULL; nng_aio *laio = NULL; nng_aio *aio1 = NULL; @@ -32,20 +30,19 @@ test_websocket_wildcard(void) char buf1[8]; char buf2[8]; char uri[64]; + const nng_sockaddr *sap1; + const nng_sockaddr *sap2; + int port; NUTS_PASS(nng_stream_listener_alloc(&l, "ws://127.0.0.1:0/test")); NUTS_PASS(nng_stream_listener_listen(l)); - // Let's get the address we're going to use to dial -- also check - // that it is correct. - NUTS_PASS(nng_stream_listener_get_addr(l, NNG_OPT_LOCADDR, &sa1)); - NUTS_TRUE(sa1.s_in.sa_port != 0); - NUTS_TRUE(sa1.s_family == NNG_AF_INET); - NUTS_TRUE(nuts_be32(sa1.s_in.sa_addr) == 0x7F000001u); + // Let's get the port we're going to use to dial. + NUTS_PASS(nng_stream_listener_get_int(l, NNG_OPT_BOUND_PORT, &port)); + NUTS_TRUE(port != 0); - (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", - nuts_be16(sa1.s_in.sa_port)); + (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", port); NUTS_PASS(nng_stream_dialer_alloc(&d, uri)); NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); @@ -71,16 +68,16 @@ test_websocket_wildcard(void) NUTS_TRUE(c2 != NULL); // Let's compare the peer addresses - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); - NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + sap2 = nng_stream_peer_addr(c2); + NUTS_TRUE(sap2->s_family == NNG_AF_INET); + NUTS_TRUE(nuts_be32(sap2->s_in.sa_addr) == 0x7F000001u); + NUTS_TRUE(sap2->s_in.sa_port != 0); - NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); - NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + sap1 = nng_stream_peer_addr(c1); + sap2 = nng_stream_self_addr(c2); + NUTS_TRUE(sap1->s_family == sap2->s_family); + NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr); + NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port); // This relies on send completing for for just 5 bytes, and on // recv doing the same. Technically this isn't/ guaranteed, but @@ -129,8 +126,6 @@ test_websocket_conn_props(void) { nng_stream_dialer *d = NULL; nng_stream_listener *l = NULL; - nng_sockaddr sa1; - nng_sockaddr sa2; const nng_sockaddr *sap1; const nng_sockaddr *sap2; size_t sz; @@ -186,19 +181,15 @@ test_websocket_conn_props(void) // Let's compare the peer addresses sap1 = nng_stream_self_addr(c1); sap2 = nng_stream_peer_addr(c2); - NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_LOCADDR, &sa1)); - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); - NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); - NUTS_TRUE(memcmp(sap1, &sa1, sizeof(sa1)) == 0); - NUTS_TRUE(memcmp(sap2, &sa2, sizeof(sa2)) == 0); - - NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); - NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - NUTS_TRUE(sa1.s_family == sa2.s_family); - NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); - NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + NUTS_TRUE(sap1->s_family == sap2->s_family); + NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr); + NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port); + + sap1 = nng_stream_peer_addr(c1); + sap2 = nng_stream_self_addr(c2); + NUTS_TRUE(sap1->s_family == sap2->s_family); + NUTS_TRUE(sap1->s_in.sa_addr == sap2->s_in.sa_addr); + NUTS_TRUE(sap1->s_in.sa_port == sap2->s_in.sa_port); NUTS_PASS(nng_stream_get_bool(c1, NNG_OPT_TCP_NODELAY, &on)); NUTS_TRUE(on == true); |
