/* Technitium DNS Server Copyright (C) 2019 Shreyas Zare (shreyas@technitium.com) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace DnsServerSystemTrayApp { public partial class frmManageDnsProviders : Form { #region variables readonly List _dnsProviders = new List(); #endregion #region constructor public frmManageDnsProviders(ICollection dnsProviders) { InitializeComponent(); _dnsProviders.AddRange(dnsProviders); } #endregion #region private private void RefreshDnsProvidersList() { listView1.SuspendLayout(); listView1.Items.Clear(); foreach (DnsProvider dnsProvider in _dnsProviders) { ListViewItem item = listView1.Items.Add(dnsProvider.Name); item.SubItems.Add(dnsProvider.GetIpv4Addresses()); item.SubItems.Add(dnsProvider.GetIpv6Addresses()); item.Tag = dnsProvider; } listView1.ResumeLayout(); } private void ClearForm() { txtDnsProviderName.Text = ""; txtIpv4Addresses.Text = ""; txtIpv6Addresses.Text = ""; btnAddUpdate.Text = "Add"; btnDelete.Enabled = false; } private void frmManageDnsProviders_Load(object sender, EventArgs e) { RefreshDnsProvidersList(); } private void listView1_SelectedIndexChanged(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { ListViewItem selectedItem = listView1.SelectedItems[0]; txtDnsProviderName.Text = selectedItem.Text; txtIpv4Addresses.Text = selectedItem.SubItems[1].Text; txtIpv6Addresses.Text = selectedItem.SubItems[2].Text; btnAddUpdate.Text = "&Update"; btnDelete.Enabled = true; } else { ClearForm(); } } private void btnAddUpdate_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtDnsProviderName.Text)) { MessageBox.Show("Please enter a valid DNS Provider name.", "Missing DNS Provider!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } List addresses = new List(); foreach (string item in txtIpv4Addresses.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (IPAddress.TryParse(item.Trim(), out IPAddress address) && (address.AddressFamily == AddressFamily.InterNetwork)) { addresses.Add(address); } else { MessageBox.Show("Please enter a valid IPv4 address.", "Invalid IPv4 Address!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } foreach (string item in txtIpv6Addresses.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (IPAddress.TryParse(item.Trim(), out IPAddress address) && (address.AddressFamily == AddressFamily.InterNetworkV6)) { addresses.Add(address); } else { MessageBox.Show("Please enter a valid IPv6 address.", "Invalid IPv6 Address!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } if (addresses.Count == 0) { MessageBox.Show("Please enter at least one valid DNS provider IP address.", "Missing DNS Provider IP Address!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if ((btnAddUpdate.Text != "Add") && (listView1.SelectedItems.Count > 0)) { ListViewItem selectedItem = listView1.SelectedItems[0]; DnsProvider dnsProvider = selectedItem.Tag as DnsProvider; dnsProvider.Name = txtDnsProviderName.Text.Trim(); dnsProvider.Addresses = addresses; } else { _dnsProviders.Add(new DnsProvider(txtDnsProviderName.Text.Trim(), addresses)); } RefreshDnsProvidersList(); ClearForm(); } private void btnDelete_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { ListViewItem selectedItem = listView1.SelectedItems[0]; DnsProvider dnsProvider = selectedItem.Tag as DnsProvider; _dnsProviders.Remove(dnsProvider); listView1.Items.Remove(selectedItem); } RefreshDnsProvidersList(); ClearForm(); } private void btnClear_Click(object sender, EventArgs e) { ClearForm(); } private void btnRestoreDefaults_Click(object sender, EventArgs e) { _dnsProviders.Clear(); _dnsProviders.AddRange(DnsProvider.GetDefaultProviders()); RefreshDnsProvidersList(); ClearForm(); } #endregion #region properties public List DnsProviders { get { return _dnsProviders; } } #endregion } }