diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/pipe.c | 13 | ||||
| -rw-r--r-- | src/core/pipe.h | 3 | ||||
| -rw-r--r-- | src/core/socket.c | 21 | ||||
| -rw-r--r-- | src/core/stream.c | 42 | ||||
| -rw-r--r-- | src/core/stream.h | 2 |
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 **); }; |
