<PackageReference Include="SSH.NET" Version="2016.0.0-beta3" />

Message

public abstract class Message : SshData
Base class for all SSH protocol messages
using Renci.SshNet.Abstractions; using Renci.SshNet.Common; using Renci.SshNet.Compression; using System.Globalization; using System.IO; using System.Linq; namespace Renci.SshNet.Messages { public abstract class Message : SshData { protected override int ZeroReaderIndex => 1; protected override int BufferCapacity => 1; protected override void WriteBytes(SshDataStream stream) { MessageAttribute messageAttribute = GetType().GetCustomAttributes<MessageAttribute>(true).FirstOrDefault(); if (messageAttribute == null) throw new SshException(string.Format(CultureInfo.CurrentCulture, "Type '{0}' is not a valid message type.", new object[1] { GetType().AssemblyQualifiedName })); stream.WriteByte(messageAttribute.Number); base.WriteBytes(stream); } internal byte[] GetPacket(byte paddingMultiplier, Compressor compressor) { int bufferCapacity = BufferCapacity; SshDataStream sshDataStream; if (bufferCapacity == -1 || compressor != null) { sshDataStream = new SshDataStream(64); sshDataStream.Seek(9, SeekOrigin.Begin); if (compressor != null) { SshDataStream sshDataStream2 = new SshDataStream((bufferCapacity != -1) ? bufferCapacity : 64); WriteBytes(sshDataStream2); byte[] array = compressor.Compress(sshDataStream2.ToArray()); sshDataStream.Write(array, 0, array.Length); } else WriteBytes(sshDataStream); bufferCapacity = (int)sshDataStream.Length - 9; int num = bufferCapacity + 4 + 1; byte paddingLength = GetPaddingLength(paddingMultiplier, num); byte[] array2 = new byte[paddingLength]; CryptoAbstraction.GenerateRandom(array2); sshDataStream.Write(array2, 0, paddingLength); uint packetDataLength = GetPacketDataLength(bufferCapacity, paddingLength); sshDataStream.Seek(4, SeekOrigin.Begin); sshDataStream.Write(packetDataLength.GetBytes(), 0, 4); sshDataStream.WriteByte(paddingLength); } else { int num2 = bufferCapacity + 4 + 1; byte paddingLength2 = GetPaddingLength(paddingMultiplier, num2); uint packetDataLength2 = GetPacketDataLength(bufferCapacity, paddingLength2); sshDataStream = new SshDataStream(num2 + paddingLength2 + 4); sshDataStream.Seek(4, SeekOrigin.Begin); sshDataStream.Write(packetDataLength2.GetBytes(), 0, 4); sshDataStream.WriteByte(paddingLength2); WriteBytes(sshDataStream); byte[] array3 = new byte[paddingLength2]; CryptoAbstraction.GenerateRandom(array3); sshDataStream.Write(array3, 0, paddingLength2); } return sshDataStream.ToArray(); } private static uint GetPacketDataLength(int messageLength, byte paddingLength) { return (uint)(messageLength + paddingLength + 1); } private static byte GetPaddingLength(byte paddingMultiplier, long packetLength) { byte b = (byte)(-packetLength & (paddingMultiplier - 1)); if (b < paddingMultiplier) b = (byte)(b + paddingMultiplier); return b; } public override string ToString() { MessageAttribute messageAttribute = GetType().GetCustomAttributes<MessageAttribute>(true).SingleOrDefault(); if (messageAttribute == null) return string.Format(CultureInfo.CurrentCulture, "'{0}' without Message attribute.", new object[1] { GetType().FullName }); return messageAttribute.Name; } } }