示例#1
0
        public string GetRuleDescription(FirewallRuleEx rule, bool AlwaysMake = false)
        {
            if (rule.Description != null && rule.Description.Length > 0 && !AlwaysMake)
            {
                return(rule.Description);
            }

            string DescrStr = "";

            switch (rule.Action)
            {
            case FirewallRule.Actions.Allow: DescrStr += Translate.fmt("str_allow") + " "; break;

            case FirewallRule.Actions.Block: DescrStr += Translate.fmt("str_block") + " "; break;
            }

            switch (rule.Direction)
            {
            case FirewallRule.Directions.Inbound: DescrStr += Translate.fmt("str_inbound") + " "; break;

            case FirewallRule.Directions.Outbound: DescrStr += Translate.fmt("str_outbound") + " "; break;
            }

            DescrStr += ProgramControl.FormatProgID(rule.ProgID);

            // todo: add more info

            return(DescrStr);
        }
示例#2
0
        void process_Click(object sender, RoutedEventArgs e)
        {
            ProgramControl curProcess = sender as ProgramControl;

            if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
            {
                if (SelectedPrograms.Contains(curProcess))
                {
                    curProcess.SetFocus(false);
                    SelectedPrograms.Remove(curProcess);
                }
                else
                {
                    curProcess.SetFocus(true);
                    SelectedPrograms.Add(curProcess);
                }
            }
            else
            {
                foreach (ProgramControl curProg in SelectedPrograms)
                {
                    curProg.SetFocus(false);
                }
                SelectedPrograms.Clear();
                SelectedPrograms.Add(curProcess);
                curProcess.SetFocus(true);
            }

            SelectionChanged?.Invoke(this, new EventArgs());
        }
示例#3
0
        public void UpdateConnections(bool clear = false)
        {
            if (firewallPage == null)
            {
                return;
            }

            if (clear)
            {
                LogList.Clear();
            }

            Dictionary <Guid, LogItem> oldLog = new Dictionary <Guid, LogItem>();

            foreach (LogItem oldItem in LogList)
            {
                oldLog.Add(oldItem.entry.guid, oldItem);
            }

            Dictionary <Guid, List <Program.LogEntry> > entries = App.client.GetConnections(firewallPage.GetCurGuids());

            foreach (var entrySet in entries)
            {
                ProgramControl item = null;
                ProgramSet     prog = firewallPage.GetProgSet(entrySet.Key, null, out item);
                if (prog == null)
                {
                    continue;
                }

                foreach (Program.LogEntry entry in entrySet.Value)
                {
                    //if (!TestEntry(prog, entry))
                    //    continue;

                    //LogItem Item;
                    //if (!oldLog.TryGetValue(entry.guid, out Item))
                    if (!oldLog.Remove(entry.guid))
                    {
                        Program program = ProgramList.GetProgramFuzzy(prog.Programs, entry.ProgID, ProgramList.FuzzyModes.Any);

                        LogList.Insert(0, new LogItem(entry, program != null ? program.Description : prog.config.Name));
                    }

                    /*else
                     * {
                     *  oldLog.Remove(entry.guid);
                     *  Item.Update(entry);
                     * }*/
                }
            }

            foreach (LogItem item in oldLog.Values)
            {
                LogList.Remove(item);
            }
        }
示例#4
0
        void process_KeyEventHandler(object sender, KeyEventArgs e)
        {
            if ((e.Key == Key.Up || e.Key == Key.Down) /*&& !((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)*/)
            {
                ProgramControl curProcess = null;
                if (SelectedPrograms.Count > 0)
                {
                    foreach (ProgramControl curProg in SelectedPrograms)
                    {
                        curProg.SetFocus(false);
                    }
                    curProcess = SelectedPrograms[SelectedPrograms.Count - 1];
                    SelectedPrograms.Clear();
                }

                e.Handled = true;
                int curRow = Grid.GetRow(curProcess);
                if (e.Key == Key.Up)
                {
                    while (curRow > 0)
                    {
                        curRow--;
                        ProgramControl curProg = this.processGrid.Children.Cast <ProgramControl>().First((c) => Grid.GetRow(c) == curRow);
                        if (curProg.Visibility == Visibility.Visible)
                        {
                            curProcess = curProg;
                            this.processScroll.ScrollToVerticalOffset(this.processScroll.VerticalOffset - (curProcess.ActualHeight + 2));
                            break;
                        }
                    }
                }
                else if (e.Key == Key.Down)
                {
                    while (curRow < this.processGrid.Children.Count - 1)
                    {
                        curRow++;
                        ProgramControl curProg = this.processGrid.Children.Cast <ProgramControl>().First((c) => Grid.GetRow(c) == curRow);
                        if (curProg.Visibility == Visibility.Visible)
                        {
                            curProcess = curProg;
                            this.processScroll.ScrollToVerticalOffset(this.processScroll.VerticalOffset + (curProcess.ActualHeight + 2));
                            break;
                        }
                    }
                }

                if (curProcess == null)
                {
                    return;
                }

                curProcess.SetFocus(true);
                SelectedPrograms.Add(curProcess);

                SelectionChanged?.Invoke(this, new EventArgs());
            }
        }
示例#5
0
        private void CmbOffAccess_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (SuspendChange > 0)
            {
                return;
            }

            FirewallPreset.OffState = (ProgramConfig.AccessLevels)(cmbOffAccess.SelectedItem as ComboBoxItem).Tag;
            cmbOffAccess.Background = ProgramControl.GetAccessColor(FirewallPreset.OffState);

            LoadRules();
        }
示例#6
0
        private void cmbAccess_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (cmbService.Visibility == Visibility.Visible && cmbService.SelectedIndex == -1)
            {
                btnApply.IsEnabled = false;
                return;
            }

            ProgramSet.Config.AccessLevels NetAccess = (ProgramSet.Config.AccessLevels)(cmbAccess.SelectedItem as ComboBoxItem).Tag;
            cmbAccess.Background = ProgramControl.GetAccessColor(NetAccess);
            btnApply.IsEnabled   = NetAccess != ProgramSet.Config.AccessLevels.Unconfigured;
        }
示例#7
0
        private void SortAndFitlerProgList()
        {
            List <ProgramControl> OrderList = Programs.Values.ToList();

            int DoSort(ProgramControl l, ProgramControl r)
            {
                switch (SortBy)
                {
                case Sorts.Name: return(l.progSet.config.Name.CompareTo(r.progSet.config.Name));

                case Sorts.NameRev: return(r.progSet.config.Name.CompareTo(l.progSet.config.Name));

                case Sorts.LastActivity: return(r.progSet.GetLastActivity().CompareTo(l.progSet.GetLastActivity()));

                case Sorts.DataRate: return(r.progSet.GetDataRate().CompareTo(l.progSet.GetDataRate()));

                case Sorts.SocketCount: return(r.progSet.GetSocketCount().CompareTo(l.progSet.GetSocketCount()));

                case Sorts.ModuleCount: return(r.progSet.Programs.Count.CompareTo(l.progSet.Programs.Count));
                }
                return(0);
            }

            if (SortBy != Sorts.Unsorted)
            {
                OrderList.Sort(DoSort);
            }

            for (int i = 0; i < OrderList.Count; i++)
            {
                if (i >= this.processGrid.RowDefinitions.Count)
                {
                    this.processGrid.RowDefinitions.Add(new RowDefinition());
                }
                RowDefinition row = this.processGrid.RowDefinitions[i];
                //ProcessControl item = tmp.Item2;
                ProgramControl item = OrderList[i];
                if (row.Height.Value != item.Height)
                {
                    row.Height = GridLength.Auto; //new GridLength(item.Height + 2);
                }
                Grid.SetRow(item, i);

                item.Visibility = (CurFilter != null && FirewallPage.DoFilter(CurFilter, item.progSet)) ? Visibility.Collapsed : Visibility.Visible;
            }

            while (OrderList.Count < this.processGrid.RowDefinitions.Count)
            {
                this.processGrid.RowDefinitions.RemoveAt(OrderList.Count);
            }
        }
示例#8
0
        public PresetFirewall()
        {
            InitializeComponent();

            ProgramControl.PrepAccessCmb(cmbOnAccess);
            ProgramControl.PrepAccessCmb(cmbOffAccess);

            RuleList = new ControlList <RuleItemControl, FirewallPreset.SingleRule>(this.ruleScroll, (rule) =>
            {
                FirewallRuleEx FwRule = Rules.Find(x => x.guid.Equals(rule.RuleId));
                var ctrl          = new RuleItemControl(rule, FwRule, FirewallPreset);
                ctrl.RuleChanged += Ctrl_RuleChanged;
                return(ctrl);
            }, (rule) => rule.RuleId);
        }
示例#9
0
        ProgramControl AddProgramItem(ProgramSet prog)
        {
            ProgramControl item = new ProgramControl(prog, CatModel);

            Programs.Add(prog.guid, item);
            //item.Tag = process;
            item.VerticalAlignment   = VerticalAlignment.Top;
            item.HorizontalAlignment = HorizontalAlignment.Stretch;
            item.Margin = new Thickness(1, 1, 1, 1);
            //item.MouseDown += new MouseButtonEventHandler(process_Click);
            item.Click += new RoutedEventHandler(process_Click);

            this.processGrid.Children.Add(item);

            return(item);
        }
示例#10
0
        public void SetItem(FirewallPreset firewallPreset)
        {
            FirewallPreset = firewallPreset;

            SuspendChange++;

            presetName.Content = FirewallPreset.Name;

            WpfFunc.CmbSelect(cmbOnAccess, FirewallPreset.OnState.ToString());
            cmbOnAccess.Background = ProgramControl.GetAccessColor(FirewallPreset.OnState);

            WpfFunc.CmbSelect(cmbOffAccess, FirewallPreset.OffState.ToString());
            cmbOffAccess.Background = ProgramControl.GetAccessColor(FirewallPreset.OffState);

            SuspendChange--;

            LoadRules();
        }
示例#11
0
        int DoSort(ProgramControl l, ProgramControl r)
        {
            switch (SortBy)
            {
            case Sorts.Name: return(l.progSet.config.Name.CompareTo(r.progSet.config.Name));

            case Sorts.NameRev: return(r.progSet.config.Name.CompareTo(l.progSet.config.Name));

            case Sorts.LastActivity: return(r.progSet.GetLastActivity().CompareTo(l.progSet.GetLastActivity()));

            case Sorts.DataRate: return(r.progSet.GetDataRate().CompareTo(l.progSet.GetDataRate()));

            case Sorts.SocketCount: return(r.progSet.GetSocketCount().CompareTo(l.progSet.GetSocketCount()));

            case Sorts.ModuleCount: return(r.progSet.Programs.Count.CompareTo(l.progSet.Programs.Count));
            }
            return(0);
        }
示例#12
0
        public bool OnActivity(ProgramSet prog, Program program, Priv10Engine.FwEventArgs args)
        {
            ProgramControl item = null;

            if (!ProgramList.Items.TryGetValue(args.guid.ToString(), out item))
            {
                if (FirewallPage.DoFilter(CurFilter, prog))
                {
                    return(false);
                }

                item = ProgramList.AddItem(prog);

                args.update = false;
            }

            //Note: windows firewall doesn't block localhost acces so we ignore it
            //if (args.entry.State == Program.LogEntry.States.RuleError
            //  && args.entry.FwEvent.Action == FirewallRule.Actions.Allow
            //  && !NetFunc.IsLocalHost(args.entry.FwEvent.RemoteAddress))
            //    item.SetError(true);

            if ((chkNoLocal.IsChecked != true || (args.entry.Realm != Program.LogEntry.Realms.LocalHost && args.entry.Realm != Program.LogEntry.Realms.MultiCast)) &&
                (chkNoLan.IsChecked != true || args.entry.Realm != Program.LogEntry.Realms.LocalArea) &&
                args.entry.FwEvent.ProcessId != ProcFunc.CurID) // Note: When DNS proxy is nabled we are always very active, so ignore it
            {
                switch (args.entry.FwEvent.Action)
                {
                case FirewallRule.Actions.Allow: item.Flash(Colors.LightGreen); break;

                case FirewallRule.Actions.Block: item.Flash(Colors.LightPink); break;
                }
            }

            item.DoUpdate(prog);

            return(SortBy == Sorts.LastActivity);
        }
示例#13
0
        private void LoadCurrent(bool bUpdate = false)
        {
            if (!bUpdate)
            {
                ProgramSet.Config.AccessLevels NetAccess = ProgramSet.Config.AccessLevels.Unconfigured;

                cmbAccess.Background = ProgramControl.GetAccessColor(NetAccess);
                WpfFunc.CmbSelect(cmbAccess, NetAccess.ToString());

                btnApply.IsEnabled = false;
            }

            ProgramID id = mEventList.ElementAt(curIndex);
            Tuple <Program, List <Priv10Engine.FwEventArgs> > list = mEvents[id];

            //int PID = list.Item2.Count > 0 ? list.Item2.First().FwEvent.ProcessId : 0;
            string FilePath = list.Item2.Count > 0 ? list.Item2.First().entry.FwEvent.ProcessFileName : "";

            imgIcon.Source = ImgFunc.GetIcon(FilePath, imgIcon.Width); // todo: use .progSet.GetIcon instead?
            //lblName.Text = id.GetDisplayName(false);
            grpBox.Header = list.Item1.Description;
            //lblPID.Text = string.Format("{0} ({1})", System.IO.Path.GetFileName(id.Path), PID);
            lblPID.Text = System.IO.Path.GetFileName(id.Path);

            List <string> services = new List <string>();

            btnIgnore.IsEnabled = true;
            consGrid.Items.Clear();
            foreach (Priv10Engine.FwEventArgs args in list.Item2)
            {
                consGrid.Items.Insert(0, new ConEntry(args.entry));

                if (args.services != null)
                {
                    foreach (var service in args.services)
                    {
                        if (!services.Contains(service))
                        {
                            services.Add(service);
                        }
                    }
                }
            }

            if (services.Count > 0)
            {
                cmbService.Visibility = Visibility.Visible;
                cmbService.Items.Clear();
                foreach (var service in services)
                {
                    cmbService.Items.Add(service);
                }
                cmbService.SelectedIndex = -1;
                cmbService.Text          = Translate.fmt("msg_pick_svc");
            }
            else
            {
                cmbService.Visibility = Visibility.Collapsed;
                switch (id.Type)
                {
                //case ProgramList.Types.Program: lblSubName.Text = ""; break;
                case ProgramID.Types.Service: lblSubName.Text = id.GetServiceId(); break;

                case ProgramID.Types.App: lblSubName.Text = id.GetPackageName(); break;

                default: lblSubName.Text = ""; break;
                }
            }
            lblPath.Text = id.Path;
        }
示例#14
0
        public ProgramTreeControl()
        {
            InitializeComponent();

            this.hdrDescr.Content     = Translate.fmt("lbl_descr");
            this.hdrCat.Content       = Translate.fmt("lbl_log_type");
            this.hdrAccess.Content    = Translate.fmt("lbl_access");
            this.hdrRules.Content     = Translate.fmt("lbl_rules");
            this.hdrAllowed.Content   = Translate.fmt("filter_recent_allowed");
            this.hdrBlocked.Content   = Translate.fmt("filter_recent_blocked");
            this.hdrActivity.Content  = Translate.fmt("sort_act");
            this.hdrSockets.Content   = Translate.fmt("lbl_socks");
            this.hdrUpRate.Content    = Translate.fmt("lbl_upload");
            this.hdrDownRate.Content  = Translate.fmt("lbl_download");
            this.hdrUpTotal.Content   = Translate.fmt("lbl_uploaded");
            this.hdrDownTotal.Content = Translate.fmt("lbl_downloaded");
            this.hdrProg.Content      = Translate.fmt("lbl_program");

            treeView.Loaded += (sender, e) => {
                headerPresenter = WpfFunc.FindChild <GridViewHeaderRowPresenter>(treeView);
                if (headerPresenter == null)
                {
                    return;
                }

                allColumns = headerPresenter.Columns.Cast <GridViewColumn>().ToArray();

                Restore(App.GetConfig("GUI", "progTree_Columns", ""));

                headerMenu = new ContextMenu();
                ContextMenuService.SetContextMenu(headerPresenter, headerMenu);

                if (headerMenu.Items.Count == 0)
                {
                    CreateHeaderMenu();
                }
            };

            treeView.Root      = root = new ProgTreeRoot("");
            treeView.ShowRoot  = false;
            treeView.ShowLines = false;

            treeView.PreviewKeyDown += TreeView_KeyDown;


            var contextMenu = new ContextMenu();


            menuAdd    = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_add_prog"), null, TryFindResource("Icon_Plus"));
            menuAddSub = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_add_to_set"), null, TryFindResource("Icon_Plus"));
            contextMenu.Items.Add(new Separator());
            menuRemove = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_del_progs"), null, TryFindResource("Icon_Remove"));
            contextMenu.Items.Add(new Separator());
            menuMerge = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_merge_progs"), null, TryFindResource("Icon_Merge"));
            menuSplit = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_split_progs"), null, TryFindResource("Icon_Split"));
            contextMenu.Items.Add(new Separator());

            menuAccess       = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_access_prog"), null, TryFindResource("Icon_NetAccess"));
            menuAccessNone   = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_none"), null, null, ProgramSet.Config.AccessLevels.Unconfigured);
            menuAccessAllow  = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_allow"), null, null, ProgramSet.Config.AccessLevels.FullAccess);
            menuAccessCustom = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_edit"), null, null, ProgramSet.Config.AccessLevels.CustomConfig);
            //menuAccessIn = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_inbound"), null, null, ProgramSet.Config.AccessLevels.InBoundAccess);
            //menuAccessOut = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_outbound"), null, null, ProgramSet.Config.AccessLevels.OutBoundAccess);
            menuAccessLan   = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_lan"), null, null, ProgramSet.Config.AccessLevels.LocalOnly);
            menuAccessBlock = WpfFunc.AddMenu(menuAccess, Translate.fmt("acl_block"), null, null, ProgramSet.Config.AccessLevels.BlockAccess);
            foreach (MenuItem item in menuAccess.Items)
            {
                item.Background = ProgramControl.GetAccessColor((ProgramSet.Config.AccessLevels)item.Tag);
                //item.IsCheckable = true;
            }

            menuNotify             = WpfFunc.AddMenu(contextMenu, Translate.fmt("lbl_notify"), null);
            menuNotify.IsCheckable = true;

            contextMenu.Items.Add(new Separator());
            menuRename   = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_rename_prog"), null, TryFindResource("Icon_Rename"));
            menuSetIcon  = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_icon_prog"), null, TryFindResource("Icon_SetIcon"));
            menuCategory = WpfFunc.AddMenu(contextMenu, Translate.fmt("btn_cat_prog"), null, TryFindResource("Icon_Category"));

            treeView.ContextMenu = contextMenu;
        }
示例#15
0
        public ConnectionNotify()
        {
            InitializeComponent();

            this.btnPrev.Content            = Translate.fmt("lbl_prev");
            this.btnNext.Content            = Translate.fmt("lbl_next");
            this.lblRemember.Content        = Translate.fmt("lbl_remember");
            this.btnIgnore.Content          = Translate.fmt("lbl_ignore");
            this.btnApply.Content           = Translate.fmt("lbl_apply");
            this.consGrid.Columns[0].Header = Translate.fmt("lbl_protocol");
            this.consGrid.Columns[1].Header = Translate.fmt("lbl_ip_port");
            this.consGrid.Columns[2].Header = Translate.fmt("lbl_remote_host");
            this.consGrid.Columns[3].Header = Translate.fmt("lbl_time_stamp");
            this.consGrid.Columns[4].Header = Translate.fmt("lbl_pid");

            consGridExt = new DataGridExt(consGrid);
            consGridExt.Restore(App.GetConfig("GUI", "consGrid_Columns", ""));


            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_none"), Tag = ProgramSet.Config.AccessLevels.Unconfigured
            });
            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_silence"), Tag = ProgramSet.Config.AccessLevels.StopNotify
            });
            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_allow"), Tag = ProgramSet.Config.AccessLevels.FullAccess
            });
            //cmbAccess.Items.Add(new ComboBoxItem() { Content = Translate.fmt("acl_outbound"), Tag = ProgramSet.Config.AccessLevels.OutBoundAccess });
            //cmbAccess.Items.Add(new ComboBoxItem() { Content = Translate.fmt("acl_inbound"), Tag = ProgramSet.Config.AccessLevels.InBoundAccess });
            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_edit"), Tag = ProgramSet.Config.AccessLevels.CustomConfig
            });
            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_lan"), Tag = ProgramSet.Config.AccessLevels.LocalOnly
            });
            cmbAccess.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("acl_block"), Tag = ProgramSet.Config.AccessLevels.BlockAccess
            });
            foreach (ComboBoxItem item in cmbAccess.Items)
            {
                item.Background = ProgramControl.GetAccessColor((ProgramSet.Config.AccessLevels)item.Tag);
            }

#if DEBUG
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_temp", "1 min"), Tag = 60
            });
#endif
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_temp", "5 min"), Tag = 5 * 60
            });
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_temp", "15 min"), Tag = 15 * 60
            });
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_temp", "1 h"), Tag = 60 * 60
            });
            cmbRemember.SelectedIndex = cmbRemember.Items.Count - 1; // default is 1h
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_temp", "24 h"), Tag = 24 * 60 * 60
            });
            cmbRemember.Items.Add(new ComboBoxItem()
            {
                Content = Translate.fmt("lbl_permanent"), Tag = 0
            });
        }
示例#16
0
        public void UpdateSockets(bool clear = false)
        {
            if (firewallPage == null)
            {
                return;
            }

            if (clear)
            {
                SocketList.Clear();
            }

            Dictionary <Guid, SocketItem> oldLog = new Dictionary <Guid, SocketItem>();

            foreach (SocketItem oldItem in SocketList)
            {
                oldLog.Add(oldItem.sock.guid, oldItem);
            }

            Dictionary <Guid, List <NetworkSocket> > entries = App.client.GetSockets(firewallPage.GetCurGuids());

            foreach (var entrySet in entries)
            {
                ProgramControl item = null;
                ProgramSet     prog = firewallPage.GetProgSet(entrySet.Key, null, out item);
                if (prog == null)
                {
                    continue;
                }

                foreach (NetworkSocket socket in entrySet.Value)
                {
                    SocketItem entry = null;
                    if (!oldLog.TryGetValue(socket.guid, out entry))
                    {
                        oldLog.Remove(socket.guid);

                        Program program = ProgramList.GetProgramFuzzy(prog.Programs, socket.ProgID, ProgramList.FuzzyModes.Any);

                        SocketList.Insert(0, new SocketItem(socket, program != null ? program.Description : prog.config.Name));
                    }
                    else // update entry
                    {
                        oldLog.Remove(socket.guid);
                        entry.Update(socket);
                    }
                }
            }

            foreach (SocketItem item in oldLog.Values)
            {
                SocketList.Remove(item);
            }


            // force sort
            // todo: improve that

            /*if (socksGrid.Items.SortDescriptions.Count > 0)
             * {
             *  socksGrid.Items.SortDescriptions.Insert(0, socksGrid.Items.SortDescriptions.First());
             *  socksGrid.Items.SortDescriptions.RemoveAt(0);
             * }*/
        }
示例#17
0
        public void UpdateDnsLog(bool clear = false)
        {
            if (firewallPage == null)
            {
                return;
            }

            if (clear)
            {
                LogList.Clear();
            }

            Dictionary <Guid, DnsItem> oldLog = new Dictionary <Guid, DnsItem>();

            foreach (DnsItem oldItem in LogList)
            {
                oldLog.Add(oldItem.entry.guid, oldItem);
            }

            Dictionary <Guid, List <Program.DnsEntry> > entries = App.client.GetDomains(firewallPage.GetCurGuids(mDnsFilter));

            foreach (var entrySet in entries)
            {
                ProgramControl item = null;
                ProgramSet     prog = firewallPage.GetProgSet(entrySet.Key, null, out item);
                if (prog == null)
                {
                    continue;
                }

                foreach (Program.DnsEntry logEntry in entrySet.Value)
                {
                    DnsItem entry = null;
                    if (!oldLog.TryGetValue(logEntry.guid, out entry))
                    {
                        oldLog.Remove(logEntry.guid);

                        Program program = ProgramList.GetProgramFuzzy(prog.Programs, logEntry.ProgID, ProgramList.FuzzyModes.Any);

                        LogList.Insert(0, new DnsItem(logEntry, program != null ? program.Description : prog.config.Name));
                    }
                    else // update entry
                    {
                        oldLog.Remove(logEntry.guid);
                        entry.Update(logEntry);
                    }
                }
            }

            foreach (DnsItem item in oldLog.Values)
            {
                LogList.Remove(item);
            }

            // force sort
            // todo: improve that

            /*if (sockGrid.Items.SortDescriptions.Count > 0)
             * {
             *  sockGrid.Items.SortDescriptions.Insert(0, sockGrid.Items.SortDescriptions.First());
             *  sockGrid.Items.SortDescriptions.RemoveAt(0);
             * }*/
        }