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.
124 lines
3.8 KiB
C#
124 lines
3.8 KiB
C#
using System;
|
|
|
|
namespace Renci.SshNet.Messages.Connection
|
|
{
|
|
/// <summary>
|
|
/// Represents SSH_MSG_CHANNEL_DATA message.
|
|
/// </summary>
|
|
[Message("SSH_MSG_CHANNEL_DATA", MessageNumber)]
|
|
public class ChannelDataMessage : ChannelMessage
|
|
{
|
|
internal const byte MessageNumber = 94;
|
|
|
|
/// <summary>
|
|
/// Gets or sets message data.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The data.
|
|
/// </value>
|
|
/// <remarks>
|
|
/// The actual data to read or write depends on the <see cref="Offset"/> and <see cref="Size"/>.
|
|
/// </remarks>
|
|
public byte[] Data { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Gets the zero-based offset in <see cref="Data"/> at which the data begins.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The zero-based offset in <see cref="Data"/> at which the data begins.
|
|
/// </value>
|
|
public int Offset { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the number of bytes of <see cref="Data"/> to read or write.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The number of bytes of <see cref="Data"/> to read or write.
|
|
/// </value>
|
|
public int Size { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets the size of the message in bytes.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The size of the messages in bytes.
|
|
/// </value>
|
|
protected override int BufferCapacity
|
|
{
|
|
get
|
|
{
|
|
var capacity = base.BufferCapacity;
|
|
capacity += 4; // Data length
|
|
capacity += Size; // Data
|
|
return capacity;
|
|
}
|
|
}
|
|
|
|
internal override void Process(Session session)
|
|
{
|
|
session.OnChannelDataReceived(this);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ChannelDataMessage"/> class.
|
|
/// </summary>
|
|
public ChannelDataMessage()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ChannelDataMessage"/> class.
|
|
/// </summary>
|
|
/// <param name="localChannelNumber">The local channel number.</param>
|
|
/// <param name="data">Message data.</param>
|
|
public ChannelDataMessage(uint localChannelNumber, byte[] data)
|
|
: base(localChannelNumber)
|
|
{
|
|
if (data == null)
|
|
throw new ArgumentNullException("data");
|
|
|
|
Data = data;
|
|
Offset = 0;
|
|
Size = data.Length;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ChannelDataMessage"/> class.
|
|
/// </summary>
|
|
/// <param name="localChannelNumber">The local channel number.</param>
|
|
/// <param name="data">The message data.</param>
|
|
/// <param name="offset">The zero-based byte offset in <paramref name="data"/> at which to begin reading or writing data from.</param>
|
|
/// <param name="size">The number of bytes of <paramref name="data"/> to read or write.</param>
|
|
public ChannelDataMessage(uint localChannelNumber, byte[] data, int offset, int size)
|
|
: base(localChannelNumber)
|
|
{
|
|
if (data == null)
|
|
throw new ArgumentNullException("data");
|
|
|
|
Data = data;
|
|
Offset = offset;
|
|
Size = size;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Loads the data.
|
|
/// </summary>
|
|
protected override void LoadData()
|
|
{
|
|
base.LoadData();
|
|
Data = ReadBinary();
|
|
Offset = 0;
|
|
Size = Data.Length;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Saves the data.
|
|
/// </summary>
|
|
protected override void SaveData()
|
|
{
|
|
base.SaveData();
|
|
WriteBinary(Data, Offset, Size);
|
|
}
|
|
}
|
|
}
|