Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }