diff options
Diffstat (limited to 'src/Core/ConnectionManager.cpp')
-rw-r--r-- | src/Core/ConnectionManager.cpp | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/src/Core/ConnectionManager.cpp b/src/Core/ConnectionManager.cpp index 98288ba..78497e7 100644 --- a/src/Core/ConnectionManager.cpp +++ b/src/Core/ConnectionManager.cpp @@ -20,6 +20,7 @@ #include "ConnectionManager.h" #include "ConfigManager.h" #include "RequestHandlers/CoreStatusRequestHandler.h" +#include "RequestHandlers/DaemonStatusRequestHandler.h" #include "RequestHandlers/GSSAPIAuthRequestHandler.h" #include <Net/ServerConnection.h> #include <Net/Packet.h> @@ -29,6 +30,9 @@ namespace Mad { namespace Core { +std::auto_ptr<ConnectionManager> ConnectionManager::connectionManager; + + void ConnectionManager::refreshPollfds() { pollfds.clear(); pollfdMap.clear(); @@ -53,15 +57,22 @@ void ConnectionManager::refreshPollfds() { } } -ConnectionManager::ConnectionManager(const ConfigManager& configManager) : requestManager(true) { - requestManager.registerPacketType<RequestHandlers::CoreStatusRequestHandler>(Net::Packet::CORE_STATUS); - requestManager.registerPacketType<RequestHandlers::GSSAPIAuthRequestHandler>(Net::Packet::GSSAPI_AUTH); +ConnectionManager::ConnectionManager() { + Common::RequestManager::init(true); + + Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::CoreStatusRequestHandler>(Net::Packet::CORE_STATUS); + Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonStatusRequestHandler>(Net::Packet::DAEMON_STATUS); + Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::GSSAPIAuthRequestHandler>(Net::Packet::GSSAPI_AUTH); - const std::vector<Net::IPAddress> &listenerAddresses = configManager.getListenerAddresses(); + ConfigManager *configManager = ConfigManager::getConfigManager(); + + Net::Connection::init(); + + const std::vector<Net::IPAddress> &listenerAddresses = configManager->getListenerAddresses(); if(listenerAddresses.empty()) { try { - listeners.push_back(new Net::Listener(configManager.getX509CertFile(), configManager.getX509KeyFile())); + listeners.push_back(new Net::Listener(configManager->getX509CertFile(), configManager->getX509KeyFile())); } catch(Net::Exception &e) { // TODO Log error @@ -70,7 +81,7 @@ ConnectionManager::ConnectionManager(const ConfigManager& configManager) : reque else { for(std::vector<Net::IPAddress>::const_iterator address = listenerAddresses.begin(); address != listenerAddresses.end(); ++address) { try { - listeners.push_back(new Net::Listener(configManager.getX509CertFile(), configManager.getX509KeyFile(), *address)); + listeners.push_back(new Net::Listener(configManager->getX509CertFile(), configManager->getX509KeyFile(), *address)); } catch(Net::Exception &e) { // TODO Log error @@ -79,6 +90,13 @@ ConnectionManager::ConnectionManager(const ConfigManager& configManager) : reque } refreshPollfds(); + + const std::vector<DaemonInfo>& daemons = configManager->getDaemonList(); + + for(std::vector<DaemonInfo>::const_iterator daemon = daemons.begin(); daemon != daemons.end(); ++daemon) { + daemonInfo.insert(std::make_pair(daemon->getName(), *daemon)); + identifiedDaemonConnections.insert(std::make_pair<std::string,Net::ServerConnection*>(daemon->getName(), 0)); + } } ConnectionManager::~ConnectionManager() { @@ -87,6 +105,8 @@ ConnectionManager::~ConnectionManager() { for(std::list<Net::ServerConnection*>::iterator con = clientConnections.begin(); con != clientConnections.end(); ++con) delete *con; + + Net::Connection::deinit(); } void ConnectionManager::handleConnections(std::list<Net::ServerConnection*>& connections) { @@ -100,7 +120,7 @@ void ConnectionManager::handleConnections(std::list<Net::ServerConnection*>& con ++con; } else { - requestManager.unregisterConnection(*con); + Common::RequestManager::getRequestManager()->unregisterConnection(*con); delete *con; connections.erase(con++); } @@ -118,12 +138,20 @@ void ConnectionManager::run() { while((con = (*listener)->getConnection(pollfdMap)) != 0) { (con->isDaemonConnection() ? daemonConnections : clientConnections).push_back(con); - requestManager.registerConnection(con); + Common::RequestManager::getRequestManager()->registerConnection(con); } } refreshPollfds(); } +Net::Connection* ConnectionManager::getDaemonConnection(const std::string &name) const { + std::map<std::string,Net::ServerConnection*>::const_iterator daemon = identifiedDaemonConnections.find(name); + if(daemon == identifiedDaemonConnections.end()) + return 0; + + return daemon->second; +} + } } |