## net.i2p.data.i2cp
Class I2CPMessageImpl

    java.lang.Object
      net.i2p.data.DataStructureImpl
          net.i2p.data.i2cp.I2CPMessageImpl

All Implemented Interfaces:
  DataStructure, I2CPMessage

Direct Known Subclasses:
  BandwidthLimitsMessage, CreateLeaseSetMessage, CreateSessionMessage, DestLookupMessage, DestReplyMessage, DestroySessionMessage, DisconnectMessage, GetBandwidthLimitsMessage, GetDateMessage, MessagePayloadMessage, MessageStatusMessage, PoisonI2CPMessage, ReceiveMessageBeginMessage, ReceiveMessageEndMessage, ReconfigureSessionMessage, ReportAbuseMessage, RequestLeaseSetMessage, SendMessageMessage, SessionStatusMessage, SetDateMessage

    public abstract class I2CPMessageImpl

extends DataStructureImpl
implements I2CPMessage

Defines the base message implementation.

Author:
  jrandom

Constructor Summary
`I2CPMessageImpl()`

Method Summary
`protected abstract void` `doReadMessage(InputStream buf, int size)` Read in the payload part of the message (after the initial 4 byte size and 1 byte type)
`protected abstract byte[]` `doWriteMessage()` Write out the payload part of the message (not including the 4 byte size and 1 byte type)
`void` `readBytes(InputStream in)` Load up the current object with data from the given stream.
`void` `readMessage(InputStream in)` Validate the type and size of the message, and then read the message into the data structures.
`void` `readMessage(InputStream in, int length, int type)` Read the body into the data structures
`void` `writeBytes(OutputStream out)` Write out the data structure to the stream, using the format defined in the I2P data structure specification.
`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.DataStructureImpl
`calculateHash, fromBase64, fromByteArray, read, toBase64, toByteArray`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface net.i2p.data.i2cp.I2CPMessage
`getType`

Methods inherited from interface net.i2p.data.DataStructure
`calculateHash, fromBase64, fromByteArray, toBase64, toByteArray`

Constructor Detail

### I2CPMessageImpl

    public I2CPMessageImpl()

Method Detail

### readMessage

    public void readMessage(InputStream in)
                     throws I2CPMessageException,
                            IOException

  Validate the type and size of the message, and then read the message into the data structures.

  Specified by:
    `readMessage` in interface `I2CPMessage`
  Parameters:
    `in` - stream to read from
  Throws:
    `IOException`
    `I2CPMessageException` - if the stream doesn't contain a valid message that this class can read.

### 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`
  Parameters:
    `length` - number of bytes in the message payload
    `in` - stream to read from
    `type` - type of message (should equal getType())
  Throws:
    `IOException`
    `I2CPMessageException` - if the stream doesn't contain a valid message that this class can read.

### doReadMessage

    protected abstract void doReadMessage(InputStream buf,
                                          int size)
                                   throws I2CPMessageException,
                                          IOException

  Read in the payload part of the message (after the initial 4 byte size and 1 byte type)

  Parameters:
    `buf` - InputStream
    `size` - payload size
  Throws:
    `I2CPMessageException`
    `IOException`

### doWriteMessage

    protected abstract byte[] doWriteMessage()
                                      throws I2CPMessageException,
                                             IOException

  Write out the payload part of the message (not including the 4 byte size and 1 byte type)

  Returns:
    byte array
  Throws:
    `I2CPMessageException`
    `IOException`

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

  Specified by:
    `writeMessage` in interface `I2CPMessage`
  Parameters:
    `out` - OutputStream
  Throws:
    `IOException`
    `I2CPMessageException` - if the current object doesn't have sufficient data to write a properly formatted message.

### readBytes

    public void readBytes(InputStream in)
                   throws DataFormatException,
                          IOException

  Description copied from interface: `DataStructure`
  Load up the current object with data from the given stream. Data loaded this way must match the I2P data structure specification.

  Specified by:
    `readBytes` in interface `DataStructure`
  Parameters:
    `in` - stream to read from
  Throws:
    `DataFormatException` - if the data is improperly formatted
    `IOException` - if there was a problem reading the stream

### writeBytes

    public void writeBytes(OutputStream out)
                    throws DataFormatException,
                           IOException

  Description copied from interface: `DataStructure`
  Write out the data structure to the stream, using the format defined in the I2P data structure specification.

  Specified by:
    `writeBytes` in interface `DataStructure`
  Parameters:
    `out` - stream to write to
  Throws:
    `DataFormatException` - if the data was incomplete or not yet ready to be written
    `IOException` - if there was a problem writing to the stream