winlin

support dolphin

@@ -364,6 +364,8 @@ int SrsConfDirective::read_token(SrsConfigBuffer* buffer, vector<string>& args, @@ -364,6 +364,8 @@ int SrsConfDirective::read_token(SrsConfigBuffer* buffer, vector<string>& args,
364 364
365 SrsConfig::SrsConfig() 365 SrsConfig::SrsConfig()
366 { 366 {
  367 + dolphin = false;
  368 +
367 show_help = false; 369 show_help = false;
368 show_version = false; 370 show_version = false;
369 test_conf = false; 371 test_conf = false;
@@ -378,6 +380,25 @@ SrsConfig::~SrsConfig() @@ -378,6 +380,25 @@ SrsConfig::~SrsConfig()
378 srs_freep(root); 380 srs_freep(root);
379 } 381 }
380 382
  383 +bool SrsConfig::is_dolphin()
  384 +{
  385 + return dolphin;
  386 +}
  387 +
  388 +void SrsConfig::set_config_directive(SrsConfDirective* parent, string dir, string value)
  389 +{
  390 + SrsConfDirective* d = parent->get(dir);
  391 +
  392 + if (!d) {
  393 + d = new SrsConfDirective();
  394 + d->name = dir;
  395 + parent->directives.push_back(d);
  396 + }
  397 +
  398 + d->args.clear();
  399 + d->args.push_back(value);
  400 +}
  401 +
381 void SrsConfig::subscribe(ISrsReloadHandler* handler) 402 void SrsConfig::subscribe(ISrsReloadHandler* handler)
382 { 403 {
383 std::vector<ISrsReloadHandler*>::iterator it; 404 std::vector<ISrsReloadHandler*>::iterator it;
@@ -1260,6 +1281,19 @@ int SrsConfig::parse_argv(int& i, char** argv) @@ -1260,6 +1281,19 @@ int SrsConfig::parse_argv(int& i, char** argv)
1260 show_help = false; 1281 show_help = false;
1261 test_conf = true; 1282 test_conf = true;
1262 break; 1283 break;
  1284 + case 'p':
  1285 + dolphin = true;
  1286 + if (*p) {
  1287 + dolphin_port = p;
  1288 + continue;
  1289 + }
  1290 + if (argv[++i]) {
  1291 + dolphin_port = argv[i];
  1292 + continue;
  1293 + }
  1294 + ret = ERROR_SYSTEM_CONFIG_INVALID;
  1295 + srs_error("option \"-p\" requires params, ret=%d", ret);
  1296 + return ret;
1263 case 'v': 1297 case 'v':
1264 case 'V': 1298 case 'V':
1265 show_help = false; 1299 show_help = false;
@@ -1269,11 +1303,11 @@ int SrsConfig::parse_argv(int& i, char** argv) @@ -1269,11 +1303,11 @@ int SrsConfig::parse_argv(int& i, char** argv)
1269 show_help = false; 1303 show_help = false;
1270 if (*p) { 1304 if (*p) {
1271 config_file = p; 1305 config_file = p;
1272 - return ret; 1306 + continue;
1273 } 1307 }
1274 if (argv[++i]) { 1308 if (argv[++i]) {
1275 config_file = argv[i]; 1309 config_file = argv[i];
1276 - return ret; 1310 + continue;
1277 } 1311 }
1278 ret = ERROR_SYSTEM_CONFIG_INVALID; 1312 ret = ERROR_SYSTEM_CONFIG_INVALID;
1279 srs_error("option \"-c\" requires parameter, ret=%d", ret); 1313 srs_error("option \"-c\" requires parameter, ret=%d", ret);
@@ -1844,6 +1878,14 @@ int SrsConfig::parse_buffer(SrsConfigBuffer* buffer) @@ -1844,6 +1878,14 @@ int SrsConfig::parse_buffer(SrsConfigBuffer* buffer)
1844 if ((ret = root->parse(buffer)) != ERROR_SUCCESS) { 1878 if ((ret = root->parse(buffer)) != ERROR_SUCCESS) {
1845 return ret; 1879 return ret;
1846 } 1880 }
  1881 +
  1882 + // mock by dolphin mode.
  1883 + // for the dolphin will start srs with specified params.
  1884 + if (dolphin) {
  1885 + set_config_directive(root, "listen", dolphin_port);
  1886 + set_config_directive(root, "daemon", "off");
  1887 + set_config_directive(root, "srs_log_tank", "console");
  1888 + }
1847 1889
1848 return ret; 1890 return ret;
1849 } 1891 }
@@ -267,6 +267,12 @@ class SrsConfig @@ -267,6 +267,12 @@ class SrsConfig
267 // user command 267 // user command
268 private: 268 private:
269 /** 269 /**
  270 + * whether srs is run in dolphin mode.
  271 + * @see https://github.com/simple-rtmp-server/srs-dolphin
  272 + */
  273 + bool dolphin;
  274 + std::string dolphin_port;
  275 + /**
270 * whether show help and exit. 276 * whether show help and exit.
271 */ 277 */
272 bool show_help; 278 bool show_help;
@@ -309,6 +315,14 @@ private: @@ -309,6 +315,14 @@ private:
309 public: 315 public:
310 SrsConfig(); 316 SrsConfig();
311 virtual ~SrsConfig(); 317 virtual ~SrsConfig();
  318 +// dolphin
  319 +public:
  320 + /**
  321 + * whether srs is in dolphin mode.
  322 + */
  323 + virtual bool is_dolphin();
  324 +private:
  325 + virtual void set_config_directive(SrsConfDirective* parent, std::string dir, std::string value);
312 // reload 326 // reload
313 public: 327 public:
314 /** 328 /**
@@ -639,6 +639,11 @@ int SrsServer::acquire_pid_file() @@ -639,6 +639,11 @@ int SrsServer::acquire_pid_file()
639 { 639 {
640 int ret = ERROR_SUCCESS; 640 int ret = ERROR_SUCCESS;
641 641
  642 + // when srs in dolphin mode, no need the pid file.
  643 + if (_srs_config->is_dolphin()) {
  644 + return ret;
  645 + }
  646 +
642 std::string pid_file = _srs_config->get_pid_file(); 647 std::string pid_file = _srs_config->get_pid_file();
643 648
644 // -rw-r--r-- 649 // -rw-r--r--