From 7c8a134b082e1224a6ece26cefdf939753088e2c Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 29 Apr 2009 19:57:50 +0200 Subject: Core in Server umbenannt --- src/Server/ConnectionManager.h | 131 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 src/Server/ConnectionManager.h (limited to 'src/Server/ConnectionManager.h') diff --git a/src/Server/ConnectionManager.h b/src/Server/ConnectionManager.h new file mode 100644 index 0000000..5072897 --- /dev/null +++ b/src/Server/ConnectionManager.h @@ -0,0 +1,131 @@ +/* + * ConnectionManager.h + * + * Copyright (C) 2008 Matthias Schiffer + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef MAD_SERVER_CONNECTIONMANAGER_H_ +#define MAD_SERVER_CONNECTIONMANAGER_H_ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +namespace Mad { + +namespace Net { +class Listener; +class ServerConnection; +class Packet; +} + +namespace Server { + +class ConnectionManager : public Common::Configurable, public Common::Initializable { + private: + class Connection : public Common::Connection { + public: + enum ConnectionType { + DAEMON, CLIENT + }; + + private: + Net::ServerConnection *connection; + ConnectionType type; + Common::HostInfo *hostInfo; + + protected: + virtual bool send(const Net::Packet &packet); + + public: + Connection(Net::ServerConnection *connection0, ConnectionType type0); + virtual ~Connection(); + + bool isConnected() const; + + virtual bool disconnect(); + virtual void* getCertificate(size_t *size) const; + virtual void* getPeerCertificate(size_t *size) const; + + ConnectionType getConnectionType() const { + return type; + } + + Common::HostInfo *getHostInfo() const { + return hostInfo; + } + + bool isIdentified() const { + return hostInfo; + } + + void identify(Common::HostInfo *info) { + hostInfo = info; + } + }; + + static ConnectionManager connectionManager; + + std::string x509TrustFile, x509CrlFile, x509CertFile, x509KeyFile; + + std::vector listenerAddresses; + std::list listeners; + + std::list connections; + + std::map daemonInfo; + + // Prevent shallow copy + ConnectionManager(const ConnectionManager &o); + ConnectionManager& operator=(const ConnectionManager &o); + + void updateState(Common::HostInfo *hostInfo, Common::HostInfo::State state); + + ConnectionManager() {} + + protected: + virtual bool handleConfigEntry(const Common::ConfigEntry &entry, bool handled); + virtual void configFinished(); + + virtual void doInit(); + virtual void doDeinit(); + + public: + static ConnectionManager* get() { + return &connectionManager; + } + + void run(); + + Common::Connection* getDaemonConnection(const std::string &name) const throw (Common::Exception&); + std::string getDaemonName(const Common::Connection *con) const throw (Common::Exception&); + + void identifyDaemonConnection(Common::Connection *con, const std::string &name) throw (Common::Exception&); + std::vector getDaemonList() const; +}; + +} +} + +#endif /*MAD_SERVER_CONNECTIONMANAGER_H_*/ -- cgit v1.2.3