diff --git a/trunk/conf/compatible.conf b/trunk/conf/compatible.conf index 42767ea87..6b7a2042f 100644 --- a/trunk/conf/compatible.conf +++ b/trunk/conf/compatible.conf @@ -7,7 +7,7 @@ daemon off; http_api { enabled on; listen 1985; - #crossdomain on; + crossdomain on; raw_api { enabled on; allow_reload on; diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index b258c5423..9162b10e7 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -2175,6 +2175,16 @@ int SrsConfig::raw_to_json(SrsAmf0Object* obj) return ret; } +int SrsConfig::raw_set_listen(const vector& eps) +{ + int ret = ERROR_SUCCESS; + + SrsConfDirective* listen = root->get("listen"); + listen->args = eps; + + return ret; +} + string SrsConfig::config() { return config_file; diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index acc94037f..66d80e07e 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -329,6 +329,10 @@ public: * dumps the http_api sections to json for raw api info. */ virtual int raw_to_json(SrsAmf0Object* obj); + /** + * raw set the global listen. + */ + virtual int raw_set_listen(const std::vector& eps); public: /** * get the config file path. diff --git a/trunk/src/app/srs_app_http_api.cpp b/trunk/src/app/srs_app_http_api.cpp index ca4d0f491..437bdb890 100755 --- a/trunk/src/app/srs_app_http_api.cpp +++ b/trunk/src/app/srs_app_http_api.cpp @@ -1006,11 +1006,20 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) } if (invalid) { ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS; - srs_error("raw api update global.listen invalid eps=%s. ret=%d", value.c_str(), ret); + srs_error("raw api update global.listen=%s failed. ret=%d", value.c_str(), ret); + return srs_api_response_code(w, r, ret); + } + + if ((ret = _srs_config->raw_set_listen(eps)) != ERROR_SUCCESS) { + srs_error("raw api update global.listen=%s failed. ret=%d", value.c_str(), ret); return srs_api_response_code(w, r, ret); } } + server->on_signal(SRS_SIGNAL_RELOAD); + server->on_signal(SRS_SIGNAL_PERSISTENCE_CONFIG); + srs_trace("raw api update %s=%s ok.", scope.c_str(), value.c_str()); + return srs_api_response(w, r, obj->to_json()); } diff --git a/trunk/src/app/srs_app_server.cpp b/trunk/src/app/srs_app_server.cpp index fddc40186..7a36a6483 100755 --- a/trunk/src/app/srs_app_server.cpp +++ b/trunk/src/app/srs_app_server.cpp @@ -994,18 +994,6 @@ int SrsServer::do_cycle() return ret; } #endif - - // do reload the config. - if (signal_reload) { - signal_reload = false; - srs_info("get signal to reload the config."); - - if ((ret = _srs_config->reload()) != ERROR_SUCCESS) { - srs_error("reload config failed. ret=%d", ret); - return ret; - } - srs_trace("reload config success."); - } // do persistence config to file. if (signal_persistence_config) { @@ -1018,6 +1006,18 @@ int SrsServer::do_cycle() } srs_trace("persistence config to file success."); } + + // do reload the config. + if (signal_reload) { + signal_reload = false; + srs_info("get signal to reload the config."); + + if ((ret = _srs_config->reload()) != ERROR_SUCCESS) { + srs_error("reload config failed. ret=%d", ret); + return ret; + } + srs_trace("reload config success."); + } // notice the stream sources to cycle. if ((ret = SrsSource::cycle_all()) != ERROR_SUCCESS) {