diff options
Diffstat (limited to 'embeddable-dll-service/csharp/Program.cs')
-rw-r--r-- | embeddable-dll-service/csharp/Program.cs | 44 |
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 { |