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
    • 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-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.
      • 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