コード例 #1
0
ファイル: Session.cs プロジェクト: RichardZhaoE/CLB
        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);
        }
コード例 #2
0
ファイル: Session.cs プロジェクト: RichardZhaoE/CLB
        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();
                    }
                }
            }
        }