public void ReceivePacket(byte[] pPacket) { int packetLength = pPacket.Length; byte[] safeGaurd = pPacket.QuickClone(); byte[] sendData = new byte[packetLength + 4]; if (Program.usingMapleCrypto) { MapleCustom.Encrypt(pPacket); } lock (_recvAES) { byte[] header = _recvAES.GetHeaderToServer(packetLength); _recvAES.Transform(pPacket); System.Buffer.BlockCopy(header, 0, sendData, 0, 4); } System.Buffer.BlockCopy(pPacket, 0, sendData, 4, packetLength); ReceiveRawPacket(sendData, safeGaurd); }
private void HandleData(RecBuffer pBuffer) { if (pBuffer.IsHeader) { byte[] headerData = pBuffer.Data; int packetSize = pBuffer.IsEncrypted ? MapleCrypt.GetPacketLength(headerData) : BitConverter.ToInt16(headerData, 0); pBuffer.Reset(false, packetSize); ReceivePacket(pBuffer); } else { if (pBuffer.IsEncrypted) { byte[] packetData = pBuffer.Data; lock (_recvAES) { _recvAES.Transform(packetData); } if (Program.usingMapleCrypto) { MapleCustom.Decrypt(packetData); } if (OnPacketRecvHandler != null) { PacketEventArgs eventArgs = new PacketEventArgs(packetData); OnPacketRecvHandler(this, eventArgs); } pBuffer.Reset(true, 4); ReceivePacket(pBuffer); } else { using (PacketReader pPacket = new PacketReader(pBuffer.Data)) { ushort Version = pPacket.ReadUShort(); string Subversion = pPacket.ReadString(); byte[] SIV = pPacket.ReadBytes(4); byte[] RIV = pPacket.ReadBytes(4); _sendAES = new MapleCrypt(Version, SIV, false); _recvAES = new MapleCrypt(Version, RIV, false); byte Locale = pPacket.Read(); if (OnHandshakeHandler != null) { HandshakeEventArgs eventArgs = new HandshakeEventArgs(Version, Subversion, SIV, RIV, Locale); OnHandshakeHandler(this, eventArgs); } pBuffer.Dispose(); WaitForPacket(); } } } }