diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-03 22:03:19 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-10-03 22:03:19 -0700 |
| commit | e7c81ef34e9db426d6ba72e2feae4180233631e5 (patch) | |
| tree | 3df3e177c0285ab328153adde896f5d6ba9a39c3 /node/Multicaster.cpp | |
| parent | 3f7e7e8a88e4edb0a62def5efbe204d22bbff7a4 (diff) | |
| download | infinitytier-e7c81ef34e9db426d6ba72e2feae4180233631e5.tar.gz infinitytier-e7c81ef34e9db426d6ba72e2feae4180233631e5.zip | |
Turns out that needed to be a list after all. Also clean up Multicaster::gather().
Diffstat (limited to 'node/Multicaster.cpp')
| -rw-r--r-- | node/Multicaster.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp index b3c0abd8..6f3c4395 100644 --- a/node/Multicaster.cpp +++ b/node/Multicaster.cpp @@ -66,12 +66,13 @@ unsigned int Multicaster::gather(const RuntimeEnvironment *RR,const Address &que if (limit > gs->second.members.size()) limit = (unsigned int)gs->second.members.size(); - if (limit > 0xffff) // sanity check -- this won't fit in a packet anyway - limit = 0xffff; + if (limit > ((ZT_PROTO_MAX_PACKET_LENGTH / 5) + 1)) + limit = (ZT_PROTO_MAX_PACKET_LENGTH / 5) + 1; - appendTo.append((uint32_t)gs->second.members.size()); + unsigned int totalAt = appendTo.size(); + appendTo.addSize(4); // sizeof(uint32_t) unsigned int nAt = appendTo.size(); - appendTo.append((uint16_t)0); // set to n later + appendTo.addSize(2); // sizeof(uint16_t) while ((n < limit)&&((appendTo.size() + ZT_ADDRESS_LENGTH) <= ZT_PROTO_MAX_PACKET_LENGTH)) { // Pick a member at random -- if we've already picked it, @@ -103,6 +104,7 @@ restart_member_scan: } } + appendTo.setAt(totalAt,(uint32_t)(gs->second.members.size() - skipped)); appendTo.setAt(nAt,(uint16_t)(n - skipped)); return n; |
