Example #1
0
        public PacketIn DeCrypt(PacketIn packet)
        {
            if (m_crypts.Count <= 0)
            {
                return(packet);
            }

            ulong opcode   = packet.Opcode;
            ulong size     = packet.Size;
            long  StartPos = packet.Position;

            foreach (KeyValuePair <ICryptHandler, CryptKey[]> Entry in m_crypts)
            {
                try
                {
                    Log.Debug("Decrypt", "Decrypt with " + Entry.Key + ",Size=" + packet.Size);

                    byte[] Buf = new byte[size];

                    long Pos = packet.Position;
                    packet.Read(Buf, 0, (int)Buf.Length);
                    packet.Position = Pos;

                    PacketIn Pack = Entry.Key.Decrypt(Entry.Value[1], Buf);
                    packet.Write(Pack.ToArray(), 0, Pack.ToArray().Length);

                    packet.Opcode = opcode;
                    packet.Size   = size;
                }
                catch (Exception e)
                {
                    Log.Error("BaseClient", "Decrypt Error : " + e.ToString());
                    continue;
                }
            }

            Log.Tcp("Decrypt", packet.ToArray(), 0, packet.ToArray().Length);
            packet.Position = StartPos;
            return(packet);
        }