Exemplo n.º 1
0
        private TeleportClientData PerformFirstMessageAuthentication(EndPoint sender, TeleportReader reader)
        {
            TeleportClientData clientData;
            var  header      = reader.ReadByte();
            var  isFirstAuth = (header & 1) == 0;
            byte authKey;
            uint clientId;

            if (isFirstAuth)
            {
                authKey  = 13; // TODO: Randomize
                clientId = _nextClientId;
                _nextClientId++;
                clientData = new TeleportClientData()
                {
                    endpoint        = sender,
                    isAuthenticated = true,
                    authKey         = authKey,
                    clientId        = clientId,
                };
                _clientDataByEndpoint[sender] = clientData;
                _clientDataById[clientId]     = clientData;
                Send((w) =>
                {
                    w.Write(TeleportMsgTypeIds.Handshake);
                    w.Write(authKey);
                    w.Write(clientId);
                });
                OnClientConnected(clientId, sender);
            }
            else
            {
                authKey    = (byte)(header >> 1);
                clientId   = reader.ReadUInt32();
                clientData = _clientDataById[clientId];
                if (authKey != clientData.authKey)
                {
                    throw new Exception("Auth key mismatches");
                }
            }
            return(clientData);
        }
Exemplo n.º 2
0
 private void ProcessHandshake(TeleportReader reader)
 {
     _authKey         = reader.ReadByte();
     _clientId        = reader.ReadUInt32();
     _isAuthenticated = true;
 }