diff options
Diffstat (limited to 'node/Network.cpp')
| -rw-r--r-- | node/Network.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/node/Network.cpp b/node/Network.cpp index 43f3f1fa..da45f050 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -137,10 +137,33 @@ Network::~Network() } } +std::vector<MulticastGroup> Network::allMulticastGroups() const +{ + Mutex::Lock _l(_lock); + std::vector<MulticastGroup> mgs(_myMulticastGroups); + std::vector<MulticastGroup>::iterator oldend(mgs.end()); + for(std::map< MulticastGroup,uint64_t >::const_iterator i(_multicastGroupsBehindMe.begin());i!=_multicastGroupsBehindMe.end();++i) { + if (!std::binary_search(mgs.begin(),oldend,i->first)) + mgs.push_back(i->first); + } + std::sort(mgs.begin(),mgs.end()); + return mgs; +} + +bool Network::subscribedToMulticastGroup(const MulticastGroup &mg,bool includeBridgedGroups) const +{ + Mutex::Lock _l(_lock); + if (std::binary_search(_myMulticastGroups.begin(),_myMulticastGroups.end(),mg)) + return true; + else if (includeBridgedGroups) + return (_multicastGroupsBehindMe.find(mg) != _multicastGroupsBehindMe.end()); + else return false; +} + void Network::multicastSubscribe(const MulticastGroup &mg) { Mutex::Lock _l(_lock); - if (std::find(_myMulticastGroups.begin(),_myMulticastGroups.end(),mg) != _myMulticastGroups.end()) + if (std::binary_search(_myMulticastGroups.begin(),_myMulticastGroups.end(),mg)) return; _myMulticastGroups.push_back(mg); std::sort(_myMulticastGroups.begin(),_myMulticastGroups.end()); |
