RFR: 8272215: Add InetAddress methods for parsing IP address literals
Daniel Fuchs
dfuchs at openjdk.org
Mon Sep 18 13:46:39 UTC 2023
On Sun, 17 Sep 2023 13:38:08 GMT, Aleksei Efimov <aefimov at openjdk.org> wrote:
> ### Summary
>
> The changes in this PR add new API to `java.net.InetAddress`, `java.net.Inet4Address`, and
> `java.net.Inet6Address` classes to parse IP address literals:
> ```
> method public static java.net.InetAddress java.net.InetAddress.ofLiteral(java.lang.String)
> method public static java.net.Inet4Address java.net.Inet4Address.ofLiteral(java.lang.String)
> method public static java.net.Inet6Address java.net.Inet6Address.ofLiteral(java.lang.String)
> ```
>
> ### How new methods differ from existing ones
>
> These methods differ from `InetAddress.getByName` and `InetAddress.getAllByName` in the following ways:
> 1. Address literal strings are not forwarded to the system-wide resolver - they are only parsed and validated by the internal methods.
> 2. No reverse lookup is performed to resolve a hostname for the supplied address literal - the `InetAddress[46 ]` instances returned by the new `ofLiteral` API has no hostname set.
> 3. Each `ofLiteral` static method returns addresses of its class only. It gives the ability to check if an IP address literal is of a specific address type.
>
> ### The list of noteworthy changes
> - `IPv4-mapped IPv6 address` and `IPv4-compatible IPv6 addresses` require some special handling in the new API to implement all supported IP address types.
> - All address literal parsing code has been moved from `InetAddress.getAllByName` to address type-specific `Inet4Address.parseAddressString` and `Inet6Address.parseAddressString` methods.
> - The text with scoped IPv6 addresses architecture draft IETF file has been replaced from `[draft-ietf-ipngwg-scoping-arch-04.txt]` to reference `RFC 4007: IPv6 Scoped Address Architecture`. The "RFC 4007" has been also added as `@ spec` into Inet6Address class-level Javadoc.
>
> ### Testing
>
> `jdk-tier1`, `jdk-tier2`, and `jdk-tier3` test sets show no failure with the changes.
>
> `java/net` JCK tests are failing with new methods added failure (CSR is planned for this change):
>
> Added Methods
> -------------
>
> java.net.Inet4Address: method public static java.net.Inet4Address java.net.Inet4Address.ofLiteral(java.lang.String)
> java.net.Inet6Address: method public static java.net.Inet6Address java.net.Inet6Address.ofLiteral(java.lang.String)
> java.net.InetAddress: method public static java.net.InetAddress java.net.InetAddress.ofLiteral(java.lang.String)
The main motivation here is to have a method that will create an InetAddress from an IP literal, and throw if the string given as parameters doesn't correspond to an IP literal. By comparison, `getByName` will try to parse the given name as an IP literal, and if it can't parse it as an IP literal, pass it to the resolver. The new method will never invoke the resolver and throw in that case.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/15775#issuecomment-1723443367
More information about the net-dev
mailing list