From 4c334e9f1c0ba952c32a1b52eadd232c58f363ca Mon Sep 17 00:00:00 2001 From: HanzZ Date: Fri, 9 Dec 2011 13:51:50 +0100 Subject: [PATCH] Move random port generating to util.cpp --- include/transport/util.h | 2 ++ spectrum/src/sample2.cfg | 4 +++- spectrum_manager/src/CMakeLists.txt | 2 +- src/config.cpp | 18 ++++-------------- src/presenceoracle.cpp | 6 ++++-- src/transport.cpp | 1 + src/util.cpp | 9 +++++++++ 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/include/transport/util.h b/include/transport/util.h index fe171115..d79a555f 100644 --- a/include/transport/util.h +++ b/include/transport/util.h @@ -40,6 +40,8 @@ std::string serializeGroups(const std::vector &groups); std::vector deserializeGroups(std::string &groups); +int getRandomPort(const std::string &s); + } } diff --git a/spectrum/src/sample2.cfg b/spectrum/src/sample2.cfg index ae1f0d73..91ab58fc 100644 --- a/spectrum/src/sample2.cfg +++ b/spectrum/src/sample2.cfg @@ -24,7 +24,9 @@ port = 5222 backend_host = localhost # Port on which Spectrum listens for backends. -backend_port=10001 +# By default Spectrum chooses random backend port and there's +# no need to change it normally +#backend_port=10001 # Full path to PKCS#12 cetficiate used for TLS in server mode. #cert= diff --git a/spectrum_manager/src/CMakeLists.txt b/spectrum_manager/src/CMakeLists.txt index 5024e70c..5f93dd9c 100644 --- a/spectrum_manager/src/CMakeLists.txt +++ b/spectrum_manager/src/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 2.6) FILE(GLOB SRC *.cpp) -ADD_EXECUTABLE(spectrum2_manager ${SRC} ../../src/config.cpp) +ADD_EXECUTABLE(spectrum2_manager ${SRC} ../../src/config.cpp ../../src/util.cpp) target_link_libraries(spectrum2_manager ${SWIFTEN_LIBRARY}) diff --git a/src/config.cpp b/src/config.cpp index b72caa86..c5ca48b5 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -19,6 +19,7 @@ */ #include "transport/config.h" +#include "transport/util.h" #include #ifdef _MSC_VER #include @@ -120,13 +121,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) { - r += (int) c; - } - srand(time(NULL) + r); - int randomPort = 30000 + rand() % 10000; - opt.value[0] = boost::lexical_cast(randomPort); + opt.value[0] = boost::lexical_cast(Util::getRandomPort(_jid.empty() ? jid : _jid)); } } else if (opt.string_key == "service.working_dir") { @@ -148,14 +143,9 @@ bool Config::load(std::istream &ifs, boost::program_options::options_description 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)); + std::string p = boost::lexical_cast(Util::getRandomPort(_jid.empty() ? jid : _jid)); + value.push_back(p); parsed.options.push_back(boost::program_options::basic_option("service.backend_port", value)); } diff --git a/src/presenceoracle.cpp b/src/presenceoracle.cpp index c6717f3b..13b3ca5b 100644 --- a/src/presenceoracle.cpp +++ b/src/presenceoracle.cpp @@ -19,6 +19,7 @@ */ #include "transport/presenceoracle.h" +#include "Swiften/Swiften.h" #include @@ -46,9 +47,10 @@ void PresenceOracle::handleStanzaChannelAvailableChanged(bool available) { void PresenceOracle::handleIncomingPresence(Presence::ref presence) { // ignore presences for some contact, we're checking only presences for the transport itself here. - if (!presence->getTo().getNode().empty()) { + bool isMUC = presence->getPayload() != NULL || *presence->getTo().getNode().c_str() == '#'; + // filter out login/logout presence spam + if (!presence->getTo().getNode().empty() && isMUC == false) return; - } JID bareJID(presence->getFrom().toBare()); if (presence->getType() == Presence::Subscribe) { diff --git a/src/transport.cpp b/src/transport.cpp index f7e862d8..0d1d06ea 100644 --- a/src/transport.cpp +++ b/src/transport.cpp @@ -45,6 +45,7 @@ #include "log4cxx/consoleappender.h" #include "log4cxx/patternlayout.h" #include "log4cxx/propertyconfigurator.h" +#include "Swiften/Swiften.h" using namespace Swift; using namespace boost; diff --git a/src/util.cpp b/src/util.cpp index 7053ea06..315726cb 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -128,6 +128,15 @@ std::vector deserializeGroups(std::string &groups) { return ret; } +int getRandomPort(const std::string &s) { + unsigned long r = 0; + BOOST_FOREACH(char c, s) { + r += (int) c; + } + srand(time(NULL) + r); + return 30000 + rand() % 10000; +} + } }