Class DatabaseStoreMessage

All Implemented Interfaces:
I2NPMessage

public class DatabaseStoreMessage extends FastI2NPMessageImpl
Defines the message a router sends to another router to test the network database reachability, as well as the reply message sent back. TODO: Don't decompress and recompress RouterInfos at the OBEP and IBGW. Could this even change the message length or corrupt things?
Author:
jrandom
  • Field Details

  • Constructor Details

    • DatabaseStoreMessage

      public DatabaseStoreMessage(I2PAppContext context)
  • Method Details

    • getKey

      public Hash getKey()
      Defines the key in the network database being stored
    • getEntry

      public DatabaseEntry getEntry()
      Defines the entry in the network database being stored
    • setEntry

      public void setEntry(DatabaseEntry entry)
      This also sets the key
      Throws:
      IllegalStateException - if data previously set, to protect saved checksum
    • getReplyToken

      public long getReplyToken()
      If a reply is desired, this token specifies the message ID that should be used for a DeliveryStatusMessage to be sent to the reply tunnel on the reply gateway.
      Returns:
      positive reply token ID, or 0 if no reply is necessary.
    • setReplyToken

      public void setReplyToken(long token) throws IllegalArgumentException
      Update the reply token.
      Throws:
      IllegalArgumentException - if the token is out of range (min=0, max=I2NPMessage.MAX_ID_VALUE)
    • getReplyTunnel

      public TunnelId getReplyTunnel()
    • setReplyTunnel

      public void setReplyTunnel(TunnelId id)
    • getReplyGateway

      public Hash getReplyGateway()
    • setReplyGateway

      public void setReplyGateway(Hash peer)
    • 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()
      calculate the message body's length (not including the header and footer)
      Specified by:
      calculateWrittenLength in class I2NPMessageImpl
      Throws:
      IllegalStateException
    • writeMessageBody

      protected int writeMessageBody(byte[] out, int curIndex) throws I2NPMessageException
      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