Add a hacked in restarting system.
This commit is contained in:
parent
ee26a51b34
commit
a7ce7fb3c8
@ -9,6 +9,9 @@ namespace MelonVPNCore
|
|||||||
{
|
{
|
||||||
public static class DaemonSocketServer
|
public static class DaemonSocketServer
|
||||||
{
|
{
|
||||||
|
private static Process currentVpnProcess = null;
|
||||||
|
private static bool shouldBeRunning = false;
|
||||||
|
|
||||||
public static void StartServer()
|
public static void StartServer()
|
||||||
{
|
{
|
||||||
IPHostEntry host = Dns.GetHostEntry("localhost");
|
IPHostEntry host = Dns.GetHostEntry("localhost");
|
||||||
@ -21,7 +24,6 @@ namespace MelonVPNCore
|
|||||||
listener.Bind(localEndPoint);
|
listener.Bind(localEndPoint);
|
||||||
listener.Listen(10);
|
listener.Listen(10);
|
||||||
|
|
||||||
Process currentVpnProcess = null;
|
|
||||||
string lastClientUpdate = Messages.EOF;
|
string lastClientUpdate = Messages.EOF;
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
@ -47,7 +49,7 @@ namespace MelonVPNCore
|
|||||||
else if (data == Messages.StatusMsg)
|
else if (data == Messages.StatusMsg)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Status requested");
|
Console.WriteLine("Status requested");
|
||||||
if (currentVpnProcess != null && !currentVpnProcess.HasExited)
|
if (isProcessOnline(currentVpnProcess) || shouldBeRunning)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Sending response: online");
|
Console.WriteLine("Sending response: online");
|
||||||
Client.SendDataMessage(DataMessage.Online, true);
|
Client.SendDataMessage(DataMessage.Online, true);
|
||||||
@ -62,28 +64,22 @@ namespace MelonVPNCore
|
|||||||
}
|
}
|
||||||
else if (data == Messages.StartMsg)
|
else if (data == Messages.StartMsg)
|
||||||
{
|
{
|
||||||
if (currentVpnProcess == null)
|
if (! isProcessOnline(currentVpnProcess))
|
||||||
{
|
{
|
||||||
|
shouldBeRunning = true;
|
||||||
Console.WriteLine("Starting VPN");
|
Console.WriteLine("Starting VPN");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine("Starting embedded process");
|
Console.WriteLine("Starting embedded process");
|
||||||
currentVpnProcess = new Process
|
StartEProcess(true);
|
||||||
{
|
|
||||||
StartInfo = new ProcessStartInfo("simple-vpn", "client /etc/melon-vpn/client.cfg")
|
|
||||||
};
|
|
||||||
currentVpnProcess.Exited += delegate
|
|
||||||
{
|
|
||||||
Client.SendDataMessage(DataMessage.Offline, true);
|
|
||||||
currentVpnProcess = null;
|
|
||||||
};
|
|
||||||
currentVpnProcess.Start();
|
|
||||||
Console.WriteLine("Sending online reply");
|
Console.WriteLine("Sending online reply");
|
||||||
Thread.Sleep(1500);
|
Thread.Sleep(1500);
|
||||||
Client.SendDataMessage(DataMessage.Online, true);
|
Client.SendDataMessage(DataMessage.Online, true);
|
||||||
|
currentVpnProcess.EnableRaisingEvents = true;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
shouldBeRunning = false;
|
||||||
Console.WriteLine("There was an error. But I fixed it.");
|
Console.WriteLine("There was an error. But I fixed it.");
|
||||||
Console.WriteLine("It looked like this: " + e);
|
Console.WriteLine("It looked like this: " + e);
|
||||||
currentVpnProcess = null;
|
currentVpnProcess = null;
|
||||||
@ -98,17 +94,17 @@ namespace MelonVPNCore
|
|||||||
}
|
}
|
||||||
else if (data == Messages.StopMsg)
|
else if (data == Messages.StopMsg)
|
||||||
{
|
{
|
||||||
if (currentVpnProcess != null)
|
shouldBeRunning = false;
|
||||||
|
bool haderr = false;
|
||||||
|
if (isProcessOnline(currentVpnProcess))
|
||||||
{
|
{
|
||||||
Console.WriteLine("Stopping VPN");
|
Console.WriteLine("Stopping VPN");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
currentVpnProcess.EnableRaisingEvents = false;
|
||||||
Console.WriteLine("Stopping embedded process");
|
Console.WriteLine("Stopping embedded process");
|
||||||
currentVpnProcess.Kill();
|
currentVpnProcess.Kill();
|
||||||
currentVpnProcess = null;
|
currentVpnProcess = null;
|
||||||
Console.WriteLine("Sending offline reply");
|
|
||||||
Client.SendDataMessage(DataMessage.Offline, true);
|
|
||||||
Client.SendCustomMessage(Messages.ClientListEmptyMsg, true);
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -117,12 +113,19 @@ namespace MelonVPNCore
|
|||||||
currentVpnProcess = null;
|
currentVpnProcess = null;
|
||||||
Client.SendDataMessage(DataMessage.Error, true);
|
Client.SendDataMessage(DataMessage.Error, true);
|
||||||
Client.SendCustomMessage(Messages.ClientListEmptyMsg, true);
|
Client.SendCustomMessage(Messages.ClientListEmptyMsg, true);
|
||||||
|
haderr = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("VPN already stopped");
|
Console.WriteLine("VPN already stopped");
|
||||||
}
|
}
|
||||||
|
if (!haderr)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Sending offline reply");
|
||||||
|
Client.SendDataMessage(DataMessage.Offline, true);
|
||||||
|
Client.SendCustomMessage(Messages.ClientListEmptyMsg, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Client.SendDataMessage(DataMessage.Blank, true);
|
Client.SendDataMessage(DataMessage.Blank, true);
|
||||||
@ -136,5 +139,57 @@ namespace MelonVPNCore
|
|||||||
Console.WriteLine(e);
|
Console.WriteLine(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool isProcessOnline(Process p)
|
||||||
|
{
|
||||||
|
if (p == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (p.HasExited)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CurrentVpnProcess_Exited(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Restarting embedded process");
|
||||||
|
currentVpnProcess = null;
|
||||||
|
Thread.Sleep(1500);
|
||||||
|
StartEProcess(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void StartEProcess(bool reraisee)
|
||||||
|
{
|
||||||
|
if (shouldBeRunning)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
currentVpnProcess = new Process
|
||||||
|
{
|
||||||
|
StartInfo = new ProcessStartInfo("simple-vpn", "client /etc/melon-vpn/client.cfg")
|
||||||
|
};
|
||||||
|
currentVpnProcess.Start();
|
||||||
|
currentVpnProcess.EnableRaisingEvents = false;
|
||||||
|
currentVpnProcess.Exited += CurrentVpnProcess_Exited;
|
||||||
|
Thread.Sleep(1500);
|
||||||
|
currentVpnProcess.EnableRaisingEvents = true;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine("There was an error. But I fixed it.");
|
||||||
|
Console.WriteLine("It looked like this: " + e);
|
||||||
|
if (reraisee) { throw e; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user