public static Datagram Create(IStreamBuffer streamBuffer) { var index = -1; while ((index = streamBuffer.IndexOf(Datagram.DatagramHeader)) >= 0) { streamBuffer.Seek(index); if (streamBuffer.Length < 13) { return(null); } var buffer = new byte[5]; streamBuffer.ReadOnly(buffer, 0, buffer.Length); var length = (buffer[1] << 24) + (buffer[2] << 16) + (buffer[3] << 8) + (buffer[4]); if (length + 13 >= streamBuffer.Capacity) { streamBuffer.Reset(); return(null); } if (streamBuffer.Length < length + 13) { return(null); } var data = new byte[length + 13]; streamBuffer.ReadOnly(data, 0, data.Length); if (DatagramFactory.Verify(data)) { streamBuffer.Seek(data.Length); return(DatagramFactory.Create(data)); } else { streamBuffer.Seek(1); } } return(null); }