public Message CreateAuthMessage(INodeConnection connection, TrustedNodeInfo messageTo) { Message p = new Message(network, MessageType.Auth); p.To = messageTo.NodeID; AuthInfo c = new AuthInfo(); c.ProtocolVersion = Core.ProtocolVersion; c.NetworkName = network.NetworkName; c.NickName = network.LocalNode.NickName; p.Content = c; return p; }
/* internal void ProcessPongMessage (Node messageFrom, ulong timestamp) {*/ //TODO: Pinging/ponging is a total mess /* if (timestamp == messageFrom.TimeOfLastPing) { messageFrom.PingTime = DateTime.Now.Subtract(messageFrom.TimeOfLastPing).Milliseconds; messageFrom.RaisePongReceived(messageFrom.PingTime); //messageFrom.TimeOfLastPing = null; } else { // TODO: Do something? }*/ // } /* internal void ProcessAuthMessage (LocalNodeConnection connection, Node messageFrom, AuthInfo info) { ProcessAuthMessage (connection, messageFrom, info, false); } */ internal void ProcessAuthMessage(LocalNodeConnection connection, Node messageFrom, AuthInfo c, bool isReply) { // Some checks: // XXX: Isn't this checked elsewhere? if (c.NetworkName != network.NetworkName) { InvalidNetworkNameError error = new InvalidNetworkNameError(c.NetworkName, network.NetworkName); network.SendCriticalError (messageFrom, error); throw error.ToException(); } if (c.ProtocolVersion != Core.ProtocolVersion) { VersionMismatchError e = new VersionMismatchError (c.ProtocolVersion.ToString()); network.SendCriticalError (messageFrom, e); throw new VersionMismatchError().ToException(); } // Update node details: Node node = network.Nodes[messageFrom.NodeID]; node.NickName = c.NickName; if (isReply == false) { connection.ConnectionState = ConnectionState.Authenticating; network.SendAuthReply (connection, messageFrom); } else { connection.SendReady (); } }