正在显示
7 个修改的文件
包含
192 行增加
和
111 行删除
| @@ -137,6 +137,9 @@ http_api { | @@ -137,6 +137,9 @@ http_api { | ||
| 137 | # whether enable rpc query. | 137 | # whether enable rpc query. |
| 138 | # default: off | 138 | # default: off |
| 139 | allow_query off; | 139 | allow_query off; |
| 140 | + # whether enable rpc update. | ||
| 141 | + # default: off | ||
| 142 | + allow_update off; | ||
| 140 | } | 143 | } |
| 141 | } | 144 | } |
| 142 | # embeded http server in srs. | 145 | # embeded http server in srs. |
| @@ -67,6 +67,9 @@ using namespace _srs_internal; | @@ -67,6 +67,9 @@ using namespace _srs_internal; | ||
| 67 | // '\r' | 67 | // '\r' |
| 68 | #define SRS_CR (char)SRS_CONSTS_CR | 68 | #define SRS_CR (char)SRS_CONSTS_CR |
| 69 | 69 | ||
| 70 | +// dumps the engine to amf0 object. | ||
| 71 | +int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine); | ||
| 72 | + | ||
| 70 | bool is_common_space(char ch) | 73 | bool is_common_space(char ch) |
| 71 | { | 74 | { |
| 72 | return (ch == ' ' || ch == '\t' || ch == SRS_CR || ch == SRS_LF); | 75 | return (ch == ' ' || ch == '\t' || ch == SRS_CR || ch == SRS_LF); |
| @@ -1520,6 +1523,8 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) | @@ -1520,6 +1523,8 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) | ||
| 1520 | ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); | 1523 | ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); |
| 1521 | } else if (ssdir->name == "allow_query") { | 1524 | } else if (ssdir->name == "allow_query") { |
| 1522 | ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); | 1525 | ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); |
| 1526 | + } else if (ssdir->name == "allow_update") { | ||
| 1527 | + ssobj->set(ssdir->name, ssdir->dumps_arg0_to_boolean()); | ||
| 1523 | } | 1528 | } |
| 1524 | } | 1529 | } |
| 1525 | } | 1530 | } |
| @@ -2100,7 +2105,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) | @@ -2100,7 +2105,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) | ||
| 2100 | SrsAmf0Object* engine = SrsAmf0Any::object(); | 2105 | SrsAmf0Object* engine = SrsAmf0Any::object(); |
| 2101 | ingest->set("engine", engine); | 2106 | ingest->set("engine", engine); |
| 2102 | 2107 | ||
| 2103 | - if ((ret = dumps_engine(sdir, engine)) != ERROR_SUCCESS) { | 2108 | + if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) { |
| 2104 | return ret; | 2109 | return ret; |
| 2105 | } | 2110 | } |
| 2106 | } | 2111 | } |
| @@ -2138,7 +2143,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) | @@ -2138,7 +2143,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) | ||
| 2138 | SrsAmf0Object* engine = SrsAmf0Any::object(); | 2143 | SrsAmf0Object* engine = SrsAmf0Any::object(); |
| 2139 | engines->append(engine); | 2144 | engines->append(engine); |
| 2140 | 2145 | ||
| 2141 | - if ((ret = dumps_engine(sdir, engine)) != ERROR_SUCCESS) { | 2146 | + if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) { |
| 2142 | return ret; | 2147 | return ret; |
| 2143 | } | 2148 | } |
| 2144 | } | 2149 | } |
| @@ -2165,108 +2170,7 @@ int SrsConfig::raw_to_json(SrsAmf0Object* obj) | @@ -2165,108 +2170,7 @@ int SrsConfig::raw_to_json(SrsAmf0Object* obj) | ||
| 2165 | ssobj->set("enabled", SrsAmf0Any::boolean(get_raw_api())); | 2170 | ssobj->set("enabled", SrsAmf0Any::boolean(get_raw_api())); |
| 2166 | ssobj->set("allow_reload", SrsAmf0Any::boolean(get_raw_api_allow_reload())); | 2171 | ssobj->set("allow_reload", SrsAmf0Any::boolean(get_raw_api_allow_reload())); |
| 2167 | ssobj->set("allow_query", SrsAmf0Any::boolean(get_raw_api_allow_query())); | 2172 | ssobj->set("allow_query", SrsAmf0Any::boolean(get_raw_api_allow_query())); |
| 2168 | - | ||
| 2169 | - return ret; | ||
| 2170 | -} | ||
| 2171 | - | ||
| 2172 | -int SrsConfig::dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) | ||
| 2173 | -{ | ||
| 2174 | - int ret = ERROR_SUCCESS; | ||
| 2175 | - | ||
| 2176 | - SrsConfDirective* conf = NULL; | ||
| 2177 | - | ||
| 2178 | - engine->set("id", dir->dumps_arg0_to_str()); | ||
| 2179 | - engine->set("enabled", SrsAmf0Any::boolean(get_engine_enabled(dir))); | ||
| 2180 | - | ||
| 2181 | - if ((conf = dir->get("iformat")) != NULL) { | ||
| 2182 | - engine->set("iformat", conf->dumps_arg0_to_str()); | ||
| 2183 | - } | ||
| 2184 | - | ||
| 2185 | - if ((conf = dir->get("vfilter")) != NULL) { | ||
| 2186 | - SrsAmf0Object* vfilter = SrsAmf0Any::object(); | ||
| 2187 | - engine->set("vfilter", vfilter); | ||
| 2188 | - | ||
| 2189 | - for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 2190 | - SrsConfDirective* sdir = conf->directives.at(i); | ||
| 2191 | - vfilter->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 2192 | - } | ||
| 2193 | - } | ||
| 2194 | - | ||
| 2195 | - if ((conf = dir->get("vcodec")) != NULL) { | ||
| 2196 | - engine->set("vcodec", conf->dumps_arg0_to_str()); | ||
| 2197 | - } | ||
| 2198 | - | ||
| 2199 | - if ((conf = dir->get("vbitrate")) != NULL) { | ||
| 2200 | - engine->set("vbitrate", conf->dumps_arg0_to_number()); | ||
| 2201 | - } | ||
| 2202 | - | ||
| 2203 | - if ((conf = dir->get("vfps")) != NULL) { | ||
| 2204 | - engine->set("vfps", conf->dumps_arg0_to_number()); | ||
| 2205 | - } | ||
| 2206 | - | ||
| 2207 | - if ((conf = dir->get("vwidth")) != NULL) { | ||
| 2208 | - engine->set("vwidth", conf->dumps_arg0_to_number()); | ||
| 2209 | - } | ||
| 2210 | - | ||
| 2211 | - if ((conf = dir->get("vheight")) != NULL) { | ||
| 2212 | - engine->set("vheight", conf->dumps_arg0_to_number()); | ||
| 2213 | - } | ||
| 2214 | - | ||
| 2215 | - if ((conf = dir->get("vthreads")) != NULL) { | ||
| 2216 | - engine->set("vthreads", conf->dumps_arg0_to_number()); | ||
| 2217 | - } | ||
| 2218 | - | ||
| 2219 | - if ((conf = dir->get("vprofile")) != NULL) { | ||
| 2220 | - engine->set("vprofile", conf->dumps_arg0_to_str()); | ||
| 2221 | - } | ||
| 2222 | - | ||
| 2223 | - if ((conf = dir->get("vpreset")) != NULL) { | ||
| 2224 | - engine->set("vpreset", conf->dumps_arg0_to_str()); | ||
| 2225 | - } | ||
| 2226 | - | ||
| 2227 | - if ((conf = dir->get("vparams")) != NULL) { | ||
| 2228 | - SrsAmf0Object* vparams = SrsAmf0Any::object(); | ||
| 2229 | - engine->set("vparams", vparams); | ||
| 2230 | - | ||
| 2231 | - for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 2232 | - SrsConfDirective* sdir = conf->directives.at(i); | ||
| 2233 | - vparams->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 2234 | - } | ||
| 2235 | - } | ||
| 2236 | - | ||
| 2237 | - if ((conf = dir->get("acodec")) != NULL) { | ||
| 2238 | - engine->set("acodec", conf->dumps_arg0_to_str()); | ||
| 2239 | - } | ||
| 2240 | - | ||
| 2241 | - if ((conf = dir->get("abitrate")) != NULL) { | ||
| 2242 | - engine->set("abitrate", conf->dumps_arg0_to_number()); | ||
| 2243 | - } | ||
| 2244 | - | ||
| 2245 | - if ((conf = dir->get("asample_rate")) != NULL) { | ||
| 2246 | - engine->set("asample_rate", conf->dumps_arg0_to_number()); | ||
| 2247 | - } | ||
| 2248 | - | ||
| 2249 | - if ((conf = dir->get("achannels")) != NULL) { | ||
| 2250 | - engine->set("achannels", conf->dumps_arg0_to_number()); | ||
| 2251 | - } | ||
| 2252 | - | ||
| 2253 | - if ((conf = dir->get("aparams")) != NULL) { | ||
| 2254 | - SrsAmf0Object* aparams = SrsAmf0Any::object(); | ||
| 2255 | - engine->set("aparams", aparams); | ||
| 2256 | - | ||
| 2257 | - for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 2258 | - SrsConfDirective* sdir = conf->directives.at(i); | ||
| 2259 | - aparams->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 2260 | - } | ||
| 2261 | - } | ||
| 2262 | - | ||
| 2263 | - if ((conf = dir->get("oformat")) != NULL) { | ||
| 2264 | - engine->set("oformat", conf->dumps_arg0_to_str()); | ||
| 2265 | - } | ||
| 2266 | - | ||
| 2267 | - if ((conf = dir->get("output")) != NULL) { | ||
| 2268 | - engine->set("output", conf->dumps_arg0_to_str()); | ||
| 2269 | - } | 2173 | + ssobj->set("allow_update", SrsAmf0Any::boolean(get_raw_api_allow_update())); |
| 2270 | 2174 | ||
| 2271 | return ret; | 2175 | return ret; |
| 2272 | } | 2176 | } |
| @@ -2448,7 +2352,7 @@ int SrsConfig::check_config() | @@ -2448,7 +2352,7 @@ int SrsConfig::check_config() | ||
| 2448 | if (n == "raw_api") { | 2352 | if (n == "raw_api") { |
| 2449 | for (int j = 0; j < (int)obj->directives.size(); j++) { | 2353 | for (int j = 0; j < (int)obj->directives.size(); j++) { |
| 2450 | string m = obj->at(j)->name; | 2354 | string m = obj->at(j)->name; |
| 2451 | - if (m != "enabled" && m != "allow_reload" && m != "allow_query") { | 2355 | + if (m != "enabled" && m != "allow_reload" && m != "allow_query" && m != "allow_update") { |
| 2452 | ret = ERROR_SYSTEM_CONFIG_INVALID; | 2356 | ret = ERROR_SYSTEM_CONFIG_INVALID; |
| 2453 | srs_error("unsupported http_api.raw_api directive %s, ret=%d", m.c_str(), ret); | 2357 | srs_error("unsupported http_api.raw_api directive %s, ret=%d", m.c_str(), ret); |
| 2454 | return ret; | 2358 | return ret; |
| @@ -5296,6 +5200,28 @@ bool SrsConfig::get_raw_api_allow_query() | @@ -5296,6 +5200,28 @@ bool SrsConfig::get_raw_api_allow_query() | ||
| 5296 | return SRS_CONF_PERFER_FALSE(conf->arg0()); | 5200 | return SRS_CONF_PERFER_FALSE(conf->arg0()); |
| 5297 | } | 5201 | } |
| 5298 | 5202 | ||
| 5203 | +bool SrsConfig::get_raw_api_allow_update() | ||
| 5204 | +{ | ||
| 5205 | + static bool DEFAULT = false; | ||
| 5206 | + | ||
| 5207 | + SrsConfDirective* conf = root->get("http_api"); | ||
| 5208 | + if (!conf) { | ||
| 5209 | + return DEFAULT; | ||
| 5210 | + } | ||
| 5211 | + | ||
| 5212 | + conf = conf->get("raw_api"); | ||
| 5213 | + if (!conf) { | ||
| 5214 | + return DEFAULT; | ||
| 5215 | + } | ||
| 5216 | + | ||
| 5217 | + conf = conf->get("allow_update"); | ||
| 5218 | + if (!conf || conf->arg0().empty()) { | ||
| 5219 | + return DEFAULT; | ||
| 5220 | + } | ||
| 5221 | + | ||
| 5222 | + return SRS_CONF_PERFER_FALSE(conf->arg0()); | ||
| 5223 | +} | ||
| 5224 | + | ||
| 5299 | bool SrsConfig::get_http_stream_enabled() | 5225 | bool SrsConfig::get_http_stream_enabled() |
| 5300 | { | 5226 | { |
| 5301 | SrsConfDirective* conf = root->get("http_server"); | 5227 | SrsConfDirective* conf = root->get("http_server"); |
| @@ -5961,3 +5887,106 @@ int srs_config_transform_vhost(SrsConfDirective* root) | @@ -5961,3 +5887,106 @@ int srs_config_transform_vhost(SrsConfDirective* root) | ||
| 5961 | 5887 | ||
| 5962 | return ret; | 5888 | return ret; |
| 5963 | } | 5889 | } |
| 5890 | + | ||
| 5891 | +int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) | ||
| 5892 | +{ | ||
| 5893 | + int ret = ERROR_SUCCESS; | ||
| 5894 | + | ||
| 5895 | + SrsConfDirective* conf = NULL; | ||
| 5896 | + | ||
| 5897 | + engine->set("id", dir->dumps_arg0_to_str()); | ||
| 5898 | + engine->set("enabled", SrsAmf0Any::boolean(_srs_config->get_engine_enabled(dir))); | ||
| 5899 | + | ||
| 5900 | + if ((conf = dir->get("iformat")) != NULL) { | ||
| 5901 | + engine->set("iformat", conf->dumps_arg0_to_str()); | ||
| 5902 | + } | ||
| 5903 | + | ||
| 5904 | + if ((conf = dir->get("vfilter")) != NULL) { | ||
| 5905 | + SrsAmf0Object* vfilter = SrsAmf0Any::object(); | ||
| 5906 | + engine->set("vfilter", vfilter); | ||
| 5907 | + | ||
| 5908 | + for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 5909 | + SrsConfDirective* sdir = conf->directives.at(i); | ||
| 5910 | + vfilter->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 5911 | + } | ||
| 5912 | + } | ||
| 5913 | + | ||
| 5914 | + if ((conf = dir->get("vcodec")) != NULL) { | ||
| 5915 | + engine->set("vcodec", conf->dumps_arg0_to_str()); | ||
| 5916 | + } | ||
| 5917 | + | ||
| 5918 | + if ((conf = dir->get("vbitrate")) != NULL) { | ||
| 5919 | + engine->set("vbitrate", conf->dumps_arg0_to_number()); | ||
| 5920 | + } | ||
| 5921 | + | ||
| 5922 | + if ((conf = dir->get("vfps")) != NULL) { | ||
| 5923 | + engine->set("vfps", conf->dumps_arg0_to_number()); | ||
| 5924 | + } | ||
| 5925 | + | ||
| 5926 | + if ((conf = dir->get("vwidth")) != NULL) { | ||
| 5927 | + engine->set("vwidth", conf->dumps_arg0_to_number()); | ||
| 5928 | + } | ||
| 5929 | + | ||
| 5930 | + if ((conf = dir->get("vheight")) != NULL) { | ||
| 5931 | + engine->set("vheight", conf->dumps_arg0_to_number()); | ||
| 5932 | + } | ||
| 5933 | + | ||
| 5934 | + if ((conf = dir->get("vthreads")) != NULL) { | ||
| 5935 | + engine->set("vthreads", conf->dumps_arg0_to_number()); | ||
| 5936 | + } | ||
| 5937 | + | ||
| 5938 | + if ((conf = dir->get("vprofile")) != NULL) { | ||
| 5939 | + engine->set("vprofile", conf->dumps_arg0_to_str()); | ||
| 5940 | + } | ||
| 5941 | + | ||
| 5942 | + if ((conf = dir->get("vpreset")) != NULL) { | ||
| 5943 | + engine->set("vpreset", conf->dumps_arg0_to_str()); | ||
| 5944 | + } | ||
| 5945 | + | ||
| 5946 | + if ((conf = dir->get("vparams")) != NULL) { | ||
| 5947 | + SrsAmf0Object* vparams = SrsAmf0Any::object(); | ||
| 5948 | + engine->set("vparams", vparams); | ||
| 5949 | + | ||
| 5950 | + for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 5951 | + SrsConfDirective* sdir = conf->directives.at(i); | ||
| 5952 | + vparams->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 5953 | + } | ||
| 5954 | + } | ||
| 5955 | + | ||
| 5956 | + if ((conf = dir->get("acodec")) != NULL) { | ||
| 5957 | + engine->set("acodec", conf->dumps_arg0_to_str()); | ||
| 5958 | + } | ||
| 5959 | + | ||
| 5960 | + if ((conf = dir->get("abitrate")) != NULL) { | ||
| 5961 | + engine->set("abitrate", conf->dumps_arg0_to_number()); | ||
| 5962 | + } | ||
| 5963 | + | ||
| 5964 | + if ((conf = dir->get("asample_rate")) != NULL) { | ||
| 5965 | + engine->set("asample_rate", conf->dumps_arg0_to_number()); | ||
| 5966 | + } | ||
| 5967 | + | ||
| 5968 | + if ((conf = dir->get("achannels")) != NULL) { | ||
| 5969 | + engine->set("achannels", conf->dumps_arg0_to_number()); | ||
| 5970 | + } | ||
| 5971 | + | ||
| 5972 | + if ((conf = dir->get("aparams")) != NULL) { | ||
| 5973 | + SrsAmf0Object* aparams = SrsAmf0Any::object(); | ||
| 5974 | + engine->set("aparams", aparams); | ||
| 5975 | + | ||
| 5976 | + for (int i = 0; i < (int)conf->directives.size(); i++) { | ||
| 5977 | + SrsConfDirective* sdir = conf->directives.at(i); | ||
| 5978 | + aparams->set(sdir->name, sdir->dumps_arg0_to_str()); | ||
| 5979 | + } | ||
| 5980 | + } | ||
| 5981 | + | ||
| 5982 | + if ((conf = dir->get("oformat")) != NULL) { | ||
| 5983 | + engine->set("oformat", conf->dumps_arg0_to_str()); | ||
| 5984 | + } | ||
| 5985 | + | ||
| 5986 | + if ((conf = dir->get("output")) != NULL) { | ||
| 5987 | + engine->set("output", conf->dumps_arg0_to_str()); | ||
| 5988 | + } | ||
| 5989 | + | ||
| 5990 | + return ret; | ||
| 5991 | +} | ||
| 5992 | + |
| @@ -329,11 +329,6 @@ public: | @@ -329,11 +329,6 @@ public: | ||
| 329 | * dumps the http_api sections to json for raw api info. | 329 | * dumps the http_api sections to json for raw api info. |
| 330 | */ | 330 | */ |
| 331 | virtual int raw_to_json(SrsAmf0Object* obj); | 331 | virtual int raw_to_json(SrsAmf0Object* obj); |
| 332 | -private: | ||
| 333 | - /** | ||
| 334 | - * dumps the engine section to amf0 object. | ||
| 335 | - */ | ||
| 336 | - virtual int dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine); | ||
| 337 | public: | 332 | public: |
| 338 | /** | 333 | /** |
| 339 | * get the config file path. | 334 | * get the config file path. |
| @@ -1086,6 +1081,10 @@ public: | @@ -1086,6 +1081,10 @@ public: | ||
| 1086 | * whether allow rpc query. | 1081 | * whether allow rpc query. |
| 1087 | */ | 1082 | */ |
| 1088 | virtual bool get_raw_api_allow_query(); | 1083 | virtual bool get_raw_api_allow_query(); |
| 1084 | + /** | ||
| 1085 | + * whether allow rpc update. | ||
| 1086 | + */ | ||
| 1087 | + virtual bool get_raw_api_allow_update(); | ||
| 1089 | // http stream section | 1088 | // http stream section |
| 1090 | private: | 1089 | private: |
| 1091 | /** | 1090 | /** |
| @@ -853,6 +853,7 @@ SrsGoApiRaw::SrsGoApiRaw(SrsServer* svr) | @@ -853,6 +853,7 @@ SrsGoApiRaw::SrsGoApiRaw(SrsServer* svr) | ||
| 853 | raw_api = _srs_config->get_raw_api(); | 853 | raw_api = _srs_config->get_raw_api(); |
| 854 | allow_reload = _srs_config->get_raw_api_allow_reload(); | 854 | allow_reload = _srs_config->get_raw_api_allow_reload(); |
| 855 | allow_query = _srs_config->get_raw_api_allow_query(); | 855 | allow_query = _srs_config->get_raw_api_allow_query(); |
| 856 | + allow_update = _srs_config->get_raw_api_allow_update(); | ||
| 856 | 857 | ||
| 857 | _srs_config->subscribe(this); | 858 | _srs_config->subscribe(this); |
| 858 | } | 859 | } |
| @@ -891,8 +892,10 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | @@ -891,8 +892,10 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | ||
| 891 | return srs_api_response_code(w, r, ret); | 892 | return srs_api_response_code(w, r, ret); |
| 892 | } | 893 | } |
| 893 | 894 | ||
| 895 | + ////////////////////////////////////////////////////////////////////////// | ||
| 894 | // the rpc is required. | 896 | // the rpc is required. |
| 895 | - if (rpc.empty() || (rpc != "reload" && rpc != "query" && rpc != "raw")) { | 897 | + // the allowd rpc method check. |
| 898 | + if (rpc.empty() || (rpc != "reload" && rpc != "query" && rpc != "raw" && rpc != "update")) { | ||
| 896 | ret = ERROR_SYSTEM_CONFIG_RAW; | 899 | ret = ERROR_SYSTEM_CONFIG_RAW; |
| 897 | srs_error("raw api invalid rpc=%s. ret=%d", rpc.c_str(), ret); | 900 | srs_error("raw api invalid rpc=%s. ret=%d", rpc.c_str(), ret); |
| 898 | return srs_api_response_code(w, r, ret); | 901 | return srs_api_response_code(w, r, ret); |
| @@ -968,6 +971,49 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | @@ -968,6 +971,49 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | ||
| 968 | return srs_api_response(w, r, obj->to_json()); | 971 | return srs_api_response(w, r, obj->to_json()); |
| 969 | } | 972 | } |
| 970 | 973 | ||
| 974 | + // for rpc=update, to update the configs of server. | ||
| 975 | + // @param scope the scope to update for config. | ||
| 976 | + // @param value the updated value for scope. | ||
| 977 | + // possible updates: | ||
| 978 | + // @param scope @param value value-description | ||
| 979 | + // global.listen 1935,1936 the port list. | ||
| 980 | + if (rpc == "update") { | ||
| 981 | + if (!allow_update) { | ||
| 982 | + ret = ERROR_SYSTEM_CONFIG_RAW_DISABLED; | ||
| 983 | + srs_error("raw api allow_update disabled rpc=%s. ret=%d", rpc.c_str(), ret); | ||
| 984 | + return srs_api_response_code(w, r, ret); | ||
| 985 | + } | ||
| 986 | + | ||
| 987 | + std::string scope = r->query_get("scope"); | ||
| 988 | + std::string value = r->query_get("value"); | ||
| 989 | + if (scope.empty() || (scope != "global.listen")) { | ||
| 990 | + ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS; | ||
| 991 | + srs_error("raw api query invalid scope=%s. ret=%d", scope.c_str(), ret); | ||
| 992 | + return srs_api_response_code(w, r, ret); | ||
| 993 | + } | ||
| 994 | + | ||
| 995 | + if (scope == "global.listen") { | ||
| 996 | + vector<string> eps = srs_string_split(value, ","); | ||
| 997 | + | ||
| 998 | + bool invalid = eps.empty(); | ||
| 999 | + for (int i = 0; i < (int)eps.size(); i++) { | ||
| 1000 | + string ep = eps.at(i); | ||
| 1001 | + int port = ::atoi(ep.c_str()); | ||
| 1002 | + if (port <= 2 || port >= 65535) { | ||
| 1003 | + invalid = true; | ||
| 1004 | + break; | ||
| 1005 | + } | ||
| 1006 | + } | ||
| 1007 | + if (invalid) { | ||
| 1008 | + ret = ERROR_SYSTEM_CONFIG_RAW_PARAMS; | ||
| 1009 | + srs_error("raw api update global.listen invalid eps=%s. ret=%d", value.c_str(), ret); | ||
| 1010 | + return srs_api_response_code(w, r, ret); | ||
| 1011 | + } | ||
| 1012 | + } | ||
| 1013 | + | ||
| 1014 | + return srs_api_response(w, r, obj->to_json()); | ||
| 1015 | + } | ||
| 1016 | + | ||
| 971 | return ret; | 1017 | return ret; |
| 972 | } | 1018 | } |
| 973 | 1019 | ||
| @@ -976,6 +1022,7 @@ int SrsGoApiRaw::on_reload_http_api_raw_api() | @@ -976,6 +1022,7 @@ int SrsGoApiRaw::on_reload_http_api_raw_api() | ||
| 976 | raw_api = _srs_config->get_raw_api(); | 1022 | raw_api = _srs_config->get_raw_api(); |
| 977 | allow_reload = _srs_config->get_raw_api_allow_reload(); | 1023 | allow_reload = _srs_config->get_raw_api_allow_reload(); |
| 978 | allow_query = _srs_config->get_raw_api_allow_query(); | 1024 | allow_query = _srs_config->get_raw_api_allow_query(); |
| 1025 | + allow_update = _srs_config->get_raw_api_allow_update(); | ||
| 979 | 1026 | ||
| 980 | return ERROR_SUCCESS; | 1027 | return ERROR_SUCCESS; |
| 981 | } | 1028 | } |
| @@ -187,6 +187,7 @@ private: | @@ -187,6 +187,7 @@ private: | ||
| 187 | bool raw_api; | 187 | bool raw_api; |
| 188 | bool allow_reload; | 188 | bool allow_reload; |
| 189 | bool allow_query; | 189 | bool allow_query; |
| 190 | + bool allow_update; | ||
| 190 | public: | 191 | public: |
| 191 | SrsGoApiRaw(SrsServer* svr); | 192 | SrsGoApiRaw(SrsServer* svr); |
| 192 | virtual ~SrsGoApiRaw(); | 193 | virtual ~SrsGoApiRaw(); |
-
请 注册 或 登录 后发表评论