aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-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
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 **);
};