diff --git a/src/transport.cpp b/src/transport.cpp index d32bad70330c7ae8b26e5004718ef249e5772031..094ccf371f610ef0b6c4993c7331a7948235c7f6 100644 --- a/src/transport.cpp +++ b/src/transport.cpp @@ -26,7 +26,6 @@ #include "transport/userregistry.h" #include "transport/logging.h" #include "discoinforesponder.h" -#include "discoitemsresponder.h" #include "storageparser.h" #include "Swiften/TLS/OpenSSL/OpenSSLServerContext.h" #include "Swiften/TLS/PKCS12Certificate.h" @@ -149,9 +148,6 @@ Component::Component(Swift::EventLoop *loop, Swift::NetworkFactories *factories, m_discoInfoResponder = new DiscoInfoResponder(m_iqRouter, m_config); m_discoInfoResponder->start(); - m_discoItemsResponder = new DiscoItemsResponder(m_iqRouter); - m_discoItemsResponder->start(); - // // m_registerHandler = new SpectrumRegisterHandler(m_component); // m_registerHandler->start(); @@ -163,7 +159,6 @@ Component::~Component() { delete m_capsManager; delete m_capsMemoryStorage; delete m_discoInfoResponder; - delete m_discoItemsResponder; if (m_component) delete m_component; if (m_server) { @@ -196,6 +191,9 @@ void Component::setBuddyFeatures(std::list &features) { void Component::start() { if (m_component && !m_component->isAvailable()) { LOG4CXX_INFO(logger, "Connecting XMPP server " << CONFIG_STRING(m_config, "service.server") << " port " << CONFIG_INT(m_config, "service.port")); + if (CONFIG_INT(m_config, "service.port") == 5222) { + LOG4CXX_WARN(logger, "Port 5222 is usually used for client connections, not for component connections! Are you sure you are using right port?"); + } m_reconnectCount++; m_component->connect(CONFIG_STRING(m_config, "service.server"), CONFIG_INT(m_config, "service.port")); m_reconnectTimer->stop(); @@ -203,6 +201,11 @@ void Component::start() { else if (m_server) { LOG4CXX_INFO(logger, "Starting component in server mode on port " << CONFIG_INT(m_config, "service.port")); m_server->start(); + + //Type casting to BoostConnectionServer since onStopped signal is not defined in ConnectionServer + //Ideally, onStopped must be defined in ConnectionServer + boost::dynamic_pointer_cast(m_server->getConnectionServer())->onStopped.connect(boost::bind(&Component::handleServerStopped, this, _1)); + // We're connected right here, because we're in server mode... handleConnected(); } @@ -226,6 +229,17 @@ void Component::handleConnected() { m_reconnectCount = 0; } +void Component::handleServerStopped(boost::optional e) { + if(e != NULL ) { + if(*e == Swift::BoostConnectionServer::Conflict) + LOG4CXX_INFO(logger, "Port "<< CONFIG_INT(m_config, "service.port") << " already in use! Stopping server.."); + if(*e == Swift::BoostConnectionServer::UnknownError) + LOG4CXX_INFO(logger, "Unknown error occured! Stopping server.."); + exit(1); + } +} + + void Component::handleConnectionError(const ComponentError &error) { onConnectionError(error); // if (m_reconnectCount == 2)