### 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)

-------------

Commit messages:
 - 8272215: Add InetAddress methods for parsing IP address literals

Changes: https://git.openjdk.org/jdk/pull/15775/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=15775&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8272215
  Stats: 514 lines in 6 files changed: 437 ins; 57 del; 20 mod
  Patch: https://git.openjdk.org/jdk/pull/15775.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/15775/head:pull/15775

PR: https://git.openjdk.org/jdk/pull/15775

Reply via email to