diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-03-04 17:04:11 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-03-04 19:42:17 -0800 |
| commit | 23a38d766780f4749945d84316b4e0a71e707b15 (patch) | |
| tree | 336cf1bfc7c7e32999653a4c4014232d2b735a3e /src/transport/tls | |
| parent | 0094f83a9e3b54d6cbfc1ea1885036366b87b991 (diff) | |
| download | nng-23a38d766780f4749945d84316b4e0a71e707b15.tar.gz nng-23a38d766780f4749945d84316b4e0a71e707b15.tar.bz2 nng-23a38d766780f4749945d84316b4e0a71e707b15.zip | |
fixes #262 NNG_OPT_URL should be resolved
This causes TCP, TLS, and ZT endpoints to resolve any
wildcards, and even IP addresses, when reporting the listen
URL. The dialer URL is reported unresolved. Test cases
for this are added as well, and nngcat actually reports this
if --verbose is supplied.
Diffstat (limited to 'src/transport/tls')
| -rw-r--r-- | src/transport/tls/tls.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index f9de3367..cf849373 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -61,7 +61,9 @@ struct nni_tls_ep { nni_aio * user_aio; nni_mtx mtx; nng_tls_config * cfg; + nng_sockaddr bsa; nni_url * url; + int mode; }; static void nni_tls_pipe_send_cb(void *); @@ -597,7 +599,8 @@ nni_tls_ep_init(void **epp, nni_url *url, nni_sock *sock, int mode) return (NNG_ENOMEM); } nni_mtx_init(&ep->mtx); - ep->url = url; + ep->url = url; + ep->mode = mode; if (((rv = nni_plat_tcp_ep_init(&ep->tep, &lsa, &rsa, mode)) != 0) || ((rv = nni_tls_config_init(&ep->cfg, tlsmode)) != 0) || @@ -638,7 +641,7 @@ nni_tls_ep_bind(void *arg) int rv; nni_mtx_lock(&ep->mtx); - rv = nni_plat_tcp_ep_listen(ep->tep); + rv = nni_plat_tcp_ep_listen(ep->tep, &ep->bsa); nni_mtx_unlock(&ep->mtx); return (rv); @@ -747,6 +750,22 @@ nni_tls_ep_connect(void *arg, nni_aio *aio) } static int +nni_tls_ep_getopt_url(void *arg, void *v, size_t *szp) +{ + nni_tls_ep *ep = arg; + char ustr[128]; + char ipstr[48]; // max for IPv6 addresses including [] + char portstr[6]; // max for 16-bit port + + if (ep->mode == NNI_EP_MODE_DIAL) { + return (nni_getopt_str(ep->url->u_rawurl, v, szp)); + } + nni_plat_tcp_ntop(&ep->bsa, ipstr, portstr); + snprintf(ustr, sizeof(ustr), "tls+tcp://%s:%s", ipstr, portstr); + return (nni_getopt_str(ustr, v, szp)); +} + +static int nni_tls_ep_setopt_recvmaxsz(void *arg, const void *v, size_t sz) { nni_tls_ep *ep = arg; @@ -907,6 +926,11 @@ static nni_tran_ep_option nni_tls_ep_options[] = { .eo_setopt = nni_tls_ep_setopt_linger, }, { + .eo_name = NNG_OPT_URL, + .eo_getopt = nni_tls_ep_getopt_url, + .eo_setopt = NULL, + }, + { .eo_name = NNG_OPT_TLS_CONFIG, .eo_getopt = tls_getopt_config, .eo_setopt = tls_setopt_config, |
