Package org.klomp.snark.dht
Class NodeInfo
- java.lang.Object
-
- net.i2p.data.SimpleDataStructure
-
- org.klomp.snark.dht.NodeInfo
-
- All Implemented Interfaces:
DataStructure
class NodeInfo extends SimpleDataStructure
-
-
Field Summary
Fields Modifier and Type Field Description static intLENGTH-
Fields inherited from class net.i2p.data.SimpleDataStructure
_data
-
-
Constructor Summary
Constructors Constructor Description NodeInfo(byte[] compactInfo, int offset)No Destination yet availableNodeInfo(String s)Create from persistent storage string.NodeInfo(Destination dest, int port)With a fake NID used for pingsNodeInfo(NID nID, Destination dest, int port)Use this if we have the full destinationNodeInfo(NID nID, Hash hash, int port)No Destination yet available
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description HashcalculateHash()Calculate the SHA256 value of this object (useful for a few scenarios)booleanequals(Object o)Warning - this returns true for two different classes with the same size and same data, e.g.static NIDgenerateNID(Hash h, int p, RandomSource random)Generate a secure NID that matches the Hash and port.DestinationgetDestination()HashgetHash()NIDgetNID()intgetPort()inthashCode()We assume the data has enough randomness in it, so use the first 4 bytes for speed.longlastSeen()intlength()The legal length of the byte array in this data structurevoidsetDestination(Destination dest)This can come in later but the hash must match.StringtoPersistentString()To persistent storage string.StringtoString()-
Methods inherited from class net.i2p.data.SimpleDataStructure
fromBase64, fromByteArray, getData, read, readBytes, setData, toBase64, toByteArray, writeBytes
-
-
-
-
Field Detail
-
LENGTH
public static final int LENGTH
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
NodeInfo
public NodeInfo(Destination dest, int port)
With a fake NID used for pings
-
NodeInfo
public NodeInfo(NID nID, Destination dest, int port)
Use this if we have the full destination- Throws:
IllegalArgumentException
-
NodeInfo
public NodeInfo(NID nID, Hash hash, int port)
No Destination yet available- Throws:
IllegalArgumentException
-
NodeInfo
public NodeInfo(byte[] compactInfo, int offset)No Destination yet available- Parameters:
compactInfo- 20 byte node ID, 32 byte destHash, 2 byte portoffset- starting at this offset in compactInfo- Throws:
IllegalArgumentExceptionArrayIndexOutOfBoundsException
-
NodeInfo
public NodeInfo(String s) throws DataFormatException
Create from persistent storage string. Format: NID:Hash:Destination:port First 3 in base 64; Destination may be empty string
-
-
Method Detail
-
generateNID
public static NID generateNID(Hash h, int p, RandomSource random)
Generate a secure NID that matches the Hash and port. Rules: First 4 bytes must match Hash. Next 2 bytes must match Hash ^ port. Remaining bytes may be random.- Throws:
IllegalArgumentException
-
length
public int length()
Description copied from class:SimpleDataStructureThe legal length of the byte array in this data structure- Specified by:
lengthin classSimpleDataStructure
-
getNID
public NID getNID()
-
getDestination
public Destination getDestination()
- Returns:
- may be null if we don't have it
-
getHash
public Hash getHash()
-
calculateHash
public Hash calculateHash()
Description copied from interface:DataStructureCalculate the SHA256 value of this object (useful for a few scenarios)- Specified by:
calculateHashin interfaceDataStructure- Overrides:
calculateHashin classSimpleDataStructure- Returns:
- the SHA256 hash of the byte array, or null if the data is null
-
setDestination
public void setDestination(Destination dest) throws IllegalArgumentException
This can come in later but the hash must match.- Throws:
IllegalArgumentException- if hash of dest doesn't match previous hash
-
getPort
public int getPort()
-
lastSeen
public long lastSeen()
-
hashCode
public int hashCode()
Description copied from class:SimpleDataStructureWe assume the data has enough randomness in it, so use the first 4 bytes for speed. If this is not the case, override in the extending class.- Overrides:
hashCodein classSimpleDataStructure
-
equals
public boolean equals(Object o)
Description copied from class:SimpleDataStructureWarning - this returns true for two different classes with the same size and same data, e.g. SessionKey and SessionTag, but you wouldn't put them in the same Set, would you?- Overrides:
equalsin classSimpleDataStructure
-
toString
public String toString()
- Overrides:
toStringin classSimpleDataStructure
-
toPersistentString
public String toPersistentString()
To persistent storage string. Format: NID:Hash:Destination:port First 3 in base 64; Destination may be empty string
-
-