/// <summary> /// Initializes the Erebus libraries. /// </summary> public static void Run() { HDP.Register(); SSMP.Register(); CNP.Register(); PlatformServiceProvider.RegisterService <VerificationKeyProvider>(); }
public ChatWindow(SSMP ssmp) { Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\472\Erebus\Client\Recent", ssmp.Endpoint.Value.Address.ToString(), DateTime.Now.Ticks); App.UsersTSM.RunSafe(() => App.RecentUpdate = true); InitializeComponent(); DataContext = this; Title = "Secure chat with " + ssmp.Endpoint.Value.Address.ToString(); chat = ssmp; list.ItemsSource = messages; chat.MessageReceived += (sender, e) => { dynamic ad = null; if (e.HasAttachment) { var path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); Directory.CreateDirectory(path); File.WriteAllBytes(path += "\\" + e.Attachment.Item1, e.Attachment.Item2); ad = Tuple.Create(path, e.Attachment.Item1, img_ext.Contains(Path.GetExtension(e.Attachment.Item1).ToLower())); } Dispatcher.Invoke(() => messages.Add(new Message { Text = e.Message, Received = true, AttachmentData = ad, Timestamp = DateTime.Now })); }; chat.ConnectionClosed += (sender, e) => Dispatcher.Invoke(Close); }
/// <summary> /// Initializes the Erebus libraries. /// </summary> public static void Run() { HDP.Register(); SSMP.Register(); CNP.Register(); PlatformServiceProvider.RegisterService <VerificationKeyProvider>(); Log.EntryRecorded += (sender, e) => logFileTsm.RunSafe(() => { using (var w = new FileWriter(logFile, true)) using (var p = new PrintWriter(w)) { p.Println($"[{DateTime.Now}] [{sender}/{e.Severity}]: {e.Message}"); p.Flush(); } }); Log.EntryRecorded += (sender, e) => { switch (e.Severity) { case LogEntrySeverity.Info: global::Android.Util.Log.Info(sender.ToString(), e.Message); break; case LogEntrySeverity.Warning: global::Android.Util.Log.Warn(sender.ToString(), e.Message); break; case LogEntrySeverity.Error: global::Android.Util.Log.Error(sender.ToString(), e.Message); break; case LogEntrySeverity.Fatal: global::Android.Util.Log.Error(sender.ToString(), "FATAL: " + e.Message); break; } }; }
static void Main(string[] args) { Log.EntryRecorded += (sender, e) => Console.WriteLine($"{sender} ({e.Severity}): {e.Message}"); VerificationKeyProvider.Initialize("keyinfo.dat", "hello world"); var vkp = new VerificationKeyProvider(); Initialization.Run(); SSMP ssmp = null; SSMP.InvitationReceived += (sender, e) => { if (ssmp == null) { ssmp = e.Accept(); } ssmp.MessageReceived += Ssmp_MessageReceived; ssmp.ConnectionClosed += (_sender, _e) => ssmp = null; }; var ei = new ErebusInstance(new ErebusAddress(Console.ReadLine())); ei.Services = new[] { HDPService.SSMP }; var l = new TCPIPConnectionListener(int.Parse(Console.ReadLine()), ei); while (true) { try { var cmd = Console.ReadLine().Split(' '); switch (cmd[0]) { case "addlink": new ErebusLink(TCPIPConnectionUtils.Connect(cmd[1], int.Parse(cmd[2])), ei, false); break; case "listlink": foreach (var link in ei.Links) { Console.WriteLine(link.RemoteAddress); } break; case "hdp": var hdp = new HDP(ei, HDPService.SSMP); hdp.SendRequest(ErebusAddress.Broadcast); hdp.InitClose(); break; case "ssmp": ssmp = new SSMP(ei, new ErebusAddress(cmd[1])); ssmp.MessageReceived += Ssmp_MessageReceived; break; case "msg": ssmp?.SendMessage(cmd.Skip(1).Aggregate((x, y) => x + " " + y)); break; case "addkey": var addr = new ErebusAddress(cmd[1]); vkp.RemoveKeyPair(addr); var key = vkp.CreatePrivateKey(); Console.WriteLine("Key: " + key.Item2.Select(x => x.ToString()).Aggregate((x, y) => x + "," + y)); Console.Write("Please copy other key to clipboard, then press <enter> . . ."); Console.ReadLine(); vkp.AddKeyPair(addr, key.Item1, Clipboard.GetText().Split(',').Select(x => byte.Parse(x)).ToArray()); break; case "removekey": vkp.RemoveKeyPair(new ErebusAddress(cmd[1])); break; case "close": ssmp?.Dispose(); ssmp = null; break; case "exit": return; } } catch (Exception e) { Console.WriteLine(e); } } }
private void chat(object sender, RoutedEventArgs e) => Task.Run(() => { var ssmp = new SSMP(App.Instance, Dispatcher.Invoke(() => (list.SelectedItem as User).Address)); Dispatcher.Invoke(() => new ChatWindow(ssmp).Show()); });