Exemplo n.º 1
0
        public OutboundTunnel(ITunnelOwner owner, TunnelConfig config, int replytunnelhops)
            : base(owner, config)
        {
            var outtunnel = config.Info.Hops[0];

            NextHop         = outtunnel.Peer.IdentHash;
            SendTunnelId    = outtunnel.TunnelId;
            ReplyTunnelHops = replytunnelhops;
        }
Exemplo n.º 2
0
        // Fake 0-hop
        protected InboundTunnel(ITunnelOwner owner, TunnelConfig config)
            : base(owner, config)
        {
            Established = true;

            ReceiveTunnelId = config.Info.Hops.Last().TunnelId;
            RemoteGateway   = RouterContext.Inst.MyRouterIdentity.IdentHash;
            GatewayTunnelId = ReceiveTunnelId;

            Logging.LogDebug($"{this}: 0-hop tunnel {Destination?.Id32Short} created.");
        }
Exemplo n.º 3
0
 protected Tunnel(ITunnelOwner owner, TunnelConfig config)
 {
     Owner            = owner;
     Config           = config;
     TunnelMemberHops = config == null ? 1 : config.Info.Hops.Count;
     TunnelSeqNr      = Interlocked.Increment(ref TunnelIdCounter);
     TunnelDebugTrace = $"<{TunnelSeqNr}>";
     if (TunnelSeqNr > int.MaxValue - 100)
     {
         TunnelIdCounter = 1;
     }
 }
Exemplo n.º 4
0
        public InboundTunnel(ITunnelOwner owner, TunnelConfig config, int outtunnelhops)
            : base(owner, config)
        {
            OutTunnelHops = outtunnelhops;

            var gw = config.Info.Hops[0];

            RemoteGateway   = gw.Peer.IdentHash;
            GatewayTunnelId = gw.TunnelId;

            ReceiveTunnelId = config.Info.Hops.Last().TunnelId;

#if LOG_ALL_TUNNEL_TRANSFER
            Logging.LogDebug($"InboundTunnel: Tunnel {Destination?.Id32Short} created.");
#endif
        }
Exemplo n.º 5
0
        private Tunnel CreateExploratoryInboundTunnel()
        {
            var config = new TunnelConfig(
                TunnelConfig.TunnelDirection.Inbound,
                TunnelConfig.TunnelPool.Exploratory,
                CreateIncommingTunnelChain());

            var tunnel = TunnelMgr.CreateTunnel(this, config);

            if (tunnel != null)
            {
                Tunnels[tunnel] = false;
                TunnelMgr.AddTunnel((InboundTunnel)tunnel);
            }
            return(tunnel);
        }
Exemplo n.º 6
0
        private void HandleEndpointTunnelRequest(
            II2NPHeader msg,
            TunnelBuildRequestDecrypt decrypt)
        {
            var config = new TunnelConfig(
                TunnelConfig.TunnelDirection.Inbound,
                TunnelConfig.TunnelPool.External,
                new TunnelInfo(new List <HopInfo>
            {
                new HopInfo(
                    RouterContext.Inst.MyRouterIdentity,
                    new I2PTunnelId())
            }
                               ));

            var tunnel = new EndpointTunnel(this, config, decrypt.Decrypted);

            tunnel.EstablishedTime.SetNow();

            var doaccept = AcceptingTunnels(decrypt.Decrypted);

            var response = doaccept
                    ? BuildResponseRecord.RequestResponse.Accept
                    : BuildResponseRecord.DefaultErrorReply;

            Logging.LogDebug($"HandleEndpointTunnelRequest {tunnel.TunnelDebugTrace}: " +
                             $"{tunnel.Destination.Id32Short} Endpoint tunnel request: {response} " +
                             $"for tunnel id {tunnel.ReceiveTunnelId}.");

            var newrecords = decrypt.CreateTunnelBuildReplyRecords(response);

            var responsemessage = new VariableTunnelBuildReplyMessage(
                newrecords.Select(r => new BuildResponseRecord(r)),
                tunnel.ResponseMessageId);

            var buildreplymsg = new TunnelGatewayMessage(
                responsemessage,
                tunnel.ResponseTunnelId);

            if (response == BuildResponseRecord.RequestResponse.Accept)
            {
                RunningEndpointTunnels[tunnel] = 1;
                TunnelMgr.AddTunnel(tunnel);
                AcceptedTunnelBuildRequest(decrypt.Decrypted);
            }
            TransportProvider.Send(tunnel.Destination, buildreplymsg);
        }
Exemplo n.º 7
0
        private OutboundTunnel CreateOutboundTunnel(IClient client, TunnelInfo prototype)
        {
            var config = new TunnelConfig(
                TunnelConfig.TunnelDirection.Outbound,
                TunnelConfig.TunnelPool.Client,
                prototype ?? CreateOutgoingTunnelChain(client));

            var tunnel = (OutboundTunnel)TunnelMgr.CreateTunnel(this, config);

            if (tunnel != null)
            {
                TunnelMgr.AddTunnel(tunnel);
                client.AddOutboundPending(tunnel);
                PendingTunnels[tunnel] = client;
            }
            return(tunnel);
        }
Exemplo n.º 8
0
        private InboundTunnel CreateInboundTunnel(IClient client, TunnelInfo prototype)
        {
            var config = new TunnelConfig(
                TunnelConfig.TunnelDirection.Inbound,
                TunnelConfig.TunnelPool.Client,
                prototype ?? CreateIncommingTunnelChain(client));

            var tunnel = (InboundTunnel)TunnelMgr.CreateTunnel(this, config);

            if (tunnel != null)
            {
                tunnel.GarlicMessageReceived += new Action <GarlicMessage>(GarlicMessageReceived);
                TunnelMgr.AddTunnel(tunnel);
                client.AddInboundPending(tunnel);
                PendingTunnels[tunnel] = client;
            }
            return(tunnel);
        }
Exemplo n.º 9
0
 public ZeroHopTunnel(ITunnelOwner owner, TunnelConfig config)
     : base(owner, config)
 {
 }