diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md
index 7366f8aa7..41fc773fa 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 fe9174541..06174bddb 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 54280c2db..3ca80ce7d 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 a2472e419..c56e42efe 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());
}
}
-