Network_Manager.Gadget.ControlPanel.Routes.SavedRoutes.UnloadForm.UnloadForm C# (CSharp) Method

UnloadForm() public method

public UnloadForm ( TreeView treeView ) : System
treeView System.Windows.Forms.TreeView
return System
        public UnloadForm(TreeView treeView)
        {
            InitializeComponent();
            this.treeView = treeView;
            // resize
            Size minimumSize = ClientSize;
            Rectangle screenRectangle = RectangleToScreen(ClientRectangle);
            int titleBarHeight = screenRectangle.Top - Top;
            int borderThickness = screenRectangle.Left - Left;
            Rectangle workingArea = Screen.GetWorkingArea(this);
            Size clientSize = new Size();
            if (minimumSize.Width > workingArea.Width - 2 * borderThickness)
                clientSize.Width = workingArea.Width - 2 * borderThickness;
            else
                clientSize.Width = minimumSize.Width;
            if (minimumSize.Height > workingArea.Height - titleBarHeight - borderThickness)
                clientSize.Height = workingArea.Height - titleBarHeight - borderThickness;
            else
                clientSize.Height = minimumSize.Height;
            AutoScrollMinSize = new System.Drawing.Size(minimumSize.Width, minimumSize.Height);
            ClientSize = new Size(clientSize.Width, clientSize.Height);
            // load routes
            IPAddress ipAddress = new IPAddress(0);
            Config.SavedRouteNode unloadNode = Global.Config.SavedRoutes.GetSelectedNode(treeView);
            unloadRoutes = Global.Config.SavedRoutes.GetRoutes(unloadNode);
            activeRoutes = Iphlpapi.GetRoutes(Iphlpapi.FAMILY.AF_UNSPEC);
            foreach (Config.SavedRouteItem item in unloadRoutes)
            {
                string interfaceIndex = "Not connected";
                int ifIndex = 0;
                string status = "Not loaded";
                if (ValidateRoute(ref item.Destination, ref item.Prefix, ref item.Gateway, item.IPVersion))
                {
                    if (Global.NetworkInterfaces.ContainsKey(item.InterfaceGuid) &&
                        (item.IPVersion == 4 && Global.NetworkInterfaces[item.InterfaceGuid].IPv4Enabled ||
                        item.IPVersion == 6 && Global.NetworkInterfaces[item.InterfaceGuid].IPv6Enabled))
                    {
                        interfaceIndex = Global.NetworkInterfaces[item.InterfaceGuid].Index.ToString() +
                        " (" + Global.NetworkInterfaces[item.InterfaceGuid].Name + " - ";
                        ifIndex = Global.NetworkInterfaces[item.InterfaceGuid].Index;
                        if (item.IPVersion == 4)
                        {
                            unloadIPv4++;
                            if (Global.NetworkInterfaces[item.InterfaceGuid].IPv4Address.Count > 0)
                                interfaceIndex += Global.NetworkInterfaces[item.InterfaceGuid].IPv4Address[0].Address;
                            else
                                interfaceIndex += "0.0.0.0";
                        }
                        else
                        {
                            unloadIPv6++;
                            if (Global.NetworkInterfaces[item.InterfaceGuid].IPv6Address.All.Count > 0)
                                interfaceIndex += Global.NetworkInterfaces[item.InterfaceGuid].IPv6Address.All[0].Address;
                            else
                                interfaceIndex += "::";
                        }
                        interfaceIndex += ")";
                    }
                    else if (NetworkInterface.Loopback.Guid == item.InterfaceGuid &&
                        Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1 &&
                        (item.IPVersion == 4 && NetworkInterface.Loopback.IPv4Enabled ||
                        item.IPVersion == 6 && NetworkInterface.Loopback.IPv6Enabled))
                    {
                        interfaceIndex = "1 (" + NetworkInterface.Loopback.Name + " - ";
                        ifIndex = 1;
                        if (item.IPVersion == 4)
                        {
                            unloadIPv4++;
                            interfaceIndex += "127.0.0.1)";
                        }
                        else
                        {
                            unloadIPv6++;
                            interfaceIndex += "::1)";
                        }
                    }
                    else
                    {
                        if (item.IPVersion == 4)
                        {
                            unloadIPv4++;
                        }
                        else
                        {
                            unloadIPv6++;
                        }
                    }
                    if (activeRoutes.Find(i =>
                        i.IPVersion == item.IPVersion &&
                        IPAddress.Parse(i.Destination).Equals(IPAddress.Parse(item.Destination)) &&
                        (i.IPVersion == 4 ? IPAddress.Parse(i.Prefix).Equals(IPAddress.Parse(item.Prefix)) : int.Parse(i.Prefix) == int.Parse(item.Prefix)) &&
                        IPAddress.Parse(i.Gateway).Equals(IPAddress.Parse(item.Gateway)) &&
                        i.InterfaceIndex == ifIndex) != null)
                    {
                        status = "Active";
                    }
                    else if (activeRoutes.Find(i =>
                        i.IPVersion == item.IPVersion &&
                        IPAddress.Parse(i.Destination).Equals(IPAddress.Parse(item.Destination)) &&
                        (i.IPVersion == 4 ? IPAddress.Parse(i.Prefix).Equals(IPAddress.Parse(item.Prefix)) : int.Parse(i.Prefix) == int.Parse(item.Prefix)) &&
                        IPAddress.Parse(i.Gateway).Equals(IPAddress.Parse(item.Gateway))) != null)
                    {
                        status = "Active on a different interface";
                        if (item.IPVersion == 4)
                            NotActiveIPv4Routes++;
                        else
                            NotActiveIPv6Routes++;
                    }
                    else if (activeRoutes.Find(i =>
                        i.IPVersion == item.IPVersion &&
                        IPAddress.Parse(i.Destination).Equals(IPAddress.Parse(item.Destination)) &&
                        (i.IPVersion == 4 ? IPAddress.Parse(i.Prefix).Equals(IPAddress.Parse(item.Prefix)) : int.Parse(i.Prefix) == int.Parse(item.Prefix))
                        ) != null)
                    {
                        status = "Active with a different gateway";
                        if (item.IPVersion == 4)
                            NotActiveIPv4Routes++;
                        else
                            NotActiveIPv6Routes++;
                    }
                    else
                    {
                        if (item.IPVersion == 4)
                            NotActiveIPv4Routes++;
                        else
                            NotActiveIPv6Routes++;
                    }
                }
                else
                {
                    if (item.IPVersion == 4)
                    {
                         unloadIPv4++;
                         NotActiveIPv4Routes++;
                    }
                    else
                    {
                        unloadIPv6++;
                        NotActiveIPv6Routes++;
                    }

                }
                listView1.Items.Add(new ListViewItem(new string[] {
                    item.Destination,
                    item.Prefix,
                    item.Gateway,
                    interfaceIndex,
                    item.Metric.ToString(),
                    item.Name,
                    status
                })).Checked = true;
            }
            foreach (ColumnHeader column in listView1.Columns)
                column.Width = -2;
            // load configs
            defaultInterfaceMode.SelectedIndex = 0;
            defaultIPv4GatewayMode.SelectedIndex = 3;
            defaultIPv6GatewayMode.SelectedIndex = 3;

            foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
                if (nic.IPv4Enabled)
                    defaultIPv4Interface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " +
                        (nic.IPv4Address.Count > 0 ? nic.IPv4Address.FirstOrDefault().Address : "0.0.0.0"));
            if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1)
                if (NetworkInterface.Loopback.IPv4Enabled)
                    defaultIPv4Interface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - 127.0.0.1)");

            foreach (NetworkInterface nic in Global.NetworkInterfaces.Values)
                if (nic.IPv6Enabled)
                    defaultIPv6Interface.Items.Add(nic.Index.ToString() + " (" + nic.Name + " - " +
                        (nic.IPv6Address.All.Count > 0 ? nic.IPv6Address.All.FirstOrDefault().Address : "0.0.0.0"));
            if (Environment.OSVersion.Version.CompareTo(new Version("6.0")) > -1)
                if (NetworkInterface.Loopback.IPv6Enabled)
                    defaultIPv6Interface.Items.Add("1 (" + NetworkInterface.Loopback.Name + " - ::1)");
        }