aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/dialer.c6
-rw-r--r--src/core/dialer.h9
-rw-r--r--src/core/listener.c20
-rw-r--r--src/core/listener.h9
-rw-r--r--src/nng.c27
5 files changed, 55 insertions, 16 deletions
diff --git a/src/core/dialer.c b/src/core/dialer.c
index 5dac7f71..27020b37 100644
--- a/src/core/dialer.c
+++ b/src/core/dialer.c
@@ -562,6 +562,12 @@ nni_dialer_set_tls(nni_dialer *d, nng_tls_config *cfg)
return (d->d_ops.d_set_tls(d->d_data, cfg));
}
+nng_url *
+nni_dialer_url(nni_dialer *d)
+{
+ return (&d->d_url);
+}
+
void
nni_dialer_add_stat(nni_dialer *d, nni_stat_item *item)
{
diff --git a/src/core/dialer.h b/src/core/dialer.h
index 97a24e4a..19b39cf2 100644
--- a/src/core/dialer.h
+++ b/src/core/dialer.h
@@ -25,9 +25,10 @@ extern int nni_dialer_setopt(
nni_dialer *, const char *, const void *, size_t, nni_type);
extern int nni_dialer_getopt(
nni_dialer *, const char *, void *, size_t *, nni_type);
-extern int nni_dialer_get_tls(nni_dialer *, nng_tls_config **);
-extern int nni_dialer_set_tls(nni_dialer *, nng_tls_config *);
-extern void nni_dialer_add_stat(nni_dialer *, nni_stat_item *);
-extern void nni_dialer_bump_error(nni_dialer *, int);
+extern int nni_dialer_get_tls(nni_dialer *, nng_tls_config **);
+extern int nni_dialer_set_tls(nni_dialer *, nng_tls_config *);
+extern nng_url *nni_dialer_url(nni_dialer *);
+extern void nni_dialer_add_stat(nni_dialer *, nni_stat_item *);
+extern void nni_dialer_bump_error(nni_dialer *, int);
#endif // CORE_DIALER_H
diff --git a/src/core/listener.c b/src/core/listener.c
index 3ef142c2..9e0025fc 100644
--- a/src/core/listener.c
+++ b/src/core/listener.c
@@ -384,9 +384,9 @@ listener_accept_start(nni_listener *l)
int
nni_listener_start(nni_listener *l, int flags)
{
- int rv;
- char *url;
- size_t sz;
+ int rv;
+ const nng_url *url;
+ char us[NNG_MAXADDRSTRLEN];
NNI_ARG_UNUSED(flags);
if (nni_atomic_flag_test_and_set(&l->l_started)) {
@@ -401,12 +401,10 @@ nni_listener_start(nni_listener *l, int flags)
return (rv);
}
// collect the URL which may have changed (e.g. binding to port 0)
- sz = sizeof(url);
- (void) (nni_listener_getopt(
- l, NNG_OPT_URL, &url, &sz, NNI_TYPE_STRING));
+ url = nni_listener_url(l);
+ nng_url_sprintf(us, sizeof(us), url);
nng_log_info("NNG-LISTEN", "Starting listener for socket<%u> on %s",
- nni_sock_id(l->l_sock), url);
- nni_strfree(url);
+ nni_sock_id(l->l_sock), us);
listener_accept_start(l);
@@ -509,6 +507,12 @@ nni_listener_set_tls(nni_listener *l, nng_tls_config *cfg)
return (l->l_ops.l_set_tls(l->l_data, cfg));
}
+nng_url *
+nni_listener_url(nni_listener *l)
+{
+ return (&l->l_url);
+}
+
void
nni_listener_add_stat(nni_listener *l, nni_stat_item *item)
{
diff --git a/src/core/listener.h b/src/core/listener.h
index 67c80be0..74ca0a0b 100644
--- a/src/core/listener.h
+++ b/src/core/listener.h
@@ -25,9 +25,10 @@ extern int nni_listener_setopt(
nni_listener *, const char *, const void *, size_t, nni_type);
extern int nni_listener_getopt(
nni_listener *, const char *, void *, size_t *, nni_type);
-extern int nni_listener_get_tls(nni_listener *, nng_tls_config **);
-extern int nni_listener_set_tls(nni_listener *, nng_tls_config *);
-extern void nni_listener_add_stat(nni_listener *, nni_stat_item *);
-extern void nni_listener_bump_error(nni_listener *, int);
+extern int nni_listener_get_tls(nni_listener *, nng_tls_config **);
+extern int nni_listener_set_tls(nni_listener *, nng_tls_config *);
+extern nng_url *nni_listener_url(nni_listener *);
+extern void nni_listener_add_stat(nni_listener *, nni_stat_item *);
+extern void nni_listener_bump_error(nni_listener *, int);
#endif // CORE_LISTENER_H
diff --git a/src/nng.c b/src/nng.c
index 9ed2a0ab..b25701a3 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -950,6 +950,33 @@ nng_listener_set_tls(nng_listener id, nng_tls_config *cfg)
nni_listener_rele(l);
return (rv);
}
+
+int
+nng_dialer_get_url(nng_dialer id, const nng_url **urlp)
+{
+ int rv;
+ nni_dialer *d;
+ if ((rv = nni_dialer_find(&d, id.id)) != 0) {
+ return (rv);
+ }
+ *urlp = nni_dialer_url(d);
+ nni_dialer_rele(d);
+ return (0);
+}
+
+int
+nng_listener_get_url(nng_listener id, const nng_url **urlp)
+{
+ int rv;
+ nni_listener *l;
+ if ((rv = nni_listener_find(&l, id.id)) != 0) {
+ return (rv);
+ }
+ *urlp = nni_listener_url(l);
+ nni_listener_rele(l);
+ return (0);
+}
+
int
nng_dialer_close(nng_dialer did)
{