summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-11-13 14:21:06 -0500
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-11-13 14:21:06 -0500
commitc61e9c0ef955e444a4271006e347e56cd717f2f8 (patch)
tree13e3dd1c1998a39280cccc8e1eb94cc49c48f8d2 /node
parentb1b37d9d725859166c0623fbf2a5d6f1b0302593 (diff)
downloadinfinitytier-c61e9c0ef955e444a4271006e347e56cd717f2f8.tar.gz
infinitytier-c61e9c0ef955e444a4271006e347e56cd717f2f8.zip
Prevent "software laser" in legacy multicast support. Already hotpatched in supernodes.
Diffstat (limited to 'node')
-rw-r--r--node/IncomingPacket.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp
index 172a5d5b..efda5370 100644
--- a/node/IncomingPacket.cpp
+++ b/node/IncomingPacket.cpp
@@ -611,14 +611,14 @@ bool IncomingPacket::_doP5_MULTICAST_FRAME(const RuntimeEnvironment *RR,const Sh
std::vector<Address> members(RR->mc->getMembers(nwid,dest,limit));
SharedPtr<Peer> lpp;
+ uint64_t now = Utils::now();
setAt(ZT_PROTO_VERB_P5_MULTICAST_FRAME_IDX_PROPAGATION_DEPTH,(uint16_t)0xffff);
setSource(RR->identity.address());
compress();
for(std::vector<Address>::iterator lp(members.begin());lp!=members.end();++lp) {
- if (!senderIsLegacy)
- lpp = RR->topology->getPeer(*lp);
- if ( (*lp != origin) && (*lp != peer->address()) && ((senderIsLegacy) || (!lpp) || (lpp->remoteVersionMajor() < 1)) ) {
+ lpp = RR->topology->getPeer(*lp);
+ if ( (lpp) && (lpp->hasActiveDirectPath(now)) && (*lp != origin) && (*lp != peer->address()) && ((senderIsLegacy) || (lpp->remoteVersionMajor() < 1)) ) {
newInitializationVector();
setDestination(*lp);
RR->sw->send(*this,true);