netmonitor/NetMonitorServer/Actions/SetOpenVPNService.cs

121 lines
4.3 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
2015-03-04 23:21:34 +01:00
using System.Diagnostics;
using BlubbFish.Utils;
using NetMonitorServer.Controller;
2015-03-04 23:21:34 +01:00
namespace NetMonitorServer {
class SetOpenVPNService : ActionClass {
internal override bool Run(Queue<string> arguments) {
2015-11-16 01:10:59 +01:00
this.addLog("SetOpenVPNService.Run", "Starte OpenVpn Befehl", LogLevel.Notice);
2015-03-04 23:21:34 +01:00
if(arguments.Count < 2) {
this.sendMessage("To less arguments for SetOpenVpnService class");
return false;
}
switch(arguments.Dequeue().ToLower()) {
case "status":
2015-11-16 01:10:59 +01:00
return this.getVpnStatus(arguments);
2015-03-04 23:21:34 +01:00
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<string> arguments) {
2015-11-16 01:10:59 +01:00
if(arguments.Count != 1) {
this.sendMessage("To less arguments for SetOpenVpnService.getVpnStop");
return false;
}
2015-03-04 23:21:34 +01:00
string config = arguments.Dequeue();
2015-11-16 01:10:59 +01:00
this.addLog("SetOpenVPNService.getVpnStop", "Stoppe OpenVPN: "+config, LogLevel.Notice);
2015-03-04 23:21:34 +01:00
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");
2015-11-16 01:10:59 +01:00
return true;
2015-03-04 23:21:34 +01:00
}
private bool getVpnStart(Queue<string> arguments) {
2015-11-16 01:10:59 +01:00
if(arguments.Count != 1) {
this.sendMessage("To less arguments for SetOpenVpnService.getVpnStart");
return false;
}
2015-03-04 23:21:34 +01:00
string config = arguments.Dequeue();
2015-11-16 01:10:59 +01:00
this.addLog("SetOpenVPNService.getVpnStart", "Starte OpenVPN: " + config, LogLevel.Notice);
2015-03-04 23:21:34 +01:00
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
2015-11-16 01:10:59 +01:00
string ovpn = Factory.getSettings().getValue("program", "openvpn");
2015-03-04 23:21:34 +01:00
ovpn = (ovpn.EndsWith("\\")) ? ovpn : ovpn + "\\";
try {
OpenVpnController o = new OpenVpnController(ovpn, config);
2015-11-16 01:10:59 +01:00
o.EventLog += this.addLog;
2015-03-04 23:21:34 +01:00
Model.openvpnInstances.Add(config, o);
o.Start();
} catch(Exception e) {
this.sendMessage("Fehler beim Starten von OpenVPN: " + e.Message);
return false;
}
}
2015-11-16 01:10:59 +01:00
this.sendMessage("true");
return true;
2015-03-04 23:21:34 +01:00
}
2015-11-16 01:10:59 +01:00
private bool getVpnStatus(Queue<string> arguments) {
2015-03-04 23:21:34 +01:00
if(arguments.Count != 1) {
2015-11-16 01:10:59 +01:00
this.sendMessage("To less arguments for SetOpenVpnService.getVpnStatus");
2015-03-04 23:21:34 +01:00
return false;
}
string config = arguments.Dequeue();
2015-11-16 01:10:59 +01:00
this.addLog("SetOpenVPNService.getVpnStatus", "Status des OpenVPN: " + config, LogLevel.Notice);
2015-03-04 23:21:34 +01:00
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";
}
}
2015-03-04 23:21:34 +01:00
} catch(Exception e) {
this.sendMessage(e.Message);
return false;
}
if(run == "") {
this.sendMessage("unknown");
return false;
}
this.sendMessage("[" + run + "]");
return true;
}
2015-03-04 23:21:34 +01:00
}
}