|
|
|
|
@ -1493,25 +1493,27 @@ void Network::_sendUpdatesToMembers(void *tPtr,const MulticastGroup *const newMu
|
|
|
|
|
void Network::_announceMulticastGroupsTo(void *tPtr,const Address &peer,const std::vector<MulticastGroup> &allMulticastGroups) |
|
|
|
|
{ |
|
|
|
|
// Assumes _lock is locked
|
|
|
|
|
Packet outp(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE); |
|
|
|
|
Packet *const outp = new Packet(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE); |
|
|
|
|
|
|
|
|
|
for(std::vector<MulticastGroup>::const_iterator mg(allMulticastGroups.begin());mg!=allMulticastGroups.end();++mg) { |
|
|
|
|
if ((outp.size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) { |
|
|
|
|
outp.compress(); |
|
|
|
|
RR->sw->send(tPtr,outp,true); |
|
|
|
|
outp.reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE); |
|
|
|
|
if ((outp->size() + 24) >= ZT_PROTO_MAX_PACKET_LENGTH) { |
|
|
|
|
outp->compress(); |
|
|
|
|
RR->sw->send(tPtr,*outp,true); |
|
|
|
|
outp->reset(peer,RR->identity.address(),Packet::VERB_MULTICAST_LIKE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// network ID, MAC, ADI
|
|
|
|
|
outp.append((uint64_t)_id); |
|
|
|
|
mg->mac().appendTo(outp); |
|
|
|
|
outp.append((uint32_t)mg->adi()); |
|
|
|
|
outp->append((uint64_t)_id); |
|
|
|
|
mg->mac().appendTo(*outp); |
|
|
|
|
outp->append((uint32_t)mg->adi()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (outp.size() > ZT_PROTO_MIN_PACKET_LENGTH) { |
|
|
|
|
outp.compress(); |
|
|
|
|
RR->sw->send(tPtr,outp,true); |
|
|
|
|
if (outp->size() > ZT_PROTO_MIN_PACKET_LENGTH) { |
|
|
|
|
outp->compress(); |
|
|
|
|
RR->sw->send(tPtr,*outp,true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
delete outp; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
std::vector<MulticastGroup> Network::_allMulticastGroups() const |
|
|
|
|
|