net.i2p.router.tunnel
Class FragmentHandler

java.lang.Object
  extended by net.i2p.router.tunnel.FragmentHandler
Direct Known Subclasses:
RouterFragmentHandler

public class FragmentHandler
extends java.lang.Object

Handle fragments at the endpoint of a tunnel, peeling off fully completed I2NPMessages when they arrive, and dropping fragments if they take too long to arrive.


Nested Class Summary
static interface FragmentHandler.DefragmentedReceiver
          Receive messages out of the tunnel endpoint.
 
Field Summary
(package private) static byte MASK_EXTENDED
          are there follow up headers?
(package private) static byte MASK_FRAGMENTED
          is this the first of a fragmented message?
(package private) static byte MASK_IS_SUBSEQUENT
          is this a follw up byte?
(package private) static byte MASK_TYPE
          how should this be delivered.
(package private) static long MAX_DEFRAGMENT_TIME
          don't wait more than 60s to defragment the partial message
(package private) static short TYPE_LOCAL
           
(package private) static short TYPE_ROUTER
           
(package private) static short TYPE_TUNNEL
           
 
Constructor Summary
FragmentHandler(I2PAppContext context, FragmentHandler.DefragmentedReceiver receiver)
           
 
Method Summary
 int getCompleteCount()
           
 int getFailedCount()
           
protected  void noteCompletion(long messageId)
           
protected  void noteFailure(long messageId, java.lang.String status)
           
protected  void noteReception(long messageId, int fragmentId, java.lang.Object status)
           
 void receiveTunnelMessage(byte[] preprocessed, int offset, int length)
          Receive the raw preprocessed message at the endpoint, parsing out each of the fragments, using those to fill various FragmentedMessages, and sending the resulting I2NPMessages where necessary.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_DEFRAGMENT_TIME

static long MAX_DEFRAGMENT_TIME
don't wait more than 60s to defragment the partial message


MASK_IS_SUBSEQUENT

static final byte MASK_IS_SUBSEQUENT
is this a follw up byte?

See Also:
Constant Field Values

MASK_TYPE

static final byte MASK_TYPE
how should this be delivered. shift this 5 the right and get TYPE_*

See Also:
Constant Field Values

MASK_FRAGMENTED

static final byte MASK_FRAGMENTED
is this the first of a fragmented message?

See Also:
Constant Field Values

MASK_EXTENDED

static final byte MASK_EXTENDED
are there follow up headers?

See Also:
Constant Field Values

TYPE_LOCAL

static final short TYPE_LOCAL
See Also:
Constant Field Values

TYPE_TUNNEL

static final short TYPE_TUNNEL
See Also:
Constant Field Values

TYPE_ROUTER

static final short TYPE_ROUTER
See Also:
Constant Field Values
Constructor Detail

FragmentHandler

public FragmentHandler(I2PAppContext context,
                       FragmentHandler.DefragmentedReceiver receiver)
Method Detail

receiveTunnelMessage

public void receiveTunnelMessage(byte[] preprocessed,
                                 int offset,
                                 int length)
Receive the raw preprocessed message at the endpoint, parsing out each of the fragments, using those to fill various FragmentedMessages, and sending the resulting I2NPMessages where necessary. The received fragments are all verified.


getCompleteCount

public int getCompleteCount()

getFailedCount

public int getFailedCount()

noteReception

protected void noteReception(long messageId,
                             int fragmentId,
                             java.lang.Object status)

noteCompletion

protected void noteCompletion(long messageId)

noteFailure

protected void noteFailure(long messageId,
                           java.lang.String status)