private bool ReadFromBuffer() { if (Buffer.Empty) { return(true); } MemoryStream stream = Buffer.ToStream(); try { G2Packet pack; int bRead = ReadPacket(stream, out pack); pack.RemotePeer = peer; peer.GotPacket(pack); int totalRead = (int)pack.getTotalPacketLength(); //Debug.Assert(bRead == totalRead, "ReadFromBuffer : bRead = " + bRead + " vs totalRead = " + totalRead); if (totalRead == Buffer.DataOffset) { // buffer completely and uniquely stored the packet Buffer.Flush(); } else if (totalRead < Buffer.DataOffset) { // buffer contains some other data Buffer.Dequeue(totalRead); // remove data already read return(ReadFromBuffer()); // read others packets contained } return(true); } catch (NotEnoughDataException e) { return(false); } catch (PacketException e) { // big endian for example Buffer.Flush(); return(true); } }