This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat-native.git
The following commit(s) were added to refs/heads/main by this push: new 73c347b Revert "Simplify Address#getInfo() native implementation" 73c347b is described below commit 73c347b8d2565a87e5a5d98bfa1f89eef71c6211 Author: Michael Osipov <micha...@apache.org> AuthorDate: Wed May 26 11:31:18 2021 +0200 Revert "Simplify Address#getInfo() native implementation" This reverts commit 420cd1c159e4f27bb5d2a873dbd1fb7ea5d3473c. --- native/src/address.c | 42 ++++++++++++++++++++++++++++++++++++++- xdocs/miscellaneous/changelog.xml | 5 ----- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/native/src/address.c b/native/src/address.c index fb17431..87a8771 100644 --- a/native/src/address.c +++ b/native/src/address.c @@ -23,19 +23,59 @@ TCN_IMPLEMENT_CALL(jlong, Address, info)(TCN_STDARGS, { apr_pool_t *p = J2P(pool, apr_pool_t *); TCN_ALLOC_CSTRING(hostname); + char *sp = NULL; + int scope_id = 0; apr_sockaddr_t *sa = NULL; + apr_sockaddr_t *sl = NULL; apr_int32_t f; UNREFERENCED(o); GET_S_FAMILY(f, family); +#if APR_HAVE_IPV6 + if (hostname) { + /* XXX: This only works for real scope_id's + */ + if ((sp = strchr(J2S(hostname), '%'))) { + *sp++ = '\0'; + scope_id = atoi(sp); + } + } +#endif TCN_THROW_IF_ERR(apr_sockaddr_info_get(&sa, J2S(hostname), f, (apr_port_t)port, (apr_int32_t)flags, p), sa); + sl = sa; + /* + * apr_sockaddr_info_get may return several address so this is not + * go to work in some cases (but as least it works for Linux) + * XXX: with AP_ENABLE_V4_MAPPED it is going to work otherwise it won't. + */ +#if APR_HAVE_IPV6 + if (hostname == NULL) { + /* Try all address using IPV6 one */ + while (sl) { + if (sl->family == APR_INET6) + break; /* Done */ + sl = sl->next; + } + /* If we don't find an IPv6 address, use the original one */ + if (sl == NULL) { + sl = sa; + } + } + if (sp) { + /* Set the provided scope id + * APR lack the api for setting this directly so lets presume + * the sin6_scope_id is present everywhere + */ + sl->sa.sin6.sin6_scope_id = scope_id; + } +#endif cleanup: TCN_FREE_CSTRING(hostname); - return P2J(sa); + return P2J(sl); } TCN_IMPLEMENT_CALL(jstring, Address, getnameinfo)(TCN_STDARGS, diff --git a/xdocs/miscellaneous/changelog.xml b/xdocs/miscellaneous/changelog.xml index c735980..9f35b6e 100644 --- a/xdocs/miscellaneous/changelog.xml +++ b/xdocs/miscellaneous/changelog.xml @@ -35,11 +35,6 @@ </p> </section> <section name="Changes in 1.2.29"> - <changelog> - <update> - Simplify <code>Address.getInfo()<code> native implementation. (michaelo) - </update> - </changelog> </section> <section name="Changes in 1.2.28"> <changelog> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org