diff --git a/bindings/java/jni/auto_db_java.cpp b/bindings/java/jni/auto_db_java.cpp index a20fd04b4a53c1d9938093babd2ad1e0be6b928a..113538eda5f4d62844bb7be422658c79721fc16f 100644 --- a/bindings/java/jni/auto_db_java.cpp +++ b/bindings/java/jni/auto_db_java.cpp @@ -84,6 +84,11 @@ TskAutoDbJava::initializeJni(JNIEnv * jniEnv, jobject jobj) { return TSK_ERR; } + m_addAcquisitionDetailsMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addAcquisitionDetails", "(JLjava/lang/String;)V"); + if (m_addAcquisitionDetailsMethodID == NULL) { + return TSK_ERR; + } + m_addVolumeSystemMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addVsInfo", "(JIJJ)J"); if (m_addVolumeSystemMethodID == NULL) { return TSK_ERR; @@ -222,6 +227,16 @@ TskAutoDbJava::addImageInfo(int type, TSK_OFF_T ssize, int64_t & objId, const st return TSK_OK; } +void +TskAutoDbJava::addAcquisitionDetails(int64_t imgId, const string& collectionDetails) { + + const char *coll_cstr = collectionDetails.c_str(); + jstring collj = m_jniEnv->NewStringUTF(coll_cstr); + + m_jniEnv->CallLongMethod(m_javaDbObj, m_addAcquisitionDetailsMethodID, + imgId, collj); +} + /** * Adds volume system to database. Object ID for new vs stored in objId. * @@ -1029,11 +1044,6 @@ TskAutoDbJava::openImage(const char* a_deviceId) uint8_t TskAutoDbJava::addImageDetails(const char* deviceId) { - // The image has already been added to the database - if (m_curImgId > 0) { - return 0; - } - string md5 = ""; string sha1 = ""; string collectionDetails = ""; @@ -1052,6 +1062,12 @@ TskAutoDbJava::addImageDetails(const char* deviceId) } #endif + // If the image has already been added to the database, update the acquisition details and return. + if (m_curImgId > 0) { + addAcquisitionDetails(m_curImgId, collectionDetails); + return 0; + } + string devId; if (NULL != deviceId) { devId = deviceId; diff --git a/bindings/java/jni/auto_db_java.h b/bindings/java/jni/auto_db_java.h index 26e370d093b7229cad868d813969be22324930a5..52561c366ed0a8e19972f2999d5a4938240777f7 100644 --- a/bindings/java/jni/auto_db_java.h +++ b/bindings/java/jni/auto_db_java.h @@ -150,6 +150,7 @@ class TskAutoDbJava :public TskAuto { jobject m_javaDbObj = NULL; jmethodID m_addImageMethodID = NULL; jmethodID m_addImageNameMethodID = NULL; + jmethodID m_addAcquisitionDetailsMethodID = NULL; jmethodID m_addVolumeSystemMethodID = NULL; jmethodID m_addVolumeMethodID = NULL; jmethodID m_addPoolMethodID = NULL; @@ -208,7 +209,7 @@ class TskAutoDbJava :public TskAuto { // JNI methods TSK_RETVAL_ENUM addImageInfo(int type, TSK_OFF_T ssize, int64_t & objId, const string & timezone, TSK_OFF_T size, const string &md5, const string& sha1, const string& sha256, const string& deviceId, const string& collectionDetails, char** img_ptrs, int num_imgs); - TSK_RETVAL_ENUM addImageName(int64_t objId, char const* imgName, int sequence); + void addAcquisitionDetails(int64_t imgId, const string& collectionDetails); TSK_RETVAL_ENUM addVsInfo(const TSK_VS_INFO* vs_info, int64_t parObjId, int64_t& objId); TSK_RETVAL_ENUM addPoolInfoAndVS(const TSK_POOL_INFO *pool_info, int64_t parObjId, int64_t& objId); TSK_RETVAL_ENUM addPoolVolumeInfo(const TSK_POOL_VOLUME_INFO* pool_vol, int64_t parObjId, int64_t& objId); diff --git a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java b/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java index c468c9273cbc7187d35800b012f69245d9a66e38..21680fdd802d2e261f2e81add5221f54fbb9a96c 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java +++ b/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java @@ -141,6 +141,23 @@ long addImageInfo(int type, long ssize, String timezone, return -1; } } + + /** + * Add the acquisition details to the image object. + * + * @param imgId ID of the image + * @param details The details + */ + void addAcquisitionDetails(long imgId, String details) { + try { + beginTransaction(); + caseDb.setAcquisitionDetails(imgId, details, trans); + commitTransaction(); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Error adding image details \"" + details + "\" to image with ID " + imgId, ex); + revertTransaction(); + } + } /** * Add a volume system to the database. diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java index cc6b85ba950d1df91ec5e650054ce038624835eb..2f07f18b0d7e11f86d2435b78e016aa99c384c5f 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java @@ -9357,6 +9357,31 @@ void setAcquisitionDetails(DataSource datasource, String details) throws TskCore } } + /** + * Set the acquisition details in the data_source_info table. + * + * @param dataSourceId The data source ID. + * @param details The acquisition details. + * @param trans The current transaction. + * + * @throws TskCoreException + */ + void setAcquisitionDetails(long dataSourceId, String details, CaseDbTransaction trans) throws TskCoreException { + acquireSingleUserCaseWriteLock(); + try { + CaseDbConnection connection = trans.getConnection(); + PreparedStatement statement = connection.getPreparedStatement(PREPARED_STATEMENT.UPDATE_ACQUISITION_DETAILS); + statement.clearParameters(); + statement.setString(1, details); + statement.setLong(2, dataSourceId); + connection.executeUpdate(statement); + } catch (SQLException ex) { + throw new TskCoreException("Error setting acquisition details", ex); + } finally { + releaseSingleUserCaseWriteLock(); + } + } + /** * Get the acquisition details from the data_source_info table *