net.i2p.data.router
Class RouterAddress

java.lang.Object
  extended by net.i2p.data.DataStructureImpl
      extended by 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 Summary
static String PROP_HOST
           
static String PROP_PORT
           
 
Constructor Summary
RouterAddress()
           
RouterAddress(String style, OrderedProperties options, int cost)
          For efficiency when created by a Transport.
 
Method Summary
 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.
 Date getExpiration()
          Deprecated. unused for now
 long getExpirationTime()
          Deprecated. unused for now
 String getHost()
          Convenience, same as getOption("host").
 byte[] getIP()
          Caching version of InetAddress.getByName(getOption("host")).getAddress(), which is slow.
 String getOption(String opt)
           
 Properties getOptions()
          Deprecated. use getOptionsMap()
 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.
 void setExpiration(Date expiration)
          Deprecated. unused for now
 void setOptions(Properties options)
          Deprecated. unused, use 3-arg constructor
 void setTransportStyle(String transportStyle)
          Deprecated. unused, use 3-arg constructor
 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
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

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

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

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

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

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

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 only. Will resolve but not cache resolution of DNS host names.

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