コード例 #1
0
 void SetFtpMusicFolders(MusicDataBase mdb, FtpServer ftpServer)
 {
     lock (ftpServer.RootFolders)
     {
         ftpServer.RootFolders.Clear();
         foreach (var dir in mdb.MusicFolders)
         {
             try
             {
                 FileSystem.GetFileSystemEntries(dir);
                 string name         = Path.GetFileNameWithoutExtension(dir);
                 int    i            = 0;
                 string selectedName = name;
                 while (!ftpServer.RootFolders.TryAdd(selectedName, dir))
                 {
                     selectedName = name + (++i);
                 }
                 this.LogDebug("Added root <cyan>{0}<default> {1}", selectedName, dir);
             }
             catch (Exception ex)
             {
                 this.LogWarning(ex, "Cannot access folder {0}", dir);
             }
         }
         ftpServer.DisconnectAllClients();
     }
 }
コード例 #2
0
ファイル: WorkerJobRequest.cs プロジェクト: Dacha204/Gitloy
        public ValidationResult Validate()
        {
            if (GitRepository == null)
            {
                return(ValidationResult.Invalid($"{nameof(GitRepository)} is null"));
            }

            if (FtpServer == null)
            {
                return(ValidationResult.Invalid($"{nameof(GitRepository)} is null"));
            }

            var gitValidation = GitRepository.Validate();

            if (!gitValidation.IsValid)
            {
                return(gitValidation);
            }

            var ftpValidation = FtpServer.Validate();

            if (!ftpValidation.IsValid)
            {
                return(ftpValidation);
            }

            return(ValidationResult.Valid);
        }
コード例 #3
0
ファイル: Core.cs プロジェクト: trei1205/UniFTP
        public static void AddServerTab(FtpServer server)
        {
            server.UserGroups = _groups ?? server.UserGroups;
            server.Users      = _users ?? server.Users;
            TabPage tabPage = new TabPage(server.Config.ServerName);

            tabPage.Controls.Clear();
            tabPage.Controls.AddRange(new Control[] { _mainForm.splitContainerMain });
            var tab = new TabData()
            {
                Tab = tabPage, Server = server
            };

            Tabs.Add(tab);
            _mainForm.tabInstance.Invoke(new MethodInvoker(() =>
            {
                if (_mainForm.tabInstance.TabPages.Count == 1 && Tabs.Count <= 1)
                {
                    _mainForm.tabInstance.TabPages.Clear();
                }
                _mainForm.tabInstance.TabPages.Add(tabPage);
                _mainForm.tabInstance.SelectedTab = tabPage;
            }));
            Core.CurrentTabData = tab;
            _mainForm.Invoke(new MethodInvoker(() => _mainForm.toolStart.Enabled = true));
            //_mainForm
        }
コード例 #4
0
ファイル: WorkerJobRequest.cs プロジェクト: Dacha204/Gitloy
 public WorkerJobRequest(int id, GitRepository gitRepository, FtpServer ftpServer)
 {
     Id            = id;
     GitRepository = gitRepository;
     FtpServer     = ftpServer;
     Status        = WorkerJobStatus.Requested;
 }
コード例 #5
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();
            if (sMessage == "")
            {
                return(GetMessage(500, string.Format("{0} needs a paramter", Command)));
            }

            string dirToMake = GetPath(FileNameHelpers.AppendDirTag(sMessage));

            // check directory name
            if (!FileNameHelpers.IsValid(dirToMake))
            {
                FtpServer.LogWrite(this, sMessage, 553, 0);
                return(GetMessage(553, string.Format("\"{0}\": Invalid directory name", sMessage)));
            }
            // check whether directory already exists
            if (ConnectionObject.FileSystemObject.DirectoryExists(dirToMake))
            {
                FtpServer.LogWrite(this, sMessage, 553, 0);
                return(GetMessage(553, string.Format("Directory \"{0}\" already exists", sMessage)));
            }
            // create directory
            if (!ConnectionObject.FileSystemObject.CreateDirectory(dirToMake))
            {
                FtpServer.LogWrite(this, sMessage, 550, 0);
                return(GetMessage(550, string.Format("Couldn't create directory. ({0})", sMessage)));
            }

            FtpServer.LogWrite(this, sMessage, 257, 0);
            return(GetMessage(257, string.Format("{0} successful \"{1}\".", Command, dirToMake)));
        }
コード例 #6
0
        public ActionResult SaveFtpServer(FtpServer ftpServer)
        {
            // Ftp Server connection test
            bool result = FtpServerFilesRepository.FtpConnectionTest(ftpServer);

            if (result)
            {
                // Get current user id from session
                int userId = (int?)System.Web.HttpContext.Current.Session["UserId"] ?? 0;
                //// ERROR HANDLE NEEDED WHEN session does not exist
                ///

                // Set user id
                ftpServer.UserId = userId;

                // Update Ftp Server info in FtpServers table
                UserRepository.UpdateFtpServer(ftpServer);

                // Update Cloud Service Status in Users table
                UserRepository.UpdateCloudServiceStatus(userId, true, (byte)CloudStorage.Models.User.ServiceType.FtpServer);

                return(Content("Ftp Server service has been registered SUCCESSFULLY."));
            }
            else
            {
                return(View("FtpServerForm"));
            }
        }
コード例 #7
0
        private void LaunchFtpServer()
        {
            Directory.CreateDirectory(@"root");

            // allow only anonymous logins
            var membershipProvider = new AnonymousMembershipProvider();


            // use %TEMP%/TestFtpServer as root folder
            var fsProvider = new DotNetFileSystemProvider("root", false);

            // Use all commands from the FtpServer assembly and NOT the one(s) from the AuthTls assembly
            var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly);


            // Initialize the FTP server
            _ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", FtpPort, commandFactory)
            {
                DefaultEncoding = Encoding.ASCII, // This can cause trouble.
                LogManager      = new FtpLogManager(),
            };

            // Start the FTP server
            _ftpServer.Start();
        }
コード例 #8
0
ファイル: RemoteServer.cs プロジェクト: yili9111/ShadowEditor
        public void Start()
        {
            var log = LogHelper.GetLogger(this.GetType());

            // 启动FTP服务器
            try
            {
                var membershipProvider = new AnonymousMembershipProvider();
                var fsProvider         = new DotNetFileSystemProvider(Path.Combine(Path.GetTempPath(), "TestFtpServer"), false);
                ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1");
                ftpServer.Start();
            }
            catch (Exception ex)
            {
                log.Error("Create FtpServer failed.", ex);
            }

            // 启动Websocket服务器
            try
            {
                // see: https://github.com/jjrdk/websocket-sharp
                webSocketServer = new WebSocketServer(null, int.Parse(webSocketPort));
                webSocketServer.AddWebSocketService <SocketServer>("/Socket");
                webSocketServer.Start();
            }
            catch (Exception ex)
            {
                log.Error("Create websocket server failed.", ex);
            }
        }
コード例 #9
0
        public static void Main(string[] args)
        {
            IConfiguration conf = new ConfigurationBuilder()
                                  .AddJsonFile($"appsettings.json")
                                  .AddJsonFile($"appsettings.local.json", optional: true)
                                  .Build();

            StorageProviderConfiguration.Init(conf);

            var _server = new FtpServer(new AzureFileSystemFactory(conf), conf);

            _server.NewConnection += nId =>
                                     Console.WriteLine("Connection: {0} accepted", nId);

            // This is a sample worker implementation. Replace with your logic.
            Console.WriteLine("Information: FTPRole entry point called");

            while (true)
            {
                if (_server.Started)
                {
                    Thread.Sleep(10000);
                    Console.WriteLine("Information: Server is alive");
                }
                else
                {
                    _server.Start();
                    Console.WriteLine("Control: Server starting");
                }
            }
        }
コード例 #10
0
        public override bool Init(FtpServer server, IServerConfig config)
        {
            if (!base.Init(server, config))
                return false;

            var userSettingFile = config.Options.GetValue("userSetting");            

            if (string.IsNullOrEmpty(userSettingFile))
            {
                server.Logger.Error("No user setting file was not defined!");
                return false;
            }

            if (!Path.IsPathRooted(userSettingFile))
                userSettingFile = server.GetFilePath(userSettingFile);

            if (!File.Exists(userSettingFile))
            {
                AppServer.Logger.Error("The userSetting file cannot be found!");
                return false;
            }

            m_UserConfigFile = userSettingFile;

            ReadUserConfigFile();

            m_UserConfigReadTimer = new Timer(OnUserConfigReadTimerCallback, null, Timeout.Infinite, Timeout.Infinite);

            return true;
        }
コード例 #11
0
            private static FtpServer StopServer(FtpServer ftpServer)
            {
                ftpServer.Start();
                ftpServer.Stop();

                return(ftpServer);
            }
コード例 #12
0
        protected override string OnProcess(string sMessage)
        {
            string sDirectory = ConnectionObject.CurrentDirectory;

            FtpServer.LogWrite(this, sMessage, 257, 0);
            return(GetMessage(257, string.Format("\"{0}\" {1} Successful.", sDirectory, Command)));
        }
コード例 #13
0
ファイル: Program.cs プロジェクト: trei1205/UniFTP
        static void Main(string[] args)
        {
            FtpServer f = new FtpServer(port: 21, enableIPv6: true, ipv6Port: 2121, logHeader: "UniFTP");

            f.Config = new FtpConfig("D:\\Temp", welcome: new string[] { "By Ulysses" });
            //Load configs...
            f.LoadConfigs();
            //or add configs manually
            //f.AddUserGroup("test", AuthType.Password);
            //f.AddGroupRule("test", "/", "rwxrwxrwx");
            //f.AddUser("root", "test", "test");

            //Import SSL cert
            f.ImportCertificate("UniFTP.Open.pfx", null);
            //Log event
            f.OnLog += sender => Console.WriteLine(((FtpLogEntry)sender).ToString());

            f.Config.LogInWelcome = new string[] { "Welcome back,Commander." };

            //Add directory/file link
            f.AddLink("test", "M:\\ACGMusic", "/");
            f.AddGroupRule("test", "/Music", "r-xr-xr-x");

            f.Start();
            Console.WriteLine("UniFTP Server Started!");
            Console.ReadLine();
            f.Stop();
            //Save configs for next time
            f.SaveConfigs();
            return;
        }
コード例 #14
0
        public IFileSystem Create(string sUser, string sPassword)
        {
            if ((sUser == null) || (sPassword == null))
            {
                return(null);
            }

            FtpAccount account;

            if (!m_accountManager.CheckAccount(sUser, sPassword, out account))
            {
                return(null);
            }

            if (!account.WriteAccess && !account.ReadAccess)
            {
                FtpServer.LogWrite($"user {sUser} has neither read nor write permissions");
                return(null);
            }

            IFileSystem system = new AzureFileSystem(account.RootFolder ?? sUser);

            if (!account.WriteAccess)
            {
                system = new ReadOnlyFileSystem(system);
            }

            return(system);
        }
コード例 #15
0
ファイル: FtpServerDao.cs プロジェクト: htetyiwin/GP
        public List <FtpServer> GetAllFtpServerList()
        {
            try
            {
                SqlCommand scom = new SqlCommand("SELECT * FROM [dbo].[TblFTPServer]", DbConnector.Connect());
                scom.CommandType = CommandType.Text;
                DataSet        ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(scom);
                da.Fill(ds);
                List <FtpServer> lstFtpServer = new List <FtpServer>();

                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    FtpServer ftpServer = new FtpServer();
                    ftpServer.Id            = Convert.ToInt32(ds.Tables[0].Rows[i]["Id"]);
                    ftpServer.ServerAddress = Convert.ToString(ds.Tables[0].Rows[i]["ServerAddress"]);
                    ftpServer.UserName      = Convert.ToString(ds.Tables[0].Rows[i]["UserName"]);
                    ftpServer.Password      = Convert.ToString(ds.Tables[0].Rows[i]["Password"]);
                    ftpServer.CreatedBy     = Convert.ToInt32(ds.Tables[0].Rows[i]["CreatedBy"]);
                    ftpServer.CreatedOn     = Convert.ToDateTime(ds.Tables[0].Rows[i]["CreatedOn"]);
                    ftpServer.ModifiedBy    = Convert.ToInt32(ds.Tables[0].Rows[i]["ModifiedBy"]);
                    ftpServer.ModifiedOn    = Convert.ToDateTime(ds.Tables[0].Rows[i]["ModifiedOn"]);
                    ftpServer.Active        = Convert.ToBoolean(ds.Tables[0].Rows[i]["Active"]);
                    lstFtpServer.Add(ftpServer);
                }

                return(lstFtpServer);
            }
            catch (Exception ex)
            {
                return(null);
            }
            return(null);
        }
コード例 #16
0
        public void ConstructorShouldSetConfigurationProperty()
        {
            var ftpConfiguration = new FtpConfiguration("Home", 21);

            var server = new FtpServer(ftpConfiguration, new MockFileSystem(), Substitute.For <IOperatingSystem>());

            server.Configuration.ShouldBeEquivalentTo(ftpConfiguration);
        }
コード例 #17
0
ファイル: FtpServersRepository.cs プロジェクト: AlienJust/RPD
        public void Add(IFtpServer ftpServer)
        {
            var copy = new FtpServer();

            CopyEntity(copy, ftpServer);
            copy.Id = _lastId++;

            _servers.Add(copy);
        }
コード例 #18
0
        public void GetShouldWorkWithNullPath()
        {
            var client = new FtpClient("localhost", 8888);
            var server = new FtpServer(8888, 100);

            server.Start();
            client.Get(null, null);
            server.Stop();
        }
コード例 #19
0
 public SiteCommand(FtpServer ftp)
 {
     ftp.AddCustomCommand("SITE", new OnCommandHandler(Cmd_SITE));
     AddCustomCommand("ADDUSER", new OnCommandHandler(Cmd_Site_AddUser));
     AddCustomCommand("CHANGE", new OnCommandHandler(Cmd_Site_Change));
     AddCustomCommand("DELUSER", new OnCommandHandler(Cmd_Site_DelUser));
     AddCustomCommand("PASSWD", new OnCommandHandler(Cmd_Site_Passwd));
     AddCustomCommand("HELP", new OnCommandHandler(Cmd_Site_Help));
 }
コード例 #20
0
        public void OnetimeSetup()
        {
            port = new Random().Next(10000, 20000);
            var membershipProvider = new AnonymousMembershipProvider();
            var fsProvider         = new DotNetFileSystemProvider("ftp", false);

            ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", port, new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).GetTypeInfo().Assembly));
            ftpServer.Start();
        }
コード例 #21
0
        public void Setup()
        {
            var listener = new Listener(6666);

            listener.Listen();

            ftp = new FtpServer("localhost", 6666);

            Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "test"));
        }
コード例 #22
0
        protected override string OnProcess(string sMessage)
        {
            string[] args = sMessage.Split(' ');

            if (args.Length > 2 || args.Length < 1)
            {
                return(GetMessage(501, string.Format("Invalid TYPE parameter: {0}", sMessage)));
            }

            switch (args[0].ToUpper())
            {
            case "A":
                ConnectionObject.DataType = DataType.Ascii;
                if (args.Length == 1)
                {
                    FtpServer.LogWrite(this, sMessage, 200, 0);
                    return(GetMessage(200, string.Format("{0} command succeeded, data type is Ascii", Command)));
                }
                else
                {
                    switch (args[1].ToUpper())
                    {
                    case "N":
                        ConnectionObject.FormatControl = FormatControl.NonPrint;
                        FtpServer.LogWrite(this, sMessage, 200, 0);
                        return(GetMessage(200, string.Format("{0} command succeeded, data type is Ascii, format is NonPrint", Command)));

                    case "T":
                    case "C":
                        ConnectionObject.FormatControl = FormatControl.NonPrint;
                        FtpServer.LogWrite(this, sMessage, 504, 0);
                        return(GetMessage(504, string.Format("Format {0} is not supported, use NonPrint format", args[1])));

                    default:
                        FtpServer.LogWrite(this, sMessage, 550, 0);
                        return(GetMessage(550, string.Format("Error - unknown format \"{0}\"", args[1])));
                    }
                }

            case "I":
                ConnectionObject.DataType = DataType.Image;
                FtpServer.LogWrite(this, sMessage, 200, 0);
                return(GetMessage(200, string.Format("{0} command succeeded, data type is Image (Binary)", Command)));

            case "E":
            case "L":
                ConnectionObject.DataType = DataType.Image;
                FtpServer.LogWrite(this, sMessage, 504, 0);
                return(GetMessage(504, string.Format("Data type {0} is not supported, use Image (Binary) type", args[0])));

            default:
                FtpServer.LogWrite(this, sMessage, 550, 0);
                return(GetMessage(550, string.Format("Error - unknown data type \"{0}\"", args[1])));
            }
        }
コード例 #23
0
ファイル: FtpClient.cs プロジェクト: zyj0021/Masuit.Tools
        /// <summary>
        /// 从FTP服务器下载文件,指定本地路径和本地文件名
        /// </summary>
        /// <param name="remoteFileName">远程文件名</param>
        /// <param name="localFileName">保存本地的文件名(包含路径)</param>
        /// <param name="ifCredential">是否启用身份验证(false:表示允许用户匿名下载)</param>
        /// <param name="updateProgress">报告进度的处理(第一个参数:总大小,第二个参数:当前进度)</param>
        public void Download(string remoteFileName, string localFileName, bool ifCredential = false, Action <int, int> updateProgress = null)
        {
            using (FileStream outputStream = new FileStream(localFileName, FileMode.Create))
            {
                if (FtpServer == null || FtpServer.Trim().Length == 0)
                {
                    throw new Exception("ftp下载目标服务器地址未设置!");
                }

                Uri uri     = new Uri("ftp://" + FtpServer + "/" + remoteFileName);
                var ftpsize = (FtpWebRequest)WebRequest.Create(uri);
                ftpsize.UseBinary = true;
                var reqFtp = (FtpWebRequest)WebRequest.Create(uri);
                reqFtp.UseBinary = true;
                reqFtp.KeepAlive = false;
                if (ifCredential) //使用用户身份认证
                {
                    ftpsize.Credentials = new NetworkCredential(Username, Password);
                    reqFtp.Credentials  = new NetworkCredential(Username, Password);
                }

                ftpsize.Method = WebRequestMethods.Ftp.GetFileSize;
                using (FtpWebResponse re = (FtpWebResponse)ftpsize.GetResponse())
                {
                    long totalBytes = re.ContentLength;
                    reqFtp.Method = WebRequestMethods.Ftp.DownloadFile;
                    var response = (FtpWebResponse)reqFtp.GetResponse();
                    using (response)
                    {
                        var ftpStream = response.GetResponseStream();
                        //更新进度
                        using (ftpStream)
                        {
                            updateProgress?.Invoke((int)totalBytes, 0); //更新进度条
                            long   totalDownloadedByte = 0;
                            int    bufferSize          = 1024 * 1024;
                            byte[] buffer = new byte[bufferSize];
                            if (ftpStream != null)
                            {
                                var readCount = ftpStream.Read(buffer, 0, bufferSize);
                                while (readCount > 0)
                                {
                                    totalDownloadedByte = readCount + totalDownloadedByte;
                                    outputStream.Write(buffer, 0, readCount);
                                    //更新进度
                                    updateProgress?.Invoke((int)totalBytes, (int)totalDownloadedByte); //更新进度条
                                    readCount = ftpStream.Read(buffer, 0, bufferSize);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #24
0
        public FileServer(MountHandler parent, string host, int port, string user, string pass)
        {
            Parent = parent;
            var fsFact   = new VirtualFsFactory(this);
            var mbFact   = new FixedMemberProvider(user, pass);
            var ass      = typeof(FtpServer).Assembly;
            var commands = new AssemblyFtpCommandHandlerFactory(ass);

            server = new FtpServer(fsFact, mbFact, host, port, commands);
            server.Start();
        }
コード例 #25
0
        public void GetFilesShouldListFiles()
        {
            server = GetFtpServer();

            server.Start();

            File.Create(Path.Combine(ftpHomeDirectory, "someFile.csv")).Dispose();
            File.Create(Path.Combine(ftpHomeDirectory, "TestFile1.txt")).Dispose();

            server.GetFiles(".").ShouldAllBeEquivalentTo(new[] { "someFile.csv", "TestFile1.txt" });
        }
コード例 #26
0
ファイル: Program.cs プロジェクト: jordiruiz/azftp2blob
 public void Go(string[] args)
 {
     GetArgsAndConfig(args);
     if (_verbose)
     {
         ConsoleTraceListener conTrace = new ConsoleTraceListener();
         Trace.Listeners.Add(conTrace);
     }
     _server = new FtpServer(new AzureFileSystemFactory());
     _server.NewConnection += ServerNewConnection;
     _server.Start();
 }
コード例 #27
0
ファイル: Program.cs プロジェクト: wangzhefeng2000/FtpServer
        private static void Main()
        {
            // Load server certificate
            var cert = new X509Certificate2("test.pfx");

            AuthTlsCommandHandler.ServerCertificate = cert;

            // Only allow anonymous login
            var membershipProvider = new AnonymousMembershipProvider(new NoValidation());

            // Use the .NET file system
            var fsProvider = new DotNetFileSystemProvider(Path.Combine(Path.GetTempPath(), "TestFtpServer"));

            // Use all commands from the FtpServer assembly and the one(s) from the AuthTls assembly
            var commandFactory = new AssemblyFtpCommandHandlerFactory(typeof(FtpServer).Assembly, typeof(AuthTlsCommandHandler).Assembly);

            // Initialize the FTP server
            using (var ftpServer = new FtpServer(fsProvider, membershipProvider, "127.0.0.1", Port, commandFactory)
            {
                DefaultEncoding = Encoding.ASCII,
                LogManager = new FtpLogManager(),
            })
            {
#if USE_FTPS_IMPLICIT
                // Use an implicit SSL connection (without the AUTHTLS command)
                ftpServer.ConfigureConnection += (s, e) =>
                {
                    var sslStream = new FixedSslStream(e.Connection.OriginalStream);
                    sslStream.AuthenticateAsServer(cert);
                    e.Connection.SocketStream = sslStream;
                };
#endif

                // Create the default logger
                var log = ftpServer.LogManager?.CreateLog(typeof(Program));

                try
                {
                    // Start the FTP server
                    ftpServer.Start();
                    Console.WriteLine("Press ENTER/RETURN to close the test application.");
                    Console.ReadLine();

                    // Stop the FTP server
                    ftpServer.Stop();
                }
                catch (Exception ex)
                {
                    log?.Error(ex, "Error during main FTP server loop");
                }
            }
        }
コード例 #28
0
        protected override string OnProcess(string sMessage)
        {
            sMessage = sMessage.Trim();
            if (sMessage == "")
            {
                return(GetMessage(501, string.Format("{0} needs a parameter", Command)));
            }

            ConnectionObject.User = sMessage;

            FtpServer.LogWrite(this, sMessage, 331, 0);
            return(GetMessage(331, string.Format("User {0} logged in, needs password", sMessage)));
        }
コード例 #29
0
        protected override string OnProcess(string sMessage)
        {
            if (sMessage.Trim() != "")
            {
                return(GetMessage(501, "REIN needs no parameters"));
            }

            // log out current user
            ConnectionObject.LogOut();

            FtpServer.LogWrite(this, sMessage, 220, 0);
            return(GetMessage(220, "Service ready for new user!"));
        }
コード例 #30
0
        public override bool OnStart()
        {
            if (_server == null)
            {
                _server = new FtpServer();
            }

            _server.NewConnection   += ServerNewConnection;
            _server.UserLogoutEvent += ServerLogoutEvent;
            _server.errorHandler    += ErrorHandle;

            return(base.OnStart());
        }
コード例 #31
0
 /// <summary>
 /// Get a default FTP Server handler based on the enum value.
 /// </summary>
 public static FtpBaseServer GetServerHandler(FtpServer value)
 {
     if (value != FtpServer.Unknown)
     {
         foreach (var server in AllServers)
         {
             if (server.ToEnum() == value)
             {
                 return(server);
             }
         }
     }
     return(null);
 }
コード例 #32
0
        public virtual bool Init(FtpServer server, IServerConfig config)
        {
            AppServer = server;

            var dataPortNode = config.Options.GetValue("dataPort");

            if (string.IsNullOrEmpty(dataPortNode))
            {
                server.Logger.Error("Parameter 'dataPort' is required!");
                return false;
            }

            string[] range = dataPortNode.Split(',', ';', ':');

            for (int i = 0; i < range.Length; i++)
            {
                string portField = range[i];

                if (string.IsNullOrEmpty(portField))
                    continue;

                string[] arrPorts = portField.Split('-');

                if (arrPorts == null || arrPorts.Length < 1 || arrPorts.Length > 2)
                {
                    server.Logger.Error("Invalid 'dataPort' value in parameter!");
                    return false;
                }

                if (arrPorts.Length == 1)
                {
                    int port;

                    if (!int.TryParse(arrPorts[0], out port))
                    {
                        server.Logger.Error("Invalid 'dataPort' value in parameter!");
                        return false;
                    }

                    m_DataPorts.Add(port);
                }
                else if (arrPorts.Length == 2)
                {
                    int portStart, portEnd;

                    if (!int.TryParse(arrPorts[0], out portStart))
                    {
                        server.Logger.Error("Invalid 'dataPort' value in parameter!");
                        return false;
                    }

                    if (!int.TryParse(arrPorts[1], out portEnd))
                    {
                        server.Logger.Error("Invalid 'dataPort' value in parameter!");
                        return false;
                    }

                    if (portEnd <= portStart)
                    {
                        server.Logger.Error("Invalid 'dataPort' value in parameter!");
                        return false;
                    }

                    if (portStart < 0)
                        portStart = 1;

                    if (portEnd > 65535)
                        portEnd = 65535;

                    for (int seq = portStart; seq < portEnd + 1; seq++)
                    {
                        m_DataPorts.Add(seq);
                    }
                }
            }

            return true;
        }