summaryrefslogtreecommitdiffstats
path: root/src/Core/ConnectionManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Core/ConnectionManager.cpp')
-rw-r--r--src/Core/ConnectionManager.cpp106
1 files changed, 83 insertions, 23 deletions
diff --git a/src/Core/ConnectionManager.cpp b/src/Core/ConnectionManager.cpp
index c0edd61..5eed936 100644
--- a/src/Core/ConnectionManager.cpp
+++ b/src/Core/ConnectionManager.cpp
@@ -18,10 +18,11 @@
*/
#include "ConnectionManager.h"
-#include "ConfigManager.h"
+#include <Common/ConfigManager.h>
#include <Common/Logger.h>
#include <Common/RequestHandlers/FSInfoRequestHandler.h>
#include <Common/RequestHandlers/StatusRequestHandler.h>
+#include <Common/Util.h>
#include "Requests/DaemonStateUpdateRequest.h"
#include "RequestHandlers/DaemonCommandRequestHandler.h"
#include "RequestHandlers/DaemonFSInfoRequestHandler.h"
@@ -54,29 +55,74 @@ void ConnectionManager::updateState(const std::string &name, Common::HostInfo::S
}
}
-ConnectionManager::ConnectionManager() {
- Common::RequestManager::init(true);
+bool ConnectionManager::handleConfigEntry(const std::vector<std::string> &entry, const std::vector<std::vector<std::string> > &section) {
+ if(section.empty()) {
+ if(Common::Util::tolower(entry.front()) == "listen") {
+ if(entry.size() == 2) {
+ try {
+ listenerAddresses.push_back(Net::IPAddress(entry.back()));
+ }
+ catch(Common::Exception &e) {
+ // TODO Log error
+ }
- Common::RequestManager::getRequestManager()->registerPacketType<Common::RequestHandlers::FSInfoRequestHandler>(Net::Packet::FS_INFO);
- Common::RequestManager::getRequestManager()->registerPacketType<Common::RequestHandlers::StatusRequestHandler>(Net::Packet::STATUS);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonCommandRequestHandler>(Net::Packet::DAEMON_COMMAND_REBOOT);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonCommandRequestHandler>(Net::Packet::DAEMON_COMMAND_SHUTDOWN);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonFSInfoRequestHandler>(Net::Packet::DAEMON_FS_INFO);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonListRequestHandler>(Net::Packet::LIST_DAEMONS);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonStatusRequestHandler>(Net::Packet::DAEMON_STATUS);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::GSSAPIAuthRequestHandler>(Net::Packet::GSSAPI_AUTH);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::IdentifyRequestHandler>(Net::Packet::IDENTIFY);
- Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::LogRequestHandler>(Net::Packet::LOG);
+ return true;
+ }
+ }
+ else if(Common::Util::tolower(entry.front()) == "x509trustfile") {
+ if(entry.size() == 2) {
+ x509TrustFile = entry.back();
- ConfigManager *configManager = ConfigManager::getConfigManager();
+ return true;
+ }
+ }
+ else if(Common::Util::tolower(entry.front()) == "x509crlfile") {
+ if(entry.size() == 2) {
+ x509CrlFile = entry.back();
- Net::Connection::init();
+ return true;
+ }
+ }
+ else if(Common::Util::tolower(entry.front()) == "x509certfile") {
+ if(entry.size() == 2) {
+ x509CertFile = entry.back();
+
+ return true;
+ }
+ }
+ else if(Common::Util::tolower(entry.front()) == "x509keyfile") {
+ if(entry.size() == 2) {
+ x509KeyFile = entry.back();
+
+ return true;
+ }
+ }
+ else if(Common::Util::tolower(entry.front()) == "daemon") {
+ if(entry.size() == 2) {
+ daemonInfo.insert(std::make_pair(entry.back(), Common::HostInfo(entry.back())));
+ identifiedDaemonConnections.insert(std::make_pair<std::string,Net::ServerConnection*>(entry.back(), 0));
- const std::vector<Net::IPAddress> &listenerAddresses = configManager->getListenerAddresses();
+ return true;
+ }
+ }
+ }
+ else if(Common::Util::tolower(section.front().front()) == "daemon" && section.front().size() == 2 && section.size() == 1) {
+ if(Common::Util::tolower(entry.front()) == "ipaddress") {
+ if(entry.size() == 2) {
+ daemonInfo[section.front().back()].setIP(entry.back());
+
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+void ConnectionManager::configFinished() {
if(listenerAddresses.empty()) {
try {
- listeners.push_back(new Net::Listener(configManager->getX509CertFile(), configManager->getX509KeyFile()));
+ listeners.push_back(new Net::Listener(x509CertFile, x509KeyFile));
}
catch(Common::Exception &e) {
// TODO Log error
@@ -85,23 +131,37 @@ ConnectionManager::ConnectionManager() {
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(x509CertFile, x509KeyFile, *address));
}
catch(Common::Exception &e) {
// TODO Log error
}
}
}
+}
- const std::vector<Common::HostInfo>& daemons = configManager->getDaemonList();
+ConnectionManager::ConnectionManager() {
+ Common::RequestManager::init(true);
- for(std::vector<Common::HostInfo>::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));
- }
+ Common::RequestManager::getRequestManager()->registerPacketType<Common::RequestHandlers::FSInfoRequestHandler>(Net::Packet::FS_INFO);
+ Common::RequestManager::getRequestManager()->registerPacketType<Common::RequestHandlers::StatusRequestHandler>(Net::Packet::STATUS);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonCommandRequestHandler>(Net::Packet::DAEMON_COMMAND_REBOOT);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonCommandRequestHandler>(Net::Packet::DAEMON_COMMAND_SHUTDOWN);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonFSInfoRequestHandler>(Net::Packet::DAEMON_FS_INFO);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonListRequestHandler>(Net::Packet::LIST_DAEMONS);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::DaemonStatusRequestHandler>(Net::Packet::DAEMON_STATUS);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::GSSAPIAuthRequestHandler>(Net::Packet::GSSAPI_AUTH);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::IdentifyRequestHandler>(Net::Packet::IDENTIFY);
+ Common::RequestManager::getRequestManager()->registerPacketType<RequestHandlers::LogRequestHandler>(Net::Packet::LOG);
+
+ Common::ConfigManager::getConfigManager()->registerConfigurable(this);
+
+ Net::Connection::init();
}
ConnectionManager::~ConnectionManager() {
+ Common::ConfigManager::getConfigManager()->unregisterConfigurable(this);
+
for(std::list<Net::ServerConnection*>::iterator con = daemonConnections.begin(); con != daemonConnections.end(); ++con)
delete *con;