summaryrefslogtreecommitdiff
path: root/node/IncomingPacket.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-12 15:19:21 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2016-09-12 15:19:21 -0700
commitea1da3321a8f95eb2f42b62d805841e2d8379e21 (patch)
treecc2abedfc8548188429d3a494239e95e22fb9414 /node/IncomingPacket.cpp
parent34b146f28bf09bf3c048f723c8fad144a0a37837 (diff)
downloadinfinitytier-ea1da3321a8f95eb2f42b62d805841e2d8379e21.tar.gz
infinitytier-ea1da3321a8f95eb2f42b62d805841e2d8379e21.zip
Rate gate requests for COM.
Diffstat (limited to 'node/IncomingPacket.cpp')
-rw-r--r--node/IncomingPacket.cpp13
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;