diff --git a/src/main/java/ru/serega6531/packmate/PcapWorker.java b/src/main/java/ru/serega6531/packmate/PcapWorker.java index 5427a8d..d218826 100644 --- a/src/main/java/ru/serega6531/packmate/PcapWorker.java +++ b/src/main/java/ru/serega6531/packmate/PcapWorker.java @@ -203,9 +203,16 @@ public class PcapWorker implements PacketListener { if (stream.getProtocol() == protocol) { final List packets = entry.getValue(); if (System.currentTimeMillis() - packets.get(packets.size() - 1).getTimestamp() > timeoutMillis) { + if(streamService.saveNewStream(stream, packets)) { + streamsClosed++; + } + iterator.remove(); - streamService.saveNewStream(stream, packets); - streamsClosed++; + + if(protocol == Protocol.TCP) { + fins.remove(stream); + acks.remove(stream); + } } } } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index aced456..809e290 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -42,8 +42,11 @@ public class StreamService { this.ignoreEmptyPackets = ignoreEmptyPackets; } + /** + * @return был ли сохранен стрим + */ @Transactional - public void saveNewStream(UnfinishedStream unfinishedStream, List packets) { + public boolean saveNewStream(UnfinishedStream unfinishedStream, List packets) { final Optional serviceOptional = servicesService.findService( localIp, unfinishedStream.getFirstIp().getHostAddress(), @@ -55,7 +58,7 @@ public class StreamService { if (!serviceOptional.isPresent()) { log.warn("Не удалось сохранить стрим: сервиса на порту {} или {} не существует", unfinishedStream.getFirstPort(), unfinishedStream.getSecondPort()); - return; + return false; } Stream stream = new Stream(); @@ -69,7 +72,7 @@ public class StreamService { if(packets.isEmpty()) { log.debug("Стрим состоит только из пустых пакетов и не будет сохранен"); - return; + return false; } } @@ -89,6 +92,7 @@ public class StreamService { savedStream = save(savedStream); subscriptionService.broadcastNewStream(savedStream); + return true; } public Stream save(Stream stream) {