112 lines
3.6 KiB
C#
112 lines
3.6 KiB
C#
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<string> 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<string> 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<string> 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<string> 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;
|
|
}
|
|
}
|
|
}
|