diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-10-01 13:34:12 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-10-01 13:34:12 -0700 |
commit | 6693149f3e2d1557f007ace99987694a34ebe6f8 (patch) | |
tree | faea301f182b76607381882a7b53e71f95bad62f | |
parent | 2c196307ee39be1ee8d317ad83f2b5e85cbe6d8d (diff) | |
download | infinitytier-6693149f3e2d1557f007ace99987694a34ebe6f8.tar.gz infinitytier-6693149f3e2d1557f007ace99987694a34ebe6f8.zip |
Send COM with MULTICAST_GATHER for future use.
-rw-r--r-- | node/Multicaster.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/node/Multicaster.cpp b/node/Multicaster.cpp index 07792737..420a00ff 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; + if (sn->needsOurNetworkMembershipCertificate(nwid,now,true)) { + SharedPtr<Network> nw = RR->node->network(nwid); + SharedPtr<NetworkConfig> nconf; + 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); } |