Skip to content

Commit 23e0e55

Browse files
committedOct 8, 2024
sepinf-inc#2286: use item children property instead of extraAttribute map to store messages in chat evidence
1 parent a10f091 commit 23e0e55

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed
 

‎iped-api/src/main/java/iped/data/IItemReader.java

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.io.IOException;
66
import java.util.Date;
77
import java.util.HashSet;
8+
import java.util.List;
89
import java.util.Map;
910

1011
import javax.imageio.stream.ImageInputStream;
@@ -154,6 +155,8 @@ public interface IItemReader extends IStreamSource {
154155

155156
public IDataSource getDataSource();
156157

158+
public List<IItemReader> getChildren();
159+
157160
/**
158161
* @return Object containing the metadata of the item
159162
*/

‎iped-engine/src/main/java/iped/engine/data/Item.java

+22
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535

3636
import iped.data.IHashValue;
3737
import iped.data.IItem;
38+
import iped.data.IItemReader;
3839
import iped.datasource.IDataSource;
3940
import iped.engine.core.Statistics;
4041
import iped.engine.io.ReferencedFile;
@@ -207,6 +208,8 @@ public static void setStartID(int start) {
207208

208209
private ISeekableInputStreamFactory inputStreamFactory;
209210

211+
private List<IItemReader> children;
212+
210213
private static final int BUF_LEN = 8 * 1024 * 1024;
211214

212215
private static final int maxImageLength = 128 << 20;
@@ -1316,4 +1319,23 @@ public Object getTempAttribute(String key) {
13161319
public void setTempAttribute(String key, Object value) {
13171320
tempAttributes.put(key, value);
13181321
}
1322+
1323+
public void addChild(IItemReader child) {
1324+
if (children == null) {
1325+
children = new ArrayList<>();
1326+
}
1327+
children.add(child);
1328+
}
1329+
1330+
@Override
1331+
public List<IItemReader> getChildren() {
1332+
if (children == null) {
1333+
return null;
1334+
}
1335+
try {
1336+
return new ArrayList<>(children);
1337+
} finally {
1338+
children.clear();
1339+
}
1340+
}
13191341
}

‎iped-engine/src/main/java/iped/engine/datasource/UfedXmlReader.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -1153,11 +1153,9 @@ else if ("Participants".equalsIgnoreCase(role)) {
11531153
processItem(item);
11541154
} else {
11551155
// add chat subitems in the chat via UFED_CHILDREN_ATTR extraAttribute
1156-
IItem parent = itemSeq.get(itemSeq.size() - 1);
1157-
List<IItem> children = (List<IItem>) parent.getExtraAttributeMap().computeIfAbsent(
1158-
UFEDChatParser.UFED_CHILDREN_ATTR, (key) -> new ArrayList<IItem>());
1156+
Item parent = itemSeq.get(itemSeq.size() - 1);
11591157
Util.calctrackIDAndUpdateID((CaseData) caseData, item);
1160-
children.add(item);
1158+
parent.addChild(item);
11611159
caseData.incDiscoveredEvidences(-1);
11621160
}
11631161
} else {

‎iped-parsers/iped-parsers-impl/src/main/java/iped/parsers/ufed/UFEDChatParser.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ public class UFEDChatParser extends AbstractParser {
5757

5858
public static final MediaType UFED_CHAT_PREVIEW_MIME = MediaType.application("x-ufed-chat-preview");
5959

60-
public static final String UFED_CHILDREN_ATTR = "ufedChildren";
61-
6260
public static final String UFED_REPLIED_MESSAGE_ATTR = "ufedOriginalMessage";
6361

6462
public static final Map<String, MediaType> appToMime = ImmutableMap.of( //
@@ -154,9 +152,11 @@ public void parse(InputStream inputStream, ContentHandler handler, Metadata meta
154152
if (chat == null || searcher == null)
155153
return;
156154

157-
List<Message> messages = new ArrayList<>();
158-
List<IItemReader> chatChildren = (List<IItemReader>) chat.getExtraAttributeMap().remove(UFED_CHILDREN_ATTR);
155+
updateChatMetadata(chatMeta, searcher);
156+
Chat chat = createChat(chatItem, searcher);
159157

158+
List<Message> messages = new ArrayList<>();
159+
List<IItemReader> chatChildren = chatItem.getChildren();
160160
if (chatChildren != null) {
161161
for (IItemReader chatChild : chatChildren) {
162162

@@ -177,6 +177,7 @@ public void parse(InputStream inputStream, ContentHandler handler, Metadata meta
177177
if (messagesCount == 0 && ignoreEmptyChats) {
178178
return;
179179
}
180+
chatMeta.set(ExtraProperties.CONVERSATION_MESSAGES_COUNT, messagesCount);
180181

181182
Collections.sort(messages);
182183

@@ -340,6 +341,7 @@ private IItemReader lookupAccount(IItemSearcher searcher, Metadata chatMetadata)
340341

341342
private void fillAccountInfo(IItemSearcher searcher, Metadata chatMetadata) {
342343
String name, id, phone = null, username = null;
344+
String source = readUfedMetadata(chatMetadata, "Source");
343345
IItemReader account = lookupAccount(searcher, chatMetadata);
344346
if (account != null) {
345347
name = readUfedMetadata(account, "name");
@@ -396,6 +398,7 @@ private IItemReader lookupParticipant(IItemSearcher searcher, Metadata chatMetad
396398

397399
private void fillParticipantInfo(IItemSearcher searcher, Metadata chatMetadata, Metadata targetMetadata,
398400
String ufedProperty, String conversationProperty) {
401+
String source = readUfedMetadata(chatMetadata, "Source");
399402
List<String> partyIDs = readUfedMetadataArray(targetMetadata, ufedProperty + ":ID");
400403
List<String> partyNames = readUfedMetadataArray(targetMetadata, ufedProperty + ":Name");
401404
for (int i = 0; i < partyIDs.size(); i++) {
@@ -524,8 +527,7 @@ private Message createMessage(IItemReader messageItem, IItemSearcher searcher) {
524527
Message message = new Message(messageItem);
525528
handleMessagePosition(message, searcher);
526529

527-
List<IItemReader> msgChildren = (List<IItemReader>) messageItem.getExtraAttributeMap()
528-
.remove(UFED_CHILDREN_ATTR);
530+
List<IItemReader> msgChildren = messageItem.getChildren();
529531
if (msgChildren != null) {
530532
for (IItemReader msgChild : msgChildren) {
531533
if (msgChild.getMediaType().equals(MediaTypes.UFED_CHATACTIVITY_MIME)) {

‎iped-parsers/iped-parsers-impl/src/test/java/iped/parsers/util/BaseItemSearchContext.java

+5
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,11 @@ public void setChangeDate(Date changeDate) {
659659
// TODO Auto-generated method stub
660660

661661
}
662+
663+
@Override
664+
public List<IItemReader> getChildren() {
665+
return null;
666+
}
662667
};
663668

664669
ItemInfo itemInfo = new ItemInfo(0, item.getHash(), Collections.emptySet(), Collections.emptySet(),

0 commit comments

Comments
 (0)
Please sign in to comment.