private void createRule(bool doAllow, bool isTemp) { bool success = false; var activeConn = ((CurrentConn)lstConnections.SelectedItem); if ((!_optionsView.IsProtocolChecked) && (_optionsView.IsLocalPortChecked || _optionsView.IsTargetPortChecked)) { MessageBox.Show(Common.Properties.Resources.MSG_RULE_PROTOCOL_NEEDED, Common.Properties.Resources.MSG_DLG_ERR_TITLE, MessageBoxButton.OK, MessageBoxImage.Error); return; } string[] services = null; if (_optionsView.IsServiceRuleChecked) { if (activeConn.PossibleServices != null && activeConn.PossibleServices.Length > 0) { ServicesForm sf = new ServicesForm(activeConn); if ((bool)sf.ShowDialog()) { services = sf.SelectedServices; } else { return; } } else { services = new[] { activeConn.CurrentService }; } } if (doAllow) { success = createAllowRule(activeConn, services, isTemp); } else { success = createBlockRule(activeConn, services, isTemp); } if (success) { LogHelper.Info("New rule for connection successfully created!"); for (int i = ((App)Application.Current).Connections.Count - 1; i >= 0; i--) { var c = ((App)Application.Current).Connections[i]; string[] svc = new string[0]; if (!String.IsNullOrEmpty(c.CurrentService)) { svc = new[] { c.CurrentService }; } if (FirewallHelper.GetMatchingRules(c.CurrentPath, c.CurrentAppPkgId, c.Protocol, c.Target, c.TargetPort, c.LocalPort, svc, c.CurrentLocalUserOwner, false).Any()) //FIXME: LocalPort may have multiple!) { LogHelper.Debug("Auto-removing a similar connection..."); ((App)Application.Current).Connections.Remove(c); } } if (((App)Application.Current).Connections.Count == 0) { LogHelper.Debug("No connections left; closing notification window."); this.Close(); } } else { MessageBox.Show(Common.Properties.Resources.MSG_RULE_FAILED, Common.Properties.Resources.MSG_DLG_ERR_TITLE, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void createRule(bool doAllow) { var createTempRule = (bool)togTempRule.IsChecked; var createWithAdvancedOptions = !expand.IsExpanded; bool success; var activeConn = (CurrentConn)lstConnections.SelectedItem; if (activeConn is null) { return; } if ((!OptionsView.IsProtocolChecked) && (OptionsView.IsLocalPortChecked || OptionsView.IsTargetPortChecked)) { MessageBox.Show(Messages.MSG_RULE_PROTOCOL_NEEDED, Messages.MSG_DLG_ERR_TITLE, MessageBoxButton.OK, MessageBoxImage.Error); return; } string[] services = null; if (OptionsView.IsServiceRuleChecked) { if (activeConn.PossibleServices != null && activeConn.PossibleServices.Length > 0) { ServicesForm sf = new ServicesForm(activeConn); if (!(bool)sf.ShowDialog()) { return; } services = sf.SelectedServices; } else { services = new[] { activeConn.CurrentService }; } } var ruleName = String.Format(Messages.RULE_NAME_FORMAT, activeConn.CurrentServiceDesc ?? activeConn.Description); if (doAllow) { success = createAllowRule(activeConn, services, createWithAdvancedOptions, createTempRule, ruleName); } else { success = createBlockRule(activeConn, services, createWithAdvancedOptions, createTempRule, ruleName); } if (success) { LogHelper.Info("New rule for connection successfully created!"); if (!createWithAdvancedOptions) { SkipAllEntriesFromPath(activeConn.Path); } else { SkipAllEntriesFromRules(); } if (((App)Application.Current).Connections.Count == 0) { LogHelper.Debug("No connections left; closing notification window."); HideWindowState(); } } else { MessageBox.Show(Messages.MSG_RULE_FAILED, Messages.MSG_DLG_ERR_TITLE, MessageBoxButton.OK, MessageBoxImage.Error); } }