| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | using System;using System.Collections.Generic;using System.Threading;using Renci.SshNet.Sftp.Responses;namespace Renci.SshNet.Sftp{    internal interface ISftpSession : ISubsystemSession    {        /// <summary>        /// Gets the SFTP protocol version.        /// </summary>        /// <value>        /// The SFTP protocol version.        /// </value>        uint ProtocolVersion { get; }        /// <summary>        /// Gets the remote working directory.        /// </summary>        /// <value>        /// The remote working directory.        /// </value>        string WorkingDirectory { get; }        /// <summary>        /// Changes the current working directory to the specified path.        /// </summary>        /// <param name="path">The new working directory.</param>        void ChangeDirectory(string path);        /// <summary>        /// Resolves a given path into an absolute path on the server.        /// </summary>        /// <param name="path">The path to resolve.</param>        /// <returns>        /// The absolute path.        /// </returns>        string GetCanonicalPath(string path);        /// <summary>        /// Performs SSH_FXP_FSTAT request.        /// </summary>        /// <param name="handle">The handle.</param>        /// <returns>        /// File attributes        /// </returns>        SftpFileAttributes RequestFStat(byte[] handle);        /// <summary>        /// Performs SSH_FXP_LSTAT request.        /// </summary>        /// <param name="path">The path.</param>        /// <returns>        /// File attributes        /// </returns>        SftpFileAttributes RequestLStat(string path);        /// <summary>        /// Performs SSH_FXP_MKDIR request.        /// </summary>        /// <param name="path">The path.</param>        void RequestMkDir(string path);        /// <summary>        /// Performs SSH_FXP_OPEN request        /// </summary>        /// <param name="path">The path.</param>        /// <param name="flags">The flags.</param>        /// <param name="nullOnError">if set to <c>true</c> returns <c>null</c> instead of throwing an exception.</param>        /// <returns>File handle.</returns>        byte[] RequestOpen(string path, Flags flags, bool nullOnError = false);        /// <summary>        /// Performs SSH_FXP_OPENDIR request        /// </summary>        /// <param name="path">The path.</param>        /// <param name="nullOnError">if set to <c>true</c> returns null instead of throwing an exception.</param>        /// <returns>File handle.</returns>        byte[] RequestOpenDir(string path, bool nullOnError = false);        /// <summary>        /// Performs posix-rename@openssh.com extended request.        /// </summary>        /// <param name="oldPath">The old path.</param>        /// <param name="newPath">The new path.</param>        void RequestPosixRename(string oldPath, string newPath);        /// <summary>        /// Performs SSH_FXP_READ request.        /// </summary>        /// <param name="handle">The handle.</param>        /// <param name="offset">The offset.</param>        /// <param name="length">The length.</param>        /// <returns>data array; null if EOF</returns>        byte[] RequestRead(byte[] handle, ulong offset, uint length);        /// <summary>        /// Performs SSH_FXP_READDIR request        /// </summary>        /// <param name="handle">The handle.</param>        /// <returns></returns>        KeyValuePair<string, SftpFileAttributes>[] RequestReadDir(byte[] handle);        /// <summary>        /// Performs SSH_FXP_REMOVE request.        /// </summary>        /// <param name="path">The path.</param>        void RequestRemove(string path);        /// <summary>        /// Performs SSH_FXP_RENAME request.        /// </summary>        /// <param name="oldPath">The old path.</param>        /// <param name="newPath">The new path.</param>        void RequestRename(string oldPath, string newPath);        /// <summary>        /// Performs SSH_FXP_RMDIR request.        /// </summary>        /// <param name="path">The path.</param>        void RequestRmDir(string path);        /// <summary>        /// Performs SSH_FXP_SETSTAT request.        /// </summary>        /// <param name="path">The path.</param>        /// <param name="attributes">The attributes.</param>        void RequestSetStat(string path, SftpFileAttributes attributes);        /// <summary>        /// Performs statvfs@openssh.com extended request.        /// </summary>        /// <param name="path">The path.</param>        /// <param name="nullOnError">if set to <c>true</c> [null on error].</param>        /// <returns></returns>        SftpFileSytemInformation RequestStatVfs(string path, bool nullOnError = false);        /// <summary>        /// Performs SSH_FXP_SYMLINK request.        /// </summary>        /// <param name="linkpath">The linkpath.</param>        /// <param name="targetpath">The targetpath.</param>        void RequestSymLink(string linkpath, string targetpath);        /// <summary>        /// Performs SSH_FXP_FSETSTAT request.        /// </summary>        /// <param name="handle">The handle.</param>        /// <param name="attributes">The attributes.</param>        void RequestFSetStat(byte[] handle, SftpFileAttributes attributes);        /// <summary>        /// Performs SSH_FXP_WRITE request.        /// </summary>        /// <param name="handle">The handle.</param>        /// <param name="offset">The offset.</param>        /// <param name="data">The data to send.</param>#if TUNING        /// <param name="length">The number of bytes of <paramref name="data"/> to send.</param>#endif        /// <param name="wait">The wait event handle if needed.</param>        /// <param name="writeCompleted">The callback to invoke when the write has completed.</param>        void RequestWrite(byte[] handle,                          ulong offset,                          byte[] data,#if TUNING                          int length,#endif                          AutoResetEvent wait,                          Action<SftpStatusResponse> writeCompleted = null);        /// <summary>        /// Performs SSH_FXP_CLOSE request.        /// </summary>        /// <param name="handle">The handle.</param>        void RequestClose(byte[] handle);        /// <summary>        /// Calculates the optimal size of the buffer to read data from the channel.        /// </summary>        /// <param name="bufferSize">The buffer size configured on the client.</param>        /// <returns>        /// The optimal size of the buffer to read data from the channel.        /// </returns>        uint CalculateOptimalReadLength(uint bufferSize);        /// <summary>        /// Calculates the optimal size of the buffer to write data on the channel.        /// </summary>        /// <param name="bufferSize">The buffer size configured on the client.</param>        /// <param name="handle">The file handle.</param>        /// <returns>        /// The optimal size of the buffer to write data on the channel.        /// </returns>        /// <remarks>        /// Currently, we do not take the remote window size into account.        /// </remarks>        uint CalculateOptimalWriteLength(uint bufferSize, byte[] handle);    }}
 |