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; }
// 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."); }
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; } }
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 }
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); }
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); }
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); }
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); }
public ZeroHopTunnel(ITunnelOwner owner, TunnelConfig config) : base(owner, config) { }