private void HandleGatewayTunnelRequest( II2NPHeader msg, IEnumerable <AesEGBuildRequestRecord> records, EGBuildRequestRecord myrec, BuildRequestRecord drec) { var tunnel = new GatewayTunnel(drec); var replykey = drec.ReplyKey.Key.Clone(); var replyiv = drec.ReplyIV.Clone(); tunnel.EstablishedTime.SetNow(); var doaccept = AcceptingTunnels(drec); var response = doaccept ? BuildResponseRecord.RequestResponse.Accept : BuildResponseRecord.DefaultErrorReply; Logging.LogDebug(() => string.Format("HandleGatewayTunnelRequest {3}: {0} Gateway tunnel request: {1} for tunnel id {2}.", tunnel.Destination.Id32Short, response, tunnel.ReceiveTunnelId, tunnel.TunnelDebugTrace)); TunnelProvider.UpdateTunnelBuildReply(records, myrec, replykey, replyiv, response); if (response == BuildResponseRecord.RequestResponse.Accept) { AddTunnel(tunnel); TunnelMgr.AddExternalTunnel(tunnel); AcceptedTunnelBuildRequest(drec); } TransportProvider.Send(tunnel.Destination, msg.Message); }
private void HandleEndpointTunnelRequest( II2NPHeader msg, IEnumerable <AesEGBuildRequestRecord> records, EGBuildRequestRecord myrec, BuildRequestRecord drec) { var tunnel = new EndpointTunnel(drec); var replykey = drec.ReplyKey.Key.Clone(); var replyiv = drec.ReplyIV.Clone(); tunnel.EstablishedTime.SetNow(); var doaccept = AcceptingTunnels(drec); var response = doaccept ? BuildResponseRecord.RequestResponse.Accept : BuildResponseRecord.DefaultErrorReply; DebugUtils.LogDebug(() => string.Format("HandleEndpointTunnelRequest {3}: {0} Endpoint tunnel request: {1} for tunnel id {2}.", tunnel.Destination.Id32Short, response, tunnel.ReceiveTunnelId, tunnel.TunnelDebugTrace)); TunnelProvider.UpdateTunnelBuildReply(records, myrec, replykey, replyiv, response); var responsemessage = new VariableTunnelBuildReplyMessage(records.Select(r => new BuildResponseRecord(r))); var buildreplymsg = new TunnelGatewayMessage(responsemessage.GetHeader16(tunnel.ResponseMessageId), tunnel.ResponseTunnelId); if (response == BuildResponseRecord.RequestResponse.Accept) { AddTunnel(tunnel); TunnelMgr.AddExternalTunnel(tunnel); AcceptedTunnelBuildRequest(drec); } TransportProvider.Send(tunnel.Destination, buildreplymsg); }
public ApiContext(DbContextOptions <ApiContext> options) : base(options) { // Build Default ConnStr string endpoint = new NpgsqlConnectionStringBuilder(_dbSection["ConnectionString"]).Host; _logger.LogInformation($"Buffer endpoint: {endpoint}"); uint port = uint.Parse(_dbSection["Port"]); // Tunnel:SshClient DatabaseHook _client = TunnelProvider.CreateClient(); (SshClient TunnelClient, ForwardedPortLocal PortLocal)tunnel = TunnelProvider.HookDatabase(_client, endpoint, port); _client = tunnel.TunnelClient; // Check:Active SshClientConnections TunnelProvider.ActiveSshConnections(_client); // Check:Tunnel WebPortForwardState TunnelProvider.SshPortForwardState(_client); // Set:Database Connection String _connectionStr = new NpgsqlConnectionStringBuilder(_dbSection["ConnectionString"]) { Host = tunnel.PortLocal.BoundHost, Port = (int)tunnel.PortLocal.BoundPort, CommandTimeout = 30, KeepAlive = 30, }.ToString(); }
public TunnelsApiController(TunnelProvider tunnelProvider, UsersProvider usersProvider, IOptions <TunnelConfig> config, IStringLocalizer <TunnelsApiController> localizer) { _tunnelProvider = tunnelProvider; _usersProvider = usersProvider; _tunnelConfig = config.Value; _localizer = localizer; }
internal ClientTunnelProvider(TunnelProvider tp) { TunnelMgr = tp; /* * DefaultDestination = new ClientDestination( this, false, null ); * //Clients.Add( DefaultDestination ); * * TestDestination = new ClientDestination( this, false, null ); * Clients.Add( TestDestination ); * * TestSource = new ClientDestination( this, false, TestDestination ); * Clients.Add( TestSource ); */ }
/// <summary> /// Start the router with the current RouterContext settings. /// </summary> public static void Start() { lock ( StartedLock ) { if (Started) { return; } try { var rci = RouterContext.Inst; NetDb.Start(); Logging.Log("I: " + RouterContext.Inst.MyRouterInfo.ToString()); Logging.Log("Published: " + RouterContext.Inst.Published.ToString()); Logging.Log("Connecting..."); TransportProvider.Start(); TunnelProvider.Start(); ClientMgr = new ClientTunnelProvider(TunnelProvider.Inst); ExplorationMgr = new ExplorationTunnelProvider(TunnelProvider.Inst); TransitTunnelMgr = new TransitTunnelProvider(TunnelProvider.Inst); Worker = new Thread(Run) { Name = "Router", IsBackground = true }; Worker.Start(); NetDb.Inst.IdentHashLookup.LeaseSetReceived += IdentHashLookup_LeaseSetReceived; NetDb.Inst.IdentHashLookup.LookupFailure += IdentHashLookup_LookupFailure; Started = true; } catch (Exception ex) { Logging.Log(ex); } } }
public static void Start() { if (Started) { return; } var rci = RouterContext.Inst; NetDb.Start(); Logging.Log("I: " + RouterContext.Inst.MyRouterInfo.ToString()); Logging.Log("Published: " + RouterContext.Inst.Published.ToString()); Logging.Log("Connecting..."); TransportProvider.Start(); TunnelProvider.Start(); Started = true; }
internal ExplorationTunnelProvider(TunnelProvider tp) { TunnelMgr = tp; }
internal PassthroughTunnelProvider(TunnelProvider tp) { TunnelMgr = tp; }
internal ExplorationTunnelProvider(TunnelProvider tp) { TunnelMgr = tp; ReadAppConfig(); }
private bool HandleReceiveQueue() { II2NPHeader msg = null; List <TunnelDataMessage> tdmsgs = null; lock ( ReceiveQueue ) { if (ReceiveQueue.Count == 0) { return(true); } if (ReceiveQueue.Any(mq => mq.MessageType == I2NPMessage.MessageTypes.TunnelData)) { var removelist = ReceiveQueue.Where(mq => mq.MessageType == I2NPMessage.MessageTypes.TunnelData); tdmsgs = removelist.Select(mq => (TunnelDataMessage)mq.Message).ToList(); foreach (var one in removelist.ToArray()) { ReceiveQueue.Remove(one); } } else { msg = ReceiveQueue.Last.Value; ReceiveQueue.RemoveLast(); } } if (tdmsgs != null) { HandleTunnelData(tdmsgs); return(true); } DebugUtils.LogDebug("InboundTunnel " + TunnelDebugTrace + " HandleReceiveQueue: " + msg.MessageType.ToString()); switch (msg.MessageType) { case I2NPMessage.MessageTypes.TunnelData: throw new NotImplementedException("Should not happen " + TunnelDebugTrace); case I2NPMessage.MessageTypes.TunnelBuildReply: ThreadPool.QueueUserWorkItem(cb => { TunnelProvider.Inst.HandleTunnelBuildReply((II2NPHeader16)msg, (TunnelBuildReplyMessage)msg.Message); }); return(true); case I2NPMessage.MessageTypes.VariableTunnelBuildReply: ThreadPool.QueueUserWorkItem(cb => { TunnelProvider.Inst.HandleVariableTunnelBuildReply((II2NPHeader16)msg, (VariableTunnelBuildReplyMessage)msg.Message); }); return(true); case I2NPMessage.MessageTypes.DeliveryStatus: #if LOG_ALL_TUNNEL_TRANSFER DebugUtils.LogDebug("InboundTunnel " + TunnelDebugTrace + ": DeliveryStatus: " + msg.Message.ToString()); #endif ThreadPool.QueueUserWorkItem(cb => { lock (DeliveryStatusReceivedLock) if (DeliveryStatusReceived != null) { DeliveryStatusReceived((DeliveryStatusMessage)msg.Message); } }); break; case I2NPMessage.MessageTypes.DatabaseStore: var ds = (DatabaseStoreMessage)msg.Message; ThreadPool.QueueUserWorkItem(cb => { TunnelProvider.HandleDatabaseStore(ds); }); break; case I2NPMessage.MessageTypes.Garlic: #if LOG_ALL_TUNNEL_TRANSFER DebugUtils.Log("InboundTunnel " + TunnelDebugTrace + ": Garlic: " + msg.Message.ToString()); #endif ThreadPool.QueueUserWorkItem(cb => { lock (GarlicMessageReceivedLock) if (GarlicMessageReceived != null) { GarlicMessageReceived((GarlicMessage)msg.Message); } }); break; default: DebugUtils.LogWarning("InboundTunnel " + TunnelDebugTrace + " HandleReceiveQueue: Dropped " + msg.ToString()); break; } return(true); }
internal ClientTunnelProvider(TunnelProvider tp) { TunnelMgr = tp; }
public TunnelController(UsersProvider usersProvider, TunnelProvider tunnelProvider, IOptions <TunnelConfig> config) { _usersProvider = usersProvider; _tunnelProvider = tunnelProvider; _tunnelConfig = config.Value; }