Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
 internal VideoChannel(NanoRdpTransport transport, ChannelOpen openPacket,
                       Action <VideoDataEventArgs> fireEvent)
     : base(transport, openPacket)
 {
     _fireVideoDataEvent = fireEvent;
     MessageReceived    += OnMessage;
 }
Ejemplo n.º 3
0
        /// <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)
                );
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
 internal ChatAudioChannel(NanoRdpTransport transport, ChannelOpen openPacket)
     : base(transport, openPacket)
 {
     AvailableFormats = new AudioFormat[] { };
 }
 internal ControlChannel(NanoRdpTransport transport, ChannelOpen openPacket)
     : base(transport, openPacket)
 {
     MessageReceived += OnMessage;
 }
Ejemplo n.º 8
0
 internal InputChannel(NanoRdpTransport transport, ChannelOpen openPacket)
     : base(transport, openPacket)
 {
 }
Ejemplo n.º 9
0
 internal AudioChannelBase(NanoRdpTransport transport, ChannelOpen openPacket)
     : base(transport, openPacket)
 {
     MessageReceived += OnMessage;
 }
Ejemplo n.º 10
0
 internal InputFeedbackChannel(NanoRdpTransport transport, ChannelOpen openPacket,
                               Action <InputFrameEventArgs> fireEvent)
     : base(transport, openPacket)
 {
     _fireInputFrameEvent = fireEvent;
 }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
 internal AudioChannel(NanoRdpTransport transport, ChannelOpen openPacket,
                       Action <AudioDataEventArgs> fireEvent)
     : base(transport, openPacket)
 {
     _fireAudioDataEvent = fireEvent;
 }
Ejemplo n.º 13
0
        public Channel Create(IPacketSender packetSender, ChannelOpen openPacket, uint channelId)
        {
            var logger = loggerFactory.CreateLogger <Channel>();

            return(new Channel(packetSender, config, fileSystemFactory, logger, channelId, openPacket));
        }