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.

94 lines
2.6 KiB
C#

9 months ago
using System;
using System.Globalization;
using Renci.SshNet.Abstractions;
using Renci.SshNet.Common;
namespace Renci.SshNet.Messages.Transport
{
/// <summary>
/// Represents SSH_MSG_IGNORE message.
/// </summary>
[Message("SSH_MSG_IGNORE", MessageNumber)]
public class IgnoreMessage : Message
{
internal const byte MessageNumber = 2;
/// <summary>
/// Gets ignore message data if any.
/// </summary>
public byte[] Data { get; private set; }
/// <summary>
/// Initializes a new instance of the <see cref="IgnoreMessage"/> class
/// </summary>
public IgnoreMessage()
{
Data = Array<byte>.Empty;
}
/// <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 += Data.Length; // Data
return capacity;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="IgnoreMessage"/> class.
/// </summary>
/// <param name="data">The data.</param>
public IgnoreMessage(byte[] data)
{
if (data == null)
throw new ArgumentNullException("data");
Data = data;
}
/// <summary>
/// Called when type specific data need to be loaded.
/// </summary>
protected override void LoadData()
{
var dataLength = ReadUInt32();
if (dataLength > int.MaxValue)
{
throw new NotSupportedException(string.Format(CultureInfo.CurrentCulture, "Data longer than {0} is not supported.", int.MaxValue));
}
if (dataLength > (DataStream.Length - DataStream.Position))
{
DiagnosticAbstraction.Log("SSH_MSG_IGNORE: Length exceeds data bytes, data ignored.");
Data = Array<byte>.Empty;
}
else
{
Data = ReadBytes((int) dataLength);
}
}
/// <summary>
/// Called when type specific data need to be saved.
/// </summary>
protected override void SaveData()
{
WriteBinaryString(Data);
}
internal override void Process(Session session)
{
session.OnIgnoreReceived(this);
}
}
}