diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-11-21 23:10:16 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2024-11-21 23:10:16 -0800 |
| commit | 58537035fda61d18d7dab19a93348dcd1b8f3d41 (patch) | |
| tree | 34845ae5f7001ab74841cfbcfa6402b28e84f505 | |
| parent | c2a5206ad26624ffc3d5f5260317067abb48a3d6 (diff) | |
| download | nng-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.md | 2 | ||||
| -rw-r--r-- | include/nng/nng.h | 10 | ||||
| -rw-r--r-- | src/core/dialer.c | 6 | ||||
| -rw-r--r-- | src/core/dialer.h | 9 | ||||
| -rw-r--r-- | src/core/listener.c | 20 | ||||
| -rw-r--r-- | src/core/listener.h | 9 | ||||
| -rw-r--r-- | src/nng.c | 27 |
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 @@ -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) { |
