Class FragmentedMessage


  • class FragmentedMessage
    extends Object
    Gather fragments of I2NPMessages at a tunnel endpoint, making them available for reading when complete. Warning - this is all unsynchronized here - receivers must implement synchronization
    • Constructor Detail

      • FragmentedMessage

        public FragmentedMessage​(I2PAppContext ctx,
                                 long messageId)
    • Method Detail

      • receive

        public boolean receive​(int fragmentNum,
                               byte[] payload,
                               int offset,
                               int length,
                               boolean isLast)
        Receive a followup fragment, though one of these may arrive at the endpoint prior to the fragment # 0.
        Parameters:
        fragmentNum - sequence number within the message (1 - 63)
        payload - data for the fragment non-null
        offset - index into the payload where the fragment data starts (past headers/etc)
        length - how much past the offset should we snag?
        isLast - is this the last fragment in the message?
      • receive

        public boolean receive​(byte[] payload,
                               int offset,
                               int length,
                               boolean isLast,
                               Hash toRouter,
                               TunnelId toTunnel)
        Receive the first fragment (#0) and related metadata. This may not be the first one to arrive at the endpoint however.
        Parameters:
        payload - data for the fragment non-null
        offset - index into the payload where the fragment data starts (past headers/etc)
        length - how much past the offset should we snag?
        isLast - is this the last fragment in the message?
        toRouter - what router is this destined for (may be null)
        toTunnel - what tunnel is this destined for (may be null)
      • getMessageId

        public long getMessageId()
      • getTargetRouter

        public Hash getTargetRouter()
      • getTargetTunnel

        public TunnelId getTargetTunnel()
      • getFragmentCount

        public int getFragmentCount()
      • getExpireEvent

        public SimpleTimer2.TimedEvent getExpireEvent()
        used in the fragment handler so we can cancel the expire event on success
      • isComplete

        public boolean isComplete()
        have we received all of the fragments?
      • getCompleteSize

        public int getCompleteSize()
      • getLifetime

        public long getLifetime()
        how long has this fragmented message been alive?
      • getReleased

        public boolean getReleased()
      • toByteArray

        public byte[] toByteArray()
      • getReleasedAfter

        public long getReleasedAfter()
      • failed

        public void failed()