Example #1
0
void PipeNode::processPackets(PacketReader & reader)
{
    while(reader.left() >= 3)
    {
        reader.mark();
        PacketCode code = reader.read<PacketCode>();
        boost::uint32_t len = reader.read<boost::uint16_t>();
        if(len > 0x7fff)
        {
            if(reader.left() >= 2)
                len = (reader.read<uint16_t>() << 15) | (len & 0x7fff);
        }
        if(len > reader.left())
        {
            reader.revert();
            break;
        }
        listener_(code, reader.subreader(0, len));
        reader.skip(len);
    }
}