diff options
| author | Garrett D'Amore <garrett@damore.org> | 2025-10-25 11:43:59 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2025-10-25 20:11:51 -0700 |
| commit | cc419cf01d9c060a3bd3fc318f9b9bc9e736dae9 (patch) | |
| tree | 2f26cd782a54bed35e03b451003deee5df701983 /src/core/stream.c | |
| parent | ebc479a61b8f2d2f3a6d846d18debfb9022e6010 (diff) | |
| download | nng-cc419cf01d9c060a3bd3fc318f9b9bc9e736dae9.tar.gz nng-cc419cf01d9c060a3bd3fc318f9b9bc9e736dae9.tar.bz2 nng-cc419cf01d9c060a3bd3fc318f9b9bc9e736dae9.zip | |
Add stream direct address functions for socket addresses.
This is going to be used to facilitate debugging, and eliminate some
inconveniences around these things. We plan to move the pipe functions
to use these directly, hopefully moving away from the pipe_getopt hack.
(The transport API will need to grow these. For now this is just the
streams.)
Diffstat (limited to 'src/core/stream.c')
| -rw-r--r-- | src/core/stream.c | 42 |
1 files changed, 41 insertions, 1 deletions
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 |
