aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2025-10-26 10:54:58 -0700
committerGarrett D'Amore <garrett@damore.org>2025-10-27 07:13:40 -0700
commitbe13c2e8845423cec17af429fc4e16a5d9749e47 (patch)
tree82614e403a41aac6581a9a223ef9eba5be557222 /src/platform
parent11c53f3d7f747d14fd69ce98c63d629bc821ef68 (diff)
downloadnng-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/platform')
-rw-r--r--src/platform/ipc_stream_test.c8
-rw-r--r--src/platform/posix/posix_ipcdial.c12
-rw-r--r--src/platform/posix/posix_ipclisten.c11
-rw-r--r--src/platform/posix/posix_tcplisten.c59
-rw-r--r--src/platform/tcp_stream_test.c39
-rw-r--r--src/platform/windows/win_ipcdial.c12
-rw-r--r--src/platform/windows/win_ipclisten.c11
-rw-r--r--src/platform/windows/win_tcplisten.c4
8 files changed, 39 insertions, 117 deletions
diff --git a/src/platform/ipc_stream_test.c b/src/platform/ipc_stream_test.c
index fb3bc493..45c78d23 100644
--- a/src/platform/ipc_stream_test.c
+++ b/src/platform/ipc_stream_test.c
@@ -29,9 +29,9 @@ test_ipc_stream(void)
nng_aio *aio1;
nng_aio *aio2;
nng_iov iov;
- nng_sockaddr sa2;
char buf1[5];
char buf2[5];
+ const nng_sockaddr *sap;
NUTS_ADDR(url, "ipc");
NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL));
@@ -85,9 +85,9 @@ test_ipc_stream(void)
NUTS_TRUE(memcmp(buf1, buf2, 5) == 0);
- NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2));
- NUTS_TRUE(sa2.s_ipc.sa_family == NNG_AF_IPC);
- NUTS_MATCH(sa2.s_ipc.sa_path, url + strlen("ipc://"));
+ sap = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap->s_ipc.sa_family == NNG_AF_IPC);
+ NUTS_MATCH(sap->s_ipc.sa_path, url + strlen("ipc://"));
nng_aio_free(aio1);
nng_aio_free(aio2);
diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c
index a570bc4f..d042f45c 100644
--- a/src/platform/posix/posix_ipcdial.c
+++ b/src/platform/posix/posix_ipcdial.c
@@ -249,14 +249,6 @@ error:
nni_aio_finish_error(aio, rv);
}
-static nng_err
-ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_dialer *d = arg;
-
- return (nni_copyout_sockaddr(&d->sa, buf, szp, t));
-}
-
#ifdef NNG_TEST_LIB
static nng_err
ipc_dialer_set_test_no_connect(
@@ -274,10 +266,6 @@ ipc_dialer_set_test_no_connect(
#endif
static const nni_option ipc_dialer_options[] = {
- {
- .o_name = NNG_OPT_REMADDR,
- .o_get = ipc_dialer_get_remaddr,
- },
#ifdef NNG_TEST_LIB
{
.o_name = "test-no-connect",
diff --git a/src/platform/posix/posix_ipclisten.c b/src/platform/posix/posix_ipclisten.c
index 6254bf81..7587b4c6 100644
--- a/src/platform/posix/posix_ipclisten.c
+++ b/src/platform/posix/posix_ipclisten.c
@@ -217,13 +217,6 @@ ipc_remove_stale(const char *path)
}
static nng_err
-ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_listener *l = arg;
- return (nni_copyout_sockaddr(&l->sa, buf, szp, t));
-}
-
-static nng_err
ipc_listener_set_perms(void *arg, const void *buf, size_t sz, nni_type t)
{
ipc_listener *l = arg;
@@ -308,10 +301,6 @@ ipc_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option ipc_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = ipc_listener_get_addr,
- },
- {
.o_name = NNG_OPT_IPC_PERMISSIONS,
.o_set = ipc_listener_set_perms,
},
diff --git a/src/platform/posix/posix_tcplisten.c b/src/platform/posix/posix_tcplisten.c
index b158508c..9ad550b2 100644
--- a/src/platform/posix/posix_tcplisten.c
+++ b/src/platform/posix/posix_tcplisten.c
@@ -307,25 +307,6 @@ tcp_listener_accept(void *arg, nni_aio *aio)
}
static nng_err
-tcp_listener_get_locaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- tcp_listener *l = arg;
- nng_sockaddr sa;
- nni_mtx_lock(&l->mtx);
- if (l->started) {
- struct sockaddr_storage ss;
- socklen_t len = sizeof(ss);
- (void) getsockname(
- nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len);
- (void) nni_posix_sockaddr2nn(&sa, &ss, len);
- } else {
- sa.s_family = NNG_AF_UNSPEC;
- }
- nni_mtx_unlock(&l->mtx);
- return (nni_copyout_sockaddr(&sa, buf, szp, t));
-}
-
-static nng_err
tcp_listener_set_nodelay(void *arg, const void *buf, size_t sz, nni_type t)
{
tcp_listener *l = arg;
@@ -384,29 +365,33 @@ tcp_listener_get_keepalive(void *arg, void *buf, size_t *szp, nni_type t)
static nng_err
tcp_listener_get_port(void *arg, void *buf, size_t *szp, nni_type t)
{
- tcp_listener *l = arg;
- nng_sockaddr sa;
- size_t sz;
- int port;
- uint8_t *paddr;
+ tcp_listener *l = arg;
+ int port;
+ struct sockaddr_storage ss;
+ socklen_t len = sizeof(ss);
- sz = sizeof(sa);
- (void) tcp_listener_get_locaddr(l, &sa, &sz, NNI_TYPE_SOCKADDR);
+ nni_mtx_lock(&l->mtx);
+ if (!l->started) {
+ nni_mtx_unlock(&l->mtx);
+ return (NNG_ESTATE);
+ }
+ (void) getsockname(nni_posix_pfd_fd(&l->pfd), (void *) &ss, &len);
+ nni_mtx_unlock(&l->mtx);
- switch (sa.s_family) {
- case NNG_AF_INET:
- paddr = (void *) &sa.s_in.sa_port;
+ switch (ss.ss_family) {
+ case AF_INET:
+ port =
+ htons(((struct sockaddr_in *) ((void *) (&ss)))->sin_port);
break;
-
- case NNG_AF_INET6:
- paddr = (void *) &sa.s_in6.sa_port;
+ case AF_INET6:
+ port = htons(
+ ((struct sockaddr_in6 *) ((void *) (&ss)))->sin6_port);
break;
-
default:
- return (NNG_ESTATE);
+ port = 0;
+ break;
}
- NNI_GET16(paddr, port);
return (nni_copyout_int(port, buf, szp, t));
}
@@ -470,10 +455,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option tcp_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = tcp_listener_get_locaddr,
- },
- {
.o_name = NNG_OPT_TCP_NODELAY,
.o_set = tcp_listener_set_nodelay,
.o_get = tcp_listener_get_nodelay,
diff --git a/src/platform/tcp_stream_test.c b/src/platform/tcp_stream_test.c
index a0943e6c..3dffed82 100644
--- a/src/platform/tcp_stream_test.c
+++ b/src/platform/tcp_stream_test.c
@@ -18,10 +18,8 @@
void
test_tcp_stream(void)
{
- nng_stream_dialer *d = NULL;
- nng_stream_listener *l = NULL;
- nng_sockaddr sa;
- uint8_t ip[4];
+ nng_stream_dialer *d = NULL;
+ nng_stream_listener *l = NULL;
nng_aio *daio = NULL;
nng_aio *laio = NULL;
nng_aio *maio = NULL;
@@ -30,10 +28,12 @@ test_tcp_stream(void)
nng_aio *aio1;
nng_aio *aio2;
nng_iov iov;
- nng_sockaddr sa2;
+ const nng_sockaddr *sap1;
+ const nng_sockaddr *sap2;
char buf1[5];
char buf2[5];
bool on;
+ int port;
NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL));
NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL));
@@ -43,18 +43,12 @@ test_tcp_stream(void)
NUTS_PASS(nng_stream_listener_alloc(&l, "tcp://127.0.0.1"));
NUTS_PASS(nng_stream_listener_listen(l));
-
- ip[0] = 127;
- ip[1] = 0;
- ip[2] = 0;
- ip[3] = 1;
- NUTS_PASS(nng_stream_listener_get_addr(l, NNG_OPT_LOCADDR, &sa));
- NUTS_TRUE(sa.s_in.sa_port != 0);
- NUTS_TRUE(memcmp(&sa.s_in.sa_addr, ip, 4) == 0);
+ NUTS_PASS(nng_stream_listener_get_int(l, NNG_OPT_BOUND_PORT, &port));
+ NUTS_TRUE(port > 0);
+ NUTS_TRUE(port <= 0xffff);
char uri[64];
- snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d",
- nuts_be16(sa.s_in.sa_port));
+ snprintf(uri, sizeof(uri), "tcp://127.0.0.1:%d", port);
NUTS_PASS(nng_stream_dialer_alloc(&d, uri));
nng_stream_dialer_dial(d, daio);
@@ -105,16 +99,13 @@ test_tcp_stream(void)
NUTS_TRUE(memcmp(buf1, buf2, 5) == 0);
- NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2));
- NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET);
-
- NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr);
- NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port);
+ sap1 = nng_stream_self_addr(c2);
+ NUTS_TRUE(sap1->s_in.sa_family == NNG_AF_INET);
- NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa2));
- NUTS_TRUE(sa2.s_in.sa_family == NNG_AF_INET);
- NUTS_TRUE(sa2.s_in.sa_addr == sa.s_in.sa_addr);
- NUTS_TRUE(sa2.s_in.sa_port == sa.s_in.sa_port);
+ sap2 = nng_stream_peer_addr(c1);
+ NUTS_TRUE(sap2->s_in.sa_family == NNG_AF_INET);
+ NUTS_TRUE(sap2->s_in.sa_addr == sap1->s_in.sa_addr);
+ NUTS_TRUE(sap2->s_in.sa_port == sap1->s_in.sa_port);
nng_stream_listener_free(l);
nng_stream_dialer_free(d);
diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c
index 04ee5829..c9aabfe4 100644
--- a/src/platform/windows/win_ipcdial.c
+++ b/src/platform/windows/win_ipcdial.c
@@ -205,20 +205,8 @@ ipc_dialer_free(void *arg)
NNI_FREE_STRUCT(d);
}
-static nng_err
-ipc_dialer_get_remaddr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_dialer *d = arg;
-
- return (nni_copyout_sockaddr(&d->sa, buf, szp, t));
-}
-
static const nni_option ipc_dialer_options[] = {
{
- .o_name = NNG_OPT_REMADDR,
- .o_get = ipc_dialer_get_remaddr,
- },
- {
.o_name = NULL,
},
};
diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c
index 07c69507..26c5573e 100644
--- a/src/platform/windows/win_ipclisten.c
+++ b/src/platform/windows/win_ipclisten.c
@@ -158,19 +158,8 @@ ipc_listener_set_sec_desc(void *arg, void *desc)
return (NNG_OK);
}
-static nng_err
-ipc_listener_get_addr(void *arg, void *buf, size_t *szp, nni_type t)
-{
- ipc_listener *l = arg;
- return ((nni_copyout_sockaddr(&l->sa, buf, szp, t)));
-}
-
static const nni_option ipc_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = ipc_listener_get_addr,
- },
- {
.o_name = NULL,
},
};
diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c
index b32c1fbb..a0d7a249 100644
--- a/src/platform/windows/win_tcplisten.c
+++ b/src/platform/windows/win_tcplisten.c
@@ -503,10 +503,6 @@ tcp_listener_get_listen_fd(void *arg, void *buf, size_t *szp, nni_type t)
static const nni_option tcp_listener_options[] = {
{
- .o_name = NNG_OPT_LOCADDR,
- .o_get = tcp_listener_get_locaddr,
- },
- {
.o_name = NNG_OPT_TCP_NODELAY,
.o_set = tcp_listener_set_nodelay,
.o_get = tcp_listener_get_nodelay,