aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/embeddable-dll-service/csharp/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'embeddable-dll-service/csharp/Program.cs')
-rw-r--r--embeddable-dll-service/csharp/Program.cs44
1 files changed, 40 insertions, 4 deletions
diff --git a/embeddable-dll-service/csharp/Program.cs b/embeddable-dll-service/csharp/Program.cs
index 27cefdc9..d99e66fd 100644
--- a/embeddable-dll-service/csharp/Program.cs
+++ b/embeddable-dll-service/csharp/Program.cs
@@ -8,19 +8,49 @@ using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Diagnostics;
+using System.Threading;
+using System.Runtime.InteropServices;
namespace Tunnel
{
class Program
{
- static void Main(string[] args)
+
+ [DllImport("kernel32.dll")]
+ private static extern bool SetConsoleCtrlHandler(SetConsoleCtrlEventHandler handler, bool add);
+ private delegate bool SetConsoleCtrlEventHandler(UInt32 signal);
+
+ public static void Main(string[] args)
{
if (args.Length == 2 && args[0] == "/service")
{
Service.Run(args[1]);
return;
}
+
+ var baseDirectory = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
+ var configFile = Path.Combine(baseDirectory, "demobox.conf");
+ var logFile = Path.Combine(baseDirectory, "log.bin");
+
+ try { File.Delete(logFile); } catch { }
+ Ringlogger log = new Ringlogger(logFile, "GUI");
+
+ var logPrintingThread = new Thread(() =>
+ {
+ var cursor = Ringlogger.CursorAll;
+ while (Thread.CurrentThread.IsAlive)
+ {
+ var lines = log.FollowFromCursor(ref cursor);
+ foreach (var line in lines)
+ Console.WriteLine(line);
+ Thread.Sleep(300);
+ }
+ });
+ logPrintingThread.Start();
+
+ log.Write("Generating keys");
var keys = Keypair.Generate();
+ log.Write("Exchanging keys with demo server");
var client = new TcpClient("demo.wireguard.com", 42912);
var stream = client.GetStream();
var reader = new StreamReader(stream, Encoding.UTF8);
@@ -37,15 +67,21 @@ namespace Tunnel
if (status != "OK")
throw new InvalidOperationException(String.Format("Server status is {0}", status));
+ SetConsoleCtrlHandler(delegate
+ {
+ Service.Remove(configFile);
+ Environment.Exit(0);
+ return true;
+ }, true);
+
+ log.Write("Writing config file to disk");
var configFileContents = String.Format("[Interface]\nPrivateKey = {0}\nAddress = {1}/24\nDNS = 8.8.8.8, 8.8.4.4\n\n[Peer]\nPublicKey = {2}\nEndpoint = demo.wireguard.com:{3}\nAllowedIPs = 0.0.0.0/0\n", keys.Private, internalIP, serverPubkey, serverPort);
- var configFile = Path.Combine(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName), "demobox.conf");
File.WriteAllText(configFile, configFileContents);
try
{
Service.Add(configFile);
- Console.WriteLine("=== Press enter to exit ===");
- Console.ReadLine();
+ logPrintingThread.Join();
}
finally
{