diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index 82250c703..cf1446bc0 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -38,6 +38,7 @@ srs_log_file ./objs/srs.log; # default: 2000 max_connections 1000; # whether start as deamon +# @remark: donot support reload. # default: on daemon on; @@ -66,7 +67,7 @@ http_api { # user can access the http server pages, generally: # curl http://192.168.1.170:80/srs.html # which will show srs version and welcome to srs. -# @remeark, the http embeded stream need to config the vhost, for instance, the __defaultVhost__ +# @remark, the http embeded stream need to config the vhost, for instance, the __defaultVhost__ # need to open the feature http of vhost. http_stream { # whether http streaming service is enabled. diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 623fd464d..0b6a8d620 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -554,7 +554,7 @@ int SrsConfig::reload() } // directly supported for reload: - // chunk_size, ff_log_dir + // chunk_size, ff_log_dir, max_connections // merge config: pithy_print if (!srs_directive_equals(root->get("pithy_print"), old_root->get("pithy_print"))) { @@ -643,6 +643,17 @@ int SrsConfig::reload() // merge config: vhost modified. srs_trace("vhost %s modified, reload its detail.", vhost.c_str()); if (get_vhost_enabled(new_vhost) && get_vhost_enabled(old_vhost)) { + // atc, only one per vhost + if (!srs_directive_equals(new_vhost->get("atc"), old_vhost->get("atc"))) { + for (it = subscribes.begin(); it != subscribes.end(); ++it) { + ISrsReloadHandler* subscribe = *it; + if ((ret = subscribe->on_reload_atc(vhost)) != ERROR_SUCCESS) { + srs_error("vhost %s notify subscribes atc failed. ret=%d", vhost.c_str(), ret); + return ret; + } + } + srs_trace("vhost %s reload atc success.", vhost.c_str()); + } // gop_cache, only one per vhost if (!srs_directive_equals(new_vhost->get("gop_cache"), old_vhost->get("gop_cache"))) { for (it = subscribes.begin(); it != subscribes.end(); ++it) { diff --git a/trunk/src/app/srs_app_reload.cpp b/trunk/src/app/srs_app_reload.cpp index 0747b395d..7fb5facd0 100644 --- a/trunk/src/app/srs_app_reload.cpp +++ b/trunk/src/app/srs_app_reload.cpp @@ -75,6 +75,11 @@ int ISrsReloadHandler::on_reload_vhost_removed(string /*vhost*/) return ERROR_SUCCESS; } +int ISrsReloadHandler::on_reload_atc(string /*vhost*/) +{ + return ERROR_SUCCESS; +} + int ISrsReloadHandler::on_reload_gop_cache(string /*vhost*/) { return ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_reload.hpp b/trunk/src/app/srs_app_reload.hpp index f01c700a1..d2a5198ee 100644 --- a/trunk/src/app/srs_app_reload.hpp +++ b/trunk/src/app/srs_app_reload.hpp @@ -49,6 +49,7 @@ public: virtual int on_reload_pithy_print(); virtual int on_reload_vhost_added(std::string vhost); virtual int on_reload_vhost_removed(std::string vhost); + virtual int on_reload_atc(std::string vhost); virtual int on_reload_gop_cache(std::string vhost); virtual int on_reload_queue_length(std::string vhost); virtual int on_reload_forward(std::string vhost); diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 41b96fbeb..8d081e6ca 100644 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -484,6 +484,25 @@ SrsSource::~SrsSource() srs_freep(req); } +int SrsSource::on_reload_atc(string vhost) +{ + int ret = ERROR_SUCCESS; + + if (req->vhost != vhost) { + return ret; + } + + // atc changed. + bool enabled_atc = _srs_config->get_atc(vhost); + + srs_warn("vhost %s atc changed to %d, connected client may corrupt.", + vhost.c_str(), enabled_atc); + + gop_cache->clear(); + + return ret; +} + int SrsSource::on_reload_gop_cache(string vhost) { int ret = ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_source.hpp b/trunk/src/app/srs_app_source.hpp index 2f5490643..7ccfb492f 100644 --- a/trunk/src/app/srs_app_source.hpp +++ b/trunk/src/app/srs_app_source.hpp @@ -266,6 +266,7 @@ public: virtual ~SrsSource(); // interface ISrsReloadHandler public: + virtual int on_reload_atc(std::string vhost); virtual int on_reload_gop_cache(std::string vhost); virtual int on_reload_queue_length(std::string vhost); virtual int on_reload_forward(std::string vhost);