## net.i2p.router.transport.udp
Class UDPPacket

    java.lang.Object
      net.i2p.router.transport.udp.UDPPacket

    public class UDPPacket

extends java.lang.Object

Basic delivery unit containing the datagram. This also maintains a cache of object instances to allow rapid reuse.

Field Summary
`static byte` `BITFIELD_CONTINUATION`
`static byte` `DATA_FLAG_ACK_BITFIELDS`
`static byte` `DATA_FLAG_ECN`
`static byte` `DATA_FLAG_EXPLICIT_ACK`
`static byte` `DATA_FLAG_EXTENDED`
`static byte` `DATA_FLAG_WANT_ACKS`
`static byte` `DATA_FLAG_WANT_REPLY`
`static int` `IV_SIZE`
`static int` `MAC_SIZE`
`(package private) static int` `MAX_PACKET_SIZE`
`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_REQUEST`
`static int` `PAYLOAD_TYPE_TEST`

Method Summary
`static UDPPacket` `acquire(I2PAppContext ctx, boolean inbound)`
`(package private) void` `afterHandling()` a packet handler has finished parsing out the good bits
`(package private) void` `beforeReceiveFragments()` a packet handler has decrypted and verified the packet and is about to parse out the good bits
`void` `decrypt(SessionKey cipherKey)` Decrypt this valid packet, overwriting the _data buffer's payload with the decrypted data (leaving the MAC and IV unaltered)
`(package private) void` `enqueue()` the UDPReceiver has tossed it onto the inbound queue
`(package private) long` `getAfterValidate()` when we finished validate()
`(package private) long` `getBeforeValidate()` when we began validate()
`long` `getBegin()`
`(package private) long` `getEnqueueTime()` when it was added to the endpoint's receive queue
`long` `getExpiration()`
`(package private) int` `getFragmentCount()`
`long` `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()`
`java.net.DatagramPacket` `getPacket()`
`short` `getPriority()`
`(package private) long` `getReceivedTime()` when it was pulled off the endpoint receive queue
`RemoteHostId` `getRemoteHost()`
`(package private) long` `getTimeSinceEnqueue()` the UDPReceiver has tossed it onto the inbound queue
`(package private) long` `getTimeSinceHandling()` a packet handler has finished parsing out the good bits
`(package private) long` `getTimeSinceReceived()` a packet handler has pulled it off the inbound queue
`(package private) long` `getTimeSinceReceiveFragments()` a packet handler has decrypted and verified the packet and is about to parse out the good bits
`(package private) int` `getValidateCount()` how many times we tried to validate the packet
`void` `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 queue
`void` `release()`
`void` `resetBegin()`
`(package private) void` `setFragmentCount(int count)`
`(package private) void` `setMessageType(int type)`
`java.lang.String` `toString()`
`boolean` `validate(SessionKey macKey)` Validate the packet against the MAC specified, returning true if the MAC matches, false otherwise.
`void` `writeData(byte[] src, int offset, int len)`

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

Field Detail

### MAX_PACKET_SIZE

    static final int MAX_PACKET_SIZE

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_REQUEST

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

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

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_EXTENDED

See Also:
  Constant Field Values

### BITFIELD_CONTINUATION

    public static final byte BITFIELD_CONTINUATION

See Also:
  Constant Field Values

Method Detail

### writeData

    public void writeData(byte[] src,
                          int offset,
                          int len)

### getPacket

    public java.net.DatagramPacket getPacket()

### getPriority

    public short getPriority()

### getExpiration

    public long getExpiration()

### 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()

### setMessageType

    void setMessageType(int type)

### getFragmentCount

    int getFragmentCount()

### setFragmentCount

    void setFragmentCount(int count)

### getRemoteHost

    public RemoteHostId getRemoteHost()

### validate

    public boolean validate(SessionKey macKey)

  Validate the packet against the MAC specified, returning true if the MAC matches, false otherwise.

### decrypt

    public void decrypt(SessionKey cipherKey)

  Decrypt this valid packet, overwriting the _data buffer's payload with the decrypted data (leaving the MAC and IV unaltered)

### enqueue

    void enqueue()

  the UDPReceiver has tossed it onto the inbound queue

### received

    void received()

  a packet handler has pulled it off the inbound queue

### beforeReceiveFragments

    void beforeReceiveFragments()

  a packet handler has decrypted and verified the packet and is about to parse out the good bits

### afterHandling

    void afterHandling()

  a packet handler has finished parsing out the good bits

### getTimeSinceEnqueue

    long getTimeSinceEnqueue()

  the UDPReceiver has tossed it onto the inbound queue

### getTimeSinceReceived

    long getTimeSinceReceived()

  a packet handler has pulled it off the inbound queue

### getTimeSinceReceiveFragments

    long getTimeSinceReceiveFragments()

  a packet handler has decrypted and verified the packet and is about to parse out the good bits

### getTimeSinceHandling

    long getTimeSinceHandling()

  a packet handler has finished parsing out the good bits

### getEnqueueTime

    long getEnqueueTime()

  when it was added to the endpoint's receive queue

### getReceivedTime

    long getReceivedTime()

  when it was pulled off the endpoint receive queue

### getBeforeValidate

    long getBeforeValidate()

  when we began validate()

### getAfterValidate

    long getAfterValidate()

  when we finished validate()

### getValidateCount

    int getValidateCount()

  how many times we tried to validate the packet

### toString

    public java.lang.String toString()

  Overrides:
    `toString` in class `java.lang.Object`

### acquire

    public static UDPPacket acquire(I2PAppContext ctx,
                                    boolean inbound)

### release

    public void release()