private void SendNonBlocking(Packet packet) { PacketEncryptionMethod encryption = packet.Encryption; lock (SyncSend) { if (m_WriterStream == null || !Connected) { throw new IOException("Client is not connected"); } IgeNetStream stream = (IgeNetStream)m_WriterStream.BaseStream; if (GameDebugger.MinNetLogLevel <= LogLevel.VerboseDebug) { Log(LogLevel.VerboseDebug, "Sending packet: '{0}'. Packet contents: {1}", packet.GetType().FullName, packet.ToString()); } else { Log(LogLevel.Debug, "Sending packet: '{0}'", packet.GetType().FullName); } // Log(LogLevel.Debug, "Resetting send checksum"); // stream.ResetWriteChecksum(); //Thread.MemoryBarrier(); Log(LogLevel.Debug, "Sending packet id: 0x{0:X8}", packet.Id); m_WriterStream.Write(packet.Id); switch (encryption) { case PacketEncryptionMethod.RSA: { Log(LogLevel.Debug, "Serializing packet to a RSA encrypted block"); using (BinaryWriter cryptoWriter = new BinaryWriter(new MemoryStream(), Encoding.Unicode)) { packet.Serialize(cryptoWriter); byte[] cryptoData = m_RSACryptoPublic.Encrypt(((MemoryStream)cryptoWriter.BaseStream).ToArray(), false); Log(LogLevel.Debug, "Encrypted serialized block size: {0}", cryptoData.Length); m_WriterStream.Write(cryptoData.Length); m_WriterStream.Write(cryptoData); } break; } case PacketEncryptionMethod.Rijndael: { Log(LogLevel.Debug, "Serializing packet to a Rijndael crypto stream"); using (MemoryStream mem = new MemoryStream()) { using (BinaryWriter cryptoWriter = new BinaryWriter(new CryptoStream(mem, m_RijCrypto.CreateEncryptor(), CryptoStreamMode.Write), Encoding.Unicode)) { packet.Serialize(cryptoWriter); } byte[] cryptoData = mem.ToArray(); Log(LogLevel.Debug, "Encrypted serialized block size: {0}", cryptoData.Length); m_WriterStream.Write(cryptoData.Length); m_WriterStream.Write(cryptoData); } break; } default: { Log(LogLevel.Debug, "Serializing packet to a write stream"); packet.Serialize(m_WriterStream); break; } } uint checksum = stream.WriteChecksum ^ unchecked (m_SendPacketSerial++); //Thread.MemoryBarrier(); Log(LogLevel.Debug, "Sending checksum: 0x{0:X8}", checksum); m_WriterStream.Write(checksum); //Thread.MemoryBarrier(); Log(LogLevel.Debug, "Packet sending done"); } }
public PacketAttribute(uint packet_id, PacketEncryptionMethod encryption) { m_PacketId = packet_id; m_Encryption = encryption; }
public PacketRegistryEntry(uint id, Type type, PacketEncryptionMethod encryption) { m_Id = id; m_Type = type; m_Encryption = encryption; }