private void HandleSpecificPacket(ChannelOpen packet) { logger.LogDebug("Processing ChannelOpen packet, channel type '{Type}', initial window {Window}, max packet {Size}.", packet.ChannelType, packet.InitialWindowSize, packet.MaximumPacketSize); // TODO - if we're low on memory, or they've opened too many channels, fail. Other cases? /* * var fail = new ChannelOpenFailure * { * RecipientChannel = packet.SenderChannel, * ReasonCode = 4, * Description = "Not yet implemented." * }; * * Send(fail); */ Channel channel; lock (channels) { // TODO - use a factory to create channels, to populate logger and whatever else it might need channel = channelFactory.Create(this, packet, nextChannelId++); channels.Add(channel.ServerChannelId, channel); } channel.Init(); }
internal VideoChannel(NanoRdpTransport transport, ChannelOpen openPacket, Action <VideoDataEventArgs> fireEvent) : base(transport, openPacket) { _fireVideoDataEvent = fireEvent; MessageReceived += OnMessage; }
/// <summary> /// /// </summary> /// <returns></returns> public async Task OpenInputChannelAsync(uint desktopWidth, uint desktopHeight) { if (!ProtocolInitialized) { throw new NanoException("Protocol is not initialized"); } // We have to generate ChannelOpenData to send to the console var inputChannelOpenData = new ChannelOpen(new byte[0]); Input = new InputChannel(_transport, inputChannelOpenData); InputFeedback = new InputFeedbackChannel(_transport, inputChannelOpenData, FireInputFeedbackFrameAvailable); // Send ControllerEvent.Added await _transport.WaitForMessageAsync <ChannelCreate>( TimeSpan.FromSeconds(3), async() => await Control.SendControllerEventAsync( ControllerEventType.Added, 0), p => p.Channel == NanoChannel.Input); await Task.WhenAll( Input.OpenAsync(), InputFeedback.OpenAsync(desktopWidth, desktopHeight) ); }
public void TestChannelOpenNoFlags() { ChannelOpen packet = NanoPacketFactory .ParsePacket(ResourcesProvider.GetBytes("tcp_channel_open_no_flags.bin", ResourceType.Nano), _context) as ChannelOpen; Assert.NotNull(packet); Assert.NotNull(packet.Header); Assert.Equal <NanoChannel>(NanoChannel.Video, packet.Channel); Assert.Equal <ChannelControlType>(ChannelControlType.Open, packet.Type); Assert.Equal <byte[]>(new byte[0], packet.Flags); }
public ChannelTests() { var packet = new ChannelOpen { InitialWindowSize = WindowSize, MaximumPacketSize = MaximumPacketSize, SenderChannel = ClientChannelId }; channel = new Channel(sender.Object, config.Object, vfs.Object, logger.Object, ServerChannelId, packet); sender.Setup(x => x.Send(It.IsAny <Packet>())) .Callback <Packet>(p => packets.Add(p)); }
internal ChatAudioChannel(NanoRdpTransport transport, ChannelOpen openPacket) : base(transport, openPacket) { AvailableFormats = new AudioFormat[] { }; }
internal ControlChannel(NanoRdpTransport transport, ChannelOpen openPacket) : base(transport, openPacket) { MessageReceived += OnMessage; }
internal InputChannel(NanoRdpTransport transport, ChannelOpen openPacket) : base(transport, openPacket) { }
internal AudioChannelBase(NanoRdpTransport transport, ChannelOpen openPacket) : base(transport, openPacket) { MessageReceived += OnMessage; }
internal InputFeedbackChannel(NanoRdpTransport transport, ChannelOpen openPacket, Action <InputFrameEventArgs> fireEvent) : base(transport, openPacket) { _fireInputFrameEvent = fireEvent; }
public Channel(IPacketSender packetSender, IConfiguration config, IVirtualFileSystemFactory fileSystemFactory, ILogger logger, uint serverChannelId, ChannelOpen packet) { this.packetSender = packetSender; this.config = config; this.fileSystemFactory = fileSystemFactory; this.logger = logger; ServerChannelId = serverChannelId; ClientChannelId = packet.SenderChannel; WindowSize = packet.InitialWindowSize; MaximumPacketSize = packet.MaximumPacketSize; }
internal AudioChannel(NanoRdpTransport transport, ChannelOpen openPacket, Action <AudioDataEventArgs> fireEvent) : base(transport, openPacket) { _fireAudioDataEvent = fireEvent; }
public Channel Create(IPacketSender packetSender, ChannelOpen openPacket, uint channelId) { var logger = loggerFactory.CreateLogger <Channel>(); return(new Channel(packetSender, config, fileSystemFactory, logger, channelId, openPacket)); }