diff options
-rw-r--r-- | node/Multicaster.hpp | 5 | ||||
-rw-r--r-- | node/PacketDecoder.cpp | 1 | ||||
-rw-r--r-- | node/Topology.cpp | 1 |
3 files changed, 4 insertions, 3 deletions
diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp index d9d12607..9a7000af 100644 --- a/node/Multicaster.hpp +++ b/node/Multicaster.hpp @@ -287,12 +287,11 @@ public: } // Add a supernode if there's nowhere else to go. Supernodes know of all multicast - // LIKEs and so can act to bridge sparse multicast groups. We do not remember them - // in the bloom filter. + // LIKEs and so can act to bridge sparse multicast groups. if (!picked) { Address avoid[2]; avoid[0] = upstream; - avoid[1] = originalSubmitter; + avoid[1] = originalSubmitter; // otherwise supernodes will play ping pong P peer = topology.getBestSupernode(avoid,2,true); if (peer) peers[picked++] = peer; diff --git a/node/PacketDecoder.cpp b/node/PacketDecoder.cpp index e953c60c..b2bd6d3e 100644 --- a/node/PacketDecoder.cpp +++ b/node/PacketDecoder.cpp @@ -477,6 +477,7 @@ bool PacketDecoder::_doMULTICAST_FRAME(const RuntimeEnvironment *_r,const Shared setSource(_r->identity.address()); (*this)[ZT_PROTO_VERB_MULTICAST_FRAME_IDX_HOP_COUNT] = hops; + memcpy(field(ZT_PROTO_VERB_MULTICAST_FRAME_IDX_BLOOM_FILTER,ZT_PROTO_VERB_MULTICAST_FRAME_BLOOM_FILTER_SIZE_BYTES),bloom.data(),ZT_PROTO_VERB_MULTICAST_FRAME_BLOOM_FILTER_SIZE_BYTES); compress(); for(unsigned int i=0;i<np;++i) { diff --git a/node/Topology.cpp b/node/Topology.cpp index de65de3b..9632c464 100644 --- a/node/Topology.cpp +++ b/node/Topology.cpp @@ -115,6 +115,7 @@ void Topology::addPeer(const SharedPtr<Peer> &candidate,void (*callback)(void *, SharedPtr<Peer> Topology::getPeer(const Address &zta) { if (zta == _r->identity.address()) { + abort(); TRACE("BUG: ignored attempt to getPeer() for self, returned NULL"); return SharedPtr<Peer>(); } |