Package 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.
- Since:
- 0.9.16 moved from net.i2p.data
- Author:
- jrandom
- See Also:
- Serialized Form
-
Field Summary
-
Constructor Summary
Constructors Constructor Description RouterAddress()
RouterAddress(String style, OrderedProperties options, int cost)
For efficiency when created by a Transport. -
Method Summary
Modifier and Type Method Description boolean
deepEquals(RouterAddress addr)
Everything, including Transport, host, port, options, and costboolean
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 nowlong
getExpirationTime()
Deprecated.unused for nowString
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 communicationint
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 nowvoid
setOptions(Properties options)
Deprecated.unused, use 3-arg constructorvoid
setTransportStyle(String transportStyle)
Deprecated.unused, use 3-arg constructorString
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
-
Field Details
-
PROP_HOST
- See Also:
- Constant Field Values
-
PROP_PORT
- See Also:
- Constant Field Values
-
-
Constructor Details
-
RouterAddress
public RouterAddress() -
RouterAddress
For efficiency when created by a Transport.- Parameters:
options
- not copied; do not reuse or modifycost
- 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.unused for nowRetrieve 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.unused for nowRetrieve 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.unused for nowConfigure 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
Retrieve the type of transport that must be used to communicate on this address. -
setTransportStyle
Deprecated.unused, use 3-arg constructorConfigure the type of transport that must be used to communicate on this address- Throws:
IllegalStateException
- if was already set
-
getOptions
Deprecated.use getOptionsMap()Retrieve the transport specific options necessary for communication- Returns:
- sorted, non-null, NOT a copy, do not modify
-
getOptionsMap
Retrieve the transport specific options necessary for communication- Returns:
- an unmodifiable view, non-null, sorted
- Since:
- 0.8.13
-
getOption
- Since:
- 0.8.13
-
setOptions
Deprecated.unused, use 3-arg constructorSpecify 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
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
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 inDataFormatException
- if the data is improperly formattedIOException
- if there was a problem reading the stream
-
writeBytes
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 writtenIOException
- if there was a problem writing to the stream
-
equals
Transport, host, and port only. Never look at cost or other properties. -
deepEquals
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. -
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.
-