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

SftpLinkRequest

using Renci.SshNet.Common; using Renci.SshNet.Sftp.Responses; using System; namespace Renci.SshNet.Sftp.Requests { internal class SftpLinkRequest : SftpRequest { private byte[] _newLinkPath; private byte[] _existingPath; public override SftpMessageTypes SftpMessageType => SftpMessageTypes.Link; public string NewLinkPath { get { return SshData.Utf8.GetString(_newLinkPath, 0, _newLinkPath.Length); } private set { _newLinkPath = SshData.Utf8.GetBytes(value); } } public string ExistingPath { get { return SshData.Utf8.GetString(_existingPath, 0, _existingPath.Length); } private set { _existingPath = SshData.Utf8.GetBytes(value); } } public bool IsSymLink { get; set; } protected override int BufferCapacity => base.BufferCapacity + 4 + NewLinkPath.Length + 4 + ExistingPath.Length + 1; public SftpLinkRequest(uint protocolVersion, uint requestId, string newLinkPath, string existingPath, bool isSymLink, Action<SftpStatusResponse> statusAction) : base(protocolVersion, requestId, statusAction) { NewLinkPath = newLinkPath; ExistingPath = existingPath; IsSymLink = isSymLink; } protected override void LoadData() { base.LoadData(); _newLinkPath = ReadBinary(); _existingPath = ReadBinary(); IsSymLink = ReadBoolean(); } protected override void SaveData() { base.SaveData(); WriteBinaryString(_newLinkPath); WriteBinaryString(_existingPath); Write(IsSymLink); } } }