Package net.i2p.data.i2np
Class DatabaseLookupMessage
- java.lang.Object
-
- net.i2p.data.i2np.I2NPMessageImpl
-
- net.i2p.data.i2np.FastI2NPMessageImpl
-
- net.i2p.data.i2np.DatabaseLookupMessage
-
- All Implemented Interfaces:
I2NPMessage
public class DatabaseLookupMessage extends FastI2NPMessageImpl
Defines the message a router sends to another router to search for a key in the network database.- Author:
- jrandom
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DatabaseLookupMessage.Type
-
Nested classes/interfaces inherited from class net.i2p.data.i2np.I2NPMessageImpl
I2NPMessageImpl.Builder
-
-
Field Summary
Fields Modifier and Type Field Description static int
MESSAGE_TYPE
static boolean
USE_ECIES_FF
-
Fields inherited from class net.i2p.data.i2np.FastI2NPMessageImpl
_checksum, _hasChecksum
-
Fields inherited from class net.i2p.data.i2np.I2NPMessageImpl
_context, _expiration, _log, CHECKSUM_LENGTH, DEFAULT_EXPIRATION_MS, HEADER_LENGTH
-
Fields inherited from interface net.i2p.data.i2np.I2NPMessage
MAX_ID_VALUE, MAX_SIZE
-
-
Constructor Summary
Constructors Constructor Description DatabaseLookupMessage(I2PAppContext context)
DatabaseLookupMessage(I2PAppContext context, boolean locallyCreated)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDontIncludePeer(Hash peer)
Add to the set.void
addDontIncludePeers(Collection<Hash> peers)
Add to the set.protected int
calculateWrittenLength()
calculate the message body's length (not including the header and footerboolean
equals(Object object)
Set<Hash>
getDontIncludePeers()
Set of peers that a lookup reply should NOT include.Hash
getFrom()
Contains the router who requested this lookupPublicKey
getRatchetPublicKey()
The included session key or null if unset.RatchetSessionTag
getRatchetReplyTag()
The included session tag or null if unsetSessionKey
getReplyKey()
The included session key or null if unset.SessionTag
getReplyTag()
The included session tag or null if unsetTunnelId
getReplyTunnel()
Contains the tunnel ID a reply should be sent toHash
getSearchKey()
Defines the key being searched forDatabaseLookupMessage.Type
getSearchType()
Defines the type of data being searched for.int
getType()
Return the unique identifier for this type of I2NP message, as defined in the I2NP specint
hashCode()
void
readMessage(byte[] data, int offset, int dataSize, int type)
Read the body into the data structures, after the initial type byte and the uniqueId / expiration, using the current class's format as defined by the I2NP specificationvoid
setDontIncludePeers(Collection<Hash> peers)
Replace the dontInclude set with this set.void
setFrom(Hash from)
void
setReplySession(PublicKey pubKey)
Ratchet.void
setReplySession(SessionKey encryptKey, SessionTag encryptTag)
Only worthwhile if sending reply via tunnelvoid
setReplySession(SessionKey encryptKey, RatchetSessionTag encryptTag)
Ratchetvoid
setReplyTunnel(TunnelId replyTunnel)
void
setSearchKey(Hash key)
void
setSearchType(DatabaseLookupMessage.Type type)
Defines the type of data being searched for.static boolean
supportsEncryptedReplies(RouterInfo to)
Does this router support encrypted replies?static boolean
supportsRatchetReplies(RouterInfo to)
Does this router support ratchet replies?String
toString()
protected int
writeMessageBody(byte[] out, int curIndex)
write the message body to the output array, starting at the given index.-
Methods inherited from class net.i2p.data.i2np.FastI2NPMessageImpl
readBytes, toByteArray, toByteArrayWithSavedChecksum
-
Methods inherited from class net.i2p.data.i2np.I2NPMessageImpl
createMessage, fromRawByteArray, fromRawByteArrayNTCP2, getMessageExpiration, getMessageSize, getRawMessageSize, getUniqueId, readBytes, readBytes, readMessage, registerBuilder, setMessageExpiration, setUniqueId, toByteArray, toByteArray, toRawByteArray, toRawByteArrayNTCP2, writeBytes
-
-
-
-
Field Detail
-
MESSAGE_TYPE
public static final int MESSAGE_TYPE
- See Also:
- Constant Field Values
-
USE_ECIES_FF
public static final boolean USE_ECIES_FF
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DatabaseLookupMessage
public DatabaseLookupMessage(I2PAppContext context)
-
DatabaseLookupMessage
public DatabaseLookupMessage(I2PAppContext context, boolean locallyCreated)
- Parameters:
locallyCreated
- ignored
-
-
Method Detail
-
getSearchKey
public Hash getSearchKey()
Defines the key being searched for
-
setSearchKey
public void setSearchKey(Hash key)
- Throws:
IllegalStateException
- if key previously set, to protect saved checksum
-
getSearchType
public DatabaseLookupMessage.Type getSearchType()
Defines the type of data being searched for. Default ANY.- Returns:
- non-null
- Since:
- 0.9.16
-
setSearchType
public void setSearchType(DatabaseLookupMessage.Type type)
Defines the type of data being searched for. Default ANY. Must be ANY for queried routers 0.9.5 or lower, but there are few if any floodfills that old left, so not even worth checking.- Parameters:
type
- non-null- Since:
- 0.9.16
-
getFrom
public Hash getFrom()
Contains the router who requested this lookup
-
setFrom
public void setFrom(Hash from)
- Throws:
IllegalStateException
- if from previously set, to protect saved checksum
-
getReplyTunnel
public TunnelId getReplyTunnel()
Contains the tunnel ID a reply should be sent to
-
setReplyTunnel
public void setReplyTunnel(TunnelId replyTunnel)
- Throws:
IllegalStateException
- if tunnel previously set, to protect saved checksum
-
supportsEncryptedReplies
public static boolean supportsEncryptedReplies(RouterInfo to)
Does this router support encrypted replies?- Parameters:
to
- null OK- Since:
- 0.9.7
-
supportsRatchetReplies
public static boolean supportsRatchetReplies(RouterInfo to)
Does this router support ratchet replies?- Parameters:
to
- null OK- Since:
- 0.9.46
-
getReplyKey
public SessionKey getReplyKey()
The included session key or null if unset. If non-null, either getReplyTag() or getRatchetReplyTag() is non-null.- Since:
- 0.9.7
-
getReplyTag
public SessionTag getReplyTag()
The included session tag or null if unset- Since:
- 0.9.7
-
setReplySession
public void setReplySession(SessionKey encryptKey, SessionTag encryptTag)
Only worthwhile if sending reply via tunnel- Parameters:
encryptKey
- non-nullencryptTag
- non-null- Throws:
IllegalStateException
- if key or tag previously set, to protect saved checksum- Since:
- 0.9.7
-
getRatchetReplyTag
public RatchetSessionTag getRatchetReplyTag()
The included session tag or null if unset- Since:
- 0.9.46
-
setReplySession
public void setReplySession(SessionKey encryptKey, RatchetSessionTag encryptTag)
Ratchet- Parameters:
encryptKey
- non-nullencryptTag
- non-null- Throws:
IllegalStateException
- if key or tag previously set, to protect saved checksum- Since:
- 0.9.46
-
getRatchetPublicKey
public PublicKey getRatchetPublicKey()
The included session key or null if unset. Preliminary, not fully supported, see proposal 154.- Since:
- 0.9.46
-
setReplySession
public void setReplySession(PublicKey pubKey)
Ratchet. Preliminary, not fully supported, see proposal 154.- Parameters:
pubKey
- non-null- Throws:
IllegalStateException
- if key or tag previously set, to protect saved checksum- Since:
- 0.9.46
-
getDontIncludePeers
public Set<Hash> getDontIncludePeers()
Set of peers that a lookup reply should NOT include. WARNING - returns a copy.- Returns:
- Set of Hash objects, each of which is the H(routerIdentity) to skip, or null
-
setDontIncludePeers
public void setDontIncludePeers(Collection<Hash> peers)
Replace the dontInclude set with this set. WARNING - makes a copy. Invalidates the checksum.- Parameters:
peers
- may be null
-
addDontIncludePeer
public void addDontIncludePeer(Hash peer)
Add to the set. Invalidates the checksum.- Parameters:
peer
- non-null- Since:
- 0.8.12
-
addDontIncludePeers
public void addDontIncludePeers(Collection<Hash> peers)
Add to the set. Invalidates the checksum.- Parameters:
peers
- non-null- Since:
- 0.8.12
-
readMessage
public void readMessage(byte[] data, int offset, int dataSize, int type) throws I2NPMessageException
Description copied from interface:I2NPMessage
Read the body into the data structures, after the initial type byte and the uniqueId / expiration, using the current class's format as defined by the I2NP specification- Parameters:
data
- data to read fromoffset
- where to start in the data arraydataSize
- how long into the data to readtype
- I2NP message type- Throws:
I2NPMessageException
- if the stream doesn't contain a valid message that this class can read.
-
calculateWrittenLength
protected int calculateWrittenLength()
Description copied from class:I2NPMessageImpl
calculate the message body's length (not including the header and footer- Specified by:
calculateWrittenLength
in classI2NPMessageImpl
-
writeMessageBody
protected int writeMessageBody(byte[] out, int curIndex) throws I2NPMessageException
Description copied from class:I2NPMessageImpl
write the message body to the output array, starting at the given index.- Specified by:
writeMessageBody
in classI2NPMessageImpl
- Returns:
- the index into the array after the last byte written (NOT the length)
- Throws:
I2NPMessageException
-
getType
public int getType()
Description copied from interface:I2NPMessage
Return the unique identifier for this type of I2NP message, as defined in the I2NP spec
-
-