Class IntroductionManager


  • class IntroductionManager
    extends Object
    Keep track of inbound and outbound introductions. See http://i2p-projekt.i2p/spec/ssu2 for documentation.
    • Field Detail

      • MAX_OUTBOUND

        public static final int MAX_OUTBOUND
        This is enforced in EstablishmentManager
        Since:
        0.8.11
        See Also:
        Constant Field Values
    • Method Detail

      • reset

        public void reset()
      • remove

        public void remove​(PeerState peer)
      • isInboundTagValid

        public boolean isInboundTagValid​(long tag)
        Is this inbound tag currently valid, i.e. is the peer still connected?
        Since:
        0.9.50
      • pickInbound

        public int pickInbound​(RouterAddress current,
                               boolean ipv6,
                               Properties ssuOptions,
                               int howMany)
        Grab a bunch of peers who are willing to be introducers for us that are locally known (duh) and have published their own SSU address (duh^2). The picked peers have their info tacked on to the ssuOptions parameter for use in the SSU RouterAddress. Try to use "good" peers (i.e. reachable, active) Also, ping all idle peers that were introducers in the last 2 hours, to keep the connection up, since the netDb can have quite stale information, and we want to keep our introducers valid.
        Parameters:
        current - current router address, may be null
        ipv6 - what type is the current address we need introducers for?
        ssuOptions - out parameter, options are added
        Returns:
        number of introducers added
      • pingIntroducers

        public void pingIntroducers()
        Was part of pickInbound(), moved out so we can call it more often
        Since:
        0.8.11
      • introducerCount

        int introducerCount​(boolean ipv6)
        Not as elaborate as pickInbound() above. Just a quick check to see how many volunteers we know, which the Transport uses to see if we need more.
        Parameters:
        ipv6 - what type of address are they introducing us for
        Returns:
        number of peers that have volunteered to introduce us
      • introducedCount

        int introducedCount()
        Combined IPv4 and IPv6
        Returns:
        number of peers we have volunteered to introduce
        Since:
        0.9.3
      • receiveRelayRequest

        void receiveRelayRequest​(PeerState2 alice,
                                 byte[] data)
        We are Bob and we got this from Alice. Send Alice's RI and a RelayIntro to Charlie, or reject with a RelayResponse to Alice. We should already have a session with Charlie and definitely with Alice. SSU 2 only.
        Since:
        0.9.55
      • receiveRelayIntro

        IntroductionManager.RelayIntroResult receiveRelayIntro​(PeerState2 bob,
                                                               Hash alice,
                                                               byte[] data)
        We are Charlie and we got this from Bob. Send a HolePunch to Alice, who will soon be sending us a SessionRequest. And send a RelayResponse to bob. SSU 2 only.
        Returns:
        DELAYED if awaiting Alice RI, DROPPED on fatal error, or REPLIED if we replied to Bob with a RelayResponse
        Since:
        0.9.55
      • receiveRelayResponse

        void receiveRelayResponse​(PeerState2 peer,
                                  int status,
                                  byte[] data)
        We are Bob and we got this from Charlie, OR we are Alice and we got this from Bob. If we are Bob, send to Alice. If we are Alice, send a SessionRequest to Charlie. We should already have a session with Charlie, but not necessarily with Alice. SSU 2 only.
        Since:
        0.9.55
      • receiveHolePunch

        void receiveHolePunch​(RemoteHostId charlie,
                              byte[] data)
        We are Alice and we got this from Charlie. Send a SessionRequest to Charlie, whether or not we got the Relay Response already. SSU 2 only, out-of-session.
        Since:
        0.9.55
      • cleanup

        public void cleanup()
        Loop and cleanup _nonceToAlice Called from EstablishmentManager doFailSafe() so we don't need a cleaner timer here.
        Since:
        0.9.57