diff --git a/src/network/FNENetwork.cpp b/src/network/FNENetwork.cpp index e8ef3db1..5d3f4074 100644 --- a/src/network/FNENetwork.cpp +++ b/src/network/FNENetwork.cpp @@ -771,6 +771,25 @@ void FNENetwork::writeTGIDs(uint32_t peerId, bool queueOnly) std::vector> tgidList; auto groupVoice = m_tidLookup->groupVoice(); for (auto entry : groupVoice) { + std::vector inclusion = entry.config().inclusion(); + std::vector exclusion = entry.config().exclusion(); + + // peer inclusion lists take priority over exclusion lists + if (inclusion.size() > 0) { + auto it = std::find(inclusion.begin(), inclusion.end(), peerId); + if (it == inclusion.end()) { + continue; + } + } + else { + if (exclusion.size() > 0) { + auto it = std::find(exclusion.begin(), exclusion.end(), peerId); + if (it != inclusion.end()) { + continue; + } + } + } + if (entry.config().active()) { tgidList.push_back({ entry.source().tgId(), entry.source().tgSlot() }); } @@ -820,6 +839,25 @@ void FNENetwork::writeDeactiveTGIDs(uint32_t peerId, bool queueOnly) std::vector> tgidList; auto groupVoice = m_tidLookup->groupVoice(); for (auto entry : groupVoice) { + std::vector inclusion = entry.config().inclusion(); + std::vector exclusion = entry.config().exclusion(); + + // peer inclusion lists take priority over exclusion lists + if (inclusion.size() > 0) { + auto it = std::find(inclusion.begin(), inclusion.end(), peerId); + if (it == inclusion.end()) { + continue; + } + } + else { + if (exclusion.size() > 0) { + auto it = std::find(exclusion.begin(), exclusion.end(), peerId); + if (it != inclusion.end()) { + continue; + } + } + } + if (!entry.config().active()) { tgidList.push_back({ entry.source().tgId(), entry.source().tgSlot() }); }