Class 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
  • Field Details

  • Constructor Details

    • DatabaseLookupMessage

      public DatabaseLookupMessage(I2PAppContext context)
    • DatabaseLookupMessage

      public DatabaseLookupMessage(I2PAppContext context, boolean locallyCreated)
      Parameters:
      locallyCreated - ignored
  • Method Details

    • 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-null
      encryptTag - 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-null
      encryptTag - 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 from
      offset - where to start in the data array
      dataSize - how long into the data to read
      type - 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 class I2NPMessageImpl
    • 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 class I2NPMessageImpl
      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
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object object)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object