Class EstablishmentManager

  • class EstablishmentManager
    extends Object
    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.
    • Field Detail


        public static final int OB_MESSAGE_TIMEOUT
        max before receiving a response to a single message during outbound establishment
        See Also:
        Constant Field Values

        public static final long MAX_TAG_VALUE
        the relay tag is a 4-byte field in the protocol
        See Also:
        Constant Field Values
    • Method Detail

      • startup

        public void startup()
      • shutdown

        public void shutdown()
      • establish

        public void establish​(OutNetMessage msg)
        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? Used to throttle outbound hole punches.
      • receiveSessionRequest

        void receiveSessionRequest​(RemoteHostId from,
                                   UDPPacketReader reader)
        Got a SessionRequest (initiates an inbound establishment)
      • receiveSessionConfirmed

        void receiveSessionConfirmed​(RemoteHostId from,
                                     UDPPacketReader reader)
        got a SessionConfirmed (should only happen as part of an inbound establishment)
      • receiveSessionCreated

        void receiveSessionCreated​(RemoteHostId from,
                                   UDPPacketReader reader)
        Got a SessionCreated (in response to our outbound SessionRequest)
      • receiveSessionDestroy

        void receiveSessionDestroy​(RemoteHostId from,
                                   PeerState state)
        Got a SessionDestroy on an established conn
      • receiveSessionDestroy

        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. intro key, not session key) we just log it as it could be spoofed.
      • receiveData

        PeerState receiveData​(OutboundEstablishState state)
        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...
        the new PeerState
      • receiveRelayResponse

        void receiveRelayResponse​(RemoteHostId bob,
                                  UDPPacketReader reader)
        We are Alice, we sent a RelayRequest to Bob and got a response back.
      • receiveHolePunch

        void receiveHolePunch​(InetAddress from,
                              int fromPort)
        Called from UDPReceiver. Accelerate response to RelayResponse if we haven't sent it yet.
      • 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
        0.9.3, pkg private since 0.9.45 for PacketBuider