Class RouterAddress

  • All Implemented Interfaces:
    Serializable, DataStructure

    public class RouterAddress
    extends DataStructureImpl
    Defines a method of communicating with a router For efficiency, the options methods and structures here are unsynchronized. Initialize the structure with readBytes(), or call the setOptions(). Don't change it after that. To ensure integrity of the RouterInfo, methods that change an element of the RouterInfo will throw an IllegalStateException after the RouterInfo is signed. As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail. If we implement expiration, or other use for the field, we must allow several releases for the change to propagate as it is backwards-incompatible. Restored as of 0.9.12.
    Since:
    0.9.16 moved from net.i2p.data
    Author:
    jrandom
    See Also:
    Serialized Form
    • Constructor Detail

      • RouterAddress

        public RouterAddress()
      • RouterAddress

        public RouterAddress​(String style,
                             OrderedProperties options,
                             int cost)
        For efficiency when created by a Transport.
        Parameters:
        options - not copied; do not reuse or modify
        cost - 0-255
        Since:
        IPv6
    • Method Detail

      • getCost

        public int getCost()
        Retrieve the weighted cost of this address, relative to other methods of contacting this router. The value 0 means free and 255 means really expensive. No value above 255 is allowed. Unused before 0.7.12
        Returns:
        0-255
      • setCost

        public void setCost​(int cost)
        Configure the weighted cost of using the address. No value negative or above 255 is allowed. WARNING - do not change cost on a published address or it will break the RI sig. There is no check here. Rarely used, use 3-arg constructor. NTCP is set to 10 and SSU to 5 by default, unused before 0.7.12
      • getExpiration

        @Deprecated
        public Date getExpiration()
        Deprecated.
        unused for now
        Retrieve the date after which the address should not be used. If this is null, then the address never expires. As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail. Restored as of 0.9.12.
        Returns:
        null for never, or a Date
      • getExpirationTime

        @Deprecated
        public long getExpirationTime()
        Deprecated.
        unused for now
        Retrieve the date after which the address should not be used. If this is zero, then the address never expires.
        Returns:
        0 for never
        Since:
        0.9.12
      • setExpiration

        @Deprecated
        public void setExpiration​(Date expiration)
        Deprecated.
        unused for now
        Configure the expiration date of the address (null for no expiration) As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail. Restored as of 0.9.12, wait several more releases before using. TODO: Use for introducers Unused for now, always null
      • getTransportStyle

        public String getTransportStyle()
        Retrieve the type of transport that must be used to communicate on this address.
      • setTransportStyle

        @Deprecated
        public void setTransportStyle​(String transportStyle)
        Deprecated.
        unused, use 3-arg constructor
        Configure the type of transport that must be used to communicate on this address
        Throws:
        IllegalStateException - if was already set
      • getOptions

        @Deprecated
        public Properties getOptions()
        Deprecated.
        use getOptionsMap()
        Retrieve the transport specific options necessary for communication
        Returns:
        sorted, non-null, NOT a copy, do not modify
      • getOptionsMap

        public Map<Object,​Object> getOptionsMap()
        Retrieve the transport specific options necessary for communication
        Returns:
        an unmodifiable view, non-null, sorted
        Since:
        0.8.13
      • getOption

        public String getOption​(String opt)
        Since:
        0.8.13
      • setOptions

        @Deprecated
        public void setOptions​(Properties options)
        Deprecated.
        unused, use 3-arg constructor
        Specify the transport specific options necessary for communication. Makes a copy.
        Parameters:
        options - non-null
        Throws:
        IllegalStateException - if was already set
      • getIP

        public byte[] getIP()
        Caching version of InetAddress.getByName(getOption("host")).getAddress(), which is slow. Caches numeric hostnames, and negative caches also. As of 0.9.32, this works for literal IP addresses only, and does NOT resolve hostnames. If a hostname is specified in the options, this will return null. Use getHost() if you need the hostname.
        Returns:
        IP or null
        Since:
        0.9.3
      • getHost

        public String getHost()
        Convenience, same as getOption("host"). Does no parsing, so faster than getIP().
        Returns:
        host string or null
        Since:
        IPv6
      • getPort

        public int getPort()
        Caching version of Integer.parseInt(getOption("port")) Caches valid ports 1-65535 only.
        Returns:
        1-65535 or 0 if invalid
        Since:
        0.9.3
      • readBytes

        public void readBytes​(InputStream in)
                       throws DataFormatException,
                              IOException
        As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail. Restored as of 0.9.12, wait several more releases before using.
        Parameters:
        in - stream to read from
        Throws:
        IllegalStateException - if was already read in
        DataFormatException - if the data is improperly formatted
        IOException - if there was a problem reading the stream
      • writeBytes

        public void writeBytes​(OutputStream out)
                        throws DataFormatException,
                               IOException
        As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail.
        Parameters:
        out - stream to write to
        Throws:
        DataFormatException - if the data was incomplete or not yet ready to be written
        IOException - if there was a problem writing to the stream
      • equals

        public boolean equals​(Object object)
        Transport, host, and port only. Never look at cost or other properties.
        Overrides:
        equals in class Object
      • deepEquals

        public boolean deepEquals​(RouterAddress addr)
        Everything, including Transport, host, port, options, and cost
        Parameters:
        addr - may be null
        Since:
        IPv6
      • hashCode

        public int hashCode()
        Just use a few items for speed (expiration is always null). Never look at cost or other properties.
        Overrides:
        hashCode in class Object
      • toString

        public String toString()
        This is used on peers.jsp so sort options so it looks better. We don't just use OrderedProperties for _options because DataHelper.writeProperties() sorts also.
        Overrides:
        toString in class Object