net.i2p.data.router

## 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.
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `PROP_HOST`
    `static String` | `PROP_PORT`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `RouterAddress()`
    `RouterAddress(String style, OrderedProperties options, int cost)` For efficiency when created by a Transport.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `deepEquals(RouterAddress addr)` Everything, including Transport, host, port, options, and cost
    `boolean` | `equals(Object object)` Transport, host, and port only.
    `int` | `getCost()` Retrieve the weighted cost of this address, relative to other methods of contacting this router.
    `String` | `getHost()` Convenience, same as getOption("host").
    `byte[]` | `getIP()` Caching version of InetAddress.getByName(getOption("host")).getAddress(), which is slow.
    `String` | `getOption(String opt)`
    `Map<Object,Object>` | `getOptionsMap()` Retrieve the transport specific options necessary for communication
    `int` | `getPort()` Caching version of Integer.parseInt(getOption("port")) Caches valid ports 1-65535 only.
    `String` | `getTransportStyle()` Retrieve the type of transport that must be used to communicate on this address.
    `int` | `hashCode()` Just use a few items for speed (expiration is always null).
    `void` | `readBytes(InputStream in)` As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail.
    `void` | `setCost(int cost)` Configure the weighted cost of using the address.
    `String` | `toString()` This is used on peers.jsp so sort options so it looks better.
    `void` | `writeBytes(OutputStream out)` As of 0.9.3, expiration MUST be all zeros as it is ignored on readin and the signature will fail.

    - ### Methods inherited from class net.i2p.data.DataStructureImpl

      `calculateHash, fromBase64, fromByteArray, read, toBase64, toByteArray`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### PROP_HOST

          public static final String PROP_HOST

      See Also:
        Constant Field Values

    - #### PROP_PORT

          public static final String PROP_PORT

      See Also:
        Constant Field Values

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

  - ### Method Detail

    - #### deepEquals

          public boolean deepEquals(RouterAddress addr)

      Everything, including Transport, host, port, options, and cost
      Parameters:
        `addr` - may be null

    - #### equals

          public boolean equals(Object object)

      Transport, host, and port only. Never look at cost or other properties.
      Overrides:
        `equals` in class `Object`

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

    - #### getHost

          public String getHost()

      Convenience, same as getOption("host"). Does no parsing, so faster than getIP().
      Returns:
        host string or null

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

    - #### getOption

          public String getOption(String opt)

    - #### getOptionsMap

          public Map<Object,Object> getOptionsMap()

      Retrieve the transport specific options necessary for communication
      Returns:
        an unmodifiable view, non-null, sorted

    - #### getPort

          public int getPort()

      Caching version of Integer.parseInt(getOption("port")) Caches valid ports 1-65535 only.
      Returns:
        1-65535 or 0 if invalid

    - #### getTransportStyle

          public String getTransportStyle()

      Retrieve the type of transport that must be used to communicate on this address.

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

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

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

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

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