Package net.i2p.router.transport.udp
Class OutboundEstablishState
- java.lang.Object
-
- net.i2p.router.transport.udp.OutboundEstablishState
-
- Direct Known Subclasses:
OutboundEstablishState2
class OutboundEstablishState extends Object
Data for a new connection being established, where we initiated the connection with a remote peer. In other words, we are Alice and they are Bob.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
OutboundEstablishState.OutboundState
-
Field Summary
Fields Modifier and Type Field Description protected byte[]
_aliceIP
protected int
_alicePort
protected byte[]
_bobIP
protected int
_bobPort
protected RouterContext
_context
protected OutboundEstablishState.OutboundState
_currentState
protected long
_establishBegin
protected long
_lastSend
protected Log
_log
protected long
_nextSend
protected long
_receivedRelayTag
protected RemoteHostId
_remoteHostId
protected RouterIdentity
_remotePeer
protected int
_requestSentCount
protected long
_requestSentTime
protected int
_rtt
protected static long
RETRANSMIT_DELAY
basic delay before backoff Transmissions at 0, 1.25, 3.75, 8.75 sec This should be a little longer than for inbound.
-
Constructor Summary
Constructors Modifier Constructor Description protected
OutboundEstablishState(RouterContext ctx, RemoteHostId claimedAddress, RemoteHostId remoteHostId, RouterIdentity remotePeer, boolean needIntroduction, SessionKey introKey, UDPAddress addr)
For SSU2
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addMessage(OutNetMessage msg)
Queue a message to be sent after the session is established.boolean
complete()
void
confirmedPacketsSent()
note that we just sent the SessionConfirmed packetvoid
dataReceived()
we have received a real data packet, so we're done establishingvoid
fail()
The SessionCreated validation failed(package private) RemoteHostId
getClaimedAddress()
This will never be a hash-based address.long
getConfirmedSentTime()
long
getEstablishBeginTime()
SessionKey
getIntroKey()
Bob's introduction key, as published in the netdblong
getIntroNonce()
long
getIntroSentTime()
long
getLifetime()
how long have we been trying to establish this session?long
getLifetime(long now)
how long have we been trying to establish this session?OutNetMessage
getNextQueuedMessage()
long
getNextSendTime()
byte[]
getReceivedIP()
int
getReceivedPort()
long
getReceivedRelayTag()
long
getReceivedSignedOnTime()
UDPAddress
getRemoteAddress()
(package private) RemoteHostId
getRemoteHostId()
This should be what the state is currently indexed by in the _outboundStates table.RouterIdentity
getRemoteIdentity()
long
getRequestSentTime()
(package private) int
getRTT()
byte[]
getSentIP()
The remote side (Bob) - note that in some places he's called Charlie.int
getSentPort()
The remote side (Bob) - note that in some places he's called Charlie.long
getSentSignedOnTime()
OutboundEstablishState.OutboundState
getState()
int
getVersion()
void
introduced(byte[] bobIP, int bobPort)
This changes the remoteHostId from a hash-based one or possibly incorrect IP/port to what the introducer told us.void
introductionFailed()
void
introSent()
note that we just sent the RelayRequest packetboolean
isExtendedOptionsAllowed()
Are we allowed to send extended options to this peer?boolean
isFirstMessageOurDSM()
Is the first message queued our own DatabaseStoreMessage?boolean
needIntroduction()
Should we ask this peer to be an introducer for us? Ignored unless allowExtendedOptions is trueprotected void
packetReceived()
Call from synchronized method only(package private) boolean
receiveHolePunch()
Accelerate response to RelayResponse if we haven't sent it yet.void
requestSent()
note that we just sent the SessionRequest packetvoid
setIntroNonce(long nonce)
String
toString()
boolean
validateSessionCreated()
Blocking call (run in the establisher thread) to determine if the session was created properly.
-
-
-
Field Detail
-
_context
protected final RouterContext _context
-
_log
protected final Log _log
-
_bobIP
protected byte[] _bobIP
-
_bobPort
protected int _bobPort
-
_aliceIP
protected byte[] _aliceIP
-
_alicePort
protected int _alicePort
-
_receivedRelayTag
protected long _receivedRelayTag
-
_establishBegin
protected final long _establishBegin
-
_lastSend
protected long _lastSend
-
_nextSend
protected long _nextSend
-
_remoteHostId
protected RemoteHostId _remoteHostId
-
_remotePeer
protected final RouterIdentity _remotePeer
-
_currentState
protected OutboundEstablishState.OutboundState _currentState
-
_requestSentCount
protected int _requestSentCount
-
_requestSentTime
protected long _requestSentTime
-
_rtt
protected int _rtt
-
RETRANSMIT_DELAY
protected static final long RETRANSMIT_DELAY
basic delay before backoff Transmissions at 0, 1.25, 3.75, 8.75 sec This should be a little longer than for inbound.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
OutboundEstablishState
protected OutboundEstablishState(RouterContext ctx, RemoteHostId claimedAddress, RemoteHostId remoteHostId, RouterIdentity remotePeer, boolean needIntroduction, SessionKey introKey, UDPAddress addr)
For SSU2- Since:
- 0.9.54
-
-
Method Detail
-
getVersion
public int getVersion()
- Since:
- 0.9.54
-
getState
public OutboundEstablishState.OutboundState getState()
-
complete
public boolean complete()
- Returns:
- if previously complete
-
getRemoteAddress
public UDPAddress getRemoteAddress()
- Returns:
- non-null
-
setIntroNonce
public void setIntroNonce(long nonce)
-
getIntroNonce
public long getIntroNonce()
- Returns:
- -1 if unset
-
isExtendedOptionsAllowed
public boolean isExtendedOptionsAllowed()
Are we allowed to send extended options to this peer?- Since:
- 0.9.24
-
needIntroduction
public boolean needIntroduction()
Should we ask this peer to be an introducer for us? Ignored unless allowExtendedOptions is true- Since:
- 0.9.24
-
getRTT
int getRTT()
-
addMessage
public void addMessage(OutNetMessage msg)
Queue a message to be sent after the session is established.
-
isFirstMessageOurDSM
public boolean isFirstMessageOurDSM()
Is the first message queued our own DatabaseStoreMessage?- Since:
- 0.9.12
-
getNextQueuedMessage
public OutNetMessage getNextQueuedMessage()
- Returns:
- null if none
-
getRemoteIdentity
public RouterIdentity getRemoteIdentity()
-
getIntroKey
public SessionKey getIntroKey()
Bob's introduction key, as published in the netdb
-
getSentIP
public byte[] getSentIP()
The remote side (Bob) - note that in some places he's called Charlie. Warning - may change after introduction. May be null before introduction.
-
getSentPort
public int getSentPort()
The remote side (Bob) - note that in some places he's called Charlie. Warning - may change after introduction. May be -1 before introduction.
-
validateSessionCreated
public boolean validateSessionCreated()
Blocking call (run in the establisher thread) to determine if the session was created properly. If it wasn't, all the SessionCreated remnants are dropped (perhaps they were spoofed, etc) so that we can receive another one Generates session key and mac key.- Returns:
- true if valid
-
fail
public void fail()
The SessionCreated validation failed
-
getReceivedRelayTag
public long getReceivedRelayTag()
-
getSentSignedOnTime
public long getSentSignedOnTime()
-
getReceivedSignedOnTime
public long getReceivedSignedOnTime()
-
getReceivedIP
public byte[] getReceivedIP()
-
getReceivedPort
public int getReceivedPort()
-
confirmedPacketsSent
public void confirmedPacketsSent()
note that we just sent the SessionConfirmed packet
-
getConfirmedSentTime
public long getConfirmedSentTime()
- Returns:
- when we sent the first SessionConfirmed packet, or 0
- Since:
- 0.9.2
-
requestSent
public void requestSent()
note that we just sent the SessionRequest packet
-
getRequestSentTime
public long getRequestSentTime()
- Returns:
- when we sent the first SessionRequest packet, or 0
- Since:
- 0.9.2
-
introSent
public void introSent()
note that we just sent the RelayRequest packet
-
getIntroSentTime
public long getIntroSentTime()
- Returns:
- when we sent the first RelayRequest packet, or 0
- Since:
- 0.9.2
-
introductionFailed
public void introductionFailed()
-
introduced
public void introduced(byte[] bobIP, int bobPort)
This changes the remoteHostId from a hash-based one or possibly incorrect IP/port to what the introducer told us. All params are for the remote end (NOT the introducer) and must have been validated already.
-
receiveHolePunch
boolean receiveHolePunch()
Accelerate response to RelayResponse if we haven't sent it yet.- Returns:
- true if we should send the SessionRequest now
- Since:
- 0.9.15
-
getLifetime
public long getLifetime()
how long have we been trying to establish this session?
-
getLifetime
public long getLifetime(long now)
how long have we been trying to establish this session?- Since:
- 0.9.57
-
getEstablishBeginTime
public long getEstablishBeginTime()
-
getNextSendTime
public long getNextSendTime()
- Returns:
- 0 at initialization (to force sending session request), rcv time after receiving a packet, send time + delay after sending a packet (including session request)
-
getRemoteHostId
RemoteHostId getRemoteHostId()
This should be what the state is currently indexed by in the _outboundStates table. Beware - During introduction, this is a router hash. After introduced() is called, this is set to the IP/port the introducer told us.- Returns:
- non-null
-
getClaimedAddress
RemoteHostId getClaimedAddress()
This will never be a hash-based address. This is the 'claimed' (unverified) address from the netdb, or null. It is not changed after introduction. Use getRemoteHostId() for the verified address.- Returns:
- may be null
-
dataReceived
public void dataReceived()
we have received a real data packet, so we're done establishing
-
packetReceived
protected void packetReceived()
Call from synchronized method only
-
-