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);
        }