Class IPAddress


  • public class IPAddress
    extends Object
    Represents an IP address (including Legacy IP) for use in eMail on public Internet (no scoped addresses / IPv6 Zone ID) The main entry points are the v6(String) and v4(String) methods.
    Author:
    mirabilos (t.glaser@tarent.de)
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected IPAddress​(String input)
      Private constructor, use the factory method of(String) instead
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected int accept()
      Advances the current position to the next character
      InetAddress asIPv4Address()
      Parses the passed address as Legacy IP address (IPv4).
      InetAddress asIPv6Address()
      Parses the passed address as IP address (IPv6).
      protected int bra​(int deltapos)
      Jumps to a specified input character position, relative jump
      protected int cur()
      Returns the wide character at the current position
      protected int jmp​(int pos)
      Jumps to a specified input character position, absolute jump
      protected static <T extends org.evolvis.tartools.rfc822.Parser>
      T
      of​(Class<T> cls, String input)
      Constructs a parser.
      static IPAddress of​(String address)
      Creates and initialises a new parser for IPv6 and IPv4 addresses (excluding IPv6 Zone ID) to use by asIPv6Address() and asIPv4Address().
      protected int peek()
      Returns the wide character after the one at the current position
      protected byte[] pIPv4Address()  
      protected byte[] pIPv6Address()  
      protected int pos()
      Returns the current input character position, for saving and restoring (with jmp(int)) and for error messages
      protected String s()
      Returns the input string, for use with substring comparisons (this is safe because Java™ strings are immutable)
      protected int skip​(BiFunction<Integer,​Integer,​Boolean> matcher)
      Advances the current position as long as the matcher returns true and end of input is not yet reached
      protected int skip​(Function<Integer,​Boolean> matcher)
      Advances the current position as long as the matcher returns true and end of input is not yet reached; cf.
      static InetAddress v4​(String address)
      Parses the passed address as Legacy IP address (IPv4).
      static InetAddress v6​(String address)
      Parses the passed address as IP address (IPv6), excluding Zone ID.
    • Constructor Detail

      • IPAddress

        protected IPAddress​(String input)
        Private constructor, use the factory method of(String) instead
        Parameters:
        input - string to analyse
    • Method Detail

      • of

        public static IPAddress of​(String address)
        Creates and initialises a new parser for IPv6 and IPv4 addresses (excluding IPv6 Zone ID) to use by asIPv6Address() and asIPv4Address().
        Parameters:
        address - to parse (protocol depends on parser method called)
        Returns:
        null if address was null or much too large, the new instance otherwise
      • asIPv6Address

        public InetAddress asIPv6Address()
        Parses the passed address as IP address (IPv6). Note that the returned InetAddress object can be an Inet4Address object, for example if the passed address represents a v4-mapped address; in most cases it will be an Inet6Address object 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. The InetAddress.getHostName() method will return the original string in all cases anyway.
        Returns:
        InetAddress representing the address, or null on failure
      • asIPv4Address

        public InetAddress asIPv4Address()
        Parses the passed address as Legacy IP address (IPv4). The InetAddress.getHostName() method will return the original string.
        Returns:
        InetAddress representing the address, or null on failure
      • v6

        public static InetAddress v6​(String address)
        Parses the passed address as IP address (IPv6), excluding Zone ID. Note that the returned InetAddress object can be an Inet4Address object, for example if the passed address represents a v4-mapped address; in most cases it will be an Inet6Address object 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. The InetAddress.getHostName() method will return the original string in all cases anyway.
        Parameters:
        address - to parse as IPv6 address (IPv4 addresses return null)
        Returns:
        InetAddress representing the address, or null on failure
      • v4

        public static InetAddress v4​(String address)
        Parses the passed address as Legacy IP address (IPv4). The InetAddress.getHostName() method will return the original string.
        Parameters:
        address - to parse as IPv4 address
        Returns:
        InetAddress representing the address, or null on failure
      • 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 construct
        input - user-provided String to parse
        Returns:
        null if input was null or too large, the new 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 positioin
        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, for saving and restoring (with jmp(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 -1 if 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 -1 if 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 -1 if end of input is reached
        Throws:
        IndexOutOfBoundsException - if end of input was already reached
      • skip

        protected final int skip​(BiFunction<Integer,​Integer,​Boolean> matcher)
        Advances the current position as long as the matcher returns true and end of input is not yet reached
        Parameters:
        matcher - gets called with cur() and peek() as arguments
        Returns:
        codepoint of the first character where the matcher returned false, or -1
      • skip

        protected final int skip​(Function<Integer,​Boolean> matcher)
        Advances the current position as long as the matcher returns true and end of input is not yet reached; cf. skip(BiFunction)
        Parameters:
        matcher - gets called with just cur() as argument
        Returns:
        codepoint of the first character where the matcher returned false, or -1