Package net.i2p.router.transport.udp
Class EstablishmentManager
java.lang.Object
net.i2p.router.transport.udp.EstablishmentManager
Coordinate the establishment of new sessions - both inbound and outbound.
This has its own thread to add packets to the packet queue when necessary,
as well as to drop any failed establishment attempts.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longstatic final intKill any inbound that takes more than this One round trip (Created-Confirmed) Note: could be two round trips for SSU2 with retrystatic final longthe relay tag is a 4-byte field in the protocolstatic final intmax before receiving a response to a single message during outbound establishment -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddOutboundToken(RemoteHostId peer, long token, long expires) Remember a token that can be used later to connect to the peervoidestablish(OutNetMessage msg) Send the message to its specified recipient by establishing a connection with them and sending it off.(package private) InboundEstablishStategetInboundState(RemoteHostId from) Grab the active establishing stategetInboundToken(RemoteHostId peer) Get a token that can be used later for the peer to connect to usgetInboundToken(RemoteHostId peer, long expiration) Get a token that can be used later for the peer to connect to us.A database store message with our router info(package private) OutboundEstablishStategetOutboundState(RemoteHostId from) Grab the active establishing statelonggetOutboundToken(RemoteHostId peer) Get a token to connect to the peervoidipChanged(boolean isIPv6) Remove our tokens for this lengthbooleanisInboundTokenValid(RemoteHostId peer, long token) Is the token from this peer valid?(package private) booleanisValid(byte[] ip, int port) Are IP and port valid? This is only for checking the relay response.voidRemove all tokens(package private) PeerStateA data packet arrived on an outbound connection being established, which means its complete (yay!).(package private) voidreceiveHolePunch(RemoteHostId id, UDPPacket packet) Called from PacketHandler.(package private) voidreceiveRelayResponse(PeerState2 bob, long nonce, int code, byte[] data) We are Alice, we sent a RelayRequest to Bob and got a RelayResponse back.(package private) voidreceiveRetry(OutboundEstablishState2 state, UDPPacket packet) Got a Retry (in response to our outbound SessionRequest or TokenRequest) SSU 2 only.(package private) voidreceiveSessionConfirmed(InboundEstablishState2 state, UDPPacket packet) got a SessionConfirmed (should only happen as part of an inbound establishment) SSU 2 only.(package private) voidreceiveSessionCreated(OutboundEstablishState2 state, UDPPacket packet) Got a SessionCreated (in response to our outbound SessionRequest) SSU 2 only.(package private) voidGot a SessionDestroy - maybe during an inbound establish? TODO - PacketHandler won't look up inbound establishes As this packet was essentially unauthenticated (i.e.(package private) voidreceiveSessionDestroy(RemoteHostId from, OutboundEstablishState state) Got a SessionDestroy during outbound establish SSU 2(package private) voidreceiveSessionDestroy(RemoteHostId from, PeerState state) Got a SessionDestroy on an established conn SSU 2(package private) voidreceiveSessionOrTokenRequest(RemoteHostId from, InboundEstablishState2 state, UDPPacket packet) Got a SessionRequest OR a TokenRequest (initiates an inbound establishment) SSU 2 only.booleanShould we allow another inbound establishment?voidshutdown()voidstartup()
-
Field Details
-
MAX_IB_ESTABLISH_TIME
public static final int MAX_IB_ESTABLISH_TIMEKill any inbound that takes more than this One round trip (Created-Confirmed) Note: could be two round trips for SSU2 with retry- See Also:
-
OB_MESSAGE_TIMEOUT
public static final int OB_MESSAGE_TIMEOUTmax before receiving a response to a single message during outbound establishment- See Also:
-
IB_TOKEN_EXPIRATION
public static final long IB_TOKEN_EXPIRATION- See Also:
-
MAX_TAG_VALUE
public static final long MAX_TAG_VALUEthe relay tag is a 4-byte field in the protocol- See Also:
-
-
Constructor Details
-
EstablishmentManager
-
-
Method Details
-
startup
public void startup() -
shutdown
public void shutdown() -
getInboundState
Grab the active establishing state- Returns:
- null if none
-
getOutboundState
Grab the active establishing state- Returns:
- null if none
-
establish
Send the message to its specified recipient by establishing a connection with them and sending it off. This call does not block, and on failure, the message is failed. Note - if we go back to multiple PacketHandler threads, this may need more locking. -
shouldAllowInboundEstablishment
public boolean shouldAllowInboundEstablishment()Should we allow another inbound establishment?- Since:
- 0.9.2
-
receiveSessionOrTokenRequest
void receiveSessionOrTokenRequest(RemoteHostId from, InboundEstablishState2 state, UDPPacket packet) Got a SessionRequest OR a TokenRequest (initiates an inbound establishment) SSU 2 only.- Parameters:
state- as looked up in PacketHandler, but null unless retransmitted or retry sentpacket- header decrypted only- Since:
- 0.9.54
-
receiveSessionConfirmed
got a SessionConfirmed (should only happen as part of an inbound establishment) SSU 2 only.- Parameters:
state- non-nullpacket- header decrypted only- Since:
- 0.9.54
-
receiveSessionCreated
Got a SessionCreated (in response to our outbound SessionRequest) SSU 2 only.- Parameters:
state- non-nullpacket- header decrypted only- Since:
- 0.9.54
-
receiveRetry
Got a Retry (in response to our outbound SessionRequest or TokenRequest) SSU 2 only.- Since:
- 0.9.54
-
receiveSessionDestroy
Got a SessionDestroy on an established conn SSU 2- Since:
- 0.8.1
-
receiveSessionDestroy
Got a SessionDestroy during outbound establish SSU 2- Since:
- 0.8.1
-
receiveSessionDestroy
Got a SessionDestroy - maybe during an inbound establish? TODO - PacketHandler won't look up inbound establishes As this packet was essentially unauthenticated (i.e. intro key, not session key) we just log it as it could be spoofed. SSU 2- Since:
- 0.8.1
-
receiveData
A data packet arrived on an outbound connection being established, which means its complete (yay!). This is a blocking call, more than I'd like...- Returns:
- the new PeerState
-
getOurInfo
A database store message with our router info- Returns:
- non-null
- Since:
- 0.9.24 split from sendOurInfo(), public since 0.9.55 for UDPTransport
-
receiveRelayResponse
We are Alice, we sent a RelayRequest to Bob and got a RelayResponse back. Time and version already checked by caller. SSU 2 only.- Parameters:
data- including nonce, including token if code == 0- Since:
- 0.9.55
-
receiveHolePunch
Called from PacketHandler. Accelerate response to RelayResponse if we haven't sent it yet. SSU 2 only.- Parameters:
id- non-nullpacket- header already decrypted- Since:
- 0.9.55
-
isValid
boolean isValid(byte[] ip, int port) Are IP and port valid? This is only for checking the relay response. Allow IPv6 as of 0.9.50. Refuse anybody in the same /16- Since:
- 0.9.3, pkg private since 0.9.45 for PacketBuider
-
addOutboundToken
Remember a token that can be used later to connect to the peer- Parameters:
token- nonzeroexpires- absolute time- Since:
- 0.9.54
-
getOutboundToken
Get a token to connect to the peer- Returns:
- 0 if none available
- Since:
- 0.9.54
-
ipChanged
public void ipChanged(boolean isIPv6) Remove our tokens for this length- Since:
- 0.9.54
-
portChanged
public void portChanged()Remove all tokens- Since:
- 0.9.54
-
getInboundToken
Get a token that can be used later for the peer to connect to us- Since:
- 0.9.54
-
getInboundToken
Get a token that can be used later for the peer to connect to us.- Parameters:
expiration- time from now, will be reduced if necessary based on cache eviction time.- Returns:
- non-null
- Since:
- 0.9.55
-
isInboundTokenValid
Is the token from this peer valid?- Returns:
- valid
- Since:
- 0.9.54
-