diff options
Diffstat (limited to 'src/core')
| -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 |
4 files changed, 39 insertions, 25 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 **); }; |
