/// <summary> /// Sets proxy according to current available networks and configurations rules /// </summary> private void SetProxyAccordingToNetwork(string configName) { if (configName != null) { log.Info("Set configuration " + configName); NetworkConfiguration configuration = m_configurations.Find((c) => c.Name == configName); configuration.ProxySettings.Configure(); // Evénement if (ProxyChanged != null) { ProxyChanged(configName, null, configuration.ProxySettings, "Setting forced"); } } else { NetworkInfo matchingNetwork = null; NetworkConfiguration matchingConfiguration = null; RulesChecker.RulesCheckerResult result = new RulesChecker.RulesCheckerResult(); // Get current networks IList <NetworkInfo> currentNetworks = NetworkManager.ListAvailableNetworks(); _currentNetworks = currentNetworks; foreach (var networkInfo in currentNetworks) { log.Debug("Network " + networkInfo); } // Find matching configuration matchingConfiguration = FindMatchingConfiguration(currentNetworks, out result, out matchingNetwork); // Configurer le configuration en conséquence if (matchingConfiguration != null) { matchingConfiguration.ProxySettings.Configure(); } // Evénement if (ProxyChanged != null) { ProxyChanged(matchingConfiguration.Name, result.Reason != Reasons.DEFAULT ? matchingNetwork : null, matchingConfiguration.ProxySettings, result.ReasonString); } } }
/// <summary> /// Returns the configuration that matches the given network /// </summary> /// <param name="configurations"></param> public NetworkConfiguration FindMatchingConfiguration(IList <NetworkInfo> networks, out RulesChecker.RulesCheckerResult result, out NetworkInfo matchingNetwork) { int countMatches = 0; NetworkConfiguration matchingConfiguration = null; result = null; matchingNetwork = null; // Check each configuration foreach (NetworkConfiguration configuration in m_configurations) { using (log4net.ThreadContext.Stacks["NDC"].Push(String.Format("config {0}", configuration.Name))) { log.InfoFormat("Checking config {0}", configuration.Name); // Check each network foreach (NetworkInfo net in networks) { log.InfoFormat("Checking network: {0} (IP: {1}, DNS: {2})", net.IfName, string.Join(",", net.NetworkIP), string.Join(",", net.DNS)); RulesChecker rc = new RulesChecker(configuration.NetworkRulesSet); RulesChecker.RulesCheckerResult tempResult = rc.CheckRulesAgainstNetwork(net); if (tempResult.Match) { log.InfoFormat("Match #{1}: config {0}", configuration.Name, countMatches + 1); if (countMatches == 0) { result = tempResult; matchingConfiguration = configuration; matchingNetwork = net; } countMatches++; } } } } return(matchingConfiguration); }
/// <summary> /// Sets proxy according to current available networks and configurations rules /// </summary> private void SetProxyAccordingToNetwork(string configName) { if (configName != null) { log.Info("Set configuration " + configName); NetworkConfiguration configuration = m_configurations.Find((c) => c.Name == configName); configuration.ProxySettings.Configure(); // Evénement if (ProxyChanged != null) { ProxyChanged(configName, null, configuration.ProxySettings, "Setting forced"); } } else { NetworkInfo matchingNetwork = null; NetworkConfiguration matchingConfiguration = null; RulesChecker.RulesCheckerResult result = new RulesChecker.RulesCheckerResult(); // Get current networks IList<NetworkInfo> currentNetworks = NetworkManager.ListAvailableNetworks(); _currentNetworks = currentNetworks; foreach (var networkInfo in currentNetworks) { log.Debug("Network " + networkInfo); } // Find matching configuration matchingConfiguration = FindMatchingConfiguration(currentNetworks, out result, out matchingNetwork); // Configurer le configuration en conséquence if (matchingConfiguration != null) { matchingConfiguration.ProxySettings.Configure(); } // Evénement if (ProxyChanged != null) { ProxyChanged(matchingConfiguration.Name, result.Reason != Reasons.DEFAULT ? matchingNetwork : null, matchingConfiguration.ProxySettings, result.ReasonString); } } }