Class 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 Detail

      • 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:
        Constant Field Values
      • PAYLOAD_TYPE_SESSION_REQUEST

        public static final int PAYLOAD_TYPE_SESSION_REQUEST
        Message 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_SESSION_DESTROY

        public static final int PAYLOAD_TYPE_SESSION_DESTROY
        Since:
        0.8.1
        See Also:
        Constant Field Values
      • HEADER_FLAG_REKEY

        public static final byte HEADER_FLAG_REKEY
        Defined 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_OPTIONS
        Defined 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_TAG
        set 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
    • Method Detail

      • 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
      • validate

        public boolean validate​(SessionKey macKey,
                                HMACGenerator hmac)
        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)
      • 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