Class InboundMessageState

  • All Implemented Interfaces:
    CDQEntry

    class InboundMessageState
    extends Object
    implements CDQEntry
    Hold the raw data fragments of an inbound message. Warning - there is no synchronization in this class, take care in InboundMessageFragments to avoid use-after-release, etc.
    • Constructor Detail

      • InboundMessageState

        public InboundMessageState​(RouterContext ctx,
                                   long messageId,
                                   Hash from)
      • InboundMessageState

        public InboundMessageState​(RouterContext ctx,
                                   long messageId,
                                   Hash from,
                                   UDPPacketReader.DataReader data,
                                   int dataFragment)
                            throws DataFormatException
        Create a new IMS and read in the data from the fragment. Do NOT call receiveFragment for the same fragment afterwards. This is more efficient if the fragment is the last (and probably only) fragment. The main savings is not allocating ByteArray[64].
        Throws:
        DataFormatException - if the fragment was corrupt
        Since:
        0.9.9
    • Method Detail

      • isComplete

        public boolean isComplete()
        May not be valid after released. Probably doesn't need to be synced by caller, given the order of events in receiveFragment() above, but you might want to anyway to be safe.
      • isExpired

        public boolean isExpired()
      • getLifetime

        public long getLifetime()
      • setEnqueueTime

        public void setEnqueueTime​(long now)
        For CDQ
        Specified by:
        setEnqueueTime in interface CDQEntry
        Since:
        0.9.3
      • getEnqueueTime

        public long getEnqueueTime()
        For CDQ
        Specified by:
        getEnqueueTime in interface CDQEntry
        Since:
        0.9.3
      • drop

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

        public Hash getFrom()
      • getMessageId

        public long getMessageId()
      • getCompleteSize

        public int getCompleteSize()
        Throws:
        IllegalStateException - if released or not isComplete()
      • createACKBitfield

        public ACKBitfield createACKBitfield()
        Only call this if not complete. TODO remove this, have InboundMessageState implement ACKBitfield. FIXME synch here or PeerState.fetchPartialACKs()
      • releaseResources

        public void releaseResources()
      • getFragmentCount

        public int getFragmentCount()
      • toString

        public String toString()
        May not be valid if released, or may NPE on race with release, use with care in exception text
        Overrides:
        toString in class Object