Example #1
0
        private void bgThread_GetLogonSessionsCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // Hide loading animations.
            gridLoading.Visibility = Visibility.Collapsed;

            // If everything succeeded, bind the results to the DataGrid.  Otherwise, display an error.
            if (RemoteLogonSession.Result != null && RemoteLogonSession.Result.DidTaskSucceed)
            {
                // Bind the results to the DataGrid and sort the list.
                dgUsers.ItemsSource = e.Result as List <RemoteLogonSession>;
                RemoteAdmin.SortDataGrid(dgUsers);

                // If no logon sessions were found, display the No Sessions overlay.
                if (dgUsers.Items.Count == 0)
                {
                    gridNoSessions.Visibility = Visibility.Visible;
                    tbTargetComputer.Text     = RemoteLogonSession.ComputerName;
                }
                else
                {
                    gridNoSessions.Visibility = Visibility.Collapsed;
                }
            }
            else
            {
                // If there was an error, display error overlay.
                gridError.Visibility = Visibility.Visible;
            }
        }
        private void bgThread_GetUpdatesCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (RemoteUpdate.Result != null && RemoteUpdate.Result.DidTaskSucceed)
            {
                // Retrieve and display the current Microsoft update configuration from the registry.
                DisplayUpdateConfiguration(RemoteUpdateConfiguration.GetUpdateConfiguration());
                if (RemoteUpdate.GetRebootState())
                {
                    RebootRequired.Text       = "* This computer has a pending required reboot.";
                    RebootRequired.Visibility = Visibility.Visible;
                }
                else
                {
                    RebootRequired.Text       = string.Empty;
                    RebootRequired.Visibility = Visibility.Collapsed;
                }

                // Bind the returned list of installed updates to the DataGrid.
                dgUpdates.ItemsSource = e.Result as List <RemoteUpdate>;
                RemoteAdmin.SortDataGrid(dgUpdates);
                gridLoading.Visibility = Visibility.Collapsed;
            }
            else
            {
                // Something went wrong while retrieving updates.  Display an error overlay.
                gridLoading.Visibility = Visibility.Collapsed;
                gridError.Visibility   = Visibility.Visible;
            }
        }
Example #3
0
        private void cboOdbcDsn_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var entry = (RemoteOdbc)cboOdbcDsn.SelectedItem;

            if (entry == null)
            {
                return;
            }

            dgOdbcDsnSelected.ItemsSource = entry.Values;
            RemoteAdmin.SortDataGrid(dgOdbcDsnSelected);
        }
Example #4
0
        private void bgThread_GetProcessesCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // Hide loading animations.
            gridLoading.Visibility = Visibility.Collapsed;

            // If everything succeeded, bind the results to the DataGrid.  Otherwise, display an error.
            if (RemoteProcess.Result != null && RemoteProcess.Result.DidTaskSucceed)
            {
                // Bind the results to the DataGrid and sort the list.
                dgProcesses.ItemsSource = e.Result as List <RemoteProcess>;
                RemoteAdmin.SortDataGrid(dgProcesses);
            }
            else
            {
                // If there was an error, display error overlay.
                gridError.Visibility = Visibility.Visible;
            }
        }
Example #5
0
        private void bgThread_GetServicesCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // Hide loading animations.
            gridLoading.Visibility = Visibility.Collapsed;

            // If everything succeeded, bind the results to the DataGrid.  Otherwise, display an error.
            if (RemoteService.Result != null && RemoteService.Result.DidTaskSucceed)
            {
                // Success.  Display the results.
                dgServices.ItemsSource     = e.Result as List <RemoteService>;
                _ServicesCollection        = CollectionViewSource.GetDefaultView(e.Result as List <RemoteService>);
                _ServicesCollection.Filter = ServiceFilter;
                RemoteAdmin.SortDataGrid(dgServices);
            }
            else
            {
                // Error.  Display error overlay.
                gridError.Visibility = Visibility.Visible;
            }
        }
        private void bgThread_GetApplicationsCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // Hide loading animations.
            gridLoading.Visibility = Visibility.Collapsed;

            // If everything succeeded, bind the results to the DataGrid.  Otherwise, display an error.
            if (RemoteApplication.Result != null && RemoteApplication.Result.DidTaskSucceed)
            {
                // Bind the results to the DataGrid and sort the list.
                dgApps.ItemsSource             = e.Result as List <RemoteApplication>;
                _ApplicationsCollection        = CollectionViewSource.GetDefaultView(e.Result as List <RemoteApplication>);
                _ApplicationsCollection.Filter = ApplicationFilter;
                RemoteAdmin.SortDataGrid(dgApps);
            }
            else
            {
                // If there was an error, display error overlay.
                gridError.Visibility = Visibility.Visible;
            }
        }
Example #7
0
        private void bgThread_GetLogonHistoryCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // Hide loading animations.
            gridHistoryLoading.Visibility = Visibility.Collapsed;

            // If everything succeeded, bind the results to the DataGrid.  Otherwise, display an error.
            if (RemoteLogonHistory.Result != null && RemoteLogonHistory.Result.DidTaskSucceed)
            {
                // Bind the results to the DataGrid and sort the list.
                dgHistory.ItemsSource = e.Result as List <RemoteLogonHistory>;
                RemoteAdmin.SortDataGrid(dgHistory, 1, ListSortDirection.Descending);

                // If no logon history was found, display the No History Sessions overlay.
                if (dgHistory.Items.Count == 0)
                {
                    gridNoHistory.Visibility = Visibility.Visible;
                    tbHistoryNoSessions.Text = RemoteLogonSession.ComputerName;
                }
                else
                {
                    gridNoHistory.Visibility = Visibility.Collapsed;
                }
            }
            else
            {
                // If there was an error, display error overlay.
                if (RemoteLogonHistory.Result != null && !string.IsNullOrEmpty(RemoteLogonHistory.Result.MessageBody))
                {
                    tbHistoryError.Text = RemoteLogonHistory.Result.MessageBody;
                }
                else
                {
                    tbHistoryError.Text = "Could not retrieve data.";
                }

                gridHistoryError.Visibility = Visibility.Visible;
            }
        }
Example #8
0
        internal void proceeed()
        {
            switch (ComType)
            {
            case RemoteCommandType.process:
            {
                if (this.ViewImageProcess)
                {
                    ProcessName = Application.StartupPath + "\\RootDir\\" + ProcessName;
                }
                string r = "";
                if (this.NoProcessPar)
                {
                    r = AppHelper.StartProcess(this.ProcessName).ToString();
                }
                else
                {
                    r = AppHelper.StartProcess(this.ProcessName, this.ProcessPar);
                }
                this.Result = this.ProcessName + WebServer.NewLineReplacor + "      proce = " + r;
                break;
            }

            case RemoteCommandType.MessageBox:
            {
                AppHelper.EnormusMessageBox(MessageBoxCap, this.closeMessage);
                this.Result = "msgbx sent";
                break;
            }

            case RemoteCommandType.MoveMouse:
            {
                this.initMouseCursor();
                RemoteAdmin.MouseMove(this.mouseCursorX, this.mouseCursorY);
                this.Result = "MovedTo {" + this.mouseCursorX + "," + this.mouseCursorY + "}";
                break;
            }

            case RemoteCommandType.CloseProcess:
            {
                string r = AppHelper.CloseProcess(ProcessName);
                this.Result = "closed=" + r;
                break;
            }

            case RemoteCommandType.CloseAllProcess:
            {
                this.Result = "closed=" + AppHelper.CloseProcessAll(ProcessName); break;
            }

            case RemoteCommandType.MouseClick:
            {
                this.RequireUnpreved = true;
                RemoteAdmin.PerformMouseLeftClick();
                break;
            }

            case RemoteCommandType.LS:
            {
                string [] x = AppHelper.GetDirectoryContents(this.DirPath);
                this.Result = AppHelper.ConcaTArrayToString(x, "<br />");

                break;
            }

            case RemoteCommandType.MuteSystemSound:
            {
                this.Result = RemoteAdmin.MuteSystemSound(this.HandlePointer);
                break;
            }

            case RemoteCommandType.MouseRightClick:
            {
                this.Result = "clicking=" + RemoteAdmin.PerformMouseRightClick();
                break;
            }

            case RemoteCommandType.PrintScreenShot:
            {
                this.HasBinaryResult = true;
                string fil = AppHelper.GetRandomFilePAth();
                var    bmp = ScreenCapturePInvoke.CaptureFullScreen(true);
                bmp.Save(fil);
                this.bytes = AppHelper.ReadFileBts(fil);
                AppHelper.deleteFile(fil);
                this.extn   = "jpg";
                this.Result = fil;
                break;
            }

            case RemoteCommandType.ShowClient:
            case RemoteCommandType.HideClient: this.RequireUnpreved = true; break;
            }
        }
        /// <summary>
        /// Adds new user to specified DomainName.
        /// </summary>
        /// <param name="fullName">User full name.</param>
        /// <param name="userName">User login name.</param>
        /// <param name="password">User login password.</param>
        /// <param name="Description">User Description.</param>
        /// <param name="emails">User Emails addresses.</param>
        /// <param name="domainID">DomainName ID of DomainName where to add user.</param>
        /// <param name="mailboxSize">Maximum mailbox size.</param>
        /// <param name="enabled">Sepcifies if user is enabled.</param>
        /// <param name="allowRelay">Specifies if user can relay.</param>
        /// <param name="remPop3Accounts">Byte DataSet Pop3RemServSchema or null.</param>
        /// <returns></returns>
        public DataRow AddUser(string fullName,string userName,string password,string Description,string emails,string domainID,int mailboxSize,bool enabled,bool allowRelay,byte[] remPop3Accounts)
        {
            DataRow retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsUsersCopy = dsUsers.Copy();

                        DataRow dr = dsUsersCopy.Tables["Users"].NewRow();
                        dr["UserID"]       = Guid.NewGuid().ToString();
                        dr["DomainID"]     = domainID;
                    //	dr["DomainName"]   = domainName;
                        dr["FULLNAME"]     = fullName;
                        dr["USERNAME"]     = userName;
                        dr["PASSWORD"]     = password;
                        dr["Description"]  = Description;
                        dr["Emails"]       = emails;
                        dr["Mailbox_Size"] = mailboxSize;
                        dr["Enabled"]      = enabled;
                        dr["AllowRelay"]   = allowRelay;

                        if(remPop3Accounts != null){
                            dr["RemotePop3Servers"] = remPop3Accounts;
                        }

                        dsUsersCopy.Tables["Users"].Rows.Add(dr);
                        dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema);

                        return dr;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddUser")){
                            sqlCmd.AddParameter("@FullName"          ,SqlDbType.NVarChar,fullName);
                            sqlCmd.AddParameter("@UserName"          ,SqlDbType.NVarChar,userName);
                            sqlCmd.AddParameter("@Password"          ,SqlDbType.NVarChar,password);
                            sqlCmd.AddParameter("@Description"       ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@Emails"            ,SqlDbType.NVarChar,emails);
                            sqlCmd.AddParameter("@DomainID"          ,SqlDbType.NVarChar,domainID);
                            sqlCmd.AddParameter("@MailboxSize"       ,SqlDbType.NVarChar,mailboxSize);
                            sqlCmd.AddParameter("@Enabled"           ,SqlDbType.Bit,enabled);
                            sqlCmd.AddParameter("@AllowRelay"        ,SqlDbType.Bit,allowRelay);
                            sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,remPop3Accounts);

                            DataSet ds = sqlCmd.Execute();
                            ds.Tables[0].TableName = "Users";

                            if(ds.Tables["Users"].Rows.Count > 0){
                                return ds.Tables["Users"].Rows[0];
                            }
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.AddUser(fullName,userName,password,Description,emails,domainID,mailboxSize,enabled,allowRelay,remPop3Accounts).Tables["Users"].Rows[0];
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Updates new user to specified DomainName.
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="fullName">User full name.</param>
        /// <param name="password">User login password.</param>
        /// <param name="Description">User Description.</param>
        /// <param name="emails">User Emails addresses.</param>
        /// <param name="domainID">DomainName ID of DomainName where to add user.</param>
        /// <param name="mailboxSize">Maximum mailbox size.</param>
        /// <param name="enabled">Sepcifies if user is enabled.</param>
        /// <param name="allowRelay">Specifies if user can relay.</param>
        /// <param name="remPop3Accounts">Byte DataSet Pop3RemServSchema or null.</param>
        public void UpdateUser(string userID,string fullName,string password,string Description,string emails,string domainID,int mailboxSize,bool enabled,bool allowRelay,byte[] remPop3Accounts)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        DataSet dsUsersCopy = dsUsers.Copy();
                        using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){
                            dv.RowFilter = "UserID='" + userID + "'";

                            if(dv.Count > 0){
                                dv[0]["FULLNAME"]     = fullName;
                                dv[0]["PASSWORD"]     = password;
                                dv[0]["Description"]  = Description;
                                dv[0]["Emails"]       = emails;
                                dv[0]["DomainID"]     = domainID;
                                dv[0]["Mailbox_Size"] = mailboxSize;
                                dv[0]["Enabled"]      = enabled;
                                dv[0]["AllowRelay"]   = allowRelay;

                                if(remPop3Accounts != null){
                                    dv[0]["RemotePop3Servers"] = remPop3Accounts;
                                }
                                else{
                                    dv[0]["RemotePop3Servers"] = DBNull.Value;
                                }
                            }

                            dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateUser")){
                            sqlCmd.AddParameter("@UserID"            ,SqlDbType.NVarChar,userID);
                            sqlCmd.AddParameter("@FullName"          ,SqlDbType.NVarChar,fullName);
                            sqlCmd.AddParameter("@Password"          ,SqlDbType.NVarChar,password);
                            sqlCmd.AddParameter("@Description"       ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@Emails"            ,SqlDbType.NVarChar,emails);
                            sqlCmd.AddParameter("@DomainID"          ,SqlDbType.NVarChar,domainID);
                            sqlCmd.AddParameter("@MailboxSize"       ,SqlDbType.NVarChar,mailboxSize);
                            sqlCmd.AddParameter("@Enabled"           ,SqlDbType.Bit,enabled);
                            sqlCmd.AddParameter("@AllowRelay"        ,SqlDbType.Bit,allowRelay);
                            sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,remPop3Accounts);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateUser(userID,fullName,password,Description,emails,domainID,mailboxSize,enabled,allowRelay,remPop3Accounts);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Updates security entry.
        /// </summary>
        /// <param name="securityID"></param>
        /// <param name="Description"></param>
        /// <param name="protocol"></param>
        /// <param name="type"></param>
        /// <param name="action"></param>
        /// <param name="content"></param>
        /// <param name="startIP"></param>
        /// <param name="endIP"></param>
        /// <returns></returns>
        public void UpdateSecurityEntry(string securityID,string Description,string protocol,string type,string action,string content,long startIP,long endIP)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsSecurityCopy = dsSecurity.Copy();

                        using(DataView dv = new DataView(dsSecurityCopy.Tables["Security_List"])){
                            dv.RowFilter = "SecurityID='" + securityID + "'";

                            if(dv.Count > 0){
                                dv[0]["Description"] = Description;
                                dv[0]["Protocol"]    = protocol;
                                dv[0]["Type"]        = type;
                                dv[0]["Action"]      = action;
                                dv[0]["Content"]     = content;
                                dv[0]["StartIP"]     = startIP;
                                dv[0]["EndIP"]       = endIP;
                            }

                            dsSecurityCopy.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema);
                        }

                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateSecurityEntry")){
                            sqlCmd.AddParameter("@SecurityID"  ,SqlDbType.UniqueIdentifier,securityID);
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar        ,Description);
                            sqlCmd.AddParameter("@Protocol"    ,SqlDbType.NVarChar        ,protocol);
                            sqlCmd.AddParameter("@Type"        ,SqlDbType.NVarChar        ,type);
                            sqlCmd.AddParameter("@Action"      ,SqlDbType.NVarChar        ,action);
                            sqlCmd.AddParameter("@Content"     ,SqlDbType.NVarChar        ,content);
                            sqlCmd.AddParameter("@StartIP"     ,SqlDbType.BigInt          ,startIP);
                            sqlCmd.AddParameter("@EndIP"       ,SqlDbType.BigInt          ,endIP);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateSecurityEntry(securityID,Description,protocol,type,action,content,startIP,endIP);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Adds new Emails route.
        /// </summary>
        /// <param name="pattern">Match pattern.</param>
        /// <param name="mailbox">Mailbox to route.</param>
        /// <param name="Description">Description.</param>
        /// <param name="domainID">DomainName ID.</param>
        /// <returns></returns>
        public DataRow AddRoute(string pattern,string mailbox,string Description,string domainID)
        {
            DataRow retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    //-- Find domainName from domainID ---------------------------//
                    string domainName = "";
                    foreach(DataRowView drV in this.GetDomainList()){
                        if(drV["DomainID"].ToString().ToUpper() == domainID.ToUpper()){
                            domainName = drV["DomainName"].ToString();
                        }
                    }

                    DataSet dsRoutingCopy = dsRouting.Copy();

                    DataRow dr = dsRoutingCopy.Tables["Routing"].NewRow();
                    dr["RouteID"]     = Guid.NewGuid().ToString();
                    dr["Pattern"]     = pattern;
                    dr["Mailbox"]     = mailbox;
                    dr["Description"] = Description;
                    dr["DomainID"]    = domainID;
                    dr["DomainName"]  = domainName;

                    dsRoutingCopy.Tables["Routing"].Rows.Add(dr);
                    dsRoutingCopy.Tables["Routing"].Columns.Remove("Length");
                    dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema);

                    if(!dsRoutingCopy.Tables["Routing"].Columns.Contains("Length")){
                        dsRoutingCopy.Tables["Routing"].Columns.Add("Length",Type.GetType("System.String"),"Len(Pattern)");
                    }

                    retVal = dr;

                    break;

                #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddRoute")){
                            sqlCmd.AddParameter("@Pattern"     ,SqlDbType.NVarChar         ,pattern);
                            sqlCmd.AddParameter("@Mailbox"     ,SqlDbType.NVarChar         ,mailbox);
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar         ,Description);
                            sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier ,domainID);

                            DataSet ds = sqlCmd.Execute();
                            ds.Tables[0].TableName = "Routing";

                            if(ds.Tables["Routing"].Rows.Count > 0){
                                return ds.Tables["Routing"].Rows[0];
                            }
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.AddRoute(pattern,mailbox,Description,domainID).Tables["Routing"].Rows[0];
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Updates AliasName.
        /// </summary>
        /// <param name="aliasID"></param>
        /// <param name="aliasName">AliasName name. eg. [email protected]</param>
        /// <param name="Description">AliasName Description.</param>
        /// <param name="AliasMembers"></param>
        /// <param name="domainID">DomainID where AliasName belongs.</param>
        /// <param name="isPublic">Specifies if accessible to public or only authenticated users.</param>
        public void UpdateAlias(string aliasID,string aliasName,string Description,string AliasMembers,string domainID,bool isPublic)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        DataSet dsAliasesCopy = dsAliases.Copy();
                        using(DataView dv = new DataView(dsAliasesCopy.Tables["Aliases"])){
                            dv.RowFilter = "AliasID='" + aliasID + "'";

                            if(dv.Count > 0){
                                dv[0]["AliasName"]    = aliasName;
                                dv[0]["Description"]  = Description;
                                dv[0]["AliasMembers"] = AliasMembers;
                                dv[0]["DomainID"]     = domainID;
                                dv[0]["IsPublic"]     = isPublic;
                            }

                            dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateAlias")){
                            sqlCmd.AddParameter("@AliasID"     ,SqlDbType.UniqueIdentifier,aliasID);
                            sqlCmd.AddParameter("@AliasName"   ,SqlDbType.NVarChar,aliasName);
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@Members"     ,SqlDbType.NVarChar,AliasMembers);
                            sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier,domainID);
                            sqlCmd.AddParameter("@IsPublic"    ,SqlDbType.Bit,isPublic);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateAlias(aliasID,aliasName,Description,AliasMembers,domainID,isPublic);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Gets DomainName list.
        /// </summary>
        /// <returns></returns>
        public DataView GetDomainList()
        {
            DataView retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    retVal = new DataView(dsDomains.Tables["DOMAINS"]);
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetDomainList")){
                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Domains";

                        return ds.Tables["Domains"].DefaultView;
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetDomainList().Tables["Domains"].DefaultView;
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Checks if specifeid Emails address belongs to somebody in this server.
        /// </summary>
        /// <param name="emailAddress">Emails address which to check.</param>
        /// <returns>Returns true if Emails address is found.</returns>
        public bool EmailAddressExists(string emailAddress)
        {
            bool retVal = false;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    emailAddress = emailAddress.Replace("*","[*]");
                    emailAddress = emailAddress.Replace("%","[%]");

                    using(DataView dv = new DataView(dsUsers.Tables["Users"])){
                        dv.RowFilter = "Emails LIKE '*[<]" + emailAddress + "[>]*'";

                        if(dv.Count > 0){
                            retVal = true;
                        }
                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_EmailAddressExists")){
                        sqlCmd.AddParameter("@EmailAddress",SqlDbType.NVarChar,emailAddress);

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Users";

                        if(ds.Tables["Users"].Rows.Count > 0){
                            return true;
                        }
                        else{
                            return false;
                        }
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.EmailAddressExists(emailAddress);
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Checks if specified DomainName exists.
        /// </summary>
        /// <param name="source">DomainName or Emails address.</param>
        /// <returns></returns>
        public bool DomainExists(string source)
        {
            bool retVal = false;

            // Source is Emails
            if(source.IndexOf("@") > -1){
                source = source.Substring(source.IndexOf("@")+1);
            }

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    using(DataView dv = new DataView(dsDomains.Tables["Domains"])){
                        dv.RowFilter = "DomainName='" + source + "'";

                        if(dv.Count > 0){
                            retVal = true;
                        }
                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DomainExists")){
                        sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source);

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Domains";

                        if(ds.Tables["Domains"].Rows.Count > 0){
                            return true;
                        }
                        else{
                            return false;
                        }
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.DomainExists(source);
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Deletes user.
        /// </summary>
        /// <param name="userID">UserID of the user which to delete.</param>
        public void DeleteUser(string userID)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    DataSet dsUsersCopy = dsUsers.Copy();
                    using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){
                        dv.RowFilter = "UserID='" + userID + "'";

                        if(dv.Count > 0){
                            dsUsersCopy.Tables["Users"].Rows.Remove(dv[0].Row);
                        }

                        dsUsersCopy.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema);

                        // ToDo delete user folders

                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteUser")){
                            sqlCmd.AddParameter("@UserID" ,SqlDbType.NVarChar,userID);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.DeleteUser(userID);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Adds AliasName(mailing list).
        /// </summary>
        /// <param name="aliasName">AliasName name. eg. [email protected]</param>
        /// <param name="Description">AliasName Description.</param>
        /// <param name="AliasMembers">AliasName AliasMembers.</param>
        /// <param name="domainID">DomainID where AliasName belongs.</param>
        /// <param name="isPublic">Specifies if accessible to public or only authenticated users.</param>
        /// <returns></returns>
        public DataRow AddAlias(string aliasName,string Description,string AliasMembers,string domainID,bool isPublic)
        {
            DataRow retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsAliasesCopy = dsAliases.Copy();

                        DataRow dr = dsAliasesCopy.Tables["Aliases"].NewRow();
                        dr["AliasID"]      = Guid.NewGuid().ToString();
                        dr["AliasName"]    = aliasName;
                        dr["Description"]  = Description;
                        dr["AliasMembers"] = AliasMembers;
                        dr["DomainID"]     = domainID;
                        dr["IsPublic"]     = isPublic;

                        dsAliasesCopy.Tables["Aliases"].Rows.Add(dr);
                        dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema);

                        retVal = dr;

                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddAlias")){
                            sqlCmd.AddParameter("@AliasName"   ,SqlDbType.NVarChar,aliasName);
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@Members"     ,SqlDbType.NVarChar,AliasMembers);
                            sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier,domainID);
                            sqlCmd.AddParameter("@IsPublic"    ,SqlDbType.Bit,isPublic);

                            DataSet ds = sqlCmd.Execute();
                            ds.Tables[0].TableName = "Aliases";

                            if(ds.Tables["Aliases"].Rows.Count > 0){
                                return ds.Tables["Aliases"].Rows[0];
                            }
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.AddAlias(aliasName,Description,AliasMembers,domainID,isPublic).Tables["Aliases"].Rows[0];
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Deletes security entry.
        /// </summary>
        /// <param name="securityID"></param>
        public void DeleteSecurityEntry(string securityID)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        using(DataView dv = new DataView(dsSecurity.Tables["Security_List"])){
                            dv.RowFilter = "SecurityID='" + securityID + "'";

                            if(dv.Count > 0){
                                dsSecurity.Tables["Security_List"].Rows.Remove(dv[0].Row);
                            }

                            dsSecurity.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteSecurityEntry")){
                            sqlCmd.AddParameter("@SecurityID" ,SqlDbType.UniqueIdentifier,securityID);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.DeleteSecurityEntry(securityID);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Deletes route.
        /// </summary>
        /// <param name="routeID"></param>
        public void DeleteRoute(string routeID)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    DataSet dsRoutingCopy = dsRouting.Copy();
                    using(DataView dv = new DataView(dsRoutingCopy.Tables["Routing"])){
                        dv.RowFilter = "RouteID='" + routeID + "'";

                        if(dv.Count > 0){
                            dsRoutingCopy.Tables["Routing"].Rows.Remove(dv[0].Row);
                        }

                        dsRoutingCopy.Tables["Routing"].Columns.Remove("Length");
                        dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema);
                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteRoute")){
                            sqlCmd.AddParameter("@RouteID" ,SqlDbType.UniqueIdentifier,routeID);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.DeleteRoute(routeID);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Restores server from backup.(settings,users,...).
        /// </summary>
        /// <param name="data"></param>
        public void RestoreBackUp(byte[] data)
        {
            DataSet dsAll = new DataSet();
            dsAll.ReadXml(new MemoryStream(data));

            DB_Type dbType = (DB_Type)Enum.Parse(typeof(DB_Type),dsAll.Tables["Settings"].Rows[0]["DataBaseType"].ToString());

            switch(dbType)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        if(dsAll.Tables.Contains("Domains")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Domains"]);
                            dsX.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema);
                        }

                        if(dsAll.Tables.Contains("Users")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Users"]);
                            dsX.WriteXml(m_DataPath + "Users.xml",XmlWriteMode.IgnoreSchema);
                        }

                        if(dsAll.Tables.Contains("Aliases")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Aliases"]);
                            dsX.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema);
                        }

                        if(dsAll.Tables.Contains("Routing")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Routing"]);
                            dsX.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema);
                        }

                        if(dsAll.Tables.Contains("Settings")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Settings"]);
                            dsX.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema);
                        }

                        if(dsAll.Tables.Contains("Security_List")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Security_List"]);
                            dsX.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:

                        #region Clear old settings

                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_TruncateSettings")){
                            DataSet ds = sqlCmd.Execute();
                        }

                        #endregion

                        #region Restore domains

                        if(dsAll.Tables.Contains("Domains"))
                        {
                            foreach(DataRow dr in dsAll.Tables["Domains"].Rows){
                                using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddDomain")){
                                    if(dr.Table.Columns.Contains("DomainName")){
                                        sqlCmd.AddParameter("@DomainName" ,SqlDbType.NVarChar,dr["DomainName"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Description")){
                                        sqlCmd.AddParameter("@Description",SqlDbType.NVarChar,dr["Description"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("DomainID")){
                                        sqlCmd.AddParameter("@DomainID"   ,SqlDbType.NVarChar,dr["DomainID"].ToString());
                                    }

                                    DataSet ds = sqlCmd.Execute();
                                }
                            }
                        }

                        #endregion

                        #region Restore users

                        if(dsAll.Tables.Contains("Users")){
                            foreach(DataRow dr in dsAll.Tables["Users"].Rows){
                                using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddUser")){
                                    if(dr.Table.Columns.Contains("FULLNAME")){
                                        sqlCmd.AddParameter("@FullName"    ,SqlDbType.NVarChar,dr["FULLNAME"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("USERNAME")){
                                        sqlCmd.AddParameter("@UserName"    ,SqlDbType.NVarChar,dr["USERNAME"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("PASSWORD")){
                                        sqlCmd.AddParameter("@Password"    ,SqlDbType.NVarChar,dr["PASSWORD"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Description")){
                                        sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Emails")){
                                        sqlCmd.AddParameter("@Emails"      ,SqlDbType.NVarChar,dr["Emails"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Mailbox_Size")){
                                        sqlCmd.AddParameter("@MailboxSize" ,SqlDbType.NVarChar,dr["Mailbox_Size"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("DomainID")){
                                        sqlCmd.AddParameter("@DomainID"    ,SqlDbType.NVarChar,dr["DomainID"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("UserID")){
                                        sqlCmd.AddParameter("@UserID"      ,SqlDbType.NVarChar,dr["UserID"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("RemotePop3Servers")){
                                        sqlCmd.AddParameter("@RemotePop3Servers" ,SqlDbType.Image,(byte[])dr["RemotePop3Servers"]);
                                    }

                                    DataSet ds = sqlCmd.Execute();
                                }
                            }
                        }

                        #endregion

                        #region Restore aliases

                        if(dsAll.Tables.Contains("Aliases")){
                            foreach(DataRow dr in dsAll.Tables["Aliases"].Rows){
                                using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddAlias")){
                                    if(dr.Table.Columns.Contains("AliasName")){
                                        sqlCmd.AddParameter("@AliasName"   ,SqlDbType.NVarChar,dr["AliasName"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Description")){
                                        sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("AliasMembers")){
                                        sqlCmd.AddParameter("@Members"     ,SqlDbType.NVarChar,dr["AliasMembers"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("DomainID")){
                                        sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier,dr["DomainID"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("AliasID")){
                                        sqlCmd.AddParameter("@AliasID"    ,SqlDbType.UniqueIdentifier,dr["AliasID"].ToString());
                                    }

                                    DataSet ds = sqlCmd.Execute();
                                }
                            }
                        }

                        #endregion

                        #region Restore routing

                        if(dsAll.Tables.Contains("Routing")){
                            foreach(DataRow dr in dsAll.Tables["Routing"].Rows){
                                using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddRoute")){
                                    if(dr.Table.Columns.Contains("Pattern")){
                                        sqlCmd.AddParameter("@Pattern"   ,SqlDbType.NVarChar,dr["Pattern"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Mailbox")){
                                        sqlCmd.AddParameter("@Mailbox" ,SqlDbType.NVarChar,dr["Mailbox"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Description")){
                                        sqlCmd.AddParameter("@Description"     ,SqlDbType.NVarChar,dr["Description"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("DomainID")){
                                        sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier,dr["DomainID"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("AliasID")){
                                        sqlCmd.AddParameter("@RouteID"    ,SqlDbType.UniqueIdentifier,dr["RouteID"].ToString());
                                    }

                                    DataSet ds = sqlCmd.Execute();
                                }
                            }
                        }

                        #endregion

                        #region Restore settings

                        if(dsAll.Tables.Contains("Settings")){
                            DataSet dsX = new DataSet();
                            dsX.Merge(dsAll.Tables["Settings"]);
                            dsX.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema);
                        }

                        #endregion

                        #region Restore security

                        if(dsAll.Tables.Contains("Security_List"))
                        {
                            foreach(DataRow dr in dsAll.Tables["Security_List"].Rows){
                                using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddSecurityEntry")){
                                    if(dr.Table.Columns.Contains("Description")){
                                        sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,dr["Description"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Protocol")){
                                        sqlCmd.AddParameter("@Protocol"    ,SqlDbType.NVarChar,dr["Protocol"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Type")){
                                        sqlCmd.AddParameter("@Type"        ,SqlDbType.NVarChar,dr["Type"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Action")){
                                        sqlCmd.AddParameter("@Action"      ,SqlDbType.NVarChar,dr["Action"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("Content")){
                                        sqlCmd.AddParameter("@Content"     ,SqlDbType.NVarChar,dr["Content"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("StartIP")){
                                        sqlCmd.AddParameter("@StartIP"     ,SqlDbType.NVarChar,dr["StartIP"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("EndIP")){
                                        sqlCmd.AddParameter("@EndIP"       ,SqlDbType.NVarChar,dr["EndIP"].ToString());
                                    }
                                    if(dr.Table.Columns.Contains("SecurityID")){
                                        sqlCmd.AddParameter("@SecurityID"  ,SqlDbType.NVarChar,dr["SecurityID"].ToString());
                                    }

                                    DataSet ds = sqlCmd.Execute();
                                }
                            }
                        }

                        #endregion

                        break;

                    #endregion

                #region DB_Type.WebServices

                    case DB_Type.WebServices:
                        using(RemoteAdmin eng = new RemoteAdmin()){
                            _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                            eng.RestoreBackUp(data);
                        }
                        break;

                #endregion
            }
        }
        /// <summary>
        /// Gets filter list.
        /// </summary>
        /// <returns></returns>
        public DataView GetFilterList()
        {
            DataView retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    retVal = new DataView(dsFilters.Tables["SmtpFilters"]);
                    retVal.Sort = "Cost";
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    retVal = new DataView(dsFilters.Tables["SmtpFilters"]);
                    retVal.Sort = "Cost";
                    break;

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetFilterList().Tables["SmtpFilters"].DefaultView;
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Updates specified filter.
        /// </summary>		/// 
        /// <param name="filterID">FilterID which to update.</param>
        /// <param name="description">Filter description</param>
        /// <param name="assembly">Assembly with full location. Eg. C:\MailServer\Filters\filter.dll .</param>
        /// <param name="className">Filter full class name, wih namespace. Eg. LumiSoft.MailServer.Fileters.Filter1 .</param>
        /// <param name="cost">Filters are sorted by cost and proccessed with cost value. Smallest cost is proccessed first.</param>
        /// <param name="enabled">Specifies if filter is enabled.</param>
        /// <returns></returns>
        public void UpdateFilter(string filterID,string description,string assembly,string className,int cost,bool enabled)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        DataSet dsFiltersCopy = dsFilters.Copy();
                        using(DataView dv = new DataView(dsFiltersCopy.Tables["SmtpFilters"])){
                            dv.RowFilter = "FilterID='" + filterID + "'";

                            if(dv.Count > 0){
                                DataRow dr = dv[0].Row;
                                dr["Description"] = description;
                                dr["Assembly"]    = assembly;
                                dr["ClassName"]   = className;
                                dr["Cost"]        = cost;
                                dr["Enabled"]     = enabled;
                            }

                            dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        DataSet dsFiltersCopy2 = dsFilters.Copy();
                        using(DataView dv = new DataView(dsFiltersCopy2.Tables["SmtpFilters"])){
                            dv.RowFilter = "FilterID='" + filterID + "'";

                            if(dv.Count > 0){
                                DataRow dr = dv[0].Row;
                                dr["Description"] = description;
                                dr["Assembly"]    = assembly;
                                dr["ClassName"]   = className;
                                dr["Cost"]        = cost;
                                dr["Enabled"]     = enabled;
                            }

                            dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateFilter(filterID,description,assembly,className,cost,enabled);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Adds new DomainName.
        /// </summary>
        /// <param name="domainName"></param>
        /// <param name="description"></param>
        /// <returns>If successful returns DomainName ID, otherwise null.</returns>
        public DataRow AddDomain(string domainName,string description)
        {
            DataRow retVal = null;

            try
            {
                switch(m_DB_Type)
                {
                    #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsDomainsCopy = dsDomains.Copy();

                        DataRow dr = dsDomainsCopy.Tables["Domains"].NewRow();
                        dr["DomainID"]   = Guid.NewGuid().ToString();
                        dr["DomainName"]      = domainName;
                        dr["Description"] = description;

                        dsDomainsCopy.Tables["Domains"].Rows.Add(dr);
                        dsDomainsCopy.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema);

                        retVal = dr;

                        break;

                    #endregion

                    #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddDomain")){
                            sqlCmd.AddParameter("@DomainName" ,SqlDbType.NVarChar,domainName);
                            sqlCmd.AddParameter("@Description",SqlDbType.NVarChar,description);

                            DataSet ds = sqlCmd.Execute();
                            ds.Tables[0].TableName = "Domains";

                            if(ds.Tables["Domains"].Rows.Count > 0){
                                return ds.Tables["Domains"].Rows[0];
                            }
                        }
                        break;

                    #endregion

                    #region DB_Type.WebServices

                    case DB_Type.WebServices:
                        using(RemoteAdmin eng = new RemoteAdmin()){
                            _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                            return eng.AddDomain(domainName,description).Tables["Domains"].Rows[0];
                        }

                    #endregion
                }
            }
            catch(Exception x)
            {
                retVal = null;
            }

            return retVal;
        }
        /// <summary>
        /// Updates Emails route.
        /// </summary>
        /// <param name="routeID"></param>
        /// <param name="pattern"></param>
        /// <param name="mailbox"></param>
        /// <param name="Description"></param>
        /// <param name="domainID"></param>
        public void UpdateRoute(string routeID,string pattern,string mailbox,string Description,string domainID)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        //-- Find domainName from domainID ---------------------------//
                        string domainName = "";
                        foreach(DataRow drx in dsDomains.Tables["Domains"].Rows){
                            if(drx["DomainID"].ToString() == domainID){
                                domainName = drx["DomainName"].ToString();
                            }
                        }

                        DataSet dsRoutingCopy = dsRouting.Copy();
                        using(DataView dv = new DataView(dsRoutingCopy.Tables["Routing"])){
                            dv.RowFilter = "RouteID='" + routeID + "'";

                            if(dv.Count > 0){
                                dv[0]["Pattern"]     = pattern;
                                dv[0]["Mailbox"]     = mailbox;
                                dv[0]["Description"] = Description;
                                dv[0]["DomainID"]    = domainID;
                                dv[0]["DomainName"]  = domainName;
                            }

                            dsRoutingCopy.Tables["Routing"].Columns.Remove("Length");
                            dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UpdateRoute")){
                            sqlCmd.AddParameter("@RouteID"     ,SqlDbType.UniqueIdentifier,routeID);
                            sqlCmd.AddParameter("@Pattern"     ,SqlDbType.NVarChar,pattern);
                            sqlCmd.AddParameter("@Mailbox"     ,SqlDbType.NVarChar,mailbox);
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@DomainID"    ,SqlDbType.UniqueIdentifier,domainID);

                            DataSet ds = sqlCmd.Execute();
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateRoute(routeID,pattern,mailbox,Description,domainID);
                    }
                    break;

                #endregion
            }
        }
        /// <summary>
        /// Gets Emails address routes.
        /// </summary>
        /// <returns></returns>
        public DataView GetRouteList()
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    if(!dsRouting.Tables["Routing"].Columns.Contains("Length")){
                        dsRouting.Tables["Routing"].Columns.Add("Length",Type.GetType("System.Int32"),"Len(Pattern)");
                    }
                    DataView dv = new DataView(dsRouting.Tables["Routing"]);
                    dv.Sort = "DomainID ASC,Length DESC,PATTERN DESC";
                    return dv;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetRouteList")){
                //		sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source);

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Routing";

                        if(!ds.Tables["Routing"].Columns.Contains("Length")){
                            ds.Tables["Routing"].Columns.Add("Length",Type.GetType("System.Int32"),"Len(Pattern)");
                        }

                        ds.Tables["Routing"].DefaultView.Sort = "DomainID ASC,Length DESC,PATTERN DESC";
                        return ds.Tables["Routing"].DefaultView;
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetRouteList().Tables["Routing"].DefaultView;
                    }

                #endregion
            }

            return null;
        }
        /// <summary>
        /// Updates mailserver core settings (ports,database type, ...).
        /// </summary>
        /// <param name="dsSettings"></param>
        /// <returns></returns>
        public void UpdateSettings(DataSet dsSettings)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.UpdateSettings(dsSettings);
                    }
                    break;

                #endregion

                default:
                    if(dsSettings != null && dsSettings.Tables.Contains("Settings")){
                        dsSettings.WriteXml(m_DataPath + "Settings.xml",XmlWriteMode.IgnoreSchema);

                        // If DB_Type changed to XMl, we need to reload Users, ...
                        DB_Type dbT = (DB_Type)Enum.Parse(typeof(DB_Type),dsSettings.Tables["Settings"].Rows[0]["DataBaseType"].ToString());
                        if(dbT != m_DB_Type && dbT == DB_Type.XML){
                            LoadUsers();
                            LoadAliases();
                            LoadRouting();
                            LoadDomains();
                            LoadSecurity();
                        }
                    }
                    break;
            }
        }
        /// <summary>
        /// Gets security entries list.
        /// </summary>
        public DataView GetSecurityList()
        {
            DataView retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    retVal = dsSecurity.Tables["Security_List"].DefaultView;
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetSecurityList")){
                //		sqlCmd.AddParameter("@DomainName",SqlDbType.NVarChar,source);

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Security_List";

                        return ds.Tables["Security_List"].DefaultView;
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetSecurityList().Tables["Security_List"].DefaultView;
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Adds secuity entry.
        /// </summary>
        /// <param name="Description"></param>
        /// <param name="protocol"></param>
        /// <param name="type"></param>
        /// <param name="action"></param>
        /// <param name="content"></param>
        /// <param name="startIP"></param>
        /// <param name="endIP"></param>
        /// <returns></returns>
        public DataRow AddSecurityEntry(string Description,string protocol,string type,string action,string content,long startIP,long endIP)
        {
            DataRow retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsSecurityCopy = dsSecurity.Copy();

                        DataRow dr = dsSecurityCopy.Tables["Security_List"].NewRow();
                        dr["SecurityID"]  = Guid.NewGuid().ToString();
                        dr["Description"] = Description;
                        dr["Protocol"]    = protocol;
                        dr["Type"]        = type;
                        dr["Content"]     = content;
                        dr["Action"]      = action;
                        dr["StartIP"]     = startIP;
                        dr["EndIP"]       = endIP;

                        dsSecurityCopy.Tables["Security_List"].Rows.Add(dr);
                        dsSecurityCopy.WriteXml(m_DataPath + "Security.xml",XmlWriteMode.IgnoreSchema);

                        retVal = dr;

                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_AddSecurityEntry")){
                            sqlCmd.AddParameter("@Description" ,SqlDbType.NVarChar,Description);
                            sqlCmd.AddParameter("@Protocol"    ,SqlDbType.NVarChar,protocol);
                            sqlCmd.AddParameter("@Type"        ,SqlDbType.NVarChar,type);
                            sqlCmd.AddParameter("@Action"      ,SqlDbType.NVarChar,action);
                            sqlCmd.AddParameter("@Content"     ,SqlDbType.NVarChar,content);
                            sqlCmd.AddParameter("@StartIP"     ,SqlDbType.NVarChar,startIP);
                            sqlCmd.AddParameter("@EndIP"       ,SqlDbType.NVarChar,endIP);

                            DataSet ds = sqlCmd.Execute();
                            ds.Tables[0].TableName = "Security_List";

                            if(ds.Tables["Security_List"].Rows.Count > 0){
                                return ds.Tables["Security_List"].Rows[0];
                            }
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.AddSecurityEntry(Description,protocol,type,action,content,startIP,endIP).Tables["Security_List"].Rows[0];
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Gets mailserver core settings (ports,database type, ...).
        /// </summary>
        /// <returns></returns>
        public DataSet GetSettings()
        {
            switch(m_DB_Type)
            {
                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetSettings();
                    }

                #endregion

                default:
                    DataSet ds = new DataSet();
                    CreateSettingsSchema(ds);
                    ds.ReadXml(m_DataPath + "Settings.xml");

                    foreach(DataRow dr in ds.Tables["Settings"].Rows){
                        foreach(DataColumn dc in ds.Tables["Settings"].Columns){
                            if(dr.IsNull(dc.ColumnName)){
                                dr[dc.ColumnName] = dc.DefaultValue;
                            }
                        }
                    }

                    return ds;
            }
        }
        /// <summary>
        ///  Backups all server.(settings,users,...).
        /// </summary>
        /// <returns></returns>
        public byte[] CreateBackUp()
        {
            DataSet dsAll = new DataSet();

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:
                        dsAll.Merge(dsDomains);
                        dsAll.Merge(dsUsers);
                        dsAll.Merge(dsAliases);
                        dsAll.Merge(dsRouting);
                        dsAll.Merge(this.GetSettings());
                        dsAll.Merge(dsSecurity);
                        break;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        dsAll.Merge(this.GetDomainList().Table);
                        dsAll.Merge(this.GetUserList("").Table);
                        dsAll.Merge(this.GetAliasesList("").Table);
                        dsAll.Merge(this.GetRouteList().Table);
                        dsAll.Merge(this.GetSettings());
                        dsAll.Merge(this.GetSecurityList().Table);
                        break;

                    #endregion

                #region DB_Type.WebServices

                    case DB_Type.WebServices:
                        using(RemoteAdmin eng = new RemoteAdmin()){
                            _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                            return eng.CreateBackUp();
                        }

                #endregion
            }

            using(MemoryStream mStrm = new MemoryStream()){
                dsAll.WriteXml(mStrm,XmlWriteMode.IgnoreSchema);
                return mStrm.ToArray();
            }
        }
        /// <summary>
        /// Checks if mailbox exists.
        /// </summary>
        /// <param name="userName">User name.</param>
        /// <returns></returns>
        public bool MailboxExists(string userName)
        {
            bool retVal = false;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    using(DataView dv = new DataView(dsUsers.Tables["Users"])){
                        dv.RowFilter = "USERNAME='******'";

                        if(dv.Count > 0){
                            retVal = true;
                        }
                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_UserExists")){
                        sqlCmd.AddParameter("@UserName",SqlDbType.NVarChar,userName);

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Users";

                        if(ds.Tables["Users"].Rows.Count > 0){
                            return true;
                        }
                        else{
                            return false;
                        }
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.MailboxExists(userName);
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Deletes specified DomainName.
        /// </summary>
        /// <param name="domainID"></param>
        /// <returns>Returns true if DomainName deleted successfully.</returns>
        public bool DeleteDomain(string domainID)
        {
            try
            {
                switch(m_DB_Type)
                {
                    #region DB_Type.XML

                    case DB_Type.XML:
                        // 1) delete specified DomainName users
                        // 2) delete specified DomainName aliases
                        // 3) delete specified DomainName routing
                        // 4) delete specified DomainName

                        DataSet dsUsersCopy   = dsUsers.Copy();
                        DataSet dsAliasesCopy = dsAliases.Copy();
                        DataSet dsRoutingCopy = dsRouting.Copy();
                        DataSet dsDomainsCopy = dsDomains.Copy();

                        //---- Delete specified DomainName users ----------------------------//
                        using(DataView dv = new DataView(dsUsersCopy.Tables["Users"])){
                            dv.RowFilter = "DomainID='" + domainID + "'";

                            if(dv.Count > 0){
                                foreach(DataRowView drv in dv){
                                    drv.Row.Delete();
                                }
                            }
                        }
                        //----------------------------------------------------------------//

                        //---- Delete specified DomainName aliases ---------------------------//
                        using(DataView dvA = new DataView(dsAliasesCopy.Tables["Aliases"])){
                            dvA.RowFilter = "DomainID='" + domainID + "'";

                            if(dvA.Count > 0){
                                foreach(DataRowView drv in dvA){
                                    drv.Row.Delete();
                                }
                            }
                        }
                        //----------------------------------------------------------------//

                        //---- Delete specified DomainName routing ---------------------------//
                        using(DataView dvR = new DataView(dsRoutingCopy.Tables["Routing"])){
                            dvR.RowFilter = "DomainID='" + domainID + "'";

                            if(dvR.Count > 0){
                                foreach(DataRowView drv in dvR){
                                    drv.Row.Delete();
                                }
                            }
                        }
                        //----------------------------------------------------------------//

                        //---- Delete DomainName itself --------------------------------------//
                        using(DataView dv = new DataView(dsDomainsCopy.Tables["Domains"])){
                            dv.RowFilter = "DomainID='" + domainID + "'";

                            if(dv.Count > 0){
                                dsDomainsCopy.Tables["Domains"].Rows.Remove(dv[0].Row);
                            }
                        }
                        //----------------------------------------------------------------//

                        dsDomainsCopy.WriteXml(m_DataPath + "Domains.xml",XmlWriteMode.IgnoreSchema);
                        dsUsersCopy.WriteXml  (m_DataPath + "Users.xml"  ,XmlWriteMode.IgnoreSchema);
                        dsAliasesCopy.WriteXml(m_DataPath + "Aliases.xml",XmlWriteMode.IgnoreSchema);
                        dsRoutingCopy.WriteXml(m_DataPath + "Routing.xml",XmlWriteMode.IgnoreSchema);

                        LoadUsers();
                        LoadAliases();
                        LoadRouting();

                        return true;

                    #endregion

                    #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_DeleteDomain")){
                            sqlCmd.AddParameter("@DomainID" ,SqlDbType.NVarChar,domainID);

                            DataSet ds = sqlCmd.Execute();
                            return true;
                        }

                    #endregion

                    #region DB_Type.WebServices

                    case DB_Type.WebServices:
                        using(RemoteAdmin eng = new RemoteAdmin()){
                            _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                            eng.DeleteDomain(domainID);
                            return true;
                        }

                    #endregion
                }
            }
            catch(Exception x)
            {
            //			System.Windows.Forms.MessageBox.Show(x.Message);
            }

            return false;
        }
        /// <summary>
        /// Adds new filter.
        /// </summary>
        /// <param name="description">Filter description</param>
        /// <param name="assembly">Assembly with full location. Eg. C:\MailServer\Filters\filter.dll .</param>
        /// <param name="className">Filter full class name, wih namespace. Eg. LumiSoft.MailServer.Fileters.Filter1 .</param>
        /// <param name="cost">Filters are sorted by cost and proccessed with cost value. Smallest cost is proccessed first.</param>
        /// <param name="enabled">Specifies if filter is enabled.</param>
        /// <returns></returns>
        public DataRow AddFilter(string description,string assembly,string className,int cost,bool enabled)
        {
            DataRow retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                    case DB_Type.XML:

                        DataSet dsFiltersCopy = dsFilters.Copy();

                        DataRow dr = dsFiltersCopy.Tables["SmtpFilters"].NewRow();
                        dr["FilterID"]    = Guid.NewGuid().ToString();
                        dr["Description"] = description;
                        dr["Assembly"]    = assembly;
                        dr["ClassName"]   = className;
                        dr["Cost"]        = cost;
                        dr["Enabled"]     = enabled;

                        dsFiltersCopy.Tables["SmtpFilters"].Rows.Add(dr);
                        dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);

                        return dr;

                    #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        DataSet dsFiltersCopy2 = dsFilters.Copy();

                        DataRow dr2 = dsFiltersCopy2.Tables["SmtpFilters"].NewRow();
                        dr2["FilterID"]    = Guid.NewGuid().ToString();
                        dr2["Description"] = description;
                        dr2["Assembly"]    = assembly;
                        dr2["ClassName"]   = className;
                        dr2["Cost"]        = cost;
                        dr2["Enabled"]     = enabled;

                        dsFiltersCopy2.Tables["SmtpFilters"].Rows.Add(dr2);
                        dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);

                        return dr2;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.AddFilter(description,assembly,className,cost,enabled).Tables["SmtpFilters"].Rows[0];
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Gets user list in specified DomainName.
        /// </summary>
        /// <param name="domainID">DomainID of Domain which user list to retrieve.To get all use value 'ALL'.</param>
        /// <returns></returns>
        public DataView GetUserList(string domainID)
        {
            DataView retVal = null;

            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    DataView dv = new DataView(dsUsers.Tables["Users"]);
                    if(domainID != "ALL"){
                        dv.RowFilter = "DomainID='" + domainID + "'";
                    }
                    retVal = dv;
                    break;

                #endregion

                #region DB_Type.MSSQL

                case DB_Type.MSSQL:
                    using(WSqlCommand sqlCmd = new WSqlCommand(m_ConStr,"lspr_GetUserList")){
                        if(domainID != "ALL"){
                            sqlCmd.AddParameter("@DomainID",SqlDbType.UniqueIdentifier,domainID);
                        }

                        DataSet ds = sqlCmd.Execute();
                        ds.Tables[0].TableName = "Users";

                        return ds.Tables["Users"].DefaultView;
                    }

                #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        return eng.GetUserList(domainID).Tables["Users"].DefaultView;
                    }

                #endregion
            }

            return retVal;
        }
        /// <summary>
        /// Deletes specified filter.
        /// </summary>
        /// <param name="filterID">FilterID of the filter which to delete.</param>
        public void DeleteFilter(string filterID)
        {
            switch(m_DB_Type)
            {
                #region DB_Type.XML

                case DB_Type.XML:
                    DataSet dsFiltersCopy = dsFilters.Copy();
                    using(DataView dv = new DataView(dsFiltersCopy.Tables["SmtpFilters"])){
                        dv.RowFilter = "FilterID='" + filterID + "'";

                        if(dv.Count > 0){
                            dsFiltersCopy.Tables["SmtpFilters"].Rows.Remove(dv[0].Row);
                        }

                        dsFiltersCopy.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);
                    }
                    break;

                #endregion

                #region DB_Type.MSSQL

                    case DB_Type.MSSQL:
                        DataSet dsFiltersCopy2 = dsFilters.Copy();
                        using(DataView dv = new DataView(dsFiltersCopy2.Tables["SmtpFilters"])){
                            dv.RowFilter = "FilterID='" + filterID + "'";

                            if(dv.Count > 0){
                                dsFiltersCopy2.Tables["SmtpFilters"].Rows.Remove(dv[0].Row);
                            }

                            dsFiltersCopy2.WriteXml(m_DataPath + "Filters.xml",XmlWriteMode.IgnoreSchema);
                        }
                        break;

                    #endregion

                #region DB_Type.WebServices

                case DB_Type.WebServices:
                    using(RemoteAdmin eng = new RemoteAdmin()){
                        _Core.InitWebService(m_WebServicesUrl,m_WebServicesPwd,m_WebServicesUser,eng);

                        eng.DeleteFilter(filterID);
                    }
                    break;

                #endregion
            }
        }