Class IPAddress
- java.lang.Object
-
- org.evolvis.tartools.rfc822.IPAddress
-
public class IPAddress extends Object
Represents an IP address (including Legacy IP) for use in eMail on the public Internet (no scoped addresses / IPv6 Zone ID).
The main entry points are either the
from(String)method or both thev6(String)andv4(String)methods. The parser does not trim surrounding whitespace by itself.- Author:
- mirabilos (t.glaser@tarent.de)
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected intaccept()Advances the current position to the next character.InetAddressasIPv4Address()Parses the given address as Legacy IP address (IPv4).InetAddressasIPv6Address()Parses the given address as IP address (IPv6), excluding Zone ID (scope).protected intbra(int deltapos)Jumps to a specified input character position, relative jump.protected intcur()Returns the wide character at the current position.static InetAddressfrom(String address)Parses the passed string as IP address (IPv6 or Legacy IPv4), IPv6 “scope” (Zone ID) excluded.protected intjmp(int pos)Jumps to a specified input character position, absolute jump.protected static <T extends org.evolvis.tartools.rfc822.Parser>
Tof(Class<T> cls, String input)Constructs a parser.static IPAddressof(String address)Creates and initialises a new IP address parser.protected intpeek()Returns the wide character after the one at the current position.protected byte[]pIPv4Address()protected byte[]pIPv6Address()protected intpos()Returns the current input character position.protected Strings()Returns the input string, for use with substring comparisons.protected intskip(ContextlessMatcher matcher)Advances the current position using a regular matcher.protected intskipPeek(LookaheadMatcher matcher)Advances the current position using a peeking matcher.static InetAddressv4(String address)Parses the passed string as Legacy IP address (IPv4).static InetAddressv6(String address)Parses the passed string as IP address (IPv6), excluding Zone ID (scope).
-
-
-
Constructor Detail
-
IPAddress
protected IPAddress(String input)
Private constructor. Use the factory methodof(String)instead.- Parameters:
input- string to analyse
-
-
Method Detail
-
of
public static IPAddress of(String address)
Creates and initialises a new IP address parser.
Use with
asIPv6Address()andasIPv4Address()to validate IPv6 and IPv4 addresses, excluding IPv6 Zone IDs (“scope”).- Parameters:
address- to parse (protocol depends on parser method called)- Returns:
- null if
addresswas null or much too large, the new parser instance otherwise
-
asIPv6Address
public InetAddress asIPv6Address()
Parses the given address as IP address (IPv6), excluding Zone ID (scope).
Note that the returned InetAddress object can be an
Inet4Addressobject, for example if the passed address represents a v4-mapped address; in most cases it will be anInet6Addressobject though. In either case, if the address is no valid IPv6 address (e.g. because it is an IPv4 address), null will be returned instead, so the return value can be used to distinguish the address families, even if a v4-mapped address occurs.Calling the
InetAddress.getHostName()method on the result will return the original string in all cases anyway.- Returns:
InetAddressrepresenting the address, or null on failure (including if an IPv4 address is passed)- See Also:
v6(String),from(String)
-
asIPv4Address
public InetAddress asIPv4Address()
Parses the given address as Legacy IP address (IPv4).
Calling the
InetAddress.getHostName()method on the result will return the original string.- Returns:
InetAddressrepresenting the address, or null on failure (including if an IPv6 address is passed)- See Also:
v4(String),from(String)
-
v6
public static InetAddress v6(String address)
Parses the passed string as IP address (IPv6), excluding Zone ID (scope).
Note that the returned InetAddress object can be an
Inet4Addressobject, for example if the passed address represents a v4-mapped address; in most cases it will be anInet6Addressobject though. In either case, if the address is no valid IPv6 address (e.g. because it is an IPv4 address), null will be returned instead, so the return value can be used to distinguish the address families, even if a v4-mapped address occurs.Calling the
InetAddress.getHostName()method on the result will return the originaladdressstring in all cases anyway.- Parameters:
address- string to parse as IPv6 address- Returns:
InetAddressrepresenting theaddressstring, or null on failure (including if an IPv4 address is passed)- See Also:
of(String),asIPv6Address(),from(String)
-
v4
public static InetAddress v4(String address)
Parses the passed string as Legacy IP address (IPv4).
Calling the
InetAddress.getHostName()method on the result will return the originaladdressstring.- Parameters:
address- to parse as IPv4 address- Returns:
InetAddressrepresenting theaddressstring, or null on failure (including if an IPv6 address is passed)- See Also:
of(String),asIPv4Address(),from(String)
-
from
public static InetAddress from(String address)
Parses the passed string as IP address (IPv6 or Legacy IPv4), IPv6 “scope” (Zone ID) excluded. A valid address is intended to be used on the public Internet, such as for eMail.
Note that the result can be an
Inet4Addressfor both IPv4 and (some) IPv6 addresses such as v4-mapped but will beInet6Addressfor a “regular” IPv6 address — this means this method cannot be used to determine the kind of address passed. Calling theInetAddress.getHostName()method on the result will return the originaladdressstring in all cases anyway.- Parameters:
address- String to parse as IP or Legacy IP address- Returns:
InetAddressrepresentingaddress, or null on failure- See Also:
v6(String),v4(String)
-
pIPv4Address
protected byte[] pIPv4Address()
-
pIPv6Address
protected byte[] pIPv6Address()
-
of
protected static <T extends org.evolvis.tartools.rfc822.Parser> T of(Class<T> cls, String input)
Constructs a parser. Intended to be used by subclasses from static factory methods *only*; see
Path.of(String)for an example.- Type Parameters:
T- subclass of Parser to construct- Parameters:
cls- subclass of Parser to constructinput- user-providedStringto parse- Returns:
- null if input was null or too large, the new parser subclass instance otherwise
-
jmp
protected final int jmp(int pos)
Jumps to a specified input character position, absolute jump.- Parameters:
pos- to jump to- Returns:
- the codepoint at that position
- Throws:
IndexOutOfBoundsException- if pos is not in or just past the input
-
bra
protected final int bra(int deltapos)
Jumps to a specified input character position, relative jump.- Parameters:
deltapos- to add to the current position- Returns:
- the codepoint at that position
- Throws:
IndexOutOfBoundsException- if pos is not in or just past the input
-
pos
protected final int pos()
Returns the current input character position. Useful for saving and restoring (withjmp(int)) and for error messages.- Returns:
- position
-
s
protected final String s()
Returns the input string, for use with substring comparisons. (This is safe because Java™ strings are immutable.)- Returns:
- String input
-
cur
protected final int cur()
Returns the wide character at the current position.- Returns:
- UCS-4 codepoint, or
-1if end of input is reached
-
peek
protected final int peek()
Returns the wide character after the one at the current position.- Returns:
- UCS-4 codepoint, or
-1if end of input is reached
-
accept
protected final int accept()
Advances the current position to the next character.- Returns:
- codepoint of the next character, or
-1if end of input is reached - Throws:
IndexOutOfBoundsException- if end of input was already reached
-
skipPeek
protected final int skipPeek(LookaheadMatcher matcher)
Advances the current position using a peeking matcher. Continues as long as thematcherreturns true and end of input is not yet reached.- Parameters:
matcher-LookaheadMatchercalled withcur()andpeek()as arguments to determine whether to skip ahead- Returns:
- codepoint of the first character for which the matcher returned false,
or
-1if end of input is reached - See Also:
skip(ContextlessMatcher)
-
skip
protected final int skip(ContextlessMatcher matcher)
Advances the current position using a regular matcher. Continues as long as thematcherreturns true and end of input is not yet reached.- Parameters:
matcher-ContextlessMatchercalled with justcur()as argument to determine whether to skip ahead- Returns:
- codepoint of the first character for which the matcher returned false,
or
-1if end of input is reached - See Also:
skipPeek(LookaheadMatcher)
-
-