<PackageReference Include="SSH.NET" Version="2024.1.0" />

Compressor

public abstract class Compressor : Algorithm, IDisposable
Represents base class for compression algorithm implementation.
using Renci.SshNet.Messages.Authentication; using Renci.SshNet.Security; using System; namespace Renci.SshNet.Compression { public abstract class Compressor : Algorithm, IDisposable { private readonly bool _delayedCompression; private bool _isActive; private Session _session; private bool _isDisposed; protected Compressor(bool delayedCompression) { _delayedCompression = delayedCompression; } public virtual void Init(Session session) { if (_delayedCompression) { _session = session; _session.UserAuthenticationSuccessReceived += Session_UserAuthenticationSuccessReceived; } else _isActive = true; } public byte[] Compress(byte[] data) { return Compress(data, 0, data.Length); } public virtual byte[] Compress(byte[] data, int offset, int length) { if (!_isActive) { if (offset == 0 && length == data.Length) return data; byte[] array = new byte[length]; Buffer.BlockCopy(data, offset, array, 0, length); return array; } return CompressCore(data, offset, length); } protected abstract byte[] CompressCore(byte[] data, int offset, int length); public byte[] Decompress(byte[] data) { return Decompress(data, 0, data.Length); } public virtual byte[] Decompress(byte[] data, int offset, int length) { if (!_isActive) { if (offset == 0 && length == data.Length) return data; byte[] array = new byte[length]; Buffer.BlockCopy(data, offset, array, 0, length); return array; } return DecompressCore(data, offset, length); } protected abstract byte[] DecompressCore(byte[] data, int offset, int length); private void Session_UserAuthenticationSuccessReceived(object sender, MessageEventArgs<SuccessMessage> e) { _isActive = true; _session.UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_isDisposed && disposing) _isDisposed = true; } ~Compressor() { Dispose(false); } } }