using System; using System.Collections.Generic; using System.IO; using System.Text; using Capnp; using FabAccessAPI.Schema; using S22.Sasl; namespace FabAccessAPI { class Connection { public bool Connect(Greeting clientInfo, Stream stream) { var message = new Message() { Greet = clientInfo, which = Message.WHICH.Greet, }; var msg = MessageBuilder.Create(); var root = msg.BuildRoot(); message.serialize(root); var pump = new FramePump(stream); pump.Send(msg.Frame); var frame = Framing.ReadSegments(stream); var deserializer = DeserializerState.CreateRoot(frame); var reader = new Message.READER(deserializer); switch (reader.which) { case Message.WHICH.Greet: var serverInfo = reader.Greet; Console.WriteLine($"Server: {serverInfo.Host}"); Console.WriteLine($"Version: {serverInfo.Program}"); Console.WriteLine($"API-Version: {serverInfo.Major}.{serverInfo.Minor}"); break; case Message.WHICH.Leave: var leave_inner = reader.Leave; switch (leave_inner.TheReason) { case Leave.Reason.incompatible: Console.WriteLine($"Connection aborted due to incompatible API: {leave_inner.Message}"); break; case Leave.Reason.other: Console.WriteLine($"Connection aborted: {leave_inner.Message}"); break; default: Console.WriteLine($"Got invalid This should never happen: {leave_inner.Message}"); break; } return false; default: Console.WriteLine($"Got unexpected message: {reader.which}"); break; } //FIXME: Replace the hardcoded credentials SaslMechanism m = SaslFactory.Create("PLAIN"); m.Properties.Add("Username", "test"); m.Properties.Add("Password", "secret"); var authRequest = new Request() { Mechanism = m.Name, }; var auth = new AuthMessage() { }; return true; } } }