From b2fcd9d10cb3c27d893a3abde11ed1e8d1eee968 Mon Sep 17 00:00:00 2001 From: Janus Varmarken Date: Wed, 25 Jul 2018 16:10:24 -0700 Subject: [PATCH] TcpReassembler.java: bugfix: make mTerminatedConversations a list instead of prevent older conversations from being overwritten when an ephemeral port number is reused in communication between the same two hosts --- .../main/java/edu/uci/iotproject/TcpReassembler.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/TcpReassembler.java b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/TcpReassembler.java index 6cce343..d54e124 100644 --- a/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/TcpReassembler.java +++ b/Code/Projects/SmartPlugDetector/src/main/java/edu/uci/iotproject/TcpReassembler.java @@ -33,9 +33,8 @@ public class TcpReassembler implements PacketListener { /** * Holds terminated {@link Conversation}s. - * TODO: Should turn this into a list to avoid unintentional overwrite of a Conversation in case ephemeral port number is reused at a later stage...? */ - private final Map mTerminatedConversations = new HashMap<>(); + private final List mTerminatedConversations = new ArrayList<>(); @Override public void gotPacket(PcapPacket pcapPacket) { @@ -54,7 +53,7 @@ public class TcpReassembler implements PacketListener { */ public List getTcpConversations() { ArrayList combined = new ArrayList<>(); - combined.addAll(mTerminatedConversations.values()); + combined.addAll(mTerminatedConversations); combined.addAll(mOpenConversations.values()); return combined; } @@ -116,7 +115,7 @@ public class TcpReassembler implements PacketListener { // to establish a new conversation with the same four tuple as ongoingConv. // Mark existing connection as terminated. // TODO: is this 100% theoretically correct, e.g., if many connection attempts are made back to back? And RST packets? - mTerminatedConversations.put(ongoingConv, ongoingConv); + mTerminatedConversations.add(ongoingConv); mOpenConversations.remove(ongoingConv); } } @@ -157,7 +156,7 @@ public class TcpReassembler implements PacketListener { private void processRstPacket(PcapPacket rstPacket) { Conversation conv = getOngoingConversationOrCreateNew(rstPacket); // Move conversation to set of terminated conversations. - mTerminatedConversations.put(conv, conv); + mTerminatedConversations.add(conv); mOpenConversations.remove(conv, conv); } @@ -176,7 +175,7 @@ public class TcpReassembler implements PacketListener { conv.attemptAcknowledgementOfFin(ackPacket); if (conv.isGracefullyShutdown()) { // Move conversation to set of terminated conversations. - mTerminatedConversations.put(conv, conv); + mTerminatedConversations.add(conv); mOpenConversations.remove(conv); } } -- 2.34.1