aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/nng/nng.h4
-rw-r--r--src/core/pipe.c33
-rw-r--r--src/core/pipe.h2
-rw-r--r--src/core/stream.c25
-rw-r--r--src/core/stream.h4
-rw-r--r--src/platform/posix/posix_ipcconn.c7
-rw-r--r--src/platform/posix/posix_sockfd.c7
-rw-r--r--src/platform/posix/posix_tcpconn.c14
-rw-r--r--src/platform/windows/win_ipcconn.c7
-rw-r--r--src/platform/windows/win_tcpconn.c12
-rw-r--r--src/sp/transport.h6
-rw-r--r--src/sp/transport/dtls/dtls.c15
-rw-r--r--src/sp/transport/inproc/inproc.c55
-rw-r--r--src/sp/transport/ipc/ipc.c34
-rw-r--r--src/sp/transport/socket/sockfd.c35
-rw-r--r--src/sp/transport/tcp/tcp.c34
-rw-r--r--src/sp/transport/tls/tls.c16
-rw-r--r--src/sp/transport/udp/udp.c34
-rw-r--r--src/sp/transport/ws/websocket.c16
-rw-r--r--src/supplemental/http/http_api.h4
-rw-r--r--src/supplemental/http/http_conn.c12
-rw-r--r--src/supplemental/http/http_public.c16
-rw-r--r--src/supplemental/tls/tls_stream.c18
-rw-r--r--src/supplemental/websocket/websocket.c16
-rw-r--r--src/supplemental/websocket/websocket_test.c4
25 files changed, 272 insertions, 158 deletions
diff --git a/include/nng/nng.h b/include/nng/nng.h
index c5881b3b..e5e0e02b 100644
--- a/include/nng/nng.h
+++ b/include/nng/nng.h
@@ -1162,8 +1162,8 @@ NNG_DECL nng_err nng_stream_get_string(
nng_stream *, const char *, const char **);
NNG_DECL nng_err nng_stream_get_addr(
nng_stream *, const char *, nng_sockaddr *);
-NNG_DECL nng_err nng_stream_peer_addr(nng_stream *, const nng_sockaddr **);
-NNG_DECL nng_err nng_stream_self_addr(nng_stream *, const nng_sockaddr **);
+NNG_DECL const nng_sockaddr *nng_stream_peer_addr(nng_stream *);
+NNG_DECL const nng_sockaddr *nng_stream_self_addr(nng_stream *);
NNG_DECL nng_err nng_stream_peer_cert(nng_stream *, nng_tls_cert **);
NNG_DECL nng_err nng_stream_dialer_alloc(nng_stream_dialer **, const char *);
diff --git a/src/core/pipe.c b/src/core/pipe.c
index baa2d6f9..6a3a2e21 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -9,11 +9,13 @@
// found online at https://opensource.org/licenses/MIT.
//
+#include "core/options.h"
#include "nng/nng.h"
#include "nng_impl.h"
#include "sockimpl.h"
#include <stdio.h>
+#include <string.h>
// This file contains functions related to pipe objects.
//
@@ -345,6 +347,13 @@ nni_pipe_getopt(
if (rv != NNG_ENOTSUP) {
return (rv);
}
+ if (strcmp(name, NNG_OPT_REMADDR) == 0) {
+ return (
+ nni_copyout_sockaddr(nni_pipe_peer_addr(p), val, szp, t));
+ } else if (strcmp(name, NNG_OPT_LOCADDR) == 0) {
+ return (
+ nni_copyout_sockaddr(nni_pipe_self_addr(p), val, szp, t));
+ }
// Maybe the endpoint knows? The guarantees on pipes ensure that the
// pipe will not outlive its creating endpoint.
@@ -420,25 +429,29 @@ nni_pipe_bump_error(nni_pipe *p, int err)
}
}
+const nng_sockaddr *
+nni_pipe_peer_addr(nni_pipe *p)
+{
+ return (p->p_tran_ops.p_peer_addr(p->p_tran_data));
+}
+
+const nng_sockaddr *
+nni_pipe_self_addr(nni_pipe *p)
+{
+ return (p->p_tran_ops.p_self_addr(p->p_tran_data));
+}
+
char *
nni_pipe_peer_str_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN])
{
- nng_sockaddr sa;
- size_t sz = sizeof(sa);
- sa.s_family = AF_UNSPEC;
- nni_pipe_getopt(p, NNG_OPT_REMADDR, &sa, &sz, NNI_TYPE_SOCKADDR);
- nng_str_sockaddr(&sa, buf, NNG_MAXADDRSTRLEN);
+ nng_str_sockaddr(nni_pipe_peer_addr(p), buf, NNG_MAXADDRSTRLEN);
return (buf);
}
char *
nni_pipe_self_str_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN])
{
- nng_sockaddr sa;
- size_t sz = sizeof(sa);
- sa.s_family = AF_UNSPEC;
- nni_pipe_getopt(p, NNG_OPT_LOCADDR, &sa, &sz, NNI_TYPE_SOCKADDR);
- nng_str_sockaddr(&sa, buf, NNG_MAXADDRSTRLEN);
+ nng_str_sockaddr(nni_pipe_self_addr(p), buf, NNG_MAXADDRSTRLEN);
return (buf);
}
diff --git a/src/core/pipe.h b/src/core/pipe.h
index 6ef3c206..ba40af26 100644
--- a/src/core/pipe.h
+++ b/src/core/pipe.h
@@ -71,6 +71,8 @@ extern void nni_pipe_bump_error(nni_pipe *, int);
extern char *nni_pipe_peer_str_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN]);
extern char *nni_pipe_self_str_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN]);
+const nng_sockaddr *nni_pipe_peer_addr(nni_pipe *p);
+const nng_sockaddr *nni_pipe_self_addr(nni_pipe *p);
extern int nni_pipe_alloc_dialer(void **, nni_dialer *);
extern int nni_pipe_alloc_listener(void **, nni_listener *);
diff --git a/src/core/stream.c b/src/core/stream.c
index 6c7ad5f0..b1cb5d7b 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -401,28 +401,27 @@ nng_err
nng_stream_get_addr(nng_stream *s, const char *n, nng_sockaddr *v)
{
const nng_sockaddr *sap;
- int rv = NNG_ENOTSUP;
if (strcmp(n, NNG_OPT_LOCADDR) == 0) {
- rv = nng_stream_self_addr(s, &sap);
+ sap = nng_stream_self_addr(s);
} else if (strcmp(n, NNG_OPT_REMADDR) == 0) {
- rv = nng_stream_peer_addr(s, &sap);
- }
- if (rv == NNG_OK) {
- *v = *sap;
+ sap = nng_stream_peer_addr(s);
+ } else {
+ return (NNG_ENOTSUP);
}
- return (rv);
+ memcpy(v, sap, sizeof(nng_sockaddr));
+ return (NNG_OK);
}
-nng_err
-nng_stream_self_addr(nng_stream *s, const nng_sockaddr **sa)
+const nng_sockaddr *
+nng_stream_self_addr(nng_stream *s)
{
- return (s->s_self_addr(s, &*sa));
+ return (s->s_self_addr(s));
}
-nng_err
-nng_stream_peer_addr(nng_stream *s, const nng_sockaddr **sa)
+const nng_sockaddr *
+nng_stream_peer_addr(nng_stream *s)
{
- return (s->s_peer_addr(s, &*sa));
+ return (s->s_peer_addr(s));
}
nng_err
diff --git a/src/core/stream.h b/src/core/stream.h
index 3c87e9c5..1e314f44 100644
--- a/src/core/stream.h
+++ b/src/core/stream.h
@@ -50,8 +50,8 @@ struct nng_stream {
void (*s_send)(void *, nng_aio *);
nng_err (*s_get)(void *, const char *, void *, size_t *, nni_type);
nng_err (*s_set)(void *, const char *, const void *, size_t, nni_type);
- nng_err (*s_peer_addr)(void *, const nng_sockaddr **);
- nng_err (*s_self_addr)(void *, const nng_sockaddr **);
+ const nng_sockaddr *(*s_peer_addr)(void *);
+ const nng_sockaddr *(*s_self_addr)(void *);
nng_err (*s_peer_cert)(void *, nng_tls_cert **);
};
diff --git a/src/platform/posix/posix_ipcconn.c b/src/platform/posix/posix_ipcconn.c
index 11bd03d8..29550b7f 100644
--- a/src/platform/posix/posix_ipcconn.c
+++ b/src/platform/posix/posix_ipcconn.c
@@ -299,12 +299,11 @@ ipc_recv(void *arg, nni_aio *aio)
nni_mtx_unlock(&c->mtx);
}
-static nng_err
-ipc_sock_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+ipc_sock_addr(void *arg)
{
ipc_conn *c = arg;
- *sap = &c->sa;
- return (NNG_OK);
+ return (&c->sa);
}
static nng_err
diff --git a/src/platform/posix/posix_sockfd.c b/src/platform/posix/posix_sockfd.c
index 43225e7e..6a08f5c6 100644
--- a/src/platform/posix/posix_sockfd.c
+++ b/src/platform/posix/posix_sockfd.c
@@ -431,13 +431,12 @@ sfd_set(void *arg, const char *name, const void *buf, size_t sz, nni_type t)
return (nni_setopt(sfd_options, name, c, buf, sz, t));
}
-static nng_err
-sfd_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+sfd_addr(void *arg)
{
static nng_sockaddr sa = { .s_family = NNG_AF_UNSPEC };
NNI_ARG_UNUSED(arg);
- *sap = &sa;
- return (NNG_OK);
+ return &sa;
}
nng_err
diff --git a/src/platform/posix/posix_tcpconn.c b/src/platform/posix/posix_tcpconn.c
index 43dfb4e4..c04c27c1 100644
--- a/src/platform/posix/posix_tcpconn.c
+++ b/src/platform/posix/posix_tcpconn.c
@@ -332,20 +332,18 @@ tcp_recv(void *arg, nni_aio *aio)
nni_mtx_unlock(&c->mtx);
}
-static nng_err
-tcp_get_peer_addr(void *arg, const nng_sockaddr **addr)
+static const nng_sockaddr *
+tcp_get_peer_addr(void *arg)
{
nni_tcp_conn *c = arg;
- *addr = &c->peer;
- return (NNG_OK);
+ return (&c->peer);
}
-static nng_err
-tcp_get_self_addr(void *arg, const nng_sockaddr **addr)
+static const nng_sockaddr *
+tcp_get_self_addr(void *arg)
{
nni_tcp_conn *c = arg;
- *addr = &c->self;
- return (NNG_OK);
+ return (&c->self);
}
static nng_err
diff --git a/src/platform/windows/win_ipcconn.c b/src/platform/windows/win_ipcconn.c
index a5ef16a6..b20c90bd 100644
--- a/src/platform/windows/win_ipcconn.c
+++ b/src/platform/windows/win_ipcconn.c
@@ -431,12 +431,11 @@ ipc_get(void *arg, const char *nm, void *val, size_t *szp, nni_opt_type t)
return (nni_getopt(ipc_conn_options, nm, c, val, szp, t));
}
-static nng_err
-ipc_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+ipc_addr(void *arg)
{
ipc_conn *c = arg;
- *sap = &c->sa;
- return (NNG_OK);
+ return (&c->sa);
}
int
diff --git a/src/platform/windows/win_tcpconn.c b/src/platform/windows/win_tcpconn.c
index dae6b58d..ef1594db 100644
--- a/src/platform/windows/win_tcpconn.c
+++ b/src/platform/windows/win_tcpconn.c
@@ -289,20 +289,18 @@ tcp_get_keepalive(void *arg, void *buf, size_t *szp, nni_type t)
return (nni_copyout_bool(b, buf, szp, t));
}
-static nng_err
-tcp_self_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+tcp_self_addr(void *arg)
{
nni_tcp_conn *c = arg;
- *sap = &c->sockname;
- return (NNG_OK);
+ return (&c->sockname);
}
-static nng_err
+static const nng_sockaddr *
tcp_peer_addr(void *arg, const nng_sockaddr **sap)
{
nni_tcp_conn *c = arg;
- *sap = &c->peername;
- return (NNG_OK);
+ return (&c->peername);
}
static const nni_option tcp_options[] = {
diff --git a/src/sp/transport.h b/src/sp/transport.h
index 11a9ac01..af3b510e 100644
--- a/src/sp/transport.h
+++ b/src/sp/transport.h
@@ -189,6 +189,12 @@ struct nni_sp_pipe_ops {
// option setting.
nng_err (*p_getopt)(void *, const char *, void *, size_t *, nni_type);
+ // p_self_addr obtains the local sockaddr.
+ const nng_sockaddr *(*p_self_addr)(void *);
+
+ // p_peer_addr obtains the peer sockaddr.
+ const nng_sockaddr *(*p_peer_addr)(void *);
+
// p_peer_cert is used to obtain a peer cert for transports that
// implement TLS.
nng_err (*p_peer_cert)(void *, nng_tls_cert **);
diff --git a/src/sp/transport/dtls/dtls.c b/src/sp/transport/dtls/dtls.c
index 400709a1..ff78709d 100644
--- a/src/sp/transport/dtls/dtls.c
+++ b/src/sp/transport/dtls/dtls.c
@@ -1077,6 +1077,19 @@ dtls_pipe_peer_cert(void *arg, nng_tls_cert **certp)
return (nni_tls_peer_cert(&p->tls, certp));
}
+static const nng_sockaddr *
+dtls_pipe_peer_addr(void *arg)
+{
+ dtls_pipe *p = arg;
+ return (&p->peer_addr);
+}
+
+static const nng_sockaddr *
+dtls_pipe_self_addr(void *arg)
+{
+ dtls_pipe *p = arg;
+ return (&p->ep->self_sa);
+}
static void
dtls_ep_fini(void *arg)
@@ -1694,6 +1707,8 @@ static nni_sp_pipe_ops dtls_pipe_ops = {
.p_peer = dtls_pipe_peer,
.p_getopt = dtls_pipe_getopt,
.p_peer_cert = dtls_pipe_peer_cert,
+ .p_peer_addr = dtls_pipe_peer_addr,
+ .p_self_addr = dtls_pipe_self_addr,
};
static const nni_option dtls_ep_opts[] = {
diff --git a/src/sp/transport/inproc/inproc.c b/src/sp/transport/inproc/inproc.c
index 22fe619b..cf44145a 100644
--- a/src/sp/transport/inproc/inproc.c
+++ b/src/sp/transport/inproc/inproc.c
@@ -36,6 +36,7 @@ struct inproc_pipe {
uint16_t peer;
uint16_t proto;
nni_pipe *pipe;
+ nng_sockaddr sa;
};
struct inproc_queue {
@@ -247,18 +248,6 @@ inproc_pipe_peer(void *arg)
return (pipe->peer);
}
-static nng_err
-inproc_pipe_get_addr(void *arg, void *buf, size_t *szp, nni_opt_type t)
-{
- inproc_pipe *p = arg;
- nni_sockaddr sa;
-
- memset(&sa, 0, sizeof(sa));
- sa.s_inproc.sa_family = NNG_AF_INPROC;
- nni_strlcpy(sa.s_inproc.sa_name, p->addr, sizeof(sa.s_inproc.sa_name));
- return (nni_copyout_sockaddr(&sa, buf, szp, t));
-}
-
static void
inproc_ep_init(inproc_ep *ep, nni_sock *sock, const nng_url *url)
{
@@ -418,6 +407,13 @@ inproc_accept_clients(inproc_ep *srv)
spipe->send_queue = &pair->queues[1];
spipe->recv_queue = &pair->queues[0];
+ cpipe->sa.s_inproc.sa_family = NNG_AF_INPROC;
+ nni_strlcpy(cpipe->sa.s_inproc.sa_name, cpipe->addr,
+ sizeof(cpipe->sa.s_inproc.sa_name));
+ spipe->sa.s_inproc.sa_family = NNG_AF_INPROC;
+ nni_strlcpy(spipe->sa.s_inproc.sa_name, spipe->addr,
+ sizeof(spipe->sa.s_inproc.sa_name));
+
inproc_conn_finish(caio, 0, cli, cpipe);
inproc_conn_finish(saio, 0, srv, spipe);
}
@@ -563,14 +559,6 @@ inproc_ep_get_addr(void *arg, void *v, size_t *szp, nni_opt_type t)
}
static const nni_option inproc_pipe_options[] = {
- {
- .o_name = NNG_OPT_LOCADDR,
- .o_get = inproc_pipe_get_addr,
- },
- {
- .o_name = NNG_OPT_REMADDR,
- .o_get = inproc_pipe_get_addr,
- },
// terminate list
{
.o_name = NULL,
@@ -584,6 +572,13 @@ inproc_pipe_getopt(
return (nni_getopt(inproc_pipe_options, name, arg, v, szp, t));
}
+static const nng_sockaddr *
+inproc_pipe_addr(void *arg)
+{
+ inproc_pipe *p = arg;
+ return (&p->sa);
+}
+
static size_t
inproc_pipe_size(void)
{
@@ -591,15 +586,17 @@ inproc_pipe_size(void)
}
static nni_sp_pipe_ops inproc_pipe_ops = {
- .p_size = inproc_pipe_size,
- .p_init = inproc_pipe_init,
- .p_fini = inproc_pipe_fini,
- .p_send = inproc_pipe_send,
- .p_recv = inproc_pipe_recv,
- .p_close = inproc_pipe_close,
- .p_stop = inproc_pipe_stop,
- .p_peer = inproc_pipe_peer,
- .p_getopt = inproc_pipe_getopt,
+ .p_size = inproc_pipe_size,
+ .p_init = inproc_pipe_init,
+ .p_fini = inproc_pipe_fini,
+ .p_send = inproc_pipe_send,
+ .p_recv = inproc_pipe_recv,
+ .p_close = inproc_pipe_close,
+ .p_stop = inproc_pipe_stop,
+ .p_peer = inproc_pipe_peer,
+ .p_getopt = inproc_pipe_getopt,
+ .p_peer_addr = inproc_pipe_addr,
+ .p_self_addr = inproc_pipe_addr,
};
static const nni_option inproc_ep_options[] = {
diff --git a/src/sp/transport/ipc/ipc.c b/src/sp/transport/ipc/ipc.c
index a54c7853..c7f8ef7a 100644
--- a/src/sp/transport/ipc/ipc.c
+++ b/src/sp/transport/ipc/ipc.c
@@ -955,6 +955,20 @@ ipc_pipe_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t)
return (nni_stream_get(p->conn, name, buf, szp, t));
}
+static const nng_sockaddr *
+ipc_pipe_peer_addr(void *arg)
+{
+ ipc_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+ipc_pipe_self_addr(void *arg)
+{
+ ipc_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static size_t
ipc_pipe_size(void)
{
@@ -962,15 +976,17 @@ ipc_pipe_size(void)
}
static nni_sp_pipe_ops ipc_tran_pipe_ops = {
- .p_size = ipc_pipe_size,
- .p_init = ipc_pipe_init,
- .p_fini = ipc_pipe_fini,
- .p_stop = ipc_pipe_stop,
- .p_send = ipc_pipe_send,
- .p_recv = ipc_pipe_recv,
- .p_close = ipc_pipe_close,
- .p_peer = ipc_pipe_peer,
- .p_getopt = ipc_pipe_get,
+ .p_size = ipc_pipe_size,
+ .p_init = ipc_pipe_init,
+ .p_fini = ipc_pipe_fini,
+ .p_stop = ipc_pipe_stop,
+ .p_send = ipc_pipe_send,
+ .p_recv = ipc_pipe_recv,
+ .p_close = ipc_pipe_close,
+ .p_peer = ipc_pipe_peer,
+ .p_getopt = ipc_pipe_get,
+ .p_peer_addr = ipc_pipe_peer_addr,
+ .p_self_addr = ipc_pipe_self_addr,
};
static const nni_option ipc_ep_options[] = {
diff --git a/src/sp/transport/socket/sockfd.c b/src/sp/transport/socket/sockfd.c
index 57693088..8f03fad3 100644
--- a/src/sp/transport/socket/sockfd.c
+++ b/src/sp/transport/socket/sockfd.c
@@ -115,6 +115,20 @@ sfd_tran_pipe_stop(void *arg)
nni_mtx_unlock(&ep->mtx);
}
+static const nng_sockaddr *
+sfd_tran_pipe_peer_addr(void *arg)
+{
+ sfd_tran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+sfd_tran_pipe_self_addr(void *arg)
+{
+ sfd_tran_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static int
sfd_tran_pipe_init(void *arg, nni_pipe *npipe)
{
@@ -814,15 +828,18 @@ sfd_tran_pipe_size(void)
}
static nni_sp_pipe_ops sfd_tran_pipe_ops = {
- .p_size = sfd_tran_pipe_size,
- .p_init = sfd_tran_pipe_init,
- .p_fini = sfd_tran_pipe_fini,
- .p_stop = sfd_tran_pipe_stop,
- .p_send = sfd_tran_pipe_send,
- .p_recv = sfd_tran_pipe_recv,
- .p_close = sfd_tran_pipe_close,
- .p_peer = sfd_tran_pipe_peer,
- .p_getopt = sfd_tran_pipe_getopt,
+ .p_size = sfd_tran_pipe_size,
+ .p_init = sfd_tran_pipe_init,
+ .p_fini = sfd_tran_pipe_fini,
+ .p_stop = sfd_tran_pipe_stop,
+ .p_send = sfd_tran_pipe_send,
+ .p_recv = sfd_tran_pipe_recv,
+ .p_close = sfd_tran_pipe_close,
+ .p_peer = sfd_tran_pipe_peer,
+ .p_getopt = sfd_tran_pipe_getopt,
+ .p_peer_addr = sfd_tran_pipe_peer_addr,
+ .p_self_addr = sfd_tran_pipe_self_addr,
+
};
static const nni_option sfd_tran_ep_opts[] = {
diff --git a/src/sp/transport/tcp/tcp.c b/src/sp/transport/tcp/tcp.c
index 3084d3be..1040e7a9 100644
--- a/src/sp/transport/tcp/tcp.c
+++ b/src/sp/transport/tcp/tcp.c
@@ -566,6 +566,20 @@ tcptran_pipe_peer(void *arg)
return (p->peer);
}
+static const nng_sockaddr *
+tcptran_pipe_peer_addr(void *arg)
+{
+ tcptran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->conn));
+}
+
+static const nng_sockaddr *
+tcptran_pipe_self_addr(void *arg)
+{
+ tcptran_pipe *p = arg;
+ return (nng_stream_self_addr(p->conn));
+}
+
static nng_err
tcptran_pipe_getopt(
void *arg, const char *name, void *buf, size_t *szp, nni_type t)
@@ -970,15 +984,17 @@ tcptran_pipe_size(void)
}
static nni_sp_pipe_ops tcptran_pipe_ops = {
- .p_size = tcptran_pipe_size,
- .p_init = tcptran_pipe_init,
- .p_fini = tcptran_pipe_fini,
- .p_stop = tcptran_pipe_stop,
- .p_send = tcptran_pipe_send,
- .p_recv = tcptran_pipe_recv,
- .p_close = tcptran_pipe_close,
- .p_peer = tcptran_pipe_peer,
- .p_getopt = tcptran_pipe_getopt,
+ .p_size = tcptran_pipe_size,
+ .p_init = tcptran_pipe_init,
+ .p_fini = tcptran_pipe_fini,
+ .p_stop = tcptran_pipe_stop,
+ .p_send = tcptran_pipe_send,
+ .p_recv = tcptran_pipe_recv,
+ .p_close = tcptran_pipe_close,
+ .p_peer = tcptran_pipe_peer,
+ .p_peer_addr = tcptran_pipe_peer_addr,
+ .p_self_addr = tcptran_pipe_self_addr,
+ .p_getopt = tcptran_pipe_getopt,
};
static const nni_option tcptran_ep_opts[] = {
diff --git a/src/sp/transport/tls/tls.c b/src/sp/transport/tls/tls.c
index ae613278..4814b29f 100644
--- a/src/sp/transport/tls/tls.c
+++ b/src/sp/transport/tls/tls.c
@@ -145,6 +145,20 @@ tlstran_pipe_fini(void *arg)
nni_mtx_fini(&p->mtx);
}
+static const nng_sockaddr *
+tlstran_pipe_peer_addr(void *arg)
+{
+ tlstran_pipe *p = arg;
+ return (nng_stream_peer_addr(p->tls));
+}
+
+static const nng_sockaddr *
+tlstran_pipe_self_addr(void *arg)
+{
+ tlstran_pipe *p = arg;
+ return (nng_stream_self_addr(p->tls));
+}
+
static void
tlstran_ep_match(tlstran_ep *ep)
{
@@ -975,6 +989,8 @@ static nni_sp_pipe_ops tlstran_pipe_ops = {
.p_peer = tlstran_pipe_peer,
.p_getopt = tlstran_pipe_getopt,
.p_peer_cert = tlstran_pipe_peer_cert,
+ .p_peer_addr = tlstran_pipe_peer_addr,
+ .p_self_addr = tlstran_pipe_self_addr,
};
static nni_option tlstran_ep_options[] = {
diff --git a/src/sp/transport/udp/udp.c b/src/sp/transport/udp/udp.c
index 242ca481..7f46a3c9 100644
--- a/src/sp/transport/udp/udp.c
+++ b/src/sp/transport/udp/udp.c
@@ -261,6 +261,20 @@ udp_pipe_start(udp_pipe *p, udp_ep *ep, const nng_sockaddr *sa)
return (udp_add_pipe(ep, p));
}
+static const nng_sockaddr *
+udp_pipe_peer_addr(void *arg)
+{
+ udp_pipe *p = arg;
+ return (&p->peer_addr);
+}
+
+static const nng_sockaddr *
+udp_pipe_self_addr(void *arg)
+{
+ udp_pipe *p = arg;
+ return (&p->ep->self_sa);
+}
+
static void
udp_pipe_fini(void *arg)
{
@@ -1693,15 +1707,17 @@ udp_pipe_size(void)
}
static nni_sp_pipe_ops udp_pipe_ops = {
- .p_size = udp_pipe_size,
- .p_init = udp_pipe_init,
- .p_fini = udp_pipe_fini,
- .p_stop = udp_pipe_stop,
- .p_send = udp_pipe_send,
- .p_recv = udp_pipe_recv,
- .p_close = udp_pipe_close,
- .p_peer = udp_pipe_peer,
- .p_getopt = udp_pipe_getopt,
+ .p_size = udp_pipe_size,
+ .p_init = udp_pipe_init,
+ .p_fini = udp_pipe_fini,
+ .p_stop = udp_pipe_stop,
+ .p_send = udp_pipe_send,
+ .p_recv = udp_pipe_recv,
+ .p_close = udp_pipe_close,
+ .p_peer = udp_pipe_peer,
+ .p_getopt = udp_pipe_getopt,
+ .p_peer_addr = udp_pipe_peer_addr,
+ .p_self_addr = udp_pipe_self_addr,
};
static const nni_option udp_ep_opts[] = {
diff --git a/src/sp/transport/ws/websocket.c b/src/sp/transport/ws/websocket.c
index fe6794c1..dec0ea8e 100644
--- a/src/sp/transport/ws/websocket.c
+++ b/src/sp/transport/ws/websocket.c
@@ -336,6 +336,20 @@ wstran_pipe_peer_cert(void *arg, nng_tls_cert **certp)
return (nng_stream_peer_cert(p->ws, certp));
}
+static const nng_sockaddr *
+wstran_pipe_peer_addr(void *arg)
+{
+ ws_pipe *p = arg;
+ return (nng_stream_peer_addr(p->ws));
+}
+
+static const nng_sockaddr *
+wstran_pipe_self_addr(void *arg)
+{
+ ws_pipe *p = arg;
+ return (nng_stream_self_addr(p->ws));
+}
+
static size_t
wstran_pipe_size(void)
{
@@ -353,6 +367,8 @@ static nni_sp_pipe_ops ws_pipe_ops = {
.p_peer = wstran_pipe_peer,
.p_getopt = wstran_pipe_getopt,
.p_peer_cert = wstran_pipe_peer_cert,
+ .p_peer_addr = wstran_pipe_peer_addr,
+ .p_self_addr = wstran_pipe_self_addr,
};
static void
diff --git a/src/supplemental/http/http_api.h b/src/supplemental/http/http_api.h
index ca13bd09..458621a1 100644
--- a/src/supplemental/http/http_api.h
+++ b/src/supplemental/http/http_api.h
@@ -72,8 +72,8 @@ extern void nni_http_read_chunks(
extern nni_http_req *nni_http_conn_req(nni_http_conn *);
extern nni_http_res *nni_http_conn_res(nni_http_conn *);
-extern nng_err nni_http_peer_addr(nni_http_conn *, const nng_sockaddr **);
-extern nng_err nni_http_self_addr(nni_http_conn *, const nng_sockaddr **);
+extern const nng_sockaddr *nni_http_peer_addr(nni_http_conn *);
+extern const nng_sockaddr *nni_http_self_addr(nni_http_conn *);
// Private to the server. (Used to support session hijacking.)
extern void nni_http_conn_set_ctx(nni_http_conn *, void *);
diff --git a/src/supplemental/http/http_conn.c b/src/supplemental/http/http_conn.c
index bb3a0882..949194a9 100644
--- a/src/supplemental/http/http_conn.c
+++ b/src/supplemental/http/http_conn.c
@@ -160,16 +160,16 @@ nni_http_conn_close(nni_http_conn *conn)
nni_mtx_unlock(&conn->mtx);
}
-nng_err
-nni_http_peer_addr(nni_http_conn *conn, const nng_sockaddr **sap)
+const nng_sockaddr *
+nni_http_peer_addr(nni_http_conn *conn)
{
- return nng_stream_peer_addr(conn->sock, sap);
+ return (nng_stream_peer_addr(conn->sock));
}
-nng_err
-nni_http_self_addr(nni_http_conn *conn, const nng_sockaddr **sap)
+const nng_sockaddr *
+nni_http_self_addr(nni_http_conn *conn)
{
- return nng_stream_self_addr(conn->sock, sap);
+ return (nng_stream_self_addr(conn->sock));
}
// http_buf_pull_up pulls the content of the read buffer back to the
diff --git a/src/supplemental/http/http_public.c b/src/supplemental/http/http_public.c
index edf5e609..c5ace172 100644
--- a/src/supplemental/http/http_public.c
+++ b/src/supplemental/http/http_public.c
@@ -309,23 +309,15 @@ nng_http_read_response(nng_http *conn, nng_aio *aio)
nng_err
nng_http_remote_address(nng_http *conn, nng_sockaddr *addrp)
{
- const nng_sockaddr *sap;
- nng_err rv;
- if ((rv = nni_http_peer_addr(conn, &sap)) == NNG_OK) {
- *addrp = *sap;
- }
- return (rv);
+ *addrp = *(nni_http_peer_addr(conn));
+ return (NNG_OK);
}
nng_err
nng_http_local_address(nng_http *conn, nng_sockaddr *addrp)
{
- const nng_sockaddr *sap;
- nng_err rv;
- if ((rv = nni_http_self_addr(conn, &sap)) == NNG_OK) {
- *addrp = *sap;
- }
- return (rv);
+ *addrp = *(nni_http_self_addr(conn));
+ return (NNG_OK);
}
nng_err
diff --git a/src/supplemental/tls/tls_stream.c b/src/supplemental/tls/tls_stream.c
index 169e8fb0..d0a1fabd 100644
--- a/src/supplemental/tls/tls_stream.c
+++ b/src/supplemental/tls/tls_stream.c
@@ -143,9 +143,9 @@ tls_stream_conn_cb(void *arg)
static nng_err tls_stream_get(
void *arg, const char *name, void *buf, size_t *szp, nni_type t);
-static nng_err tls_stream_self_addr(void *arg, const nng_sockaddr **);
-static nng_err tls_stream_peer_addr(void *arg, const nng_sockaddr **);
-static nng_err tls_stream_peer_cert(void *arg, nng_tls_cert **);
+static const nng_sockaddr *tls_stream_self_addr(void *arg);
+static const nng_sockaddr *tls_stream_peer_addr(void *arg);
+static nng_err tls_stream_peer_cert(void *arg, nng_tls_cert **);
int
nni_tls_stream_alloc(tls_stream **tsp, nng_tls_config *cfg, nng_aio *user_aio)
@@ -241,16 +241,16 @@ tls_stream_get(void *arg, const char *name, void *buf, size_t *szp, nni_type t)
return (nni_getopt(tls_stream_options, name, ts, buf, szp, t));
}
-static nng_err
-tls_stream_self_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+tls_stream_self_addr(void *arg)
{
tls_stream *ts = arg;
- return (nng_stream_self_addr(ts->conn.bio, sap));
+ return (nng_stream_self_addr(ts->conn.bio));
}
-static nng_err
-tls_stream_peer_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+tls_stream_peer_addr(void *arg)
{
tls_stream *ts = arg;
- return (nng_stream_peer_addr(ts->conn.bio, sap));
+ return (nng_stream_peer_addr(ts->conn.bio));
}
diff --git a/src/supplemental/websocket/websocket.c b/src/supplemental/websocket/websocket.c
index 2ff126e3..82cac05e 100644
--- a/src/supplemental/websocket/websocket.c
+++ b/src/supplemental/websocket/websocket.c
@@ -193,8 +193,8 @@ static void ws_str_send(void *, nng_aio *);
static void ws_str_recv(void *, nng_aio *);
static nng_err ws_str_get(void *, const char *, void *, size_t *, nni_type);
static nng_err ws_str_peer_cert(void *, nng_tls_cert **);
-static nng_err ws_str_self_addr(void *, const nng_sockaddr **);
-static nng_err ws_str_peer_addr(void *, const nng_sockaddr **);
+static const nng_sockaddr *ws_str_self_addr(void *);
+static const nng_sockaddr *ws_str_peer_addr(void *);
static void ws_listener_close(void *);
static void ws_listener_free(void *);
@@ -2846,16 +2846,16 @@ ws_str_peer_cert(void *arg, nng_tls_cert **certp)
return (nni_http_conn_peer_cert(ws->http, certp));
}
-static nng_err
-ws_str_peer_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+ws_str_peer_addr(void *arg)
{
nni_ws *ws = arg;
- return (nni_http_peer_addr(ws->http, sap));
+ return (nni_http_peer_addr(ws->http));
}
-static nng_err
-ws_str_self_addr(void *arg, const nng_sockaddr **sap)
+static const nng_sockaddr *
+ws_str_self_addr(void *arg)
{
nni_ws *ws = arg;
- return (nni_http_self_addr(ws->http, sap));
+ return (nni_http_self_addr(ws->http));
}
diff --git a/src/supplemental/websocket/websocket_test.c b/src/supplemental/websocket/websocket_test.c
index 66c9617e..ffce8019 100644
--- a/src/supplemental/websocket/websocket_test.c
+++ b/src/supplemental/websocket/websocket_test.c
@@ -184,8 +184,8 @@ test_websocket_conn_props(void)
NUTS_TRUE(c2 != NULL);
// Let's compare the peer addresses
- NUTS_PASS(nng_stream_self_addr(c1, &sap1));
- NUTS_PASS(nng_stream_peer_addr(c2, &sap2));
+ 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);