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); }
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()); }
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); } }
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()); } }
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(); }
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; }
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); } }
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); }
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); }
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(); }
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); }
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); }
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; }
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; }
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 }); }
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); * }*/ }
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); * }*/ }