#include #include PusPacketFilter::PusPacketFilter() {} void PusPacketFilter::addApid(uint16_t apid) { if (not this->apid) { this->apid = std::vector({apid}); return; } this->apid.value().push_back(apid); } void PusPacketFilter::addService(uint8_t service) { if (not this->services) { this->services = std::vector({service}); return; } this->services.value().push_back(service); } void PusPacketFilter::addServiceSubservice(uint8_t service, uint8_t subservice) { if (not serviceSubservices) { serviceSubservices = std::vector>({std::pair(service, subservice)}); return; } serviceSubservices.value().emplace_back(service, subservice); } bool PusPacketFilter::packetMatches(PusTmReader& reader) const { bool inApidList = false; if (apid) { auto& apidFilter = apid.value(); if (std::find(apidFilter.begin(), apidFilter.end(), reader.getApid()) != apidFilter.end()) { if (not serviceSubservices and not services) { return true; } inApidList = true; } } std::pair serviceSubservice; serviceSubservice.first = reader.getService(); serviceSubservice.second = reader.getSubService(); if (services) { auto& serviceFilter = services.value(); if (std::find(serviceFilter.begin(), serviceFilter.end(), serviceSubservice.first) != serviceFilter.end()) { if (apid and inApidList) { return true; } } } if (serviceSubservices) { auto& serviceSubserviceFilter = serviceSubservices.value(); if (std::find(serviceSubserviceFilter.begin(), serviceSubserviceFilter.end(), serviceSubservice) != serviceSubserviceFilter.end()) { if (apid and inApidList) { return true; } } } return false; }