using System.Collections.Generic;
using Renci.SshNet.Common;
namespace Renci.SshNet.Channels
{
    /// 
    /// Session SSH channel.
    /// 
    internal interface IChannelSession : IChannel
    {
        /// 
        /// Opens the channel.
        /// 
        void Open();
        /// 
        /// Sends the pseudo terminal request.
        /// 
        /// The environment variable.
        /// The columns.
        /// The rows.
        /// The width.
        /// The height.
        /// The terminal mode values.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendPseudoTerminalRequest(string environmentVariable, uint columns, uint rows, uint width, uint height,
            IDictionary terminalModeValues);
        /// 
        /// Sends the X11 forwarding request.
        /// 
        /// if set to true the it is single connection.
        /// The protocol.
        /// The cookie.
        /// The screen number.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendX11ForwardingRequest(bool isSingleConnection, string protocol, byte[] cookie, uint screenNumber);
        /// 
        /// Sends the environment variable request.
        /// 
        /// Name of the variable.
        /// The variable value.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendEnvironmentVariableRequest(string variableName, string variableValue);
        /// 
        /// Sends the shell request.
        /// 
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendShellRequest();
        /// 
        /// Sends the exec request.
        /// 
        /// The command.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendExecRequest(string command);
        /// 
        /// Sends the exec request.
        /// 
        /// Length of the break.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendBreakRequest(uint breakLength);
        /// 
        /// Sends the subsystem request.
        /// 
        /// The subsystem.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendSubsystemRequest(string subsystem);
        /// 
        /// Sends the window change request.
        /// 
        /// The columns.
        /// The rows.
        /// The width.
        /// The height.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendWindowChangeRequest(uint columns, uint rows, uint width, uint height);
        /// 
        /// Sends the local flow request.
        /// 
        /// if set to true [client can do].
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendLocalFlowRequest(bool clientCanDo);
        /// 
        /// Sends the signal request.
        /// 
        /// Name of the signal.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendSignalRequest(string signalName);
        /// 
        /// Sends the exit status request.
        /// 
        /// The exit status.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendExitStatusRequest(uint exitStatus);
        /// 
        /// Sends the exit signal request.
        /// 
        /// Name of the signal.
        /// if set to true [core dumped].
        /// The error message.
        /// The language.
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendExitSignalRequest(string signalName, bool coreDumped, string errorMessage, string language);
        /// 
        /// Sends eow@openssh.com request.
        /// 
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendEndOfWriteRequest();
        /// 
        /// Sends keepalive@openssh.com request.
        /// 
        /// 
        /// true if request was successful; otherwise false.
        /// 
        bool SendKeepAliveRequest();
    }
}