using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using BlubbFish.Utils; using NetMonitorServer.Controller; namespace NetMonitorServer { class SetOpenVPNService : ActionClass { internal override bool Run(Queue arguments) { this.addLog("SetOpenVPNService.Run", "Starte OpenVpn Befehl", LogLevel.Notice); if(arguments.Count < 2) { this.sendMessage("To less arguments for SetOpenVpnService class"); return false; } switch(arguments.Dequeue().ToLower()) { case "status": return this.getVpnStatus(arguments); case"start": return this.getVpnStart(arguments); case"stop": return this.getVpnStop(arguments); default: this.sendMessage("Wrong arguments for service on SetOpenVpnService class"); return false; } } private bool getVpnStop(Queue arguments) { if(arguments.Count != 1) { this.sendMessage("To less arguments for SetOpenVpnService.getVpnStop"); return false; } string config = arguments.Dequeue(); this.addLog("SetOpenVPNService.getVpnStop", "Stoppe OpenVPN: "+config, LogLevel.Notice); if(Model.openvpnInstances.Keys.Contains(config)) { //schon in der Liste OpenVpnController o = Model.openvpnInstances[config]; if(o.HasExited) { //läuft nicht! Fehler! this.sendMessage("Fehler! Openvpn schon beendet! " + config + " Config"); return false; } o.Kill(); } else { //Noch nicht in der liste this.sendMessage("Fehler! Openvpn noch nie gestartet! " + config + " Config"); return false; } this.sendMessage("true"); return true; } private bool getVpnStart(Queue arguments) { if(arguments.Count != 1) { this.sendMessage("To less arguments for SetOpenVpnService.getVpnStart"); return false; } string config = arguments.Dequeue(); this.addLog("SetOpenVPNService.getVpnStart", "Starte OpenVPN: " + config, LogLevel.Notice); if(Model.openvpnInstances.Keys.Contains(config)) { //schon in der Liste OpenVpnController o = Model.openvpnInstances[config]; if(!o.HasExited) { //läuft noch! Fehler! this.sendMessage("Fehler! Openvpn Läuft noch! " + config + " Config"); return false; } try { o.Start(); } catch(Exception e) { this.sendMessage("Fehler beim Starten von OpenVPN: " + e.Message); return false; } } else { //Noch nicht in der liste string ovpn = Factory.getSettings().getValue("program", "openvpn"); ovpn = (ovpn.EndsWith("\\")) ? ovpn : ovpn + "\\"; try { OpenVpnController o = new OpenVpnController(ovpn, config); o.EventLog += this.addLog; Model.openvpnInstances.Add(config, o); o.Start(); } catch(Exception e) { this.sendMessage("Fehler beim Starten von OpenVPN: " + e.Message); return false; } } this.sendMessage("true"); return true; } private bool getVpnStatus(Queue arguments) { if(arguments.Count != 1) { this.sendMessage("To less arguments for SetOpenVpnService.getVpnStatus"); return false; } string config = arguments.Dequeue(); this.addLog("SetOpenVPNService.getVpnStatus", "Status des OpenVPN: " + config, LogLevel.Notice); string run = ""; try { if(Model.openvpnInstances.Keys.Contains(config)) { OpenVpnController o = Model.openvpnInstances[config]; if(o.HasExited) { run = "disconnected"; } else if(o.Conntected) { run = "connected|" + o.Ip + "|" + o.Dhcp + "|" + o.DhcpLease + "|" + o.IpDate + "|" + o.SuccessDate; } else { run = "conntecting"; } } } catch(Exception e) { this.sendMessage(e.Message); return false; } if(run == "") { this.sendMessage("unknown"); return false; } this.sendMessage("[" + run + "]"); return true; } } }