Skip to content

Commit

Permalink
Revert "Simplify Address#getInfo() native implementation"
Browse files Browse the repository at this point in the history
This reverts commit 420cd1c.
  • Loading branch information
michael-o committed May 26, 2021
1 parent 420cd1c commit 73c347b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
42 changes: 41 additions & 1 deletion native/src/address.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
5 changes: 0 additions & 5 deletions xdocs/miscellaneous/changelog.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit 73c347b

Please sign in to comment.