Package net.i2p.router.transport.udp
Class InboundEstablishState
java.lang.Object
net.i2p.router.transport.udp.InboundEstablishState
- Direct Known Subclasses:
InboundEstablishState2
Data for a new connection being established, where the remote peer has
initiated the connection with us. In other words, they are Alice and
we are Bob.
TODO do all these methods need to be synchronized?
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionprotected final byte[]
protected final int
protected byte[]
protected final int
protected final RouterContext
protected int
protected InboundEstablishState.InboundState
protected final long
protected boolean
protected long
protected final Log
protected long
protected RouterIdentity
protected RouterIdentity
protected final RemoteHostId
protected int
protected long
protected static final long
max delay including backoff This should be a little shorter than for outbound.protected static final long
basic delay before backoff Transmissions at 0, 1, 3, 7 sec This should be a little shorter than for outbound. -
Constructor Summary
ModifierConstructorDescriptionInboundEstablishState
(RouterContext ctx, byte[] remoteIP, int remotePort, int localPort, DHSessionKeyBuilder dh, UDPPacketReader.SessionRequestReader req) protected
InboundEstablishState
(RouterContext ctx, InetSocketAddress addr) For SSU2 -
Method Summary
Modifier and TypeMethodDescriptionvoid
addMessage
(OutNetMessage msg) Queue a message to be sent after the session is established.void
complete()
Notify successful completionprotected boolean
Have we fully received the SessionConfirmed messages from Alice? Caller must synch on this.void
note that we just sent a SessionCreated packetvoid
fail()
void
Generates session key and mac key.Who is Alice (null if forged/unknown) Note that this isn't really confirmed - see below.long
long
how long have we been trying to establish this session?Pull from the message queuelong
byte[]
byte[]
(package private) RemoteHostId
RemoteHostId, uniquely identifies an attempt(package private) int
getRTT()
byte[]
what IP do they appear to be on?int
what port number do they appear to be coming from?long
long
byte[]
getSentY()
getState()
int
boolean
boolean
True (default) if no extended options in session request, or value of flag bit in the extended options.protected void
Call from synchronized method onlyvoid
void
Note that while a SessionConfirmed could in theory be fragmented, in practice a RouterIdentity is 387 bytes and a single fragment is 512 bytes max, so it will never be fragmented.void
boolean
void
setSentRelayTag
(long tag) toString()
-
Field Details
-
_context
-
_log
-
_bobIP
protected byte[] _bobIP -
_bobPort
protected final int _bobPort -
_aliceIP
protected final byte[] _aliceIP -
_alicePort
protected final int _alicePort -
_sentRelayTag
protected long _sentRelayTag -
_receivedUnconfirmedIdentity
-
_receivedConfirmedIdentity
-
_establishBegin
protected final long _establishBegin -
_lastSend
protected long _lastSend -
_nextSend
protected long _nextSend -
_remoteHostId
-
_currentState
-
_createdSentCount
protected int _createdSentCount -
_introductionRequested
protected boolean _introductionRequested -
_rtt
protected int _rtt -
RETRANSMIT_DELAY
protected static final long RETRANSMIT_DELAYbasic delay before backoff Transmissions at 0, 1, 3, 7 sec This should be a little shorter than for outbound.- See Also:
-
MAX_DELAY
protected static final long MAX_DELAYmax delay including backoff This should be a little shorter than for outbound.- See Also:
-
-
Constructor Details
-
InboundEstablishState
public InboundEstablishState(RouterContext ctx, byte[] remoteIP, int remotePort, int localPort, DHSessionKeyBuilder dh, UDPPacketReader.SessionRequestReader req) - Parameters:
localPort
- Must be our external port, otherwise the signature of the SessionCreated message will be bad if the external port != the internal port.
-
InboundEstablishState
For SSU2- Since:
- 0.9.54
-
-
Method Details
-
getVersion
public int getVersion()- Since:
- 0.9.54
-
getState
-
isComplete
public boolean isComplete()- Returns:
- if previously complete
-
complete
public void complete()Notify successful completion -
addMessage
Queue a message to be sent after the session is established. This will only happen if we decide to send something during establishment- Since:
- 0.9.2
-
getNextQueuedMessage
Pull from the message queue- Returns:
- null if none
- Since:
- 0.9.2
-
receiveSessionRequest
-
sessionRequestReceived
public boolean sessionRequestReceived() -
getReceivedX
public byte[] getReceivedX() -
getReceivedOurIP
public byte[] getReceivedOurIP() -
isIntroductionRequested
public boolean isIntroductionRequested()True (default) if no extended options in session request, or value of flag bit in the extended options.- Since:
- 0.9.24
-
generateSessionKey
Generates session key and mac key. -
getCipherKey
-
getMACKey
-
getSentIP
public byte[] getSentIP()what IP do they appear to be on? -
getSentPort
public int getSentPort()what port number do they appear to be coming from? -
getSentY
public byte[] getSentY() -
fail
public void fail() -
getSentRelayTag
public long getSentRelayTag() -
setSentRelayTag
public void setSentRelayTag(long tag) -
getSentSignedOnTime
public long getSentSignedOnTime() -
prepareSessionCreated
public void prepareSessionCreated() -
getSentSignature
-
createdPacketSent
public void createdPacketSent()note that we just sent a SessionCreated packet -
getLifetime
public long getLifetime()how long have we been trying to establish this session? -
getEstablishBeginTime
public long getEstablishBeginTime() -
getNextSendTime
public long getNextSendTime()- Returns:
- rcv time after receiving a packet (including after constructor), send time + delay after sending a packet
-
getRTT
int getRTT() -
getRemoteHostId
RemoteHostId getRemoteHostId()RemoteHostId, uniquely identifies an attempt -
receiveSessionConfirmed
Note that while a SessionConfirmed could in theory be fragmented, in practice a RouterIdentity is 387 bytes and a single fragment is 512 bytes max, so it will never be fragmented. -
confirmedFullyReceived
protected boolean confirmedFullyReceived()Have we fully received the SessionConfirmed messages from Alice? Caller must synch on this. -
getConfirmedIdentity
Who is Alice (null if forged/unknown) Note that this isn't really confirmed - see below. -
packetReceived
protected void packetReceived()Call from synchronized method only -
toString
-