/// <summary>
        /// Saves data.
        /// </summary>
        /// <param name="confirmSave">Specifies is save confirmation UI is showed.</param>
        private void SaveData(bool confirmSave)
        {
            try{
                Relay_Settings settings = m_pVirtualServer.SystemSettings.Relay;

                if (m_pTabGeneral_SendSmartHost.Checked)
                {
                    settings.RelayMode = Relay_Mode.SmartHost;
                }
                else
                {
                    settings.RelayMode = Relay_Mode.Dns;
                }
                if (m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex == 0)
                {
                    settings.SmartHostsBalanceMode = BalanceMode.LoadBalance;
                }
                else
                {
                    settings.SmartHostsBalanceMode = BalanceMode.FailOver;
                }
                settings.SessionIdleTimeOut          = (int)m_pTabGeneral_SessionTimeout.Value;
                settings.MaximumConnections          = (int)m_pTabGeneral_MaxConnections.Value;
                settings.MaximumConnectionsPerIP     = (int)m_pTabGeneral_MaxConnsPerIP.Value;
                settings.RelayInterval               = (int)m_pTabGeneral_RelayInterval.Value;
                settings.RelayRetryInterval          = (int)m_pTabGeneral_RelayRetryInterval.Value;
                settings.SendUndeliveredWarningAfter = (int)m_pTabGeneral_SendUndelWarning.Value;
                settings.SendUndeliveredAfter        = (int)m_pTabGeneral_SendUndelivered.Value;
                settings.StoreUndeliveredMessages    = m_pTabGeneral_StoreUndeliveredMsgs.Checked;
                settings.UseTlsIfPossible            = m_pTabGeneral_UseTlsIfPossible.Checked;
                // Smart hosts
                List <Relay_SmartHost> smartHosts = new List <Relay_SmartHost>();
                foreach (ListViewItem it in m_pTabGeneral_SmartHosts.Items)
                {
                    smartHosts.Add((Relay_SmartHost)it.Tag);
                }
                settings.SmartHosts = smartHosts.ToArray();
                // IP binds
                List <IPBindInfo> binds = new List <IPBindInfo>();
                foreach (ListViewItem it in m_pTabBindings_Bindings.Items)
                {
                    binds.Add((IPBindInfo)it.Tag);
                }
                settings.Binds = binds.ToArray();

                if (m_pVirtualServer.SystemSettings.HasChanges)
                {
                    if (!confirmSave || MessageBox.Show(this, "You have changes settings, do you want to save them ?", "Confirm:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        m_pVirtualServer.SystemSettings.Commit();
                    }
                }
            }
            catch (Exception x) {
                wfrm_sys_Error frm = new wfrm_sys_Error(x, new System.Diagnostics.StackTrace());
                frm.ShowDialog(this);
            }
        }
 private void SaveData(bool confirmSave)
 {
     try
     {
         Relay_Settings relay = this.m_pVirtualServer.SystemSettings.Relay;
         if (this.m_pTabGeneral_SendSmartHost.Checked)
         {
             relay.RelayMode = Relay_Mode.SmartHost;
         }
         else
         {
             relay.RelayMode = Relay_Mode.Dns;
         }
         if (this.m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex == 0)
         {
             relay.SmartHostsBalanceMode = BalanceMode.LoadBalance;
         }
         else
         {
             relay.SmartHostsBalanceMode = BalanceMode.FailOver;
         }
         relay.SessionIdleTimeOut          = (int)this.m_pTabGeneral_SessionTimeout.Value;
         relay.MaximumConnections          = (int)this.m_pTabGeneral_MaxConnections.Value;
         relay.MaximumConnectionsPerIP     = (int)this.m_pTabGeneral_MaxConnsPerIP.Value;
         relay.RelayInterval               = (int)this.m_pTabGeneral_RelayInterval.Value;
         relay.RelayRetryInterval          = (int)this.m_pTabGeneral_RelayRetryInterval.Value;
         relay.SendUndeliveredWarningAfter = (int)this.m_pTabGeneral_SendUndelWarning.Value;
         relay.SendUndeliveredAfter        = (int)this.m_pTabGeneral_SendUndelivered.Value;
         relay.StoreUndeliveredMessages    = this.m_pTabGeneral_StoreUndeliveredMsgs.Checked;
         relay.UseTlsIfPossible            = this.m_pTabGeneral_UseTlsIfPossible.Checked;
         List <Relay_SmartHost> list = new List <Relay_SmartHost>();
         foreach (ListViewItem listViewItem in this.m_pTabGeneral_SmartHosts.Items)
         {
             list.Add((Relay_SmartHost)listViewItem.Tag);
         }
         relay.SmartHosts = list.ToArray();
         List <IPBindInfo> list2 = new List <IPBindInfo>();
         foreach (ListViewItem listViewItem2 in this.m_pTabBindings_Bindings.Items)
         {
             list2.Add((IPBindInfo)listViewItem2.Tag);
         }
         relay.Binds = list2.ToArray();
         if (this.m_pVirtualServer.SystemSettings.HasChanges && (!confirmSave || MessageBox.Show(this, "You have changes settings, do you want to save them ?", "Confirm:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes))
         {
             this.m_pVirtualServer.SystemSettings.Commit();
         }
     }
     catch (Exception x)
     {
         ErrorForm errorForm = new ErrorForm(x, new StackTrace());
         errorForm.ShowDialog(this);
     }
 }
 private void LoadData()
 {
     try
     {
         Relay_Settings relay = this.m_pVirtualServer.SystemSettings.Relay;
         if (relay.RelayMode == Relay_Mode.SmartHost)
         {
             this.m_pTabGeneral_SendSmartHost.Checked = true;
         }
         else
         {
             this.m_pTabGeneral_SendDns.Checked = true;
         }
         if (relay.SmartHostsBalanceMode == BalanceMode.LoadBalance)
         {
             this.m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex = 0;
         }
         else
         {
             this.m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex = 1;
         }
         this.m_pTabGeneral_SessionTimeout.Value         = relay.SessionIdleTimeOut;
         this.m_pTabGeneral_MaxConnections.Value         = relay.MaximumConnections;
         this.m_pTabGeneral_MaxConnsPerIP.Value          = relay.MaximumConnectionsPerIP;
         this.m_pTabGeneral_RelayInterval.Value          = relay.RelayInterval;
         this.m_pTabGeneral_RelayRetryInterval.Value     = relay.RelayRetryInterval;
         this.m_pTabGeneral_SendUndelWarning.Value       = relay.SendUndeliveredWarningAfter;
         this.m_pTabGeneral_SendUndelivered.Value        = relay.SendUndeliveredAfter;
         this.m_pTabGeneral_StoreUndeliveredMsgs.Checked = relay.StoreUndeliveredMessages;
         this.m_pTabGeneral_UseTlsIfPossible.Checked     = relay.UseTlsIfPossible;
         Relay_SmartHost[] smartHosts = relay.SmartHosts;
         for (int i = 0; i < smartHosts.Length; i++)
         {
             Relay_SmartHost relay_SmartHost = smartHosts[i];
             ListViewItem    listViewItem    = new ListViewItem();
             listViewItem.Text = relay_SmartHost.Host;
             listViewItem.SubItems.Add(relay_SmartHost.Port.ToString());
             listViewItem.SubItems.Add(relay_SmartHost.SslMode.ToString());
             listViewItem.SubItems.Add(relay_SmartHost.UserName);
             listViewItem.Tag = relay_SmartHost;
             this.m_pTabGeneral_SmartHosts.Items.Add(listViewItem);
         }
         IPBindInfo[] binds = relay.Binds;
         for (int j = 0; j < binds.Length; j++)
         {
             IPBindInfo   iPBindInfo    = binds[j];
             ListViewItem listViewItem2 = new ListViewItem();
             listViewItem2.Text = iPBindInfo.HostName;
             if (iPBindInfo.IP.ToString() == "0.0.0.0")
             {
                 listViewItem2.SubItems.Add("Any IPv4");
             }
             else if (iPBindInfo.IP.ToString() == "0:0:0:0:0:0:0:0")
             {
                 listViewItem2.SubItems.Add("Any IPv6");
             }
             else
             {
                 listViewItem2.SubItems.Add(iPBindInfo.IP.ToString());
             }
             listViewItem2.SubItems.Add(iPBindInfo.Port.ToString());
             listViewItem2.SubItems.Add(iPBindInfo.SslMode.ToString());
             listViewItem2.SubItems.Add(Convert.ToString(iPBindInfo.Certificate != null));
             listViewItem2.Tag = iPBindInfo;
             this.m_pTabBindings_Bindings.Items.Add(listViewItem2);
         }
         this.AddNotifications();
     }
     catch (Exception x)
     {
         ErrorForm errorForm = new ErrorForm(x, new StackTrace());
         errorForm.ShowDialog(this);
     }
 }
        /// <summary>
        /// Loads data to UI.
        /// </summary>
        private void LoadData()
        {
            try{
                Relay_Settings settings = m_pVirtualServer.SystemSettings.Relay;

                if (settings.RelayMode == Relay_Mode.SmartHost)
                {
                    m_pTabGeneral_SendSmartHost.Checked = true;
                }
                else
                {
                    m_pTabGeneral_SendDns.Checked = true;
                }
                if (settings.SmartHostsBalanceMode == BalanceMode.LoadBalance)
                {
                    m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex = 0;
                }
                else
                {
                    m_pTabGeneral_SmartHostsBalanceMode.SelectedIndex = 1;
                }
                m_pTabGeneral_SessionTimeout.Value         = settings.SessionIdleTimeOut;
                m_pTabGeneral_MaxConnections.Value         = settings.MaximumConnections;
                m_pTabGeneral_MaxConnsPerIP.Value          = settings.MaximumConnectionsPerIP;
                m_pTabGeneral_RelayInterval.Value          = settings.RelayInterval;
                m_pTabGeneral_RelayRetryInterval.Value     = settings.RelayRetryInterval;
                m_pTabGeneral_SendUndelWarning.Value       = settings.SendUndeliveredWarningAfter;
                m_pTabGeneral_SendUndelivered.Value        = settings.SendUndeliveredAfter;
                m_pTabGeneral_StoreUndeliveredMsgs.Checked = settings.StoreUndeliveredMessages;

                foreach (Relay_SmartHost smartHost in settings.SmartHosts)
                {
                    ListViewItem it = new ListViewItem();
                    it.Text = smartHost.Host;
                    it.SubItems.Add(smartHost.Port.ToString());
                    it.SubItems.Add(smartHost.SslMode.ToString());
                    it.SubItems.Add(smartHost.UserName);
                    it.Tag = smartHost;
                    m_pTabGeneral_SmartHosts.Items.Add(it);
                }

                foreach (IPBindInfo binding in settings.Binds)
                {
                    ListViewItem it = new ListViewItem();
                    it.Text = binding.HostName;
                    if (binding.IP.ToString() == "0.0.0.0")
                    {
                        it.SubItems.Add("Any IPv4");
                    }
                    else if (binding.IP.ToString() == "0:0:0:0:0:0:0:0")
                    {
                        it.SubItems.Add("Any IPv6");
                    }
                    else
                    {
                        it.SubItems.Add(binding.IP.ToString());
                    }
                    it.SubItems.Add(binding.Port.ToString());
                    it.SubItems.Add(binding.SslMode.ToString());
                    it.SubItems.Add(Convert.ToString(binding.Certificate != null));
                    it.Tag = binding;
                    m_pTabBindings_Bindings.Items.Add(it);
                }

                AddNotifications();
            }
            catch (Exception x) {
                wfrm_sys_Error frm = new wfrm_sys_Error(x, new System.Diagnostics.StackTrace());
                frm.ShowDialog(this);
            }
        }