summaryrefslogtreecommitdiff
path: root/node/Multicaster.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-06 17:56:47 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-06 17:56:47 -0700
commit876aa0883d66340960381ec6388c55b23e5d2b5e (patch)
tree918e1246e2cb98fe74037ff083dcceb475bc6802 /node/Multicaster.cpp
parent36db5865e7ab4ed92ede99f10835fba40e9b9fd8 (diff)
parent477feee8a3fbc84d00c2939b5fc8a9bbf19af2ca (diff)
downloadinfinitytier-876aa0883d66340960381ec6388c55b23e5d2b5e.tar.gz
infinitytier-876aa0883d66340960381ec6388c55b23e5d2b5e.zip
Merge branch 'adamierymenko-dev' into netcon
Diffstat (limited to 'node/Multicaster.cpp')
-rw-r--r--node/Multicaster.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp
index 07792737..6a8d6379 100644
--- a/node/Multicaster.cpp
+++ b/node/Multicaster.cpp
@@ -237,12 +237,25 @@ void Multicaster::send(
if (sn) {
TRACE(">>MC upstream GATHER up to %u for group %.16llx/%s",gatherLimit,nwid,mg.toString().c_str());
+ const CertificateOfMembership *com = (CertificateOfMembership *)0;
+ SharedPtr<NetworkConfig> nconf;
+ if (sn->needsOurNetworkMembershipCertificate(nwid,now,true)) {
+ SharedPtr<Network> nw(RR->node->network(nwid));
+ if (nw) {
+ nconf = nw->config2();
+ if (nconf)
+ com = &(nconf->com());
+ }
+ }
+
Packet outp(sn->address(),RR->identity.address(),Packet::VERB_MULTICAST_GATHER);
outp.append(nwid);
- outp.append((uint8_t)0);
+ outp.append((uint8_t)(com ? 0x01 : 0x00));
mg.mac().appendTo(outp);
outp.append((uint32_t)mg.adi());
outp.append((uint32_t)gatherLimit);
+ if (com)
+ com->serialize(outp);
outp.armor(sn->key(),true);
sn->send(RR,outp.data(),outp.size(),now);
}