From e0d4583d24907315aecaeabcf7344b6fca24f4c3 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 7 Nov 2011 19:59:38 +0100 Subject: [PATCH] Generate random port even when it's not set in config file --- src/config.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/config.cpp b/src/config.cpp index 36e0e850..0b0a5233 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -105,6 +105,7 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description bool found_working = false; bool found_pidfile = false; + bool found_backend_port = false; std::string jid = ""; BOOST_FOREACH(option &opt, parsed.options) { if (opt.string_key == "service.jid") { @@ -117,6 +118,7 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description } } else if (opt.string_key == "service.backend_port") { + found_backend_port = true; if (opt.value[0] == "0") { unsigned long r = 0; BOOST_FOREACH(char c, _jid) { @@ -145,6 +147,17 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description value.push_back("/var/run/spectrum2/$jid.pid"); parsed.options.push_back(boost::program_options::basic_option("service.pidfile", value)); } + if (!found_backend_port) { + unsigned long r = 0; + BOOST_FOREACH(char c, _jid) { + r += (int) c; + } + srand(time(NULL) + r); + int randomPort = 30000 + rand() % 10000; + std::vector value; + value.push_back(boost::lexical_cast(randomPort)); + parsed.options.push_back(boost::program_options::basic_option("service.backend_port", value)); + } BOOST_FOREACH(option &opt, parsed.options) { if (opt.unregistered) {