summaryrefslogtreecommitdiff
path: root/node/IncomingPacket.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-29 15:26:32 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2014-10-29 15:26:32 -0700
commit22d8aa4dc9e93634f0cc1eb2e13ebafa9e70ea30 (patch)
tree73135be94883a1014d1cf6d9a5d94093d453bc0e /node/IncomingPacket.cpp
parent95f421024a3b3c94a71c5328e23bf5456e7f14ba (diff)
downloadinfinitytier-22d8aa4dc9e93634f0cc1eb2e13ebafa9e70ea30.tar.gz
infinitytier-22d8aa4dc9e93634f0cc1eb2e13ebafa9e70ea30.zip
Moderate efficiency improvement on multicast gather result parsing, and go ahead and keep track of total known peers.
Diffstat (limited to 'node/IncomingPacket.cpp')
-rw-r--r--node/IncomingPacket.cpp15
1 files changed, 2 insertions, 13 deletions
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp
index e2ff24e6..f720825b 100644
--- a/node/IncomingPacket.cpp
+++ b/node/IncomingPacket.cpp
@@ -892,20 +892,9 @@ void IncomingPacket::_sendErrorNeedCertificate(const RuntimeEnvironment *RR,cons
void IncomingPacket::_parseGatherResults(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer,uint64_t nwid,const MulticastGroup &mg,unsigned int offset)
{
- //unsigned int totalKnown = at<uint32_t>(offset);
+ unsigned int totalKnown = at<uint32_t>(offset);
unsigned int count = at<uint16_t>(offset + 4);
- const unsigned char *p = (const unsigned char *)data() + offset + 6;
- const unsigned char *e = (const unsigned char *)data() + size();
- Address atmp;
- uint64_t now = Utils::now();
- for(unsigned int i=0;i<count;++i) {
- const unsigned char *n = p + ZT_ADDRESS_LENGTH;
- if (n > e)
- break;
- atmp.setTo(p,ZT_ADDRESS_LENGTH);
- RR->mc->add(now,nwid,mg,peer->address(),atmp);
- p = n;
- }
+ RR->mc->addMultiple(Utils::now(),nwid,mg,peer->address(),field(offset + 6,count * 5),count,totalKnown);
}
} // namespace ZeroTier