From 16e569d82357757ddac6ef91d7a5fe7837319909 Mon Sep 17 00:00:00 2001 From: Jacob Su Date: Tue, 13 Aug 2024 11:23:11 +0800 Subject: [PATCH] Config: Improve env config to support multi values. v7.0.2 (#4092) 1. add on_connect & on_close directives to conf/full.conf; 2. let http_hooks env overwrite support multi values; e.g. SRS_VHOST_HTTP_HOOKS_ON_CONNECT="http://127.0.0.1/api/connect http://localhost/api/connect" related to https://github.com/ossrs/srs/issues/1222#issuecomment-2170424703 Above comments said `http_hook` env may not works as expected, as I found there are still has some issue in `http_hooks` env configuration, but this PR may not target above problem. --------- Co-authored-by: winlin --- trunk/doc/CHANGELOG.md | 1 + trunk/src/app/srs_app_config.cpp | 20 ++++++++------- trunk/src/core/srs_core_version7.hpp | 2 +- trunk/src/utest/srs_utest_config.cpp | 38 +++++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 7366f8aa73..41fc773fa6 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 7.0 Changelog +* v7.0, 2024-08-13, Merge [#4092](https://github.com/ossrs/srs/pull/4092): Config: Improve env config to support multi values. v7.0.2 (#4092) * v7.0, 2024-08-12, Merge [#4131](https://github.com/ossrs/srs/pull/4131): Transcode: More generic h264/h265 codec support. v7.0.1 (#4131) * v7.0, 2024-08-12, Init SRS 7 branch. v7.0.0 diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index fe9174541c..06174bddbb 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -68,15 +68,17 @@ const char* _srs_version = "XCORE-" RTMP_SIG_SRS_SERVER; #define SRS_OVERWRITE_BY_ENV_MILLISECONDS(key) if (!srs_getenv(key).empty()) return (srs_utime_t)(::atoi(srs_getenv(key).c_str()) * SRS_UTIME_MILLISECONDS) #define SRS_OVERWRITE_BY_ENV_FLOAT_SECONDS(key) if (!srs_getenv(key).empty()) return srs_utime_t(::atof(srs_getenv(key).c_str()) * SRS_UTIME_SECONDS) #define SRS_OVERWRITE_BY_ENV_FLOAT_MILLISECONDS(key) if (!srs_getenv(key).empty()) return srs_utime_t(::atof(srs_getenv(key).c_str()) * SRS_UTIME_MILLISECONDS) -#define SRS_OVERWRITE_BY_ENV_DIRECTIVE(key) { \ - static SrsConfDirective* dir = NULL; \ - if (!dir && !srs_getenv(key).empty()) { \ - string v = srs_getenv(key); \ - dir = new SrsConfDirective(); \ - dir->name = key; \ - dir->args.push_back(v); \ - } \ - if (dir) return dir; \ +#define SRS_OVERWRITE_BY_ENV_DIRECTIVE(key) { \ + static SrsConfDirective* dir = NULL; \ + if (!dir && !srs_getenv(key).empty()) { \ + std::vector vec = srs_string_split(srs_getenv(key), " "); \ + dir = new SrsConfDirective(); \ + dir->name = key; \ + for (size_t i = 0; i < vec.size(); ++i) { \ + dir->args.push_back(vec[i]); \ + } \ + } \ + if (dir) return dir; \ } /** diff --git a/trunk/src/core/srs_core_version7.hpp b/trunk/src/core/srs_core_version7.hpp index 54280c2db2..3ca80ce7d2 100644 --- a/trunk/src/core/srs_core_version7.hpp +++ b/trunk/src/core/srs_core_version7.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 7 #define VERSION_MINOR 0 -#define VERSION_REVISION 1 +#define VERSION_REVISION 2 #endif \ No newline at end of file diff --git a/trunk/src/utest/srs_utest_config.cpp b/trunk/src/utest/srs_utest_config.cpp index a2472e4197..c56e42efeb 100644 --- a/trunk/src/utest/srs_utest_config.cpp +++ b/trunk/src/utest/srs_utest_config.cpp @@ -3369,7 +3369,20 @@ VOID TEST(ConfigMainTest, CheckVhostConfig3) if (true) { MockSrsConfig conf; HELPER_ASSERT_SUCCESS(conf.parse(_MIN_OK_CONF "vhost ossrs.net{http_hooks{on_connect xxx;}}")); - EXPECT_TRUE(conf.get_vhost_on_connect("ossrs.net") != NULL); + SrsConfDirective* dir = conf.get_vhost_on_connect("ossrs.net"); + ASSERT_TRUE(dir != NULL); + ASSERT_EQ((int)dir->args.size(), 1); + ASSERT_STREQ("xxx", dir->arg0().c_str()); + } + + if (true) { + MockSrsConfig conf; + HELPER_ASSERT_SUCCESS(conf.parse(_MIN_OK_CONF "vhost ossrs.net{http_hooks{on_connect xxx yyy;}}")); + SrsConfDirective* dir = conf.get_vhost_on_connect("ossrs.net"); + ASSERT_TRUE(dir != NULL); + ASSERT_EQ((int)dir->args.size(), 2); + ASSERT_STREQ("xxx", dir->arg0().c_str()); + ASSERT_STREQ("yyy", dir->arg1().c_str()); } if (true) { @@ -5046,11 +5059,29 @@ VOID TEST(ConfigEnvTest, CheckEnvValuesHooks) } if (true) { - SrsSetEnvConfig(hooks, "SRS_VHOST_HTTP_HOOKS_ON_PUBLISH", "http://server/api/publish"); - SrsConfDirective* dir = conf.get_vhost_on_publish("__defaultVhost__"); + SrsSetEnvConfig(hooks, "SRS_VHOST_HTTP_HOOKS_ON_CONNECT", "http://server/api/connect https://server2/api/connect2"); + SrsConfDirective* dir = conf.get_vhost_on_connect("__defaultVhost__"); + ASSERT_TRUE(dir != NULL); + ASSERT_EQ((int)dir->args.size(), 2); + ASSERT_STREQ("http://server/api/connect", dir->arg0().c_str()); + ASSERT_STREQ("https://server2/api/connect2", dir->arg1().c_str()); + } + + if (true) { + SrsSetEnvConfig(hooks, "SRS_VHOST_HTTP_HOOKS_ON_CLOSE", "http://server/api/close"); + SrsConfDirective* dir = conf.get_vhost_on_close("__defaultVhost__"); ASSERT_TRUE(dir != NULL); ASSERT_TRUE((int)dir->args.size() == 1); + ASSERT_STREQ("http://server/api/close", dir->arg0().c_str()); + } + + if (true) { + SrsSetEnvConfig(hooks, "SRS_VHOST_HTTP_HOOKS_ON_PUBLISH", "http://server/api/publish http://server/api/publish2"); + SrsConfDirective* dir = conf.get_vhost_on_publish("__defaultVhost__"); + ASSERT_TRUE(dir != NULL); + ASSERT_EQ((int)dir->args.size(), 2); ASSERT_STREQ("http://server/api/publish", dir->arg0().c_str()); + ASSERT_STREQ("http://server/api/publish2", dir->arg1().c_str()); } if (true) { @@ -5101,4 +5132,3 @@ VOID TEST(ConfigEnvTest, CheckEnvValuesHooks) ASSERT_STREQ("http://server/api/hls_notify", dir->arg0().c_str()); } } -