summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
Diffstat (limited to 'node')
-rw-r--r--node/Network.cpp25
-rw-r--r--node/Network.hpp23
2 files changed, 27 insertions, 21 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());
diff --git a/node/Network.hpp b/node/Network.hpp
index fa76152b..930d1538 100644
--- a/node/Network.hpp
+++ b/node/Network.hpp
@@ -100,31 +100,14 @@ public:
/**
* @return All multicast groups including learned groups that are behind any bridges we're attached to
*/
- inline std::vector<MulticastGroup> allMulticastGroups() const
- {
- Mutex::Lock _l(_lock);
- std::vector<MulticastGroup> mgs(_myMulticastGroups);
- for(std::map< MulticastGroup,uint64_t >::const_iterator i(_multicastGroupsBehindMe.begin());i!=_multicastGroupsBehindMe.end();++i) {
- if (std::find(mgs.begin(),mgs.end(),i->first) == mgs.end())
- mgs.push_back(i->first);
- }
- std::sort(mgs.begin(),mgs.end());
- return mgs;
- }
+ std::vector<MulticastGroup> allMulticastGroups() const;
/**
* @param mg Multicast group
+ * @param includeBridgedGroups If true, also include any groups we've learned via bridging
* @return True if this network endpoint / peer is a member
*/
- bool subscribedToMulticastGroup(const MulticastGroup &mg,bool includeBridgedGroups) const
- {
- Mutex::Lock _l(_lock);
- if (std::find(_myMulticastGroups.begin(),_myMulticastGroups.end(),mg) != _myMulticastGroups.end())
- return true;
- else if (includeBridgedGroups)
- return (_multicastGroupsBehindMe.find(mg) != _multicastGroupsBehindMe.end());
- else return false;
- }
+ bool subscribedToMulticastGroup(const MulticastGroup &mg,bool includeBridgedGroups) const;
/**
* Subscribe to a multicast group