示例#1
0
        //Returns false if successful
        public static bool DownloadFile(string Local, string Remote)
        {
            bool Result = false;

            try
            {
                if (Client.IsConnected)
                {
                    Result = !Client.DownloadFile(Local, Remote, true);
                }
                else
                {
                    return(true); //error
                }
            }
            catch (Exception e)
            {
                if (e.InnerException is FtpCommandException)
                {
                    FtpCommandException err = e.InnerException as FtpCommandException;
                    HandleError(err.CompletionCode, err.Message);
                }
                Result = true;
            }

            return(Result);
        }
        private static bool IsMaxThreads(FtpCommandException ftpCommandException)
        {
            List <Regex> regexes = new List <Regex>
            {
                RegexMaxThreadsSpecific01,
                RegexMaxThreadsSpecific02,
                RegexMaxThreadsSpecific03,
                RegexMaxThreadsSpecific04,

                // General needs to be check the latest
                RegexMaxThreadsGeneral01,
                RegexMaxThreadsGeneral02,
                RegexMaxThreadsGeneral03,
                RegexMaxThreadsGeneral05,
                RegexMaxThreadsGeneral06
            };

            foreach (Regex regex in regexes)
            {
                if (regex.IsMatch(ftpCommandException.Message))
                {
                    Match regexMatch = regex.Match(ftpCommandException.Message);

                    int newThreads = OpenDirectoryIndexer.Session.MaxThreads;

                    if (regexMatch.Groups.ContainsKey("MaxThreads"))
                    {
                        // Should be one less than..
                        if (regex == RegexMaxThreadsSpecific01)
                        {
                            OpenDirectoryIndexer.Session.MaxThreads = int.Parse(regexMatch.Groups["MaxThreads"].Value) - 1;
                        }
                        else
                        {
                            OpenDirectoryIndexer.Session.MaxThreads = int.Parse(regexMatch.Groups["MaxThreads"].Value);
                        }
                    }
                    else
                    {
                        OpenDirectoryIndexer.Session.MaxThreads = Math.Max(1, Interlocked.Decrement(ref OpenDirectoryIndexer.Session.MaxThreads));
                    }

                    if (newThreads != OpenDirectoryIndexer.Session.MaxThreads)
                    {
                        Logger.Warn($"Max threads reduced to {OpenDirectoryIndexer.Session.MaxThreads}");
                    }

                    return(true);
                }
            }

            // This one is not specific to threads
            if (RegexMaxThreadsGeneral04.IsMatch(ftpCommandException.Message))
            {
                throw ftpCommandException;
            }

            return(false);
        }
        public static bool IsTransient(this FtpCommandException ex)
        {
            if (ex.CompletionCode == "530") // Authentication error
            {
                return(false);
            }

            return(true);
        }
示例#4
0
 //Returns false if successful
 public static bool DownloadFile(string Local, string Remote)
 {
     try
     {
         return(!Client.DownloadFile(Local, Remote, true));
     }
     catch (Exception e)
     {
         if (e.InnerException is FtpCommandException)
         {
             FtpCommandException err = e.InnerException as FtpCommandException;
             HandleError(err.CompletionCode, err.Message);
         }
         return(true);
     }
 }