diff --git a/src/main/java/ru/serega6531/packmate/model/Pattern.java b/src/main/java/ru/serega6531/packmate/model/Pattern.java index 17e39b5..38ea512 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pattern.java +++ b/src/main/java/ru/serega6531/packmate/model/Pattern.java @@ -34,6 +34,8 @@ public class Pattern { private boolean isRegex; + private PatternType type; + @ManyToMany(mappedBy = "foundPatterns", cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JsonIgnore private List matchedStreams; diff --git a/src/main/java/ru/serega6531/packmate/model/PatternType.java b/src/main/java/ru/serega6531/packmate/model/PatternType.java new file mode 100644 index 0000000..e22505f --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/model/PatternType.java @@ -0,0 +1,5 @@ +package ru.serega6531.packmate.model; + +public enum PatternType { + INPUT, OUTPUT, BOTH +} diff --git a/src/main/java/ru/serega6531/packmate/repository/PatternRepository.java b/src/main/java/ru/serega6531/packmate/repository/PatternRepository.java index 2fa9035..076cb08 100644 --- a/src/main/java/ru/serega6531/packmate/repository/PatternRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/PatternRepository.java @@ -2,6 +2,12 @@ package ru.serega6531.packmate.repository; import org.springframework.data.jpa.repository.JpaRepository; import ru.serega6531.packmate.model.Pattern; +import ru.serega6531.packmate.model.PatternType; + +import java.util.List; public interface PatternRepository extends JpaRepository { + + List findAllByTypeEqualsOrTypeEquals(PatternType type, PatternType both); + } diff --git a/src/main/java/ru/serega6531/packmate/service/PatternService.java b/src/main/java/ru/serega6531/packmate/service/PatternService.java index 0e52d72..715053d 100644 --- a/src/main/java/ru/serega6531/packmate/service/PatternService.java +++ b/src/main/java/ru/serega6531/packmate/service/PatternService.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import ru.serega6531.packmate.model.Pattern; +import ru.serega6531.packmate.model.PatternType; import ru.serega6531.packmate.model.Stream; import ru.serega6531.packmate.repository.PatternRepository; @@ -35,10 +36,10 @@ public class PatternService { return repository.findAll(); } - public List findMatching(byte[] bytes) { + public List findMatching(byte[] bytes, boolean incoming) { String content = new String(bytes); - return findAll().stream() + return repository.findAllByTypeEqualsOrTypeEquals(incoming ? PatternType.INPUT : PatternType.OUTPUT, PatternType.BOTH).stream() .filter(pattern -> matches(pattern, content)) .collect(Collectors.toList()); } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 830dcf0..eae6f14 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -165,7 +165,7 @@ public class StreamService { for (ru.serega6531.packmate.model.Packet packet : packets) { packet.setStream(savedStream); savedPackets.add(packetService.save(packet)); - matches.addAll(patternService.findMatching(packet.getContent())); + matches.addAll(patternService.findMatching(packet.getContent(), packet.isIncoming())); } savedStream.setFoundPatterns(new ArrayList<>(matches));