summaryrefslogtreecommitdiff
path: root/node/Peer.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-06 18:27:24 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-06 18:27:24 -0700
commit51f46a009a7de20153ff9594a407c55684468a1e (patch)
treef247a785078edf5ee4336bc2d7657a6d389a5ef7 /node/Peer.cpp
parent8001b2c0cb6d35bfbc7b7be78d1a8b6d0fafbd53 (diff)
downloadinfinitytier-51f46a009a7de20153ff9594a407c55684468a1e.tar.gz
infinitytier-51f46a009a7de20153ff9594a407c55684468a1e.zip
Multicast group join/leave and group membership announcement.
Diffstat (limited to 'node/Peer.cpp')
-rw-r--r--node/Peer.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/node/Peer.cpp b/node/Peer.cpp
index 0bff2aae..076dbb41 100644
--- a/node/Peer.cpp
+++ b/node/Peer.cpp
@@ -106,20 +106,18 @@ void Peer::received(
/* Announce multicast groups of interest to direct peers if they are
* considered authorized members of a given network. Also announce to
- * supernodes and network controllers. The other place this is done
- * is in rescanMulticastGroups() in Network, but that only sends something
- * if a network's multicast groups change. */
+ * supernodes and network controllers. */
if ((now - _lastAnnouncedTo) >= ((ZT_MULTICAST_LIKE_EXPIRE / 2) - 1000)) {
_lastAnnouncedTo = now;
- bool isSupernode = RR->topology->isSupernode(_id.address());
+ const bool isSupernode = RR->topology->isSupernode(_id.address());
Packet outp(_id.address(),RR->identity.address(),Packet::VERB_MULTICAST_LIKE);
- std::vector< SharedPtr<Network> > networks(RR->nc->networks());
- for(std::vector< SharedPtr<Network> >::iterator n(networks.begin());n!=networks.end();++n) {
- if ( ((*n)->isAllowed(_id.address())) || (isSupernode) ) {
- std::set<MulticastGroup> mgs((*n)->multicastGroups());
- for(std::set<MulticastGroup>::iterator mg(mgs.begin());mg!=mgs.end();++mg) {
+ const std::vector< SharedPtr<Network> > networks(RR->node->allNetworks());
+ for(std::vector< SharedPtr<Network> >::const_iterator n(networks.begin());n!=networks.end();++n) {
+ if ( (isSupernode) || ((*n)->isAllowed(_id.address())) ) {
+ const std::vector<MulticastGroup> mgs((*n)->allMulticastGroups());
+ for(std::vector<MulticastGroup>::const_iterator mg(mgs.begin());mg!=mgs.end();++mg) {
if ((outp.size() + 18) > ZT_UDP_DEFAULT_PAYLOAD_MTU) {
outp.armor(_key,true);
RR->node->putPacket(remoteAddr,outp.data(),outp.size(),linkDesperation,false);