public override void OnReceiveFirstMessage(Message message) { message.GetUShort(); //OS var version = message.GetUShort(); Rsa.Decrypt(message); uint[] key = new uint[4]; key[0] = message.GetUInt(); key[1] = message.GetUInt(); key[2] = message.GetUInt(); key[3] = message.GetUInt(); XteaKey = key; HasXteaEncryption = true; var isGm = message.GetBool(); var accountName = message.GetString(); var playerName = message.GetString(); var password = message.GetString(); message.ReaderIndex += 6; if (version != Constants.ClientVersionNumber) { Disconnect(0x0A, "This server requires client version " + Constants.ClientVersion + "."); return; } Disconnect(0x14, "Under construction."); }
public void TestMessagePutGet() { Message message = new Message(); Assert.AreEqual(0, message.ReadableBytes); message.PutByte(byte.MaxValue); message.PutByte(byte.MinValue); message.PutUShort(ushort.MaxValue); message.PutUShort(ushort.MinValue); message.PutShort(short.MaxValue); message.PutShort(short.MinValue); message.PutUInt(uint.MaxValue); message.PutUInt(uint.MinValue); message.PutInt(int.MaxValue); message.PutInt(int.MinValue); message.PutULong(ulong.MaxValue); message.PutULong(ulong.MinValue); message.PutLong(long.MaxValue); message.PutLong(long.MinValue); message.PutString(string.Empty); message.PutString("123"); Assert.AreEqual(65, message.ReadableBytes); Assert.AreEqual(byte.MaxValue, message.GetByte()); Assert.AreEqual(byte.MinValue, message.GetByte()); Assert.AreEqual(ushort.MaxValue, message.GetUShort()); Assert.AreEqual(ushort.MinValue, message.GetUShort()); Assert.AreEqual(short.MaxValue, message.GetShort()); Assert.AreEqual(short.MinValue, message.GetShort()); Assert.AreEqual(uint.MaxValue, message.GetUInt()); Assert.AreEqual(uint.MinValue, message.GetUInt()); Assert.AreEqual(int.MaxValue, message.GetInt()); Assert.AreEqual(int.MinValue, message.GetInt()); Assert.AreEqual(ulong.MaxValue, message.GetULong()); Assert.AreEqual(ulong.MinValue, message.GetULong()); Assert.AreEqual(long.MaxValue, message.GetLong()); Assert.AreEqual(long.MinValue, message.GetLong()); Assert.AreEqual(string.Empty, message.GetString()); Assert.AreEqual("123", message.GetString()); Assert.AreEqual(0, message.ReadableBytes); }
public virtual void OnReceiveMessage(Message message) { if (_hasChecksum && message.GetUInt() != Adler.Generate(message)) throw new Exception("Invalid message checksum."); if (_hasXteaEncryption) { Xtea.Decrypt(message, _xteaKey); var length = message.GetUShort(); message.WriterIndex = message.ReaderIndex + length; } }
public override void OnReceiveFirstMessage(Message message) { message.GetUShort(); var version = message.GetUShort(); message.ReaderIndex += 12; Rsa.Decrypt(message); uint[] key = new uint[4]; key[0] = message.GetUInt(); key[1] = message.GetUInt(); key[2] = message.GetUInt(); key[3] = message.GetUInt(); XteaKey = key; HasXteaEncryption = true; if (version != Constants.ClientVersionNumber) { Disconnect(0x0A, "This server requires client version " + Constants.ClientVersion + "."); return; } var login = message.GetString(); var password = message.GetString(); if (login.Length < 5) { Disconnect(0x0A, "Invalid Account Name."); return; } var account = Server.Instance.AccountRepository.Load(login); if (account == null) { Disconnect(0x0A, "Account name or password is not correct."); return; } var output = Server.OutputMessagePool.Get(Connection, false); if (output != null) { var serverIp = Server.ServiceManager.IpAddresses.First().Key; foreach (var keyPair in Server.ServiceManager.IpAddresses) { if ((keyPair.Key & keyPair.Value) == (Connection.IpAddress & keyPair.Value)) { serverIp = keyPair.Key; break; } } output.PutByte(0x64); output.PutByte((byte)account.Characters.Count); foreach (var character in account.Characters) { output.PutString(character); output.PutString(Server.ConfigManager.WorldName); output.PutUInt(serverIp); output.PutUShort((ushort)Server.ConfigManager.GamePort); } output.PutUShort(account.PremiumDaysLeft); Connection.Write(output); } Connection.Close(); }