Class UDPPacket

java.lang.Object
net.i2p.router.transport.udp.UDPPacket
All Implemented Interfaces:
CDPQEntry, CDQEntry, PQEntry

class UDPPacket extends Object implements CDPQEntry
Basic delivery unit containing the datagram. This also maintains a cache of object instances to allow rapid reuse.
  • Field Details

    • MAX_PACKET_SIZE

      static final int MAX_PACKET_SIZE
      Actually 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:
    • IV_SIZE

      public static final int IV_SIZE
      See Also:
    • MAC_SIZE

      public static final int MAC_SIZE
      See Also:
    • PAYLOAD_TYPE_SESSION_REQUEST

      public static final int PAYLOAD_TYPE_SESSION_REQUEST
      Message types, 4 bits max
      See Also:
    • PAYLOAD_TYPE_SESSION_CREATED

      public static final int PAYLOAD_TYPE_SESSION_CREATED
      See Also:
    • PAYLOAD_TYPE_SESSION_CONFIRMED

      public static final int PAYLOAD_TYPE_SESSION_CONFIRMED
      See Also:
    • PAYLOAD_TYPE_RELAY_REQUEST

      public static final int PAYLOAD_TYPE_RELAY_REQUEST
      See Also:
    • PAYLOAD_TYPE_RELAY_RESPONSE

      public static final int PAYLOAD_TYPE_RELAY_RESPONSE
      See Also:
    • PAYLOAD_TYPE_RELAY_INTRO

      public static final int PAYLOAD_TYPE_RELAY_INTRO
      See Also:
    • PAYLOAD_TYPE_DATA

      public static final int PAYLOAD_TYPE_DATA
      See Also:
    • PAYLOAD_TYPE_TEST

      public static final int PAYLOAD_TYPE_TEST
      See Also:
    • PAYLOAD_TYPE_SESSION_DESTROY

      public static final int PAYLOAD_TYPE_SESSION_DESTROY
      Since:
      0.8.1
      See Also:
    • MAX_PAYLOAD_TYPE

      public static final int MAX_PAYLOAD_TYPE
      See Also:
  • Method Details

    • setSeqNum

      public void setSeqNum(long num)
      CDPQEntry
      Specified by:
      setSeqNum in interface PQEntry
      Since:
      0.9.53
    • getSeqNum

      public long getSeqNum()
      CDPQEntry
      Specified by:
      getSeqNum in interface PQEntry
      Since:
      0.9.53
    • getPacket

      public DatagramPacket getPacket()
    • getPriority

      public int getPriority()
      Description copied from interface: PQEntry
      Higher is higher priority
      Specified by:
      getPriority in interface PQEntry
    • setPriority

      public void setPriority(int pri)
      Since:
      0.9.53
    • 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()
    • setEnqueueTime

      public void setEnqueueTime(long now)
      For CDQ
      Specified by:
      setEnqueueTime in interface CDQEntry
      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 interface CDQEntry
      Since:
      0.9.3
    • getTimeSinceReceived

      long getTimeSinceReceived()
      a packet handler has pulled it off the inbound queue
    • requestInboundBandwidth

      @Deprecated public void requestInboundBandwidth()
      Deprecated.
      unused
      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
    • 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

      public FIFOBandwidthLimiter.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. Call after dequeueing.
      Since:
      0.9.21
    • toString

      public String toString()
      how many times we tried to validate the packet
      Overrides:
      toString in class Object
    • acquire

      public static UDPPacket acquire(RouterContext ctx, boolean inbound)
      Parameters:
      inbound - unused
    • drop

      public void drop()
      For CDQ
      Specified by:
      drop in interface CDQEntry
      Since:
      0.9.3
    • release

      public void release()
    • clearCache

      public static void clearCache()
      Call at shutdown/startup to not hold ctx refs
      Since:
      0.9.2