From eca340b7851c8c56d868d136584c1ea234497ffc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Fri, 8 Nov 2019 15:29:53 -0500
Subject: [PATCH] tools: add argument to disable rate limiting

---
 tools/dhtchat.cpp    | 4 ++++
 tools/dhtnode.cpp    | 4 ++++
 tools/tools_common.h | 7 ++++++-
 3 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp
index 3ba7c6f4..5c7e72c1 100644
--- a/tools/dhtchat.cpp
+++ b/tools/dhtchat.cpp
@@ -82,6 +82,10 @@ main(int argc, char **argv)
         config.push_token = params.devicekey;
         config.peer_discovery = params.peer_discovery;
         config.peer_publish = params.peer_discovery;
+        if (params.no_rate_limit) {
+            config.dht_config.node_config.max_req_per_sec = -1;
+            config.dht_config.node_config.max_peer_req_per_sec = -1;
+        }
 
         dht::DhtRunner::Context context {};
         if (params.log) {
diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index b80d8cb8..31eca901 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -552,6 +552,10 @@ main(int argc, char **argv)
         config.push_token = params.devicekey;
         config.peer_discovery = params.peer_discovery;
         config.peer_publish = params.peer_discovery;
+        if (params.no_rate_limit) {
+            config.dht_config.node_config.max_req_per_sec = -1;
+            config.dht_config.node_config.max_peer_req_per_sec = -1;
+        }
 
         dht::DhtRunner::Context context {};
         if (params.log) {
diff --git a/tools/tools_common.h b/tools/tools_common.h
index bd682a03..f368afda 100644
--- a/tools/tools_common.h
+++ b/tools/tools_common.h
@@ -131,6 +131,7 @@ struct dht_params {
     std::string privkey_pwd {};
     std::string proxy_privkey_pwd {};
     std::string save_identity {};
+    bool no_rate_limit {false};
 };
 
 static const constexpr struct option long_options[] = {
@@ -147,6 +148,7 @@ static const constexpr struct option long_options[] = {
     {"daemonize",               no_argument      , nullptr, 'd'},
     {"service",                 no_argument      , nullptr, 's'},
     {"peer-discovery",          no_argument      , nullptr, 'D'},
+    {"no-rate-limit",           no_argument      , nullptr, 'U'},
     {"persist",                 required_argument, nullptr, 'f'},
     {"logfile",                 required_argument, nullptr, 'l'},
     {"syslog",                  no_argument      , nullptr, 'L'},
@@ -168,7 +170,7 @@ parseArgs(int argc, char **argv) {
     int opt;
     std::string privkey;
     std::string proxy_privkey;
-    while ((opt = getopt_long(argc, argv, "hidsvDp:n:b:f:l:", long_options, nullptr)) != -1) {
+    while ((opt = getopt_long(argc, argv, "hidsvDUp:n:b:f:l:", long_options, nullptr)) != -1) {
         switch (opt) {
         case 'p': {
                 int port_arg = atoi(optarg);
@@ -212,6 +214,9 @@ parseArgs(int argc, char **argv) {
         case 'n':
             params.network = strtoul(optarg, nullptr, 0);
             break;
+        case 'U':
+            params.no_rate_limit = true;
+            break;
         case 'b':
             params.bootstrap = dht::splitPort((optarg[0] == '=') ? optarg+1 : optarg);
             if (not params.bootstrap.first.empty() and params.bootstrap.second.empty()) {
-- 
GitLab