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); } }