public void TestParseFtpFeatures() { var messages = new List <string> { " MDTM", " MFMT", " TVFS", " UTF8", " MFF modify;UNIX.group;UNIX.mode;", " MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;", " LANG ja-JP;ko-KR;bg-BG;zh-CN;it-IT;zh-TW;ru-RU;en-US*;fr-FR", " REST STREAM", " SIZE" }; var ftpFeatures = FtpClientHelper.ParseFtpFeatures(messages); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.MLST)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.MLSD)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.SIZE)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.MDTM)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.REST)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.EPSV)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.EPRT)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.MDTMDIR)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.UTF8)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.PRET)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.MFMT)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.MFCT)); Assert.IsTrue(ftpFeatures.HasFlag(FtpFeatures.MFF)); Assert.IsFalse(ftpFeatures.HasFlag(FtpFeatures.STAT)); }
internal static async Task <RawFtpResponse> ReceiveAsync(this Socket socket, int bufferSize, Func <SocketAsyncEventArgs> createSocketAsyncEventArgsPredicate, CancellationToken cancellationToken, long?bytesTotal = null, Action <long> progressPredicate = null) { var bytesTotallyTransferred = 0; int bytesTransferred; var result = new byte[0]; do { var buffer = new byte[bufferSize]; using (var socketAsyncEventArgs = createSocketAsyncEventArgsPredicate.Invoke()) { socketAsyncEventArgs.SetBuffer(buffer, 0, bufferSize); var socketError = await socket.ExecuteAsync(arg => arg.ReceiveAsync, socketAsyncEventArgs, cancellationToken); if (socketError != SocketError.Success) { return(RawFtpResponse.Failed); } bytesTransferred = socketAsyncEventArgs.BytesTransferred; } var offset = bytesTotallyTransferred; bytesTotallyTransferred += bytesTransferred; Array.Resize(ref result, bytesTotallyTransferred); Array.Copy(buffer, 0, result, offset, bytesTransferred); if (progressPredicate != null) { progressPredicate.Invoke(bytesTotallyTransferred); } } while (FtpClientHelper.AreThereRemainingBytes(bytesTransferred, bufferSize, bytesTotallyTransferred, bytesTotal)); var rawFtpResponse = new RawFtpResponse(true, result); return(rawFtpResponse); }
public void TestParseFtpReplyForIssue6() { const string data = @"227 Entering Passive Mode (63,245,215,56,204,65)"; var ftpReply = FtpClientHelper.ParseFtpReply(data); Assert.AreEqual(ftpReply.ResponseCode, 227); var ipEndPoint = FtpClientHelper.ParseIPEndPoint(ftpReply); Assert.IsNotNull(ipEndPoint); }
public void TestDirectoryChanges3() { var sourceFtpDirectory = FtpDirectory.Create("/foo/foo1"); var targetFtpDirectory = FtpDirectory.Create("/foo/foo2/foo3"); var directoryChanges = FtpClientHelper.DirectoryChanges(sourceFtpDirectory, targetFtpDirectory); var joinedDirectoryChanges = string.Join(",", directoryChanges); Assert.AreEqual("..,foo2,foo3", joinedDirectoryChanges); }
public static async Task <bool> SendAsync(this Socket socket, int bufferSize, Func <SocketAsyncEventArgs> createSocketAsyncEventArgsPredicate, Stream stream, CancellationToken cancellationToken, Action <long, long> progressPredicate = null) { stream.Position = 0L; var bytesTotal = stream.Length; var bytesTotallyTransferred = 0L; int bytesTransferred; do { using (var socketAsyncEventArgs = createSocketAsyncEventArgsPredicate.Invoke()) { var buffer = new byte[bufferSize]; bytesTransferred = stream.Read(buffer, 0, buffer.Length); socketAsyncEventArgs.SetBuffer(buffer, 0, bytesTransferred); var socketError = await socket.ExecuteAsync(arg => arg.SendAsync, socketAsyncEventArgs, cancellationToken); if (socketError != SocketError.Success) { return(false); } bytesTotallyTransferred += bytesTransferred; if (progressPredicate != null) { progressPredicate.Invoke(bytesTotallyTransferred, bytesTotal); } } } while (FtpClientHelper.AreThereRemainingBytes(bytesTransferred, bufferSize, bytesTotallyTransferred, bytesTotal)); return(true); }
public static async Task <FtpReply> GetFtpReplyAsync(this Socket socket, int bufferSize, Func <SocketAsyncEventArgs> createSocketAsyncEventArgsPredicate, Encoding encoding, CancellationToken cancellationToken) { var receiveResult = await socket.ReceiveAsync(bufferSize, createSocketAsyncEventArgsPredicate, encoding, cancellationToken); if (!receiveResult.Success) { return(FtpReply.Failed); } var ftpReply = FtpClientHelper.ParseFtpReply(receiveResult.Data); return(ftpReply); }