diff --git a/bindings/java/nbproject/project.xml b/bindings/java/nbproject/project.xml index 2454ae23433c1f048679810db9b5b49bd19e33ea..28547940761d03c42bd0f4bc0250e5dc012ef42e 100755 --- a/bindings/java/nbproject/project.xml +++ b/bindings/java/nbproject/project.xml @@ -114,7 +114,7 @@ <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/3"> <compilation-unit> <package-root>src</package-root> - <classpath mode="compile">lib;lib/diffutils-1.2.1.jar;lib/junit-4.8.2.jar;lib/sqlite-jdbc-3.8.0-SNAPSHOT.jar</classpath> + <classpath mode="compile">lib;lib/diffutils-1.2.1.jar;lib/junit-4.8.2.jar;lib/sqlite-jdbc-3.7.15-M1.jar</classpath> <built-to>build</built-to> <source-level>1.6</source-level> </compilation-unit> diff --git a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java index 04945b04f2477a28326d05876d9be9b2623c0b66..353961bc829ba46837f4f5eacebb32349480c2c9 100755 --- a/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java +++ b/bindings/java/src/org/sleuthkit/datamodel/AbstractContent.java @@ -119,7 +119,7 @@ public synchronized Content getParent() throws TskCoreException { try { parentInfo = db.getParentInfo(this); } catch (TskCoreException ex) { - // there is not parent; not an error if we've got an Image + // there is not parent; not an error if we've got a data source return null; } parent = db.getContentById(parentInfo.id); @@ -146,14 +146,14 @@ public long getId() { return this.objId; } + // classes should override this if they can be a data source @Override - public Image getImage() throws TskCoreException { - Image image = null; + public Content getDataSource() throws TskCoreException { Content myParent = getParent(); - if (myParent != null) { - image = myParent.getImage(); - } - return image; + if (myParent == null) + return null; + + return myParent.getDataSource(); } /** diff --git a/bindings/java/src/org/sleuthkit/datamodel/Content.java b/bindings/java/src/org/sleuthkit/datamodel/Content.java index 1be30287a9bfef4d21f00433875863d2d0ba1c54..6ef99e193bba0a91ba8235da6c2c8f4b3f3b1130 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Content.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Content.java @@ -91,13 +91,12 @@ public interface Content extends SleuthkitVisitableItem { public long getId(); /** - * Get the root image of this content, of null if there is no image associated with this content - * (such as for LocalFile) + * Get the root data source of this content (image, virtual directory, etc.) * - * @return image associated with this Content or null if there isn't any + * @return Content associated with data source or null if one can't be found * @throws TskCoreException if critical error occurred within tsk core */ - public Image getImage() throws TskCoreException; + public Content getDataSource() throws TskCoreException; /** * Gets the child content objects of this content. diff --git a/bindings/java/src/org/sleuthkit/datamodel/DerivedFile.java b/bindings/java/src/org/sleuthkit/datamodel/DerivedFile.java index a221c162c241eb4fd0addef46c4055a89e87ef4c..689e108f441b3de6ad2d04c672ed7e422b15c73a 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/DerivedFile.java +++ b/bindings/java/src/org/sleuthkit/datamodel/DerivedFile.java @@ -87,20 +87,19 @@ public boolean isRoot() { } @Override - public Image getImage() throws TskCoreException { + public Content getDataSource() throws TskCoreException { //TODO need schema support to implement this more efficiently - Image image = null; - Content ancestor = getParent(); - image = ancestor.getImage(); - while (image == null) { - ancestor = ancestor.getParent(); - if (ancestor == null) { + Content parent = getParent(); + Content dataSource = parent.getDataSource(); + while (dataSource == null) { + parent = parent.getParent(); + if (parent == null) { //should never happen break; } - image = ancestor.getImage(); + dataSource = parent.getDataSource(); } - return image; + return dataSource; } @Override diff --git a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java index da965128478718a879a3f213f2deb4825da17681..2ae60ebdc3cdd45227016eb373dfdc2419df6d48 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java +++ b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java @@ -92,7 +92,14 @@ long getFileSystemHandle() throws TskCoreException { if (filesystemHandle == 0) { synchronized (this) { if (filesystemHandle == 0) { - filesystemHandle = SleuthkitJNI.openFs(getImage().getImageHandle(), imgOffset); + Content dataSource = getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image)dataSource; + filesystemHandle = SleuthkitJNI.openFs(image.getImageHandle(), imgOffset); + } + else { + throw new TskCoreException ("Data Source of File System is not an image"); + } } } } @@ -208,11 +215,6 @@ public List<Long> getChildrenIds() throws TskCoreException { return getSleuthkitCase().getAbstractFileChildrenIds(this); } - @Override - public Image getImage() throws TskCoreException { - return getParent().getImage(); - } - @Override public String toString(boolean preserveState) { return super.toString(preserveState) + "FileSystem [\t" + " blockCount " + blockCount + "\t" + "blockSize " + blockSize + "\t" + "firstInum " + firstInum + "\t" + "fsType " + fsType + "\t" + "imgOffset " + imgOffset + "\t" + "lastInum " + lastInum + "\t" + "rootInum " + rootInum + "\t" + "]"; //NON-NLS diff --git a/bindings/java/src/org/sleuthkit/datamodel/FsContent.java b/bindings/java/src/org/sleuthkit/datamodel/FsContent.java index 57cf9cab4e794fe798614dfa42fbc5ad9120a7e0..4a987335a11ec5bea935611a15a663e80493882e 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/FsContent.java +++ b/bindings/java/src/org/sleuthkit/datamodel/FsContent.java @@ -143,9 +143,13 @@ protected int readInt(byte[] buf, long offset, long len) throws TskCoreException return SleuthkitJNI.readFile(fileHandle, buf, offset, len); } catch (TskCoreException ex) { - if (!getImage().imageFileExists()) { - tskCase.submitError(bundle.getString("FsContent.readInt.err.context.text"), + Content dataSource = getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image)dataSource; + if (!image.imageFileExists()) { + tskCase.submitError(bundle.getString("FsContent.readInt.err.context.text"), bundle.getString("FsContent.readInt.err.msg.text")); + } } throw ex; } @@ -179,8 +183,8 @@ public AbstractFile getParentDirectory() throws TskCoreException { } @Override - public Image getImage() throws TskCoreException { - return getFileSystem().getImage(); + public Content getDataSource() throws TskCoreException { + return getFileSystem().getDataSource(); } @Override diff --git a/bindings/java/src/org/sleuthkit/datamodel/Image.java b/bindings/java/src/org/sleuthkit/datamodel/Image.java index 394b7287e8496a46b12c657763f7296723be9887..8c4d1ca81f21296dd58d1476248d961590df6dc9 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Image.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Image.java @@ -78,7 +78,7 @@ public synchronized long getImageHandle() throws TskCoreException { } @Override - public Image getImage() { + public Content getDataSource() { return this; } diff --git a/bindings/java/src/org/sleuthkit/datamodel/LayoutFile.java b/bindings/java/src/org/sleuthkit/datamodel/LayoutFile.java index 349c95dd3a679fbcd1e86141b4e1ecc8b59613c1..e079c62af75a9611c32dea0d3759e80961faf114 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/LayoutFile.java +++ b/bindings/java/src/org/sleuthkit/datamodel/LayoutFile.java @@ -39,7 +39,9 @@ * * The class also supports reads of layout files, reading blocks across ranges in a sequence */ -public class LayoutFile extends AbstractFile{ +public class LayoutFile extends AbstractFile { + + private long imageHandle = -1; protected LayoutFile(SleuthkitCase db, long objId, String name, TSK_DB_FILES_TYPE_ENUM fileType, @@ -101,6 +103,17 @@ protected int readInt(byte[] buf, long offset, long len) throws TskCoreException long offsetInThisLayoutContent = 0; // current offset in this LayoutContent int bytesRead = 0; // Bytes read so far + if (imageHandle == -1) { + Content dataSource = getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image)dataSource; + imageHandle = image.getImageHandle(); + } + else { + throw new TskCoreException ("Data Source of LayoutFile is not Image"); + } + } + for (TskFileRange range : getRanges()) { if (bytesRead < len) { // we haven't read enough yet if (offset < offsetInThisLayoutContent + range.getByteLen()) { // if we are in a range object we want to read from @@ -110,7 +123,7 @@ protected int readInt(byte[] buf, long offset, long len) throws TskCoreException } long offsetInImage = range.getByteStart() + offsetInRange; // how far into the image to start reading long lenToRead = Math.min(range.getByteLen() - offsetInRange, len-bytesRead); // how much we can read this time - int lenRead = readImgToOffset(getImage().getImageHandle(), buf, bytesRead, offsetInImage, (int) lenToRead); + int lenRead = readImgToOffset(imageHandle, buf, bytesRead, offsetInImage, (int) lenToRead); bytesRead += lenRead; if(lenToRead != lenRead) { // If image read failed or was cut short break; @@ -153,11 +166,6 @@ public <T> T accept(SleuthkitItemVisitor<T> v) { return v.visit(this); } - @Override - public Image getImage() throws TskCoreException{ - return getParent().getImage(); - } - @Override public boolean isRoot() { diff --git a/bindings/java/src/org/sleuthkit/datamodel/LocalFile.java b/bindings/java/src/org/sleuthkit/datamodel/LocalFile.java index ddd2eeec6721946aaecb5bb71cf98ac4cafe0a93..a271ccd2cdf1e6c7ff1a9ff9d3be7c4498a29b8b 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/LocalFile.java +++ b/bindings/java/src/org/sleuthkit/datamodel/LocalFile.java @@ -132,13 +132,6 @@ protected LocalFile(SleuthkitCase db, long objId, String name, TSK_FS_NAME_TYPE_ this(db, objId, name, TSK_DB_FILES_TYPE_ENUM.LOCAL, dirType, metaType, dirFlag, metaFlags, size, ctime, crtime, atime, mtime, md5Hash, knownState, parentPath, localPath); } - - @Override - public Image getImage() throws TskCoreException { - //true local file have no tsk image associated - return null; - } - @Override public List<TskFileRange> getRanges() throws TskCoreException { return Collections.<TskFileRange>emptyList(); diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java index 17135e269cb4588ccb7d4781ebc4cabd71b5094d..9207e2f8bfc3c1ccd89b29e9d8fbe644b24e2620 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java @@ -2382,27 +2382,7 @@ private long getFileSystemId(long fileId) { return ret; } - /** - * Gets the root-level data source object id (such as Image or - * VirtualDirectory representing filesets) for the file - * - * @param file file to get the root-level object id for - * @return the root content object id in the hierarchy, or -1 if not found - * (such as when invalid file object passed in) - * @throws TskCoreException thrown if check failed due to a critical tsk - * error - */ - public long getFileDataSource(AbstractFile file) throws TskCoreException { - final Image image = file.getImage(); - if (image != null) { - //case for image data source - return image.getId(); - } else { - //otherwise, get the root non-image data source id - //note, we are currently using fs_id internally to store data source id for such files - return getFileSystemId(file.getId()); - } - } + /** * Checks if the file is a (sub)child of the data source (parentless Content diff --git a/bindings/java/src/org/sleuthkit/datamodel/VirtualDirectory.java b/bindings/java/src/org/sleuthkit/datamodel/VirtualDirectory.java index 966c00d756200afec0e4a35527d7e479a2405ce6..9a4637044f43fc15fb6190d7c56c9800052cb2da 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/VirtualDirectory.java +++ b/bindings/java/src/org/sleuthkit/datamodel/VirtualDirectory.java @@ -87,16 +87,15 @@ public <T> T accept(SleuthkitItemVisitor<T> v) { } @Override - public Image getImage() throws TskCoreException { + public Content getDataSource() throws TskCoreException { Content parent = getParent(); if (parent != null) { - return parent.getImage(); + return parent.getDataSource(); } else { //root-level VirtualDirectory, such as local files container - return null; + return this; } - } @Override diff --git a/bindings/java/src/org/sleuthkit/datamodel/Volume.java b/bindings/java/src/org/sleuthkit/datamodel/Volume.java index f129b355a66429c3a74be446d4a48cbdd5589112..6fda16e927f83baf8a74e3f96a32761c626279f5 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Volume.java +++ b/bindings/java/src/org/sleuthkit/datamodel/Volume.java @@ -262,10 +262,6 @@ public List<Long> getChildrenIds() throws TskCoreException { return getSleuthkitCase().getVolumeChildrenIds(this); } - @Override - public Image getImage() throws TskCoreException { - return getParent().getImage(); - } /** * @return a list of FileSystem that are direct descendents of this Image. diff --git a/bindings/java/src/org/sleuthkit/datamodel/VolumeSystem.java b/bindings/java/src/org/sleuthkit/datamodel/VolumeSystem.java index bee84fcb877dc75735a03e0d33bb39642ed19bc8..481b247a87526411b825234e6500e5bf3a5ce2ed 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/VolumeSystem.java +++ b/bindings/java/src/org/sleuthkit/datamodel/VolumeSystem.java @@ -51,7 +51,7 @@ protected VolumeSystem(SleuthkitCase db, long obj_id, String name, long type, lo public int read(byte[] readBuffer, long offset, long len) throws TskCoreException { synchronized (this) { if (volumeSystemHandle == 0) { - volumeSystemHandle = SleuthkitJNI.openVs(getImage().getImageHandle(), imgOffset); + getVolumeSystemHandle(); } } return SleuthkitJNI.readVs(volumeSystemHandle, readBuffer, offset, len); @@ -98,7 +98,14 @@ public long getBlockSize() { */ protected synchronized long getVolumeSystemHandle() throws TskCoreException { if (volumeSystemHandle == 0) { - volumeSystemHandle = SleuthkitJNI.openVs(getImage().getImageHandle(), imgOffset); + Content dataSource = getDataSource(); + if ((dataSource != null) && (dataSource instanceof Image)) { + Image image = (Image)dataSource; + volumeSystemHandle = SleuthkitJNI.openVs(image.getImageHandle(), imgOffset); + } + else { + throw new TskCoreException ("Volume System data source is not an image"); + } } return volumeSystemHandle; @@ -145,11 +152,6 @@ public List<Long> getChildrenIds() throws TskCoreException { return getSleuthkitCase().getVolumeSystemChildrenIds(this); } - @Override - public Image getImage() throws TskCoreException { - return getParent().getImage(); - } - /** * @return a list of Volumes that are direct children of this VolumeSystem * @throws TskCoreException