/* 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(); } }
internal void ProcessReadyMessage(LocalNodeConnection connection, Node messageFrom) { if (connection.ConnectionState != ConnectionState.Ready) { connection.NodeRemote.RemotelyUntrusted = false; connection.ConnectionState = ConnectionState.Ready; connection.RaiseConnectionReady(); connection.RemoteNodeInfo.LastConnected = DateTime.Now; Core.Settings.SyncNetworkInfoAndSave(); if (connection.ReadySent == false) { connection.SendReady(); } if (messageFrom.FinishedKeyExchange == false && messageFrom.SentKeyExchange == false) { messageFrom.CreateNewSessionKey(); } // The network needs to know about me this new connection, // any nodes I know about, memos, etc... so say hi to // everyone and let them know everything that I know. Message message = network.MessageBuilder.CreateHelloMessage(); message.To = Network.BroadcastNodeID; network.SendBroadcast(message); } else { // XXX: Do we need this? if (connection.ReadySent == false) { connection.SendReady(); } } }
/* 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 (); } }
internal void ProcessReadyMessage(LocalNodeConnection connection, Node messageFrom) { if (connection.ConnectionState != ConnectionState.Ready) { connection.NodeRemote.RemotelyUntrusted = false; connection.ConnectionState = ConnectionState.Ready; connection.RaiseConnectionReady(); connection.RemoteNodeInfo.LastConnected = DateTime.Now; Core.Settings.SyncNetworkInfoAndSave(); if (connection.ReadySent == false) { connection.SendReady(); } if (messageFrom.FinishedKeyExchange == false && messageFrom.SentKeyExchange == false) { messageFrom.CreateNewSessionKey(); } // The network needs to know about me this new connection, // any nodes I know about, memos, etc... so say hi to // everyone and let them know everything that I know. Message message = network.MessageBuilder.CreateHelloMessage (); message.To = Network.BroadcastNodeID; network.SendBroadcast (message); } else { // XXX: Do we need this? if (connection.ReadySent == false) { connection.SendReady(); } } }