You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.9 KiB
C#
104 lines
3.9 KiB
C#
using System;
|
|
using Renci.SshNet.Common;
|
|
using Renci.SshNet.Messages.Connection;
|
|
|
|
namespace Renci.SshNet.Channels
|
|
{
|
|
/// <summary>
|
|
/// Represents SSH channel.
|
|
/// </summary>
|
|
internal interface IChannel : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// Occurs when <see cref="ChannelDataMessage"/> is received.
|
|
/// </summary>
|
|
event EventHandler<ChannelDataEventArgs> DataReceived;
|
|
|
|
/// <summary>
|
|
/// Occurs when an exception is thrown when processing channel messages.
|
|
/// </summary>
|
|
event EventHandler<ExceptionEventArgs> Exception;
|
|
|
|
/// <summary>
|
|
/// Occurs when <see cref="ChannelExtendedDataMessage"/> is received.
|
|
/// </summary>
|
|
event EventHandler<ChannelExtendedDataEventArgs> ExtendedDataReceived;
|
|
|
|
/// <summary>
|
|
/// Occurs when <see cref="ChannelRequestMessage"/> is received.
|
|
/// </summary>
|
|
event EventHandler<ChannelRequestEventArgs> RequestReceived;
|
|
|
|
/// <summary>
|
|
/// Occurs when <see cref="ChannelCloseMessage"/> is received.
|
|
/// </summary>
|
|
event EventHandler<ChannelEventArgs> Closed;
|
|
|
|
/// <summary>
|
|
/// Gets the local channel number.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The local channel number.
|
|
/// </value>
|
|
uint LocalChannelNumber { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the maximum size of a packet.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The maximum size of a packet.
|
|
/// </value>
|
|
uint LocalPacketSize { get; }
|
|
|
|
/// <summary>
|
|
/// Gets the maximum size of a data packet that can be sent using the channel.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The maximum size of data that can be sent using a <see cref="ChannelDataMessage"/>
|
|
/// on the current channel.
|
|
/// </value>
|
|
/// <exception cref="InvalidOperationException">The channel has not been opened, or the open has not yet been confirmed.</exception>
|
|
uint RemotePacketSize { get; }
|
|
|
|
/// <summary>
|
|
/// Gets a value indicating whether this channel is open.
|
|
/// </summary>
|
|
/// <value>
|
|
/// <c>true</c> if this channel is open; otherwise, <c>false</c>.
|
|
/// </value>
|
|
bool IsOpen { get; }
|
|
|
|
/// <summary>
|
|
/// Sends a SSH_MSG_CHANNEL_DATA message with the specified payload.
|
|
/// </summary>
|
|
/// <param name="data">The payload to send.</param>
|
|
void SendData(byte[] data);
|
|
|
|
/// <summary>
|
|
/// Sends a SSH_MSG_CHANNEL_DATA message with the specified payload.
|
|
/// </summary>
|
|
/// <param name="data">An array of <see cref="byte"/> containing the payload to send.</param>
|
|
/// <param name="offset">The zero-based offset in <paramref name="data"/> at which to begin taking data from.</param>
|
|
/// <param name="size">The number of bytes of <paramref name="data"/> to send.</param>
|
|
/// <remarks>
|
|
/// <para>
|
|
/// When the size of the data to send exceeds the maximum packet size or the remote window
|
|
/// size does not allow the full data to be sent, then this method will send the data in
|
|
/// multiple chunks and will wait for the remote window size to be adjusted when it's zero.
|
|
/// </para>
|
|
/// <para>
|
|
/// This is done to support SSH servers will a small window size that do not agressively
|
|
/// increase their window size. We need to take into account that there may be SSH servers
|
|
/// that only increase their window size when it has reached zero.
|
|
/// </para>
|
|
/// </remarks>
|
|
void SendData(byte[] data, int offset, int size);
|
|
|
|
/// <summary>
|
|
/// Sends a SSH_MSG_CHANNEL_EOF message to the remote server.
|
|
/// </summary>
|
|
/// <exception cref="InvalidOperationException">The channel is closed.</exception>
|
|
void SendEof();
|
|
}
|
|
}
|