public abstract class I2NPMessageImpl extends Object implements I2NPMessage
| Modifier and Type | Class and Description |
|---|---|
static interface |
I2NPMessageImpl.Builder
interface for extending the types of messages handled - unused
|
| Modifier and Type | Field and Description |
|---|---|
protected net.i2p.I2PAppContext |
_context |
protected long |
_expiration |
protected net.i2p.util.Log |
_log |
static int |
CHECKSUM_LENGTH |
static long |
DEFAULT_EXPIRATION_MS |
static int |
HEADER_LENGTH
16
|
MAX_ID_VALUE, MAX_SIZE| Constructor and Description |
|---|
I2NPMessageImpl(net.i2p.I2PAppContext context) |
| Modifier and Type | Method and Description |
|---|---|
protected abstract int |
calculateWrittenLength()
calculate the message body's length (not including the header and footer
|
static I2NPMessage |
createMessage(net.i2p.I2PAppContext context,
int type)
Yes, this is fairly ugly, but its the only place it ever happens.
|
static I2NPMessage |
fromRawByteArray(net.i2p.I2PAppContext ctx,
byte[] buffer,
int offset,
int len,
I2NPMessageHandler handler)
Read the message with a short 5-byte header.
|
static I2NPMessage |
fromRawByteArrayNTCP2(net.i2p.I2PAppContext ctx,
byte[] buffer,
int offset,
int len,
I2NPMessageHandler handler)
Read the message with a short 9-byte header.
|
long |
getMessageExpiration()
Date after which the message should be dropped (and the associated uniqueId forgotten)
|
int |
getMessageSize()
How large the message is, including any checksums, i.e.
|
int |
getRawMessageSize()
The raw header consists of a one-byte type and a 4-byte expiration in seconds only.
|
long |
getUniqueId()
Replay resistant message Id
|
int |
readBytes(byte[] data,
int type,
int offset)
Read the header, then read the rest into buffer, then call
readMessage in the implemented message type
|
int |
readBytes(byte[] data,
int type,
int offset,
int maxLen)
Set a limit on the max to read from the data buffer, so that
we can use a large buffer but prevent the reader from reading off the end.
|
void |
readBytes(InputStream in)
Deprecated.
unused
|
void |
readMessage(byte[] data,
int offset,
int dataSize,
int type,
I2NPMessageHandler handler) |
static void |
registerBuilder(I2NPMessageImpl.Builder builder,
int type)
Deprecated.
unused
|
void |
setMessageExpiration(long exp)
The expiration is set to one minute from now in the constructor but it can be overridden here.
|
void |
setUniqueId(long id)
The ID is set to a random value when written but it can be overridden here.
|
byte[] |
toByteArray() |
int |
toByteArray(byte[] buffer)
write the message to the buffer, returning the number of bytes written.
|
int |
toByteArray(byte[] buffer,
int off)
Write the message to the buffer, returning the new offset (NOT the length).
|
int |
toRawByteArray(byte[] buffer)
Write the message with a short 5-byte header.
|
int |
toRawByteArrayNTCP2(byte[] buffer,
int off)
Write the message to the buffer, returning the new offset (NOT the length).
|
void |
writeBytes(OutputStream out)
Deprecated.
unused
|
protected abstract int |
writeMessageBody(byte[] out,
int curIndex)
write the message body to the output array, starting at the given index.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetType, readMessageprotected final net.i2p.util.Log _log
protected final net.i2p.I2PAppContext _context
protected long _expiration
public static final long DEFAULT_EXPIRATION_MS
public static final int CHECKSUM_LENGTH
public static final int HEADER_LENGTH
@Deprecated public static final void registerBuilder(I2NPMessageImpl.Builder builder, int type)
@Deprecated public void readBytes(InputStream in)
UnsupportedOperationException - alwayspublic int readBytes(byte[] data,
int type,
int offset)
throws I2NPMessageException
Specifically:
1 byte type (if caller didn't read already, as specified by the type param
4 byte ID
8 byte expiration
2 byte size
1 byte checksum
size bytes of payload (read by readMessage() in implementation)
readBytes in interface I2NPMessagetype - the message type or -1 if we should read it heredata - the dataoffset - where to start
starting at type if type is < 0 (16 byte header)
starting at ID if type is >= 0 (15 byte header)I2NPMessageException - if there is no valid messagepublic int readBytes(byte[] data,
int type,
int offset,
int maxLen)
throws I2NPMessageException
readBytes in interface I2NPMessagetype - the message type or -1 if we should read it heremaxLen - read no more than this many bytes from data starting at offset, even if it is longer
This includes the type byte only if type < 0data - the data, may or may not include the typeoffset - where to start
starting at type if type is < 0 (16 byte header)
starting at ID if type is >= 0 (15 byte header)I2NPMessageException - if there is no valid message@Deprecated public void writeBytes(OutputStream out)
UnsupportedOperationException - alwayspublic long getUniqueId()
getUniqueId in interface I2NPMessagepublic void setUniqueId(long id)
setUniqueId in interface I2NPMessagepublic long getMessageExpiration()
getMessageExpiration in interface I2NPMessagepublic void setMessageExpiration(long exp)
setMessageExpiration in interface I2NPMessagepublic int getMessageSize()
I2NPMessagegetMessageSize in interface I2NPMessagepublic int getRawMessageSize()
getRawMessageSize in interface I2NPMessagepublic byte[] toByteArray()
toByteArray in interface I2NPMessagepublic int toByteArray(byte[] buffer)
toByteArray in interface I2NPMessagepublic int toByteArray(byte[] buffer,
int off)
toByteArray in interface I2NPMessageoff - the offset to start writing atprotected abstract int calculateWrittenLength()
protected abstract int writeMessageBody(byte[] out,
int curIndex)
throws I2NPMessageException
I2NPMessageExceptionpublic int toRawByteArray(byte[] buffer)
toRawByteArray in interface I2NPMessagepublic int toRawByteArrayNTCP2(byte[] buffer,
int off)
toRawByteArrayNTCP2 in interface I2NPMessageoff - the offset to start writing atpublic void readMessage(byte[] data,
int offset,
int dataSize,
int type,
I2NPMessageHandler handler)
throws I2NPMessageException
readMessage in interface I2NPMessageI2NPMessageExceptionpublic static I2NPMessage fromRawByteArray(net.i2p.I2PAppContext ctx, byte[] buffer, int offset, int len, I2NPMessageHandler handler) throws I2NPMessageException
I2NPMessageExceptionpublic static I2NPMessage fromRawByteArrayNTCP2(net.i2p.I2PAppContext ctx, byte[] buffer, int offset, int len, I2NPMessageHandler handler) throws I2NPMessageException
I2NPMessageExceptionpublic static I2NPMessage createMessage(net.i2p.I2PAppContext context, int type) throws I2NPMessageException
I2NPMessageException