From c2aac69a9f982954caf519082192bb98173d8484 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Sat, 11 Oct 2014 15:49:31 -0700 Subject: Fixes to legacy peer support. --- node/Multicaster.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'node/Multicaster.cpp') diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp index 25884431..1269d35b 100644 --- a/node/Multicaster.cpp +++ b/node/Multicaster.cpp @@ -118,21 +118,18 @@ restart_member_scan: return added; } -std::vector
Multicaster::getLegacySubscribers(uint64_t nwid,const MulticastGroup &mg) const +std::vector
Multicaster::getMembers(uint64_t nwid,const MulticastGroup &mg,unsigned int limit) const { std::vector
ls; Mutex::Lock _l(_groups_m); - std::map< std::pair,MulticastGroupStatus >::const_iterator gs(_groups.find(std::pair(nwid,mg))); if (gs == _groups.end()) return ls; - - for(std::vector::const_iterator m(gs->second.members.begin());m!=gs->second.members.end();++m) { - SharedPtr p(RR->topology->getPeer(m->address)); - if ((p)&&(p->remoteVersionKnown())&&(p->remoteVersionMajor() < 1)) - ls.push_back(m->address); + for(std::vector::const_reverse_iterator m(gs->second.members.rbegin());m!=gs->second.members.rend();++m) { + ls.push_back(m->address); + if (ls.size() >= limit) + break; } - return ls; } @@ -281,7 +278,9 @@ void Multicaster::send( outp.append((unsigned char)0); RR->identity.address().appendTo(outp); outp.append((const void *)&rn,3); // random multicast ID - src.appendTo(outp); + if (src) + src.appendTo(outp); + else MAC(RR->identity.address(),nwid).appendTo(outp); mg.mac().appendTo(outp); outp.append((uint32_t)mg.adi()); outp.append((uint16_t)etherType); -- cgit v1.2.3