Package net.i2p.router.transport.udp
Class UDPPacket
java.lang.Object
net.i2p.router.transport.udp.UDPPacket
- All Implemented Interfaces:
CDQEntry
class UDPPacket extends Object implements CDQEntry
Basic delivery unit containing the datagram. This also maintains a cache
of object instances to allow rapid reuse.
-
Field Summary
Fields Modifier and Type Field Description static byte
BITFIELD_CONTINUATION
static byte
DATA_FLAG_ACK_BITFIELDS
static byte
DATA_FLAG_ECN
unusedstatic byte
DATA_FLAG_EXPLICIT_ACK
static byte
DATA_FLAG_EXTENDED
unusedstatic byte
DATA_FLAG_WANT_ACKS
static byte
DATA_FLAG_WANT_REPLY
static byte
HEADER_FLAG_EXTENDED_OPTIONS
Defined in the spec from the beginning, Used starting in 0.9.24static byte
HEADER_FLAG_REKEY
Defined in the spec from the beginning, Unusedstatic int
IV_SIZE
static int
MAC_SIZE
(package private) static int
MAX_PACKET_SIZE
Actually it is one less than this, we assume if a received packet is this big it is truncated.static int
MAX_PAYLOAD_TYPE
static int
PAYLOAD_TYPE_DATA
static int
PAYLOAD_TYPE_RELAY_INTRO
static int
PAYLOAD_TYPE_RELAY_REQUEST
static int
PAYLOAD_TYPE_RELAY_RESPONSE
static int
PAYLOAD_TYPE_SESSION_CONFIRMED
static int
PAYLOAD_TYPE_SESSION_CREATED
static int
PAYLOAD_TYPE_SESSION_DESTROY
static int
PAYLOAD_TYPE_SESSION_REQUEST
Message types, 4 bits maxstatic int
PAYLOAD_TYPE_TEST
static int
SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAG
set to 1 to request a session tag, i.e.static int
SESS_REQ_MIN_EXT_OPTIONS_LENGTH
-
Method Summary
Modifier and Type Method Description static UDPPacket
acquire(RouterContext ctx, boolean inbound)
static void
clearCache()
Call at shutdown/startup to not hold ctx refsvoid
decrypt(SessionKey cipherKey)
Decrypt this valid packet, overwriting the _data buffer's payload with the decrypted data (leaving the MAC and IV unaltered)void
drop()
For CDQFIFOBandwidthLimiter.Request
getBandwidthRequest()
So that we can compete with NTCP, we want to request bandwidth in parallel, on the way into the queue, not on the way out.long
getBegin()
long
getEnqueueTime()
For CDQ(package private) int
getFragmentCount()
only for debugging and statslong
getLifetime()
int
getMarkedType()
flag this packet as a particular type for accounting purposes, with 1 implying the packet is an ACK, otherwise it is a data packet(package private) int
getMessageType()
only for debugging and stats, does not go on the wireDatagramPacket
getPacket()
short
getPriority()
(package private) RemoteHostId
getRemoteHost()
(package private) long
getTimeSinceReceived()
a packet handler has pulled it off the inbound queuevoid
markType(int type)
flag this packet as a particular type for accounting purposes(package private) void
received()
a packet handler has pulled it off the inbound queuevoid
release()
void
requestInboundBandwidth()
Deprecated.unusedvoid
requestOutboundBandwidth()
So that we can compete with NTCP, we want to request bandwidth in parallel, on the way into the queue, not on the way out.void
resetBegin()
void
setEnqueueTime(long now)
For CDQ(package private) void
setFragmentCount(int count)
only for debugging and stats(package private) void
setMessageType(int type)
only for debugging and stats, does not go on the wireString
toString()
how many times we tried to validate the packetboolean
validate(SessionKey macKey, HMACGenerator hmac)
Validate the packet against the MAC specified, returning true if the MAC matches, false otherwise.
-
Field Details
-
MAX_PACKET_SIZE
static final int MAX_PACKET_SIZEActually it is one less than this, we assume if a received packet is this big it is truncated. This is bigger than PeerState.LARGE_MTU, as the far-end's LARGE_MTU may be larger than ours. Due to longstanding bugs, a packet may be larger than LARGE_MTU (acks and padding). Together with an increase in the LARGE_MTU to 1492 in release 0.8.9, routers from 0.8.9 - 0.8.11 can generate packets up to 1536. Data packets are always a multiple of 16, so make this 4 + a multiple of 16.- See Also:
- Constant Field Values
-
IV_SIZE
public static final int IV_SIZE- See Also:
- Constant Field Values
-
MAC_SIZE
public static final int MAC_SIZE- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_SESSION_REQUEST
public static final int PAYLOAD_TYPE_SESSION_REQUESTMessage types, 4 bits max- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_SESSION_CREATED
public static final int PAYLOAD_TYPE_SESSION_CREATED- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_SESSION_CONFIRMED
public static final int PAYLOAD_TYPE_SESSION_CONFIRMED- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_RELAY_REQUEST
public static final int PAYLOAD_TYPE_RELAY_REQUEST- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_RELAY_RESPONSE
public static final int PAYLOAD_TYPE_RELAY_RESPONSE- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_RELAY_INTRO
public static final int PAYLOAD_TYPE_RELAY_INTRO- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_DATA
public static final int PAYLOAD_TYPE_DATA- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_TEST
public static final int PAYLOAD_TYPE_TEST- See Also:
- Constant Field Values
-
PAYLOAD_TYPE_SESSION_DESTROY
public static final int PAYLOAD_TYPE_SESSION_DESTROY- Since:
- 0.8.1
- See Also:
- Constant Field Values
-
MAX_PAYLOAD_TYPE
public static final int MAX_PAYLOAD_TYPE- See Also:
- Constant Field Values
-
HEADER_FLAG_REKEY
public static final byte HEADER_FLAG_REKEYDefined in the spec from the beginning, Unused- Since:
- 0.9.24
- See Also:
- Constant Field Values
-
HEADER_FLAG_EXTENDED_OPTIONS
public static final byte HEADER_FLAG_EXTENDED_OPTIONSDefined in the spec from the beginning, Used starting in 0.9.24- Since:
- 0.9.24
- See Also:
- Constant Field Values
-
SESS_REQ_MIN_EXT_OPTIONS_LENGTH
public static final int SESS_REQ_MIN_EXT_OPTIONS_LENGTH- See Also:
- Constant Field Values
-
SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAG
public static final int SESS_REQ_EXT_FLAG_REQUEST_RELAY_TAGset to 1 to request a session tag, i.e. we want him to be an introducer for us- See Also:
- Constant Field Values
-
DATA_FLAG_EXPLICIT_ACK
public static final byte DATA_FLAG_EXPLICIT_ACK- See Also:
- Constant Field Values
-
DATA_FLAG_ACK_BITFIELDS
public static final byte DATA_FLAG_ACK_BITFIELDS- See Also:
- Constant Field Values
-
DATA_FLAG_ECN
public static final byte DATA_FLAG_ECNunused- See Also:
- Constant Field Values
-
DATA_FLAG_WANT_ACKS
public static final byte DATA_FLAG_WANT_ACKS- See Also:
- Constant Field Values
-
DATA_FLAG_WANT_REPLY
public static final byte DATA_FLAG_WANT_REPLY- See Also:
- Constant Field Values
-
DATA_FLAG_EXTENDED
public static final byte DATA_FLAG_EXTENDEDunused- See Also:
- Constant Field Values
-
BITFIELD_CONTINUATION
public static final byte BITFIELD_CONTINUATION- See Also:
- Constant Field Values
-
-
Method Details
-
getPacket
-
getPriority
public short getPriority() -
getBegin
public long getBegin() -
getLifetime
public long getLifetime() -
resetBegin
public void resetBegin() -
markType
public void markType(int type)flag this packet as a particular type for accounting purposes -
getMarkedType
public int getMarkedType()flag this packet as a particular type for accounting purposes, with 1 implying the packet is an ACK, otherwise it is a data packet -
getMessageType
int getMessageType()only for debugging and stats, does not go on the wire -
setMessageType
void setMessageType(int type)only for debugging and stats, does not go on the wire -
getFragmentCount
int getFragmentCount()only for debugging and stats -
setFragmentCount
void setFragmentCount(int count)only for debugging and stats -
getRemoteHost
RemoteHostId getRemoteHost() -
validate
Validate the packet against the MAC specified, returning true if the MAC matches, false otherwise. -
decrypt
Decrypt this valid packet, overwriting the _data buffer's payload with the decrypted data (leaving the MAC and IV unaltered) -
setEnqueueTime
public void setEnqueueTime(long now)For CDQ- Specified by:
setEnqueueTime
in interfaceCDQEntry
- Since:
- 0.9.3
-
received
void received()a packet handler has pulled it off the inbound queue -
getEnqueueTime
public long getEnqueueTime()For CDQ- Specified by:
getEnqueueTime
in interfaceCDQEntry
- Since:
- 0.9.3
-
getTimeSinceReceived
long getTimeSinceReceived()a packet handler has pulled it off the inbound queue -
requestInboundBandwidth
Deprecated.unusedSo that we can compete with NTCP, we want to request bandwidth in parallel, on the way into the queue, not on the way out. Call before enqueueing.- Since:
- 0.9.21
-
requestOutboundBandwidth
public void requestOutboundBandwidth()So that we can compete with NTCP, we want to request bandwidth in parallel, on the way into the queue, not on the way out. Call before enqueueing.- Since:
- 0.9.21
-
getBandwidthRequest
So that we can compete with NTCP, we want to request bandwidth in parallel, on the way into the queue, not on the way out. Call after dequeueing.- Since:
- 0.9.21
-
toString
how many times we tried to validate the packet -
acquire
- Parameters:
inbound
- unused
-
drop
public void drop()For CDQ -
release
public void release() -
clearCache
public static void clearCache()Call at shutdown/startup to not hold ctx refs- Since:
- 0.9.2
-