aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-21 23:10:16 -0800
committerGarrett D'Amore <garrett@damore.org>2024-11-21 23:10:16 -0800
commit58537035fda61d18d7dab19a93348dcd1b8f3d41 (patch)
tree34845ae5f7001ab74841cfbcfa6402b28e84f505
parentc2a5206ad26624ffc3d5f5260317067abb48a3d6 (diff)
downloadnng-58537035fda61d18d7dab19a93348dcd1b8f3d41.tar.gz
nng-58537035fda61d18d7dab19a93348dcd1b8f3d41.tar.bz2
nng-58537035fda61d18d7dab19a93348dcd1b8f3d41.zip
Introduce nng_listener_get_url and nng_dialer_get_url.
This is intended to replace NNG_OPT_URL.
-rw-r--r--docs/ref/xref.md2
-rw-r--r--include/nng/nng.h10
-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
7 files changed, 62 insertions, 21 deletions
diff --git a/docs/ref/xref.md b/docs/ref/xref.md
index 728628a4..d36f96e8 100644
--- a/docs/ref/xref.md
+++ b/docs/ref/xref.md
@@ -96,6 +96,8 @@
[`nng_aio_set_output`]: /TODO.md
[`nng_send`]: /TODO.md
[`nng_recv`]: /TODO.md
+[`nng_listener_get_url`]: /TODO.md
+[`nng_dialer_get_url`]: /TODO.md
<!-- Macros -->
diff --git a/include/nng/nng.h b/include/nng/nng.h
index 49b5da05..bd6b526d 100644
--- a/include/nng/nng.h
+++ b/include/nng/nng.h
@@ -113,6 +113,9 @@ typedef struct nng_msg nng_msg;
typedef struct nng_stat nng_stat;
typedef struct nng_aio nng_aio;
+// URL structure.
+typedef struct nng_url nng_url;
+
// For some transports, we need TLS configuration, including certificates
// and so forth. A TLS configuration cannot be changed once it is in use.
typedef struct nng_tls_config nng_tls_config;
@@ -362,6 +365,7 @@ NNG_DECL int nng_dialer_get_ptr(nng_dialer, const char *, void **);
NNG_DECL int nng_dialer_get_ms(nng_dialer, const char *, nng_duration *);
NNG_DECL int nng_dialer_get_addr(nng_dialer, const char *, nng_sockaddr *);
NNG_DECL int nng_dialer_get_tls(nng_dialer, nng_tls_config **);
+NNG_DECL int nng_dialer_get_url(nng_dialer id, const nng_url **urlp);
NNG_DECL int nng_listener_set_bool(nng_listener, const char *, bool);
NNG_DECL int nng_listener_set_int(nng_listener, const char *, int);
@@ -373,6 +377,7 @@ NNG_DECL int nng_listener_set_ms(nng_listener, const char *, nng_duration);
NNG_DECL int nng_listener_set_addr(
nng_listener, const char *, const nng_sockaddr *);
NNG_DECL int nng_listener_set_tls(nng_listener, nng_tls_config *);
+NNG_DECL int nng_listener_get_url(nng_listener id, const nng_url **urlp);
NNG_DECL int nng_listener_get_bool(nng_listener, const char *, bool *);
NNG_DECL int nng_listener_get_int(nng_listener, const char *, int *);
@@ -1084,11 +1089,6 @@ enum nng_errno_enum {
NNG_ETRANERR = 0x20000000
};
-// URL support. We frequently want to process a URL, and these methods
-// give us a convenient way of doing so.
-
-typedef struct nng_url nng_url;
-
// nng_url_parse parses a URL string into a structured form.
// Note that the u_port member will be filled out with a numeric
// port if one isn't specified and a default port is appropriate for
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)
{