net.i2p.client.streaming.impl
Class PacketLocal

java.lang.Object
  extended by net.i2p.client.streaming.impl.Packet
      extended by net.i2p.client.streaming.impl.PacketLocal
All Implemented Interfaces:
MessageOutputStream.WriteStatus

 class PacketLocal
extends Packet
implements MessageOutputStream.WriteStatus

This is the class used for outbound packets. coordinate local attributes about a packet - send time, ack time, number of retries, etc.


Field Summary
 
Fields inherited from class net.i2p.client.streaming.impl.Packet
_nacks, _optionFrom, _optionSignature, _session, DEFAULT_MAX_SIZE, FLAG_CLOSE, FLAG_DELAY_REQUESTED, FLAG_ECHO, FLAG_FROM_INCLUDED, FLAG_MAX_PACKET_SIZE_INCLUDED, FLAG_NO_ACK, FLAG_PROFILE_INTERACTIVE, FLAG_RESET, FLAG_SIGNATURE_INCLUDED, FLAG_SIGNATURE_REQUESTED, FLAG_SYNCHRONIZE, MAX_DELAY_REQUEST, MAX_PAYLOAD_SIZE, MAX_STREAM_ID, STREAM_ID_UNKNOWN
 
Constructor Summary
PacketLocal(I2PAppContext ctx, Destination to, Connection con)
          bound to a connection
PacketLocal(I2PAppContext ctx, Destination to, I2PSession session)
          not bound to a connection
 
Method Summary
 void ackReceived()
           
 void cancelled()
           
 StringBuilder formatAsString()
           
 int getAckTime()
          how long after packet creation was it acked?
 Connection getConnection()
           
 long getCreatedOn()
           
 SessionKey getKeyUsed()
          Deprecated. should always return null
 long getLastSend()
           
 long getLifetime()
           
 int getNACKs()
           
 int getNumSends()
           
 SimpleTimer2.TimedEvent getResendEvent()
           
 Set<SessionTag> getTagsSent()
          Deprecated. should always return null or an empty set
 Destination getTo()
           
 void incrementNACKs()
          Will force a fast restransmit on the 3rd call (FAST_RETRANSMIT_THRESHOLD) but only if it's the lowest unacked (see Connection.ResendPacketEvent)
 void incrementSends()
           
 void logTCPDump()
          Generate a pcap/tcpdump-compatible format, so we can use standard debugging tools.
 void prepare()
          last minute update of ack fields, just before write/sign
 void setKeyUsed(SessionKey key)
          Deprecated. I2PSession throws out the tags
 void setResendPacketEvent(SimpleTimer2.TimedEvent evt)
           
 void setTagsSent(Set<SessionTag> tags)
          Deprecated. I2PSession throws out the tags
 boolean shouldSign()
           
 void waitForAccept(int maxWaitMs)
          Blocks until outbound window is not full.
 void waitForCompletion(int maxWaitMs)
          block until the packet is acked from the far end
 boolean writeAccepted()
          Was the write was accepted.
 boolean writeFailed()
          did the write fail?
 int writeSignedPacket(byte[] buffer, int offset)
          Sign and write the packet to the buffer (starting at the offset) and return the number of bytes written.
 boolean writeSuccessful()
          did the write succeed?
 
Methods inherited from class net.i2p.client.streaming.impl.Packet
acquirePayload, getAckThrough, getLocalPort, getNacks, getOptionalDelay, getOptionalFrom, getOptionalMaxSize, getOptionalSignature, getPayload, getPayloadSize, getReceiveStreamId, getRemotePort, getResendDelay, getSendStreamId, getSequenceNum, getSession, isFlagSet, logTCPDump, readPacket, releasePayload, setAckThrough, setFlag, setFlag, setLocalPort, setNacks, setOptionalDelay, setOptionalFrom, setOptionalMaxSize, setOptionalSignature, setPayload, setReceiveStreamId, setRemotePort, setResendDelay, setSendStreamId, setSequenceNum, toId, toString, verifySignature, writePacket, writePacket
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

PacketLocal

public PacketLocal(I2PAppContext ctx,
                   Destination to,
                   I2PSession session)
not bound to a connection


PacketLocal

public PacketLocal(I2PAppContext ctx,
                   Destination to,
                   Connection con)
bound to a connection

Method Detail

getTo

public Destination getTo()

getKeyUsed

public SessionKey getKeyUsed()
Deprecated. should always return null


setKeyUsed

public void setKeyUsed(SessionKey key)
Deprecated. I2PSession throws out the tags


getTagsSent

public Set<SessionTag> getTagsSent()
Deprecated. should always return null or an empty set


setTagsSent

public void setTagsSent(Set<SessionTag> tags)
Deprecated. I2PSession throws out the tags


shouldSign

public boolean shouldSign()

prepare

public void prepare()
last minute update of ack fields, just before write/sign


getCreatedOn

public long getCreatedOn()

getLifetime

public long getLifetime()

incrementSends

public void incrementSends()

ackReceived

public void ackReceived()

cancelled

public void cancelled()

getResendEvent

public SimpleTimer2.TimedEvent getResendEvent()

getAckTime

public int getAckTime()
how long after packet creation was it acked?

Returns:
how long after packet creation the packet was ACKed in ms

getNumSends

public int getNumSends()

getLastSend

public long getLastSend()

getConnection

public Connection getConnection()
Returns:
null if not bound

incrementNACKs

public void incrementNACKs()
Will force a fast restransmit on the 3rd call (FAST_RETRANSMIT_THRESHOLD) but only if it's the lowest unacked (see Connection.ResendPacketEvent)


getNACKs

public int getNACKs()

setResendPacketEvent

public void setResendPacketEvent(SimpleTimer2.TimedEvent evt)

writeSignedPacket

public int writeSignedPacket(byte[] buffer,
                             int offset)
                      throws IllegalStateException
Sign and write the packet to the buffer (starting at the offset) and return the number of bytes written.

Parameters:
buffer - data to be written
offset - starting point in the buffer
Returns:
Count of bytes written
Throws:
IllegalStateException - if there is data missing or otherwise b0rked
Since:
0.9.20 moved from Packet

formatAsString

public StringBuilder formatAsString()
Overrides:
formatAsString in class Packet

waitForAccept

public void waitForAccept(int maxWaitMs)
                   throws IOException,
                          InterruptedException
Blocks until outbound window is not full. See Connection.packetSendChoke().

Specified by:
waitForAccept in interface MessageOutputStream.WriteStatus
Parameters:
maxWaitMs - MessageOutputStream is the only caller, generally with -1
Throws:
IOException
InterruptedException

waitForCompletion

public void waitForCompletion(int maxWaitMs)
                       throws IOException,
                              InterruptedException
block until the packet is acked from the far end

Specified by:
waitForCompletion in interface MessageOutputStream.WriteStatus
Parameters:
maxWaitMs - -1 = forever
Throws:
IOException
InterruptedException

writeAccepted

public boolean writeAccepted()
Description copied from interface: MessageOutputStream.WriteStatus
Was the write was accepted. aka did the socket not close?

Specified by:
writeAccepted in interface MessageOutputStream.WriteStatus

writeFailed

public boolean writeFailed()
Description copied from interface: MessageOutputStream.WriteStatus
did the write fail?

Specified by:
writeFailed in interface MessageOutputStream.WriteStatus

writeSuccessful

public boolean writeSuccessful()
Description copied from interface: MessageOutputStream.WriteStatus
did the write succeed?

Specified by:
writeSuccessful in interface MessageOutputStream.WriteStatus

logTCPDump

public void logTCPDump()
Generate a pcap/tcpdump-compatible format, so we can use standard debugging tools.