コード例 #1
0
        public MessageReceivedArgs(SessionChannel channel, byte[] data)
        {
            Contract.Requires(channel != null);
            Contract.Requires(data != null);

            this.Channel = channel;
            this.Data    = data;
        }
コード例 #2
0
        public SessionRequestedArgs(SessionChannel channel, string command, UserauthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(command != null);
            Contract.Requires(userauthArgs != null);

            this.Channel              = channel;
            this.CommandText          = command;
            this.AttachedUserauthArgs = userauthArgs;
        }
コード例 #3
0
        public SessionRequestedArgs(SessionChannel channel, string command, UserauthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(command != null);
            Contract.Requires(userauthArgs != null);

            Channel = channel;
            CommandText = command;
            AttachedUserauthArgs = userauthArgs;
        }
コード例 #4
0
        public CommandRequestedArgs(SessionChannel channel, string type, string command, UserauthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(command != null);
            Contract.Requires(userauthArgs != null);

            Channel              = channel;
            ShellType            = type;
            CommandText          = command;
            AttachedUserauthArgs = userauthArgs;
        }
コード例 #5
0
        public SessionRequestedArgs(SessionChannel channel, string subsystem, string command, UserAuthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(command != null);
            Contract.Requires(userauthArgs != null);

            Channel              = channel;
            CommandText          = command;
            AttachedUserAuthArgs = userauthArgs;
            SubSystemName        = subsystem;
        }
コード例 #6
0
        public EnvironmentArgs(SessionChannel channel, string name, string value, UserauthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(name != null);
            Contract.Requires(value != null);
            Contract.Requires(userauthArgs != null);

            Channel = channel;
            Name    = name;
            Value   = value;
            AttachedUserauthArgs = userauthArgs;
        }
コード例 #7
0
        public TcpRequestArgs(SessionChannel channel, string host, int port, string originatorIP, int originatorPort, UserauthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(host != null);
            Contract.Requires(originatorIP != null);

            Channel              = channel;
            Host                 = host;
            Port                 = port;
            OriginatorIP         = originatorIP;
            OriginatorPort       = originatorPort;
            AttachedUserauthArgs = userauthArgs;
        }
コード例 #8
0
        internal SessionChannel AddChannel()
        {
            var channel = new SessionChannel(
                this,
                (uint)Interlocked.Increment(ref this.forwardChannelCounter),
                1048576,
                16384,
                (uint)Interlocked.Increment(ref this.serverChannelCounter));

            lock (this.locker)
                this.channels.Add(channel);

            return(channel);
        }
コード例 #9
0
ファイル: PtyArgs.cs プロジェクト: mikaelliljedahl/SSHServer
        public PtyArgs(SessionChannel channel, string terminal, uint heightPx, uint heightRows, uint widthPx, uint widthChars, string modes, UserAuthArgs userauthArgs)
        {
            Contract.Requires(channel != null);
            Contract.Requires(terminal != null);
            Contract.Requires(modes != null);
            Contract.Requires(userauthArgs != null);

            Channel = channel;
            Terminal = terminal;
            HeightPx = heightPx;
            HeightRows = heightRows;
            WidthPx = widthPx;
            WidthChars = widthChars;
            Modes = modes;

            AttachedUserAuthArgs = userauthArgs;
        }
コード例 #10
0
        private void HandleMessage(SessionOpenMessage message)
        {
            var channel = new SessionChannel(
                this,
                message.SenderChannel,
                message.InitialWindowSize,
                message.MaximumPacketSize,
                (uint)Interlocked.Increment(ref _serverChannelCounter));

            lock (_locker)
                _channels.Add(channel);

            var msg = new SessionOpenConfirmationMessage();

            msg.RecipientChannel  = channel.ClientChannelId;
            msg.SenderChannel     = channel.ServerChannelId;
            msg.InitialWindowSize = channel.ServerInitialWindowSize;
            msg.MaximumPacketSize = channel.ServerMaxPacketSize;

            _session.SendMessage(msg);
        }
コード例 #11
0
        private SessionChannel HandleChannelOpenMessage(ChannelOpenMessage message)
        {
            var channel = new SessionChannel(
                this,
                message.SenderChannel,
                message.InitialWindowSize,
                message.MaximumPacketSize,
                (uint)Interlocked.Increment(ref _serverChannelCounter));

            lock (_locker)
                _channels.Add(channel);

            var msg = new ChannelOpenConfirmationMessage
            {
                RecipientChannel  = channel.ClientChannelId,
                SenderChannel     = channel.ServerChannelId,
                InitialWindowSize = channel.ServerInitialWindowSize,
                MaximumPacketSize = channel.ServerMaxPacketSize
            };

            _session.SendMessage(msg);
            return(channel);
        }
コード例 #12
0
 public SessionRequestedArgs(SessionChannel channel, string command, UserAuthArgs userauthArgs)
     : this(channel, null, command, userauthArgs)
 {
 }
コード例 #13
0
ファイル: ConnectionService.cs プロジェクト: Mjollnirs/FxSsh
        private void HandlePortForward(ChannelOpenMessage message, string address, uint port, string originationIP, uint originatorPort)
        {
            var channel = new SessionChannel(
                this,
                message.SenderChannel,
                message.InitialWindowSize,
                message.MaximumPacketSize,
                (uint)Interlocked.Increment(ref _serverChannelCounter));

            var readyToAcceptData = false;

            var args = new TcpRequestArgs(
                this._session,
                address,
                port,
                originationIP,
                originatorPort,
                () =>
            {
                return(readyToAcceptData);
            },
                (byte[] data) =>
            {
                if (!channel.ClientClosed && !channel.ServerClosed)
                {
                    channel.SendData(data);
                }
                else
                {
                    throw new IOException("Connection closed");
                }
            },
                () =>
            {
                if (!channel.ClientClosed && !channel.ServerClosed)
                {
                    try
                    {
                        channel.SendClose();
                    }
                    catch
                    {
                    }
                }
            }
                );

            TcpForwardRequest(this, args);

            Action <object, byte[]> eventHandlerForDataReceived = (sender, data) => {
                try
                {
                    args.OnClientData(data);
                }
                catch
                {
                    channel.SendClose();
                }
            };

            channel.DataReceived += (o, ea) => eventHandlerForDataReceived(o, ea);

            lock (_locker)
                _channels.Add(channel);

            // send SSH_MSG_CHANNEL_OPEN_CONFIRMATION
            var msg = new ChannelOpenConfirmationMessage
            {
                RecipientChannel  = channel.ClientChannelId,
                SenderChannel     = channel.ServerChannelId,
                InitialWindowSize = channel.ServerInitialWindowSize,
                MaximumPacketSize = channel.ServerMaxPacketSize
            };

            _session.SendMessage(msg);
            readyToAcceptData = true;
        }