using System.Net.NetworkInformation; using System.Windows.Forms; namespace Trigger.Tasks { class ProxyHska : TaskPlugin { #region Properties private Main Main; private Log Log; private TreeNode tnProxy; private static System.Net.WebProxy proxySettings = new System.Net.WebProxy( "proxy.hs-karlsruhe.de:8888", true, new string[]{@"\*\.hs-karlsruhe\.de", @"\*\.local", @"localhost"}); private const string InterfaceVPN = "Cisco Systems VPN Adapter"; private const string InterfaceWLAN = "{C08419E3-B090-4AE8-B17F-051FE8A882B6}"; #endregion #region Methods public override bool Init(Main Main) { return Init(Main, new System.Diagnostics.Stopwatch()); } public override bool Init(Main Main, System.Diagnostics.Stopwatch swInit) { if (!Main.EventMgr.PluginExists()) { this.Log.LogLine("Task \"ProxyHsKA\" is missing EventPlugin \"Network\"!", Log.Type.Error); return false; } this.Main = Main; this.Log = Main.Log; swInit.Stop(); Events.Network networkEvents = Main.EventMgr.GetPlugin(); swInit.Start(); networkEvents.NetworkAvailabilityChanged += event_AvailabilityChanged; networkEvents.NetworkInterfaceAdded += event_InterfaceAdded; networkEvents.NetworkInterfaceRemoved += event_InterfaceRemoved; ProxyCheck(); return true; } public override void Dispose() { Events.Network networkEvents = this.Main.EventMgr.GetPlugin(); networkEvents.NetworkAvailabilityChanged -= event_AvailabilityChanged; networkEvents.NetworkInterfaceAdded -= event_InterfaceAdded; networkEvents.NetworkInterfaceRemoved -= event_InterfaceRemoved; } private void ProxyEnable() { Actions.Network.ProxyEnable(proxySettings); this.Log.LogLineDate("--> Proxy enabled", Log.Type.Action); } private void ProxyDisable() { Actions.Network.ProxyDisable(); this.Log.LogLineDate("--> Proxy disabled", Log.Type.Action); } /// /// Checks the current connections (s) and sets Proxy accordingly /// private bool ProxyCheck() { bool proxy = Status.Network.ProxyConfiguration.Address != null; foreach (NetworkInterface ni in Status.Network.AllNetworkInterfaces) { if (Status.Network.NetworkInterfaceHasDnsSuffix(ni, "HS-Karlsruhe.de")) { if (!proxy) ProxyEnable(); return true; } } if (proxy) ProxyDisable(); return false; } public override TreeNode GetStatus(TreeView tv) { TreeNode tn = new TreeNode("ProxyHsKa"); if (Status.Network.ProxyConfiguration.Address != null) tnProxy = tn.Nodes.Add("Proxy is enabled"); else tnProxy = tn.Nodes.Add("Proxy is disabled"); return tn; } #endregion #region Event handlers private void event_InterfaceAdded(object sender, Events.EventArgsValue e) { if (Status.Network.NetworkInterfaceHasDnsSuffix(e.Value, "HS-Karlsruhe.de")) ProxyEnable(); } private void event_InterfaceRemoved(object sender, Events.EventArgsValue e) { if (Status.Network.NetworkInterfaceHasDnsSuffix(e.Value, "HS-Karlsruhe.de")) ProxyDisable(); } void event_AvailabilityChanged(object sender, Events.EventArgsValue e) { if (e.Value == false) // only proceed when connecting to a network return; if (/*Status.Network.NetworkInterfaceHasIP(InterfaceWLAN, "193.196.") || */Status.Network.NetworkInterfaceHasDnsSuffix(InterfaceWLAN, "HS-Karlsruhe.de")) ProxyEnable(); else ProxyDisable(); } void TreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node != tnProxy) return; if (ProxyCheck()) tnProxy.Text = "Proxy is enabled"; else tnProxy.Text = "Proxy is disabled"; } #endregion } }