diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-09-12 15:19:21 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-09-12 15:19:21 -0700 |
| commit | ea1da3321a8f95eb2f42b62d805841e2d8379e21 (patch) | |
| tree | cc2abedfc8548188429d3a494239e95e22fb9414 /node/IncomingPacket.cpp | |
| parent | 34b146f28bf09bf3c048f723c8fad144a0a37837 (diff) | |
| download | infinitytier-ea1da3321a8f95eb2f42b62d805841e2d8379e21.tar.gz infinitytier-ea1da3321a8f95eb2f42b62d805841e2d8379e21.zip | |
Rate gate requests for COM.
Diffstat (limited to 'node/IncomingPacket.cpp')
| -rw-r--r-- | node/IncomingPacket.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index a1458a80..eff87350 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -156,11 +156,14 @@ bool IncomingPacket::_doERROR(const RuntimeEnvironment *RR,const SharedPtr<Peer> case Packet::ERROR_NEED_MEMBERSHIP_CERTIFICATE: { SharedPtr<Network> network(RR->node->network(at<uint64_t>(ZT_PROTO_VERB_ERROR_IDX_PAYLOAD))); if ((network)&&(network->recentlyAllowedOnNetwork(peer))) { - Packet outp(peer->address(),RR->identity.address(),Packet::VERB_NETWORK_CREDENTIALS); - network->config().com.serialize(outp); - outp.append((uint8_t)0); - outp.armor(peer->key(),true); - _path->send(RR,outp.data(),outp.size(),RR->node->now()); + const uint64_t now = RR->node->now(); + if (peer->rateGateComRequest(now)) { + Packet outp(peer->address(),RR->identity.address(),Packet::VERB_NETWORK_CREDENTIALS); + network->config().com.serialize(outp); + outp.append((uint8_t)0); + outp.armor(peer->key(),true); + _path->send(RR,outp.data(),outp.size(),now); + } } } break; |
