Class RouterAddress

java.lang.Object
net.i2p.data.DataStructureImpl
net.i2p.data.router.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
  • Field Details

  • Constructor Details

    • 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 Details

    • 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 host names, and negative caches also. As of 0.9.32, this works for literal IP addresses only, and does NOT resolve host names. If a host name is specified in the options, this will return null. Use getHost() if you need the host name.
      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