class EstablishmentManager extends Object
Modifier and Type | Class and Description |
---|---|
static class |
EstablishmentManager.Token |
Modifier and Type | Field and Description |
---|---|
static long |
IB_TOKEN_EXPIRATION |
static int |
MAX_IB_ESTABLISH_TIME
Kill any inbound that takes more than this
One round trip (Created-Confirmed)
Note: could be two round trips for SSU2 with retry
|
static long |
MAX_TAG_VALUE
the relay tag is a 4-byte field in the protocol
|
static int |
OB_MESSAGE_TIMEOUT
max before receiving a response to a single message during outbound establishment
|
Constructor and Description |
---|
EstablishmentManager(RouterContext ctx,
UDPTransport transport) |
Modifier and Type | Method and Description |
---|---|
void |
addOutboundToken(RemoteHostId peer,
long token,
long expires)
Remember a token that can be used later to connect to the peer
|
void |
establish(OutNetMessage msg)
Send the message to its specified recipient by establishing a connection
with them and sending it off.
|
(package private) InboundEstablishState |
getInboundState(RemoteHostId from)
Grab the active establishing state
|
EstablishmentManager.Token |
getInboundToken(RemoteHostId peer)
Get a token that can be used later for the peer to connect to us
|
EstablishmentManager.Token |
getInboundToken(RemoteHostId peer,
long expiration)
Get a token that can be used later for the peer to connect to us.
|
DatabaseStoreMessage |
getOurInfo()
A database store message with our router info
|
(package private) OutboundEstablishState |
getOutboundState(RemoteHostId from)
Grab the active establishing state
|
long |
getOutboundToken(RemoteHostId peer)
Get a token to connect to the peer
|
void |
ipChanged(boolean isIPv6)
Remove our tokens for this length
|
boolean |
isInboundTokenValid(RemoteHostId peer,
long token)
Is the token from this peer valid?
|
(package private) boolean |
isValid(byte[] ip,
int port)
Are IP and port valid? This is only for checking the relay response.
|
void |
portChanged()
Remove all tokens
|
(package private) PeerState |
receiveData(OutboundEstablishState state)
A data packet arrived on an outbound connection being established, which
means its complete (yay!).
|
(package private) void |
receiveHolePunch(RemoteHostId id,
UDPPacket packet)
Called from PacketHandler.
|
(package private) void |
receiveRelayResponse(PeerState2 bob,
long nonce,
int code,
byte[] data)
We are Alice, we sent a RelayRequest to Bob and got a RelayResponse back.
|
(package private) void |
receiveRetry(OutboundEstablishState2 state,
UDPPacket packet)
Got a Retry (in response to our outbound SessionRequest or TokenRequest)
SSU 2 only.
|
(package private) void |
receiveSessionConfirmed(InboundEstablishState2 state,
UDPPacket packet)
got a SessionConfirmed (should only happen as part of an inbound
establishment)
SSU 2 only.
|
(package private) void |
receiveSessionCreated(OutboundEstablishState2 state,
UDPPacket packet)
Got a SessionCreated (in response to our outbound SessionRequest)
SSU 2 only.
|
(package private) void |
receiveSessionDestroy(RemoteHostId from)
Got 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) void |
receiveSessionDestroy(RemoteHostId from,
OutboundEstablishState state)
Got a SessionDestroy during outbound establish
SSU 2
|
(package private) void |
receiveSessionDestroy(RemoteHostId from,
PeerState state)
Got a SessionDestroy on an established conn
SSU 2
|
(package private) void |
receiveSessionOrTokenRequest(RemoteHostId from,
InboundEstablishState2 state,
UDPPacket packet)
Got a SessionRequest OR a TokenRequest (initiates an inbound establishment)
SSU 2 only.
|
boolean |
shouldAllowInboundEstablishment()
Should we allow another inbound establishment?
|
void |
shutdown() |
void |
startup() |
public static final int MAX_IB_ESTABLISH_TIME
public static final int OB_MESSAGE_TIMEOUT
public static final long IB_TOKEN_EXPIRATION
public static final long MAX_TAG_VALUE
public EstablishmentManager(RouterContext ctx, UDPTransport transport)
public void startup()
public void shutdown()
InboundEstablishState getInboundState(RemoteHostId from)
OutboundEstablishState getOutboundState(RemoteHostId from)
public void establish(OutNetMessage msg)
public boolean shouldAllowInboundEstablishment()
void receiveSessionOrTokenRequest(RemoteHostId from, InboundEstablishState2 state, UDPPacket packet)
state
- as looked up in PacketHandler, but null unless retransmitted or retry sentpacket
- header decrypted onlyvoid receiveSessionConfirmed(InboundEstablishState2 state, UDPPacket packet)
state
- non-nullpacket
- header decrypted onlyvoid receiveSessionCreated(OutboundEstablishState2 state, UDPPacket packet)
state
- non-nullpacket
- header decrypted onlyvoid receiveRetry(OutboundEstablishState2 state, UDPPacket packet)
void receiveSessionDestroy(RemoteHostId from, PeerState state)
void receiveSessionDestroy(RemoteHostId from, OutboundEstablishState state)
void receiveSessionDestroy(RemoteHostId from)
PeerState receiveData(OutboundEstablishState state)
public DatabaseStoreMessage getOurInfo()
void receiveRelayResponse(PeerState2 bob, long nonce, int code, byte[] data)
data
- including nonce, including token if code == 0void receiveHolePunch(RemoteHostId id, UDPPacket packet)
id
- non-nullpacket
- header already decryptedboolean isValid(byte[] ip, int port)
public void addOutboundToken(RemoteHostId peer, long token, long expires)
token
- nonzeroexpires
- absolute timepublic long getOutboundToken(RemoteHostId peer)
public void ipChanged(boolean isIPv6)
public void portChanged()
public EstablishmentManager.Token getInboundToken(RemoteHostId peer)
public EstablishmentManager.Token getInboundToken(RemoteHostId peer, long expiration)
expiration
- time from now, will be reduced if necessary based on cache eviction time.public boolean isInboundTokenValid(RemoteHostId peer, long token)