Доделан поиск сигнатур
This commit is contained in:
@@ -20,6 +20,16 @@ public class ServicesService {
|
||||
this.repository = repository;
|
||||
}
|
||||
|
||||
public Optional<CtfService> findService(String localIp, String firstIp, int firstPort, String secondIp, int secondPort) {
|
||||
if(firstIp.equals(localIp)) {
|
||||
return findByPort(firstPort);
|
||||
} else if(secondIp.equals(localIp)) {
|
||||
return findByPort(secondPort);
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public Optional<CtfService> findByPort(int port) {
|
||||
return repository.findById(port);
|
||||
}
|
||||
|
||||
@@ -2,15 +2,16 @@ package ru.serega6531.packmate.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import ru.serega6531.packmate.model.Packet;
|
||||
import ru.serega6531.packmate.model.Pattern;
|
||||
import ru.serega6531.packmate.model.Stream;
|
||||
import ru.serega6531.packmate.model.UnfinishedStream;
|
||||
import ru.serega6531.packmate.repository.StreamRepository;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
@@ -18,26 +19,68 @@ public class StreamService {
|
||||
|
||||
private final StreamRepository repository;
|
||||
private final PatternService patternService;
|
||||
private final ServicesService servicesService;
|
||||
private final PacketService packetService;
|
||||
private final StreamSubscriptionService subscriptionService;
|
||||
|
||||
private final String localIp;
|
||||
|
||||
@Autowired
|
||||
public StreamService(StreamRepository repository, PatternService patternService) {
|
||||
public StreamService(StreamRepository repository,
|
||||
PatternService patternService,
|
||||
ServicesService servicesService,
|
||||
PacketService packetService,
|
||||
StreamSubscriptionService subscriptionService,
|
||||
@Value("${local-ip}") String localIp) {
|
||||
this.repository = repository;
|
||||
this.patternService = patternService;
|
||||
this.servicesService = servicesService;
|
||||
this.packetService = packetService;
|
||||
this.subscriptionService = subscriptionService;
|
||||
this.localIp = localIp;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void saveNewStream(UnfinishedStream unfinishedStream, List<Packet> packets) {
|
||||
Stream stream = new Stream();
|
||||
stream.setProtocol(unfinishedStream.getProtocol());
|
||||
stream.setStartTimestamp(packets.get(0).getTimestamp());
|
||||
stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp());
|
||||
stream.setService(servicesService.findService(
|
||||
localIp,
|
||||
unfinishedStream.getFirstIp().getHostAddress(),
|
||||
unfinishedStream.getFirstPort(),
|
||||
unfinishedStream.getSecondIp().getHostAddress(),
|
||||
unfinishedStream.getSecondPort()
|
||||
).get());
|
||||
|
||||
Stream savedStream = save(stream);
|
||||
|
||||
List<ru.serega6531.packmate.model.Packet> savedPackets = new ArrayList<>();
|
||||
Set<Pattern> matches = new HashSet<>();
|
||||
|
||||
for (ru.serega6531.packmate.model.Packet packet : packets) {
|
||||
packet.setStream(savedStream);
|
||||
savedPackets.add(packetService.save(packet));
|
||||
matches.addAll(patternService.findMatching(packet.getContent()));
|
||||
}
|
||||
|
||||
savedStream.setFoundPatterns(new ArrayList<>(matches));
|
||||
savedStream.setPackets(savedPackets);
|
||||
savedStream = save(savedStream);
|
||||
|
||||
subscriptionService.broadcastNewStream(savedStream);
|
||||
}
|
||||
|
||||
public Stream save(Stream stream) {
|
||||
if(!stream.getPackets().isEmpty()) {
|
||||
Set<Pattern> matches = new HashSet<>();
|
||||
|
||||
stream.getPackets().forEach(packet -> {
|
||||
matches.addAll(patternService.findMatching(packet.getContent()));
|
||||
});
|
||||
|
||||
stream.setFoundPatterns(matches);
|
||||
Stream saved;
|
||||
if(stream.getId() == null) {
|
||||
saved = repository.save(stream);
|
||||
log.info("Создан стрим с id {}", saved.getId());
|
||||
} else {
|
||||
saved = repository.save(stream);
|
||||
}
|
||||
|
||||
final Stream saved = repository.save(stream);
|
||||
log.info("Создан стрим с id {}", saved.getId());
|
||||
return saved;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user