internal void AddConnection(double now, NetConnection conn) { conn.SetStatus(NetConnectionStatus.Connecting, "Connecting"); if (m_connections.Contains(conn)) { // already added conn.m_approved = true; // just to be sure // TODO: is this really needed? return; } LogWrite("Adding connection " + conn); // send response; even if connected var responseBuffer = GetTempBuffer(); responseBuffer.Write(m_localRndSignature); responseBuffer.Write(conn.m_localRndSeqNr); responseBuffer.Write(conn.m_remoteRndSignature); responseBuffer.Write(conn.m_remoteRndSeqNr); double localTimeSent = conn.m_connectLocalSentTime; responseBuffer.Write(localTimeSent); double remoteTimeRecv = conn.m_connectRemoteRecvTime; responseBuffer.Write(remoteTimeRecv); double remoteTimeSent = NetTime.Now + m_localTimeOffset; responseBuffer.Write(remoteTimeSent); if (conn.LocalHailData != null) { responseBuffer.Write(conn.LocalHailData); } conn.m_handshakeInitiated = remoteTimeSent; conn.SendSingleUnreliableSystemMessage(NetSystemType.ConnectResponse, responseBuffer); conn.m_approved = true; m_connections.Add(conn); m_connectionLookup.Add(conn.m_remoteEndPoint, conn); m_pendingLookup.Remove(conn.m_remoteEndPoint); }