aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/pipe.c13
-rw-r--r--src/core/pipe.h3
-rw-r--r--src/core/socket.c21
-rw-r--r--src/core/stream.c42
-rw-r--r--src/core/stream.h2
5 files changed, 71 insertions, 10 deletions
diff --git a/src/core/pipe.c b/src/core/pipe.c
index db2c4d41..baa2d6f9 100644
--- a/src/core/pipe.c
+++ b/src/core/pipe.c
@@ -421,7 +421,7 @@ nni_pipe_bump_error(nni_pipe *p, int err)
}
char *
-nni_pipe_peer_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN])
+nni_pipe_peer_str_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN])
{
nng_sockaddr sa;
size_t sz = sizeof(sa);
@@ -431,6 +431,17 @@ nni_pipe_peer_addr(nni_pipe *p, char 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);
+ return (buf);
+}
+
nng_err
nni_pipe_peer_cert(nni_pipe *p, nng_tls_cert **certp)
{
diff --git a/src/core/pipe.h b/src/core/pipe.h
index 4ed61660..6ef3c206 100644
--- a/src/core/pipe.h
+++ b/src/core/pipe.h
@@ -69,7 +69,8 @@ extern void nni_pipe_bump_rx(nni_pipe *, size_t);
extern void nni_pipe_bump_tx(nni_pipe *, size_t);
extern void nni_pipe_bump_error(nni_pipe *, int);
-extern char *nni_pipe_peer_addr(nni_pipe *p, char buf[NNG_MAXADDRSTRLEN]);
+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]);
extern int nni_pipe_alloc_dialer(void **, nni_dialer *);
extern int nni_pipe_alloc_listener(void **, nni_listener *);
diff --git a/src/core/socket.c b/src/core/socket.c
index 7112014e..a7633c9e 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -1301,7 +1301,8 @@ dialer_start_pipe(nni_dialer *d, nni_pipe *p)
char addr[NNG_MAXADDRSTRLEN];
nng_log_debug("NNG-PIPEREJECT",
"Pipe on socket<%u> from %s rejected by callback",
- nni_pipe_sock_id(p), nni_pipe_peer_addr(p, addr));
+ nni_pipe_sock_id(p),
+ nni_pipe_peer_str_addr(p, addr));
}
nni_pipe_rele(p);
return;
@@ -1323,10 +1324,13 @@ dialer_start_pipe(nni_dialer *d, nni_pipe *p)
#endif
nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_POST);
if (nng_log_get_level() >= NNG_LOG_DEBUG) {
- char addr[NNG_MAXADDRSTRLEN];
+ char peer_addr[NNG_MAXADDRSTRLEN];
+ char self_addr[NNG_MAXADDRSTRLEN];
nng_log_debug("NNG-CONNECT",
- "Connected pipe<%u> on socket<%u> to %s", nni_pipe_id(p),
- nni_sock_id(s), nni_pipe_peer_addr(p, addr));
+ "Connected pipe<%u> on socket<%u> at %s to %s",
+ nni_pipe_id(p), nni_sock_id(s),
+ nni_pipe_self_str_addr(p, self_addr),
+ nni_pipe_peer_str_addr(p, peer_addr));
}
nni_pipe_rele(p);
}
@@ -1429,10 +1433,13 @@ listener_start_pipe(nni_listener *l, nni_pipe *p)
#endif
nni_pipe_run_cb(p, NNG_PIPE_EV_ADD_POST);
if (nng_log_get_level() >= NNG_LOG_DEBUG) {
- char addr[NNG_MAXADDRSTRLEN];
+ char peer_addr[NNG_MAXADDRSTRLEN];
+ char self_addr[NNG_MAXADDRSTRLEN];
nng_log_debug("NNG-ACCEPT",
- "Accepted pipe<%u> on socket<%u> from %s", nni_pipe_id(p),
- nni_sock_id(s), nni_pipe_peer_addr(p, addr));
+ "Accepted pipe<%u> on socket<%u> at %s from %s",
+ nni_pipe_id(p), nni_sock_id(s),
+ nni_pipe_self_str_addr(p, self_addr),
+ nni_pipe_peer_str_addr(p, peer_addr));
}
// the socket now "owns" the pipe, and a pipe close should immediately
diff --git a/src/core/stream.c b/src/core/stream.c
index 5a5159df..6c7ad5f0 100644
--- a/src/core/stream.c
+++ b/src/core/stream.c
@@ -133,6 +133,15 @@ void
nng_stream_free(nng_stream *s)
{
if (s != NULL) {
+ // These are mandatory - we have checks here for completeness.
+ NNI_ASSERT(s->s_close != NULL);
+ NNI_ASSERT(s->s_stop != NULL);
+ NNI_ASSERT(s->s_send != NULL);
+ NNI_ASSERT(s->s_recv != NULL);
+ NNI_ASSERT(s->s_free != NULL);
+ NNI_ASSERT(s->s_peer_addr != NULL);
+ NNI_ASSERT(s->s_self_addr != NULL);
+
s->s_free(s);
}
}
@@ -155,6 +164,15 @@ nng_err
nni_stream_get(
nng_stream *s, const char *nm, void *data, size_t *szp, nni_type t)
{
+ // TODO: eventually this needs die
+ if ((strcmp(nm, NNG_OPT_REMADDR) == 0) ||
+ (strcmp(nm, NNG_OPT_LOCADDR) == 0)) {
+ if (t != NNI_TYPE_SOCKADDR) {
+ return (NNG_EBADTYPE);
+ }
+ return (nng_stream_get_addr(s, nm, (nng_sockaddr *) data));
+ }
+
return (s->s_get(s, nm, data, szp, t));
}
@@ -382,7 +400,29 @@ nng_stream_get_ms(nng_stream *s, const char *n, nng_duration *v)
nng_err
nng_stream_get_addr(nng_stream *s, const char *n, nng_sockaddr *v)
{
- return (nni_stream_get(s, n, v, NULL, NNI_TYPE_SOCKADDR));
+ const nng_sockaddr *sap;
+ int rv = NNG_ENOTSUP;
+ if (strcmp(n, NNG_OPT_LOCADDR) == 0) {
+ rv = nng_stream_self_addr(s, &sap);
+ } else if (strcmp(n, NNG_OPT_REMADDR) == 0) {
+ rv = nng_stream_peer_addr(s, &sap);
+ }
+ if (rv == NNG_OK) {
+ *v = *sap;
+ }
+ return (rv);
+}
+
+nng_err
+nng_stream_self_addr(nng_stream *s, const nng_sockaddr **sa)
+{
+ return (s->s_self_addr(s, &*sa));
+}
+
+nng_err
+nng_stream_peer_addr(nng_stream *s, const nng_sockaddr **sa)
+{
+ return (s->s_peer_addr(s, &*sa));
}
nng_err
diff --git a/src/core/stream.h b/src/core/stream.h
index a9a17ec1..3c87e9c5 100644
--- a/src/core/stream.h
+++ b/src/core/stream.h
@@ -50,6 +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 **);
nng_err (*s_peer_cert)(void *, nng_tls_cert **);
};