| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | using System;using System.Collections.Generic;using System.Text;namespace Renci.SshNet.Sftp.Responses{    internal sealed class SftpNameResponse : SftpResponse    {        public override SftpMessageTypes SftpMessageType        {            get { return SftpMessageTypes.Name; }        }        public uint Count { get; private set; }        public Encoding Encoding { get; private set; }        public KeyValuePair<string, SftpFileAttributes>[] Files { get; set; }        public SftpNameResponse(uint protocolVersion, Encoding encoding)            : base(protocolVersion)        {            Files = Array.Empty<KeyValuePair<string, SftpFileAttributes>>();            Encoding = encoding;        }        protected override void LoadData()        {            base.LoadData();            Count = ReadUInt32();            Files = new KeyValuePair<string, SftpFileAttributes>[Count];            for (var i = 0; i < Count; i++)            {                var fileName = ReadString(Encoding);                if (SupportsLongName(ProtocolVersion))                {                    _ = ReadString(Encoding); // skip longname                }                Files[i] = new KeyValuePair<string, SftpFileAttributes>(fileName, ReadAttributes());            }        }        protected override void SaveData()        {            base.SaveData();            Write((uint)Files.Length); // count            for (var i = 0; i < Files.Length; i++)            {                var file = Files[i];                Write(file.Key, Encoding); // filename                if (SupportsLongName(ProtocolVersion))                {                    Write(0U); // longname                }                Write(file.Value.GetBytes()); // attrs            }        }        private static bool SupportsLongName(uint protocolVersion)        {            return protocolVersion <= 3U;        }    }}
 |