diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/pipe.c | 33 | ||||
| -rw-r--r-- | src/core/pipe.h | 2 | ||||
| -rw-r--r-- | src/core/stream.c | 25 | ||||
| -rw-r--r-- | src/core/stream.h | 4 | ||||
| -rw-r--r-- | src/platform/posix/posix_ipcconn.c | 7 | ||||
| -rw-r--r-- | src/platform/posix/posix_sockfd.c | 7 | ||||
| -rw-r--r-- | src/platform/posix/posix_tcpconn.c | 14 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcconn.c | 7 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpconn.c | 12 | ||||
| -rw-r--r-- | src/sp/transport.h | 6 | ||||
| -rw-r--r-- | src/sp/transport/dtls/dtls.c | 15 | ||||
| -rw-r--r-- | src/sp/transport/inproc/inproc.c | 55 | ||||
| -rw-r--r-- | src/sp/transport/ipc/ipc.c | 34 | ||||
| -rw-r--r-- | src/sp/transport/socket/sockfd.c | 35 | ||||
| -rw-r--r-- | src/sp/transport/tcp/tcp.c | 34 | ||||
| -rw-r--r-- | src/sp/transport/tls/tls.c | 16 | ||||
| -rw-r--r-- | src/sp/transport/udp/udp.c | 34 | ||||
| -rw-r--r-- | src/sp/transport/ws/websocket.c | 16 | ||||
| -rw-r--r-- | src/supplemental/http/http_api.h | 4 | ||||
| -rw-r--r-- | src/supplemental/http/http_conn.c | 12 | ||||
| -rw-r--r-- | src/supplemental/http/http_public.c | 16 | ||||
| -rw-r--r-- | src/supplemental/tls/tls_stream.c | 18 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket.c | 16 | ||||
| -rw-r--r-- | src/supplemental/websocket/websocket_test.c | 4 |
24 files changed, 270 insertions, 156 deletions
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); |
