|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.i2p.router.tunnel.FragmentedMessage
class FragmentedMessage
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 Summary | |
---|---|
FragmentedMessage(I2PAppContext ctx,
long messageId)
|
Method Summary | |
---|---|
void |
failed()
|
int |
getCompleteSize()
|
SimpleTimer2.TimedEvent |
getExpireEvent()
used in the fragment handler so we can cancel the expire event on success |
int |
getFragmentCount()
|
long |
getLifetime()
how long has this fragmented message been alive? |
long |
getMessageId()
|
boolean |
getReleased()
|
long |
getReleasedAfter()
|
Hash |
getTargetRouter()
|
TunnelId |
getTargetTunnel()
|
boolean |
isComplete()
have we received all of the fragments? |
boolean |
receive(byte[] payload,
int offset,
int length,
boolean isLast,
Hash toRouter,
TunnelId toTunnel)
Receive the first fragment (#0) and related metadata. |
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. |
void |
setExpireEvent(SimpleTimer2.TimedEvent evt)
|
byte[] |
toByteArray()
|
String |
toString()
public InputStream getInputStream() { return new FragmentInputStream(); } private class FragmentInputStream extends InputStream { private int _fragment; private int _offset; public FragmentInputStream() { _fragment = 0; _offset = 0; } public int read() throws IOException { while (true) { ByteArray ba = _fragments[_fragment]; if (ba == null) return -1; if (_offset >= ba.getValid()) { _fragment++; _offset = 0; } else { byte rv = ba.getData()[ba.getOffset()+_offset]; _offset++; return rv; } } } } |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Constructor Detail |
---|
public FragmentedMessage(I2PAppContext ctx, long messageId)
Method Detail |
---|
public boolean receive(int fragmentNum, byte[] payload, int offset, int length, boolean isLast)
fragmentNum
- sequence number within the message (1 - 63)payload
- data for the fragment non-nulloffset
- 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?public boolean receive(byte[] payload, int offset, int length, boolean isLast, Hash toRouter, TunnelId toTunnel)
payload
- data for the fragment non-nulloffset
- 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)public long getMessageId()
public Hash getTargetRouter()
public TunnelId getTargetTunnel()
public int getFragmentCount()
public SimpleTimer2.TimedEvent getExpireEvent()
public void setExpireEvent(SimpleTimer2.TimedEvent evt)
public boolean isComplete()
public int getCompleteSize()
public long getLifetime()
public boolean getReleased()
public byte[] toByteArray()
public long getReleasedAfter()
public void failed()
public String toString()
toString
in class Object
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |