All pastes #390132 Raw Edit

Mine

public text v1 · immutable
·published 2007-03-11 04:43 UTC
rendered paste body
protected override void OnReceive(int num_bytes)
        {
            if (num_bytes < 6)
            {
                m_inOffset = 0;
                return;
            }

            bool isDecrypted = false;
            short packetLength = 0;
            PacketId packetId = default(PacketId);

            int startOffset = m_inOffset - num_bytes;

            if (!isDecrypted)
            {
                if (IsEncrypted)
                {
                    DecryptHeader(ref m_inBuf, startOffset);
                }
                packetLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(m_inBuf, startOffset));
                packetId = (RealmServerOpCode)BitConverter.ToUInt32(m_inBuf, startOffset + 2);
                m_log.DebugFormat("Received {0}/{1}", packetId, packetLength);
                isDecrypted = true;
            }

            if (packetLength > 4000 || packetLength < 4)
            {
                m_log.Info("bad packet length: " + packetLength);
                m_inOffset = 0;
                return;
            }

            if (num_bytes > packetLength + 2)
            {
                m_log.Debug("more than needed received");
                int remaining = num_bytes;
                while (remaining > 0)
                {
                    m_log.DebugFormat("Remaining in overflow packet {0}", remaining);
                    if (isDecrypted)
                    {
                        RealmPacketIn packet = new RealmPacketIn(m_inBuf, m_inOffset - remaining, packetLength + 2);
                        TryHandlePacket(packet);
                        remaining -= (packet.PacketSize + 2);//m_packetLength + 2;
                        startOffset += (packet.PacketSize + 2);
                        isDecrypted = false;
                    }
                    else
                    {
                        DecryptHeader(ref m_inBuf, startOffset);
                        packetLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(m_inBuf, startOffset));
                        RealmPacketIn packet = new RealmPacketIn(m_inBuf, startOffset, packetLength + 2);
                        TryHandlePacket(packet);
                        remaining -= (packet.PacketSize + 2);
                        startOffset += (packet.PacketSize + 2);
                        //isDecrypted = false;
                    }
                }
                m_inOffset = 0; // done
                return;
            }

            // received single message in packet
            if (packetLength + 2 == num_bytes)
            {
                // full message
                RealmPacketIn packet = new RealmPacketIn(m_inBuf, startOffset, packetLength + 2);
                TryHandlePacket(packet);
                m_inOffset = 0;
                return;
            }
        }