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) { if(arguments.Count < 2) { this.sendMessage("To less arguments for SetOpenVpnService class"); return false; } switch(arguments.Dequeue().ToLower()) { case "status": return this.getVpn(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) { string config = arguments.Dequeue(); 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 false; } private bool getVpnStart(Queue arguments) { string config = arguments.Dequeue(); 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; } this.sendMessage("true"); return true; } else { //Noch nicht in der liste string ovpn = InIReader.getInstance("config.ini").getValue("program", "openvpn"); ovpn = (ovpn.EndsWith("\\")) ? ovpn : ovpn + "\\"; try { OpenVpnController o = new OpenVpnController(ovpn, config); 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 getVpn(Queue arguments) { if(arguments.Count != 1) { this.sendMessage("To less arguments for SetOpenVpnService.getVpn class"); return false; } string config = arguments.Dequeue(); 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; } } }