net.i2p.data.i2cp

## Class SendMessageExpiresMessage

- java.lang.Object
- - net.i2p.data.i2cp.I2CPMessageImpl
  - - net.i2p.data.i2cp.SendMessageMessage
    - - net.i2p.data.i2cp.SendMessageExpiresMessage

- All Implemented Interfaces:
    I2CPMessage

      public class SendMessageExpiresMessage
      extends SendMessageMessage

  Same as SendMessageMessage, but with an expiration to be passed to the router As of 0.8.4, retrofitted to use DateAndFlags. Backwards compatible.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `MESSAGE_TYPE`

    - ### Fields inherited from class net.i2p.data.i2cp.SendMessageMessage

      `_destination, _nonce, _payload, _sessionId`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SendMessageExpiresMessage()` For reading.
    `SendMessageExpiresMessage(SessionId sessID, Destination dest, Payload payload, long nonce)` For writing
    `SendMessageExpiresMessage(SessionId sessID, Destination dest, Payload payload, long nonce, DateAndFlags options)` For writing

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `Date` | `getExpiration()` The Date object is created here, it is not cached.
    `long` | `getExpirationTime()` Use this instead of getExpiration().getTime()
    `int` | `getFlags()` Gets the message flags.
    `int` | `getType()` Return the unique identifier for this type of message, as specified in the network specification document under #ClientAccessLayerMessages
    `void` | `readMessage(InputStream in, int length, int type)` Read the body into the data structures
    `void` | `setExpiration(Date d)`
    `void` | `setExpiration(long d)` Sets the message expiration time.
    `void` | `setFlags(int f)` Sets the message flags.
    `String` | `toString()`
    `void` | `writeMessage(OutputStream out)` Write out the full message to the stream, including the 4 byte size and 1 byte type header.

    - ### Methods inherited from class net.i2p.data.i2cp.SendMessageMessage

      `doReadMessage, doWriteMessage, getDestination, getNonce, getPayload, getSessionId, sessionId`

    - ### Methods inherited from class net.i2p.data.i2cp.I2CPMessageImpl

      `readBytes, readMessage, writeBytes`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### MESSAGE_TYPE

          public static final int MESSAGE_TYPE

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### SendMessageExpiresMessage

          public SendMessageExpiresMessage()

      For reading. Deprecated for writing, use 4-arg constructor

    - #### SendMessageExpiresMessage

          public SendMessageExpiresMessage(SessionId sessID,
                                           Destination dest,
                                           Payload payload,
                                           long nonce)

      For writing

    - #### SendMessageExpiresMessage

          public SendMessageExpiresMessage(SessionId sessID,
                                           Destination dest,
                                           Payload payload,
                                           long nonce,
                                           DateAndFlags options)

      For writing

  - ### Method Detail

    - #### getExpiration

          public Date getExpiration()

      The Date object is created here, it is not cached. Use getExpirationTime() if you only need the long value.

    - #### getExpirationTime

          public long getExpirationTime()

      Use this instead of getExpiration().getTime()

    - #### getFlags

          public int getFlags()

      Gets the message flags.

    - #### getType

          public int getType()

      Description copied from interface: `I2CPMessage`
      Return the unique identifier for this type of message, as specified in the network specification document under #ClientAccessLayerMessages
      Specified by:
        `getType` in interface `I2CPMessage`
      Overrides:
        `getType` in class `SendMessageMessage`
      Returns:
        unique identifier for this type of message

    - #### readMessage

          public void readMessage(InputStream in,
                                  int length,
                                  int type)
                           throws I2CPMessageException,
                                  IOException

      Read the body into the data structures
      Specified by:
        `readMessage` in interface `I2CPMessage`
      Overrides:
        `readMessage` in class `SendMessageMessage`
      Parameters:
        `in` - stream to read from
        `length` - number of bytes in the message payload
        `type` - type of message (should equal getType())
      Throws:
        `IOException` - if there's an error reading from the stream
        `I2CPMessageException` - if the stream doesn't contain a valid message that this class can read.

    - #### setExpiration

          public void setExpiration(Date d)

    - #### setExpiration

          public void setExpiration(long d)

      Sets the message expiration time.

    - #### setFlags

          public void setFlags(int f)

      Sets the message flags.

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `SendMessageMessage`

    - #### writeMessage

          public void writeMessage(OutputStream out)
                            throws I2CPMessageException,
                                   IOException

      Write out the full message to the stream, including the 4 byte size and 1 byte type header. Override the parent so we can be more mem efficient
      Specified by:
        `writeMessage` in interface `I2CPMessage`
      Overrides:
        `writeMessage` in class `SendMessageMessage`
      Parameters:
        `out` - OutputStream
      Throws:
        `IOException` - if there's an error writing to the stream
        `I2CPMessageException` - if the current object doesn't have sufficient data to write a properly formatted message.