From bb6389143faa78bd0cc3bd17f192bcc955a1cbd7 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 8 Apr 2019 08:46:22 +0800 Subject: [PATCH] Refine get_bw_check_interval in time unit --- trunk/src/app/srs_app_bandwidth.cpp | 11 +++++------ trunk/src/app/srs_app_config.cpp | 6 +++--- trunk/src/app/srs_app_config.hpp | 5 +++-- trunk/src/utest/srs_utest_config.cpp | 11 ++++++++++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/trunk/src/app/srs_app_bandwidth.cpp b/trunk/src/app/srs_app_bandwidth.cpp index f0a843bc2..5bc17e587 100644 --- a/trunk/src/app/srs_app_bandwidth.cpp +++ b/trunk/src/app/srs_app_bandwidth.cpp @@ -144,15 +144,14 @@ srs_error_t SrsBandwidth::bandwidth_check(SrsRtmpServer* rtmp, ISrsProtocolStati // to prevent bandwidth check attack, // if client request check in the window(specifeid by interval), // directly reject the request. - static int64_t last_check_time = 0; - int interval_ms = _srs_config->get_bw_check_interval_ms(_req->vhost); + static srs_utime_t last_check_time = 0; + srs_utime_t interval = _srs_config->get_bw_check_interval(_req->vhost); - srs_update_system_time_ms(); - int64_t time_now = srs_get_system_time_ms(); + srs_utime_t time_now = srs_update_system_time_ms() * SRS_UTIME_MILLISECONDS; // reject the connection in the interval window. - if (last_check_time > 0 && time_now - last_check_time < interval_ms) { + if (last_check_time > 0 && time_now - last_check_time < interval) { _rtmp->response_connect_reject(_req, "bandcheck rejected"); - return srs_error_new(ERROR_SYSTEM_BANDWIDTH_DENIED, "reject, last_check=%" PRId64 ", now=%" PRId64 ", interval=%d", last_check_time, time_now, interval_ms); + return srs_error_new(ERROR_SYSTEM_BANDWIDTH_DENIED, "reject, last_check=%" PRId64 ", now=%" PRId64 ", interval=%d", last_check_time, time_now, interval); } // accept and do bandwidth check. diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 9eac88654..b1ba652bf 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -5026,9 +5026,9 @@ string SrsConfig::get_bw_check_key(string vhost) return conf->arg0(); } -int SrsConfig::get_bw_check_interval_ms(string vhost) +srs_utime_t SrsConfig::get_bw_check_interval(string vhost) { - static int DEFAULT = 30 * 1000; + static int64_t DEFAULT = 30 * SRS_UTIME_SECONDS; SrsConfDirective* conf = get_vhost(vhost); if (!conf) { @@ -5045,7 +5045,7 @@ int SrsConfig::get_bw_check_interval_ms(string vhost) return DEFAULT; } - return (int)(::atof(conf->arg0().c_str()) * 1000); + return (srs_utime_t)(::atof(conf->arg0().c_str()) * SRS_UTIME_SECONDS); } int SrsConfig::get_bw_check_limit_kbps(string vhost) diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index bfea0991a..8fa591ace 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -34,6 +34,7 @@ #include #include #include +#include class SrsRequest; class SrsFileWriter; @@ -896,12 +897,12 @@ public: */ virtual std::string get_bw_check_key(std::string vhost); /** - * the check interval, in ms. + * the check interval, in srs_utime_t. * if the client request check in very short time(in the interval), * SRS will reject client. * @remark this is used to prevent the bandwidth check attack. */ - virtual int get_bw_check_interval_ms(std::string vhost); + virtual srs_utime_t get_bw_check_interval(std::string vhost); /** * the max kbps that user can test, * if exceed the kbps, server will slowdown the send-recv. diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp index cd9044a81..7e44c238d 100644 --- a/trunk/src/utest/srs_utest_config.cpp +++ b/trunk/src/utest/srs_utest_config.cpp @@ -1809,7 +1809,16 @@ VOID TEST(ConfigUnitTest, CheckDefaultValues) MockSrsConfig conf; if (true) { EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF)); - EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_bw_check_interval_ms("")); + EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_bw_check_interval("")); + + EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF"vhost v{}")); + EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_bw_check_interval("v")); + + EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF"vhost v{bandcheck{}}")); + EXPECT_EQ(30 * SRS_UTIME_SECONDS, conf.get_bw_check_interval("v")); + + EXPECT_TRUE(ERROR_SUCCESS == conf.parse(_MIN_OK_CONF"vhost v{bandcheck{interval 1.1;}}")); + EXPECT_EQ(srs_utime_t(1.1 * SRS_UTIME_SECONDS), conf.get_bw_check_interval("v")); } }