java.lang.Object
net.i2p.data.i2cp.I2CPMessageImpl
- All Implemented Interfaces:
I2CPMessage
- Direct Known Subclasses:
BandwidthLimitsMessage, BlindingInfoMessage, CreateLeaseSetMessage, CreateSessionMessage, DestLookupMessage, DestReplyMessage, DestroySessionMessage, DisconnectMessage, GetBandwidthLimitsMessage, GetDateMessage, HostLookupMessage, HostReplyMessage, MessagePayloadMessage, MessageStatusMessage, PoisonI2CPMessage, ReceiveMessageBeginMessage, ReceiveMessageEndMessage, ReconfigureSessionMessage, ReportAbuseMessage, RequestLeaseSetMessage, RequestVariableLeaseSetMessage, SendMessageMessage, SessionStatusMessage, SetDateMessage
Defines the base message implementation.
As of 0.9.48, does NOT extend DataStructureImpl.
Constructor Summary
ConstructorsMethod Summary
Modifier and TypeMethodDescriptionprotected abstract voiddoReadMessage(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[]Write out the payload part of the message (not including the 4 byte size and 1 byte type).voidreadBytes(InputStream in) Read the message from the stream, wrapping I2CPMessageException inDataFormatException.voidValidate the type and size of the message, and then read the message into the data structures.voidreadMessage(InputStream in, int length, int type) Read the body into the data structures.Return the SessionId for this type of message.voidwriteBytes(OutputStream out) Write the message to the stream, wrapping I2CPMessageException in DataFormatException.voidwriteMessage(OutputStream out) Write out the full message to the stream, including the 4 byte size and 1 byte type header.Methods inherited from class Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface I2CPMessage
getTypeModifier and TypeMethodDescriptionintgetType()Return the unique identifier for this type of message, as specified in the network specification document under #ClientAccessLayerMessages.
Constructor Details
I2CPMessageImpl
public I2CPMessageImpl()I2CPMessageImpl.
Method Details
readMessage
Validate the type and size of the message, and then read the message into the data structures.- Specified by:
readMessagein interfaceI2CPMessage- Parameters:
in- stream to read from- Throws:
IOException- if there's an error reading from the streamI2CPMessageException- 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:
readMessagein interfaceI2CPMessage- Parameters:
in- stream to read fromlength- number of bytes in the message payloadtype- type of message (should equalI2CPMessage.getType())- Throws:
IOException- if there's an error reading from the streamI2CPMessageException- 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- positioned just past the 4 byte size and 1 byte type headersize- how many payload bytes remain to be read- Throws:
I2CPMessageException- if the message format is invalidIOException- if there's an error reading from the stream
doWriteMessage
Write out the payload part of the message (not including the 4 byte size and 1 byte type).- Returns:
- byte array
- Throws:
I2CPMessageException- if the message cannot be writtenIOException- if there's an error writing to the stream
writeMessage
Write out the full message to the stream, including the 4 byte size and 1 byte type header.- Specified by:
writeMessagein interfaceI2CPMessage- Parameters:
out- receives the length, type and payload, in that order- Throws:
IOException- if there's an error writing to the streamI2CPMessageException- if the current object doesn't have sufficient data to write a properly formatted message.
readBytes
Read the message from the stream, wrapping I2CPMessageException inDataFormatException.- Parameters:
in- the input stream to read from- Throws:
DataFormatException- if the message format is invalidIOException- if there's an error reading from the stream
writeBytes
Write the message to the stream, wrapping I2CPMessageException in DataFormatException.- Parameters:
out- the output stream to write to- Throws:
DataFormatException- if the message cannot be writtenIOException- if there's an error writing to the stream
sessionId
Return the SessionId for this type of message. Most but not all message types include a SessionId. The ones that do already define getSessionId(), but some return a SessionId and some return a long, so we define a new method here.- Specified by:
sessionIdin interfaceI2CPMessage- Returns:
- null always. Extending classes with a SessionId must override.