aboutsummaryrefslogtreecommitdiff
path: root/src/core/stream.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2025-10-25 11:43:59 -0700
committerGarrett D'Amore <garrett@damore.org>2025-10-25 20:11:51 -0700
commitcc419cf01d9c060a3bd3fc318f9b9bc9e736dae9 (patch)
tree2f26cd782a54bed35e03b451003deee5df701983 /src/core/stream.c
parentebc479a61b8f2d2f3a6d846d18debfb9022e6010 (diff)
downloadnng-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.c42
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