diff options
Diffstat (limited to 'src')
48 files changed, 234 insertions, 173 deletions
diff --git a/src/Client/CommandManager.cpp b/src/Client/CommandManager.cpp index ad88152..f46bdcd 100644 --- a/src/Client/CommandManager.cpp +++ b/src/Client/CommandManager.cpp @@ -140,7 +140,7 @@ void CommandManager::daemonCommandRequestFinished(const Common::Request &request try { request.getResult(); } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -153,7 +153,7 @@ void CommandManager::daemonFSInfoRequestFinished(const Common::Request &request) std::cout << "Host file system usage:" << std::endl; printFSInfo(packet); } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -166,7 +166,7 @@ void CommandManager::daemonStatusRequestFinished(const Common::Request &request) std::cout << "Host status:" << std::endl; printHostStatus(packet); } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -178,7 +178,7 @@ void CommandManager::disconnectRequestFinished(const Common::Request &request) { request.getResult(); disconnect = true; } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -191,7 +191,7 @@ void CommandManager::fsInfoRequestFinished(const Common::Request &request) { std::cout << "Server file system usage:" << std::endl; printFSInfo(packet); } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -204,7 +204,7 @@ void CommandManager::statusRequestFinished(const Common::Request &request) { std::cout << "Server status:" << std::endl; printHostStatus(packet); } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -218,7 +218,7 @@ void CommandManager::userInfoRequestFinished(const Common::Request &request) { std::cout << " " << (unsigned long)packet["uid"] << ", " << (unsigned long)packet["gid"] << ", " << (const std::string&)packet["username"] << ", " << (const std::string&)packet["fullName"] << std::endl << std::endl; } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } @@ -244,7 +244,7 @@ void CommandManager::userListRequestFinished(const Common::Request &request) { std::cout << std::endl; } - catch(Common::Exception &exception) { + catch(Net::Exception &exception) { Common::Logger::logf(Common::Logger::ERROR, "An error occurred during your request: %s.", exception.strerror().c_str()); } diff --git a/src/Client/CommandParser.cpp b/src/Client/CommandParser.cpp index 8e55c01..1b40046 100644 --- a/src/Client/CommandParser.cpp +++ b/src/Client/CommandParser.cpp @@ -22,7 +22,6 @@ #include "Requests/DaemonFSInfoRequest.h" #include "Requests/DaemonCommandRequest.h" #include "Requests/DaemonStatusRequest.h" -#include <Common/Exception.h> #include <Common/Logger.h> #include <Common/RequestManager.h> #include <Common/Requests/FSInfoRequest.h> diff --git a/src/Client/InformationManager.cpp b/src/Client/InformationManager.cpp index d99791c..6c36495 100644 --- a/src/Client/InformationManager.cpp +++ b/src/Client/InformationManager.cpp @@ -35,7 +35,7 @@ void InformationManager::DaemonStateUpdateRequestHandler::handlePacket(const Com Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -94,7 +94,7 @@ void InformationManager::daemonListRequestFinished(const Common::Request &reques daemons.insert(std::make_pair(info.getName(), info)); } } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::Logger::logf(Common::Logger::CRITICAL, "Host list request failed: %s", e.strerror().c_str()); } diff --git a/src/Common/ClientConnection.cpp b/src/Common/ClientConnection.cpp index e030bfc..0e080fd 100644 --- a/src/Common/ClientConnection.cpp +++ b/src/Common/ClientConnection.cpp @@ -27,11 +27,11 @@ ClientConnection::ClientConnection() : connection(new Net::ClientConnection) { connection->signalReceive().connect(sigc::mem_fun(this, &ClientConnection::receive)); } -bool ClientConnection::send(const Net::Packet &packet) { - return connection->send(packet); +void ClientConnection::send(const Net::Packet &packet) { + connection->send(packet); } -void ClientConnection::connect(const Net::IPAddress &address, bool daemon) throw(Common::Exception) { +void ClientConnection::connect(const Net::IPAddress &address, bool daemon) throw(Net::Exception) { connection->connect(address, daemon); } diff --git a/src/Common/ClientConnection.h b/src/Common/ClientConnection.h index 7e422b0..28a7016 100644 --- a/src/Common/ClientConnection.h +++ b/src/Common/ClientConnection.h @@ -21,7 +21,7 @@ #define MAD_COMMON_CLIENTCONNECTION_H_ #include "Connection.h" -#include "Exception.h" +#include <Net/Exception.h> namespace Mad { @@ -37,13 +37,13 @@ class ClientConnection : public Connection { Net::ClientConnection *connection; protected: - virtual bool send(const Net::Packet &packet); + virtual void send(const Net::Packet &packet); public: ClientConnection(); virtual ~ClientConnection() {} - void connect(const Net::IPAddress &address, bool daemon = false) throw(Common::Exception); + void connect(const Net::IPAddress &address, bool daemon = false) throw(Net::Exception); bool isConnecting() const; bool isConnected() const; diff --git a/src/Common/Connection.cpp b/src/Common/Connection.cpp index b4e5db4..cde3fc2 100644 --- a/src/Common/Connection.cpp +++ b/src/Common/Connection.cpp @@ -20,16 +20,19 @@ #include "Connection.h" #include "XmlPacket.h" +#include <sigc++/bind.h> namespace Mad { namespace Common { void Connection::receive(const Net::Packet &packet) { + // receive() will be called by FdManager (main thread) + // -> let the ThreadManager call the handler in the worker thread signal(XmlPacket(packet), packet.getRequestId()); } -bool Connection::sendPacket(const XmlPacket &packet, uint16_t requestId) { - return send(packet.encode(requestId)); +void Connection::sendPacket(const XmlPacket &packet, uint16_t requestId) { + send(packet.encode(requestId)); } } diff --git a/src/Common/Connection.h b/src/Common/Connection.h index 860c044..7bcb92b 100644 --- a/src/Common/Connection.h +++ b/src/Common/Connection.h @@ -50,12 +50,12 @@ class Connection { void receive(const Net::Packet &packet); - virtual bool send(const Net::Packet &packet) = 0; + virtual void send(const Net::Packet &packet) = 0; public: virtual ~Connection() {} - bool sendPacket(const XmlPacket &packet, uint16_t requestId); + void sendPacket(const XmlPacket &packet, uint16_t requestId); sigc::signal<void, const XmlPacket&, uint16_t> signalReceive() const { return signal; diff --git a/src/Common/LogManager.cpp b/src/Common/LogManager.cpp index 22c688f..5741d38 100644 --- a/src/Common/LogManager.cpp +++ b/src/Common/LogManager.cpp @@ -19,7 +19,6 @@ #include "LogManager.h" #include "ConfigEntry.h" -#include "ThreadManager.h" #include <iostream> diff --git a/src/Common/LogManager.h b/src/Common/LogManager.h index 34a4689..1e10e0b 100644 --- a/src/Common/LogManager.h +++ b/src/Common/LogManager.h @@ -33,13 +33,16 @@ #include "glthread/cond.h" namespace Mad { -namespace Common { +namespace Net { class ThreadManager; +} + +namespace Common { class LogManager : public Configurable { private: - friend class ThreadManager; + friend class Net::ThreadManager; typedef LoggerBase::MessageCategory MessageCategory; typedef LoggerBase::MessageLevel MessageLevel; diff --git a/src/Common/Makefile.am b/src/Common/Makefile.am index 60184d4..e50461a 100644 --- a/src/Common/Makefile.am +++ b/src/Common/Makefile.am @@ -2,14 +2,14 @@ SUBDIRS = Requests RequestHandlers noinst_LTLIBRARIES = libcommon.la libcommon_la_SOURCES = ActionManager.cpp ClientConnection.cpp ConfigEntry.cpp ConfigManager.cpp \ - Connection.cpp Exception.cpp Initializable.cpp Logger.cpp LogManager.cpp \ + Connection.cpp Initializable.cpp Logger.cpp LogManager.cpp \ ModuleManager.cpp Request.cpp RequestManager.cpp SystemManager.cpp \ - ThreadManager.cpp Tokenizer.cpp XmlPacket.cpp + Tokenizer.cpp XmlPacket.cpp libcommon_la_LIBADD = Requests/librequests.la RequestHandlers/librequesthandlers.la ../../lib/libgnu.la libcommon_la_LDFLAGS = $(LTLIBMULTITHREAD) $(LTLIBTHREAD) noinst_HEADERS = ActionManager.h ClientConnection.h ConfigEntry.h ConfigManager.h \ - Configurable.h Connection.h Exception.h HostInfo.h Initializable.h Logger.h \ + Configurable.h Connection.h HostInfo.h Initializable.h Logger.h \ LoggerBase.h LogManager.h ModuleManager.h RemoteLogger.h Request.h \ RequestHandler.h RequestManager.h SystemBackend.h SystemManager.h \ - ThreadManager.h Tokenizer.h UserInfo.h XmlPacket.h + Tokenizer.h UserInfo.h XmlPacket.h diff --git a/src/Common/Makefile.in b/src/Common/Makefile.in index 541090d..915c3bb 100644 --- a/src/Common/Makefile.in +++ b/src/Common/Makefile.in @@ -62,10 +62,9 @@ LTLIBRARIES = $(noinst_LTLIBRARIES) libcommon_la_DEPENDENCIES = Requests/librequests.la \ RequestHandlers/librequesthandlers.la ../../lib/libgnu.la am_libcommon_la_OBJECTS = ActionManager.lo ClientConnection.lo \ - ConfigEntry.lo ConfigManager.lo Connection.lo Exception.lo \ - Initializable.lo Logger.lo LogManager.lo ModuleManager.lo \ - Request.lo RequestManager.lo SystemManager.lo ThreadManager.lo \ - Tokenizer.lo XmlPacket.lo + ConfigEntry.lo ConfigManager.lo Connection.lo Initializable.lo \ + Logger.lo LogManager.lo ModuleManager.lo Request.lo \ + RequestManager.lo SystemManager.lo Tokenizer.lo XmlPacket.lo libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS) libcommon_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ @@ -284,17 +283,17 @@ top_srcdir = @top_srcdir@ SUBDIRS = Requests RequestHandlers noinst_LTLIBRARIES = libcommon.la libcommon_la_SOURCES = ActionManager.cpp ClientConnection.cpp ConfigEntry.cpp ConfigManager.cpp \ - Connection.cpp Exception.cpp Initializable.cpp Logger.cpp LogManager.cpp \ + Connection.cpp Initializable.cpp Logger.cpp LogManager.cpp \ ModuleManager.cpp Request.cpp RequestManager.cpp SystemManager.cpp \ - ThreadManager.cpp Tokenizer.cpp XmlPacket.cpp + Tokenizer.cpp XmlPacket.cpp libcommon_la_LIBADD = Requests/librequests.la RequestHandlers/librequesthandlers.la ../../lib/libgnu.la libcommon_la_LDFLAGS = $(LTLIBMULTITHREAD) $(LTLIBTHREAD) noinst_HEADERS = ActionManager.h ClientConnection.h ConfigEntry.h ConfigManager.h \ - Configurable.h Connection.h Exception.h HostInfo.h Initializable.h Logger.h \ + Configurable.h Connection.h HostInfo.h Initializable.h Logger.h \ LoggerBase.h LogManager.h ModuleManager.h RemoteLogger.h Request.h \ RequestHandler.h RequestManager.h SystemBackend.h SystemManager.h \ - ThreadManager.h Tokenizer.h UserInfo.h XmlPacket.h + Tokenizer.h UserInfo.h XmlPacket.h all: all-recursive @@ -352,7 +351,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConfigEntry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConfigManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Connection.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Exception.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Initializable.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Logger.Plo@am__quote@ @@ -360,7 +358,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Request.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RequestManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemManager.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThreadManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Tokenizer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XmlPacket.Plo@am__quote@ diff --git a/src/Common/Request.cpp b/src/Common/Request.cpp index bc37708..5f4c201 100644 --- a/src/Common/Request.cpp +++ b/src/Common/Request.cpp @@ -24,11 +24,11 @@ namespace Common { void Request::handlePacket(const XmlPacket &packet) { if(packet.getType() == "Error") { - finishWithError(Common::Exception(packet["Where"], packet["ErrorCode"], packet["SubCode"], packet["SubSubCode"])); + finishWithError(Net::Exception(packet["Where"], packet["ErrorCode"], packet["SubCode"], packet["SubSubCode"])); return; } else if(packet.getType() != "OK") { - finishWithError(Exception(Exception::UNEXPECTED_PACKET)); + finishWithError(Net::Exception(Net::Exception::UNEXPECTED_PACKET)); return; // TODO Logging } diff --git a/src/Common/Request.h b/src/Common/Request.h index 7048a4e..7ab2816 100644 --- a/src/Common/Request.h +++ b/src/Common/Request.h @@ -21,7 +21,7 @@ #define MAD_COMMON_XMLREQUEST_H_ #include "RequestHandler.h" -#include "Exception.h" +#include <Net/Exception.h> #include <memory> #include <sigc++/adaptors/hide.h> @@ -36,27 +36,27 @@ class Request : public RequestHandler { sigc::signal<void,const Request&> finished; std::auto_ptr<XmlPacket> res; - Exception exp; + Net::Exception exp; public: typedef sigc::slot<void,const Request&> slot_type; protected: Request(Connection *connection, uint16_t requestId, slot_type slot) - : RequestHandler(connection, requestId), exp(Exception::NOT_FINISHED) { + : RequestHandler(connection, requestId), exp(Net::Exception::NOT_FINISHED) { finished.connect(slot); finished.connect(sigc::hide(signalFinished().make_slot())); } void finish(std::auto_ptr<XmlPacket> result) {res = result; finished(*this);} void finish(const XmlPacket& result) {res.reset(new XmlPacket(result)); finished(*this);} - void finishWithError(const Exception &e) {exp = e; finished(*this);} + void finishWithError(const Net::Exception &e) {exp = e; finished(*this);} virtual void sendRequest() = 0; virtual void handlePacket(const XmlPacket &packet); public: - const XmlPacket& getResult() const throw(Exception) { + const XmlPacket& getResult() const throw(Net::Exception) { if(res.get()) return *res; diff --git a/src/Common/RequestHandler.h b/src/Common/RequestHandler.h index a0922a7..e3ac19f 100644 --- a/src/Common/RequestHandler.h +++ b/src/Common/RequestHandler.h @@ -56,8 +56,8 @@ class RequestHandler { return requestId; } - bool sendPacket(const XmlPacket &packet) { - return connection->sendPacket(packet, requestId); + void sendPacket(const XmlPacket &packet) { + connection->sendPacket(packet, requestId); } virtual void handlePacket(const XmlPacket &packet) = 0; diff --git a/src/Common/RequestHandlers/DisconnectRequestHandler.cpp b/src/Common/RequestHandlers/DisconnectRequestHandler.cpp index 9204f43..fa2ad88 100644 --- a/src/Common/RequestHandlers/DisconnectRequestHandler.cpp +++ b/src/Common/RequestHandlers/DisconnectRequestHandler.cpp @@ -18,7 +18,7 @@ */ #include "DisconnectRequestHandler.h" -#include "../Exception.h" +#include <Net/Exception.h> #include "../Logger.h" namespace Mad { @@ -31,7 +31,7 @@ void DisconnectRequestHandler::handlePacket(const XmlPacket &packet) { XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); diff --git a/src/Common/RequestHandlers/FSInfoRequestHandler.cpp b/src/Common/RequestHandlers/FSInfoRequestHandler.cpp index 7421ad2..fc98730 100644 --- a/src/Common/RequestHandlers/FSInfoRequestHandler.cpp +++ b/src/Common/RequestHandlers/FSInfoRequestHandler.cpp @@ -18,7 +18,7 @@ */ #include "FSInfoRequestHandler.h" -#include "../Exception.h" +#include <Net/Exception.h> #include "../Logger.h" namespace Mad { @@ -31,7 +31,7 @@ void FSInfoRequestHandler::handlePacket(const XmlPacket &packet) { XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -44,7 +44,7 @@ void FSInfoRequestHandler::handlePacket(const XmlPacket &packet) { if(!SystemManager::get()->getFSInfo(sigc::mem_fun(this, &FSInfoRequestHandler::fsInfoHandler))) { XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Exception::NOT_IMPLEMENTED); + ret.add("ErrorCode", Net::Exception::NOT_IMPLEMENTED); sendPacket(ret); diff --git a/src/Common/RequestHandlers/StatusRequestHandler.cpp b/src/Common/RequestHandlers/StatusRequestHandler.cpp index 1464f71..0cfe025 100644 --- a/src/Common/RequestHandlers/StatusRequestHandler.cpp +++ b/src/Common/RequestHandlers/StatusRequestHandler.cpp @@ -18,7 +18,7 @@ */ #include "StatusRequestHandler.h" -#include "../Exception.h" +#include <Net/Exception.h> #include "../SystemBackend.h" #include "../Logger.h" @@ -32,7 +32,7 @@ void StatusRequestHandler::handlePacket(const XmlPacket &packet) { XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index 1edf778..08be0a9 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -96,7 +96,7 @@ void RequestManager::receiveHandler(Connection *connection, const XmlPacket &pac XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); connection->sendPacket(ret, requestId); } diff --git a/src/Common/Requests/DisconnectRequest.cpp b/src/Common/Requests/DisconnectRequest.cpp index 248f8b1..3fac25b 100644 --- a/src/Common/Requests/DisconnectRequest.cpp +++ b/src/Common/Requests/DisconnectRequest.cpp @@ -32,11 +32,11 @@ void DisconnectRequest::sendRequest() { void DisconnectRequest::handlePacket(const XmlPacket &packet) { if(packet.getType() == "Error") { - finishWithError(Common::Exception(packet["Where"], packet["ErrorCode"], packet["SubCode"], packet["SubSubCode"])); + finishWithError(Net::Exception(packet["Where"], packet["ErrorCode"], packet["SubCode"], packet["SubSubCode"])); return; } else if(packet.getType() != "OK") { - finishWithError(Exception(Exception::UNEXPECTED_PACKET)); + finishWithError(Net::Exception(Net::Exception::UNEXPECTED_PACKET)); return; // TODO Logging } diff --git a/src/Common/Requests/GSSAPIAuthRequest.cpp b/src/Common/Requests/GSSAPIAuthRequest.cpp index f10bf9b..ffc7939 100644 --- a/src/Common/Requests/GSSAPIAuthRequest.cpp +++ b/src/Common/Requests/GSSAPIAuthRequest.cpp @@ -68,17 +68,14 @@ void GSSAPIAuthRequest::sendRequest() { ret.setType("AuthGSSAPI"); ret.addBinary("authToken", buffer.value, buffer.length); - if(!sendPacket(ret)) { - gss_release_buffer(&minStat, &buffer); - return; - } + sendPacket(ret); gss_release_buffer(&minStat, &buffer); } void GSSAPIAuthRequest::handlePacket(const XmlPacket &packet) { if(packet.getType() != "AuthGSSAPI") { - finishWithError(Exception(Exception::UNEXPECTED_PACKET)); + finishWithError(Net::Exception(Net::Exception::UNEXPECTED_PACKET)); return; // TODO Logging } @@ -112,10 +109,7 @@ void GSSAPIAuthRequest::handlePacket(const XmlPacket &packet) { ret.setType("AuthGSSAPI"); ret.addBinary("authToken", sendBuffer.value, sendBuffer.length); - if(!sendPacket(ret)) { - gss_release_buffer(&minStat, &sendBuffer); - return; - } + sendPacket(ret); gss_release_buffer(&minStat, &sendBuffer); } @@ -153,10 +147,7 @@ void GSSAPIAuthRequest::handlePacket(const XmlPacket &packet) { ret.setType("AuthGSSAPI"); ret.addBinary("authToken", sendBuffer.value, sendBuffer.length); - if(!sendPacket(ret)) { - gss_release_buffer(&minStat, &sendBuffer); - return; - } + sendPacket(ret); gss_release_buffer(&minStat, &sendBuffer); diff --git a/src/Daemon/RequestHandlers/CommandRequestHandler.cpp b/src/Daemon/RequestHandlers/CommandRequestHandler.cpp index ad5908a..939f1f0 100644 --- a/src/Daemon/RequestHandlers/CommandRequestHandler.cpp +++ b/src/Daemon/RequestHandlers/CommandRequestHandler.cpp @@ -18,7 +18,7 @@ */ #include "CommandRequestHandler.h" -#include <Common/Exception.h> +#include <Net/Exception.h> #include <Common/Logger.h> #include <Common/SystemManager.h> @@ -32,7 +32,7 @@ void CommandRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -56,7 +56,7 @@ void CommandRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::NOT_IMPLEMENTED); + ret.add("ErrorCode", Net::Exception::NOT_IMPLEMENTED); sendPacket(ret); diff --git a/src/Net/ClientConnection.cpp b/src/Net/ClientConnection.cpp index 31c1a08..0162a86 100644 --- a/src/Net/ClientConnection.cpp +++ b/src/Net/ClientConnection.cpp @@ -54,7 +54,7 @@ void ClientConnection::connectionHeader() { rawReceive(sizeof(ConnectionHeader), sigc::mem_fun(this, &ClientConnection::connectionHeaderReceiveHandler)); } -void ClientConnection::connect(const IPAddress &address, bool daemon0) throw(Common::Exception) { +void ClientConnection::connect(const IPAddress &address, bool daemon0) throw(Exception) { daemon = daemon0; if(isConnected()) @@ -63,7 +63,7 @@ void ClientConnection::connect(const IPAddress &address, bool daemon0) throw(Com sock = socket(PF_INET, SOCK_STREAM, 0); if(sock < 0) - throw Common::Exception("socket()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("socket()", Exception::INTERNAL_ERRNO, errno); if(peer) delete peer; @@ -73,7 +73,7 @@ void ClientConnection::connect(const IPAddress &address, bool daemon0) throw(Com close(sock); delete peer; peer = 0; - throw Common::Exception("connect()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("connect()", Exception::INTERNAL_ERRNO, errno); } // Set non-blocking flag @@ -82,7 +82,7 @@ void ClientConnection::connect(const IPAddress &address, bool daemon0) throw(Com if(flags < 0) { close(sock); - throw Common::Exception("fcntl()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("fcntl()", Exception::INTERNAL_ERRNO, errno); } fcntl(sock, F_SETFL, flags | O_NONBLOCK); diff --git a/src/Net/ClientConnection.h b/src/Net/ClientConnection.h index 88bdf09..bdd7872 100644 --- a/src/Net/ClientConnection.h +++ b/src/Net/ClientConnection.h @@ -21,7 +21,7 @@ #define MAD_NET_CLIENTCONNECTION_H_ #include "Connection.h" -#include <Common/Exception.h> +#include "Exception.h" namespace Mad { namespace Net { @@ -40,7 +40,7 @@ class ClientConnection : public Connection { public: ClientConnection() : daemon(0) {} - void connect(const IPAddress &address, bool daemon0 = false) throw(Common::Exception); + void connect(const IPAddress &address, bool daemon0 = false) throw(Exception); }; } diff --git a/src/Common/Exception.cpp b/src/Net/Exception.cpp index 67eb1d9..34b8033 100644 --- a/src/Common/Exception.cpp +++ b/src/Net/Exception.cpp @@ -23,7 +23,7 @@ #include <gnutls/gnutls.h> namespace Mad { -namespace Common { +namespace Net { std::string Exception::strerror() const { std::string ret; diff --git a/src/Common/Exception.h b/src/Net/Exception.h index 7b86fbd..48e86d1 100644 --- a/src/Common/Exception.h +++ b/src/Net/Exception.h @@ -17,13 +17,13 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef MAD_COMMON_EXCEPTION_H_ -#define MAD_COMMON_EXCEPTION_H_ +#ifndef MAD_NET_EXCEPTION_H_ +#define MAD_NET_EXCEPTION_H_ #include <string> namespace Mad { -namespace Common { +namespace Net { class Exception { public: @@ -58,4 +58,4 @@ class Exception { } } -#endif /* MAD_COMMON_EXCEPTION_H_ */ +#endif /* MAD_NET_EXCEPTION_H_ */ diff --git a/src/Net/IPAddress.cpp b/src/Net/IPAddress.cpp index 6bf79a3..eb9d3be 100644 --- a/src/Net/IPAddress.cpp +++ b/src/Net/IPAddress.cpp @@ -36,7 +36,7 @@ IPAddress::IPAddress(uint32_t address, uint16_t port0) : addr(address), port(por sa.sin_addr.s_addr = htonl(addr); } -IPAddress::IPAddress(const std::string &address) throw(Common::Exception) { +IPAddress::IPAddress(const std::string &address) throw(Exception) { std::string ip; size_t pos = address.find_first_of(':'); @@ -51,7 +51,7 @@ IPAddress::IPAddress(const std::string &address) throw(Common::Exception) { char *endptr; port = std::strtol(address.substr(pos+1).c_str(), &endptr, 10); if(*endptr != 0 || port == 0) - throw Common::Exception(Common::Exception::INVALID_ADDRESS); + throw Exception(Exception::INVALID_ADDRESS); } sa.sin_family = AF_INET; @@ -60,17 +60,17 @@ IPAddress::IPAddress(const std::string &address) throw(Common::Exception) { if(ip == "*") sa.sin_addr.s_addr = INADDR_ANY; else if(!inet_pton(AF_INET, ip.c_str(), &sa.sin_addr)) - throw Common::Exception(Common::Exception::INVALID_ADDRESS); + throw Exception(Exception::INVALID_ADDRESS); addr = ntohl(sa.sin_addr.s_addr); } -IPAddress::IPAddress(const std::string &address, uint16_t port0) throw(Common::Exception) : port(port0) { +IPAddress::IPAddress(const std::string &address, uint16_t port0) throw(Exception) : port(port0) { sa.sin_family = AF_INET; sa.sin_port = htons(port); if(!inet_pton(AF_INET, address.c_str(), &sa.sin_addr)) - throw Common::Exception(Common::Exception::INVALID_ADDRESS); + throw Exception(Exception::INVALID_ADDRESS); addr = ntohl(sa.sin_addr.s_addr); } diff --git a/src/Net/IPAddress.h b/src/Net/IPAddress.h index d67ec3e..3541891 100644 --- a/src/Net/IPAddress.h +++ b/src/Net/IPAddress.h @@ -20,7 +20,7 @@ #ifndef MAD_NET_IPADDRESS_H_ #define MAD_NET_IPADDRESS_H_ -#include <Common/Exception.h> +#include "Exception.h" #include <string> #include <arpa/inet.h> @@ -39,8 +39,8 @@ class IPAddress { // TODO Default port IPAddress(uint16_t port0 = 6666); IPAddress(uint32_t address, uint16_t port0); - IPAddress(const std::string &address) throw(Common::Exception); - IPAddress(const std::string &address, uint16_t port0) throw(Common::Exception); + IPAddress(const std::string &address) throw(Exception); + IPAddress(const std::string &address, uint16_t port0) throw(Exception); IPAddress(const struct sockaddr_in &address); uint32_t getAddress() const {return addr;} diff --git a/src/Net/Listener.cpp b/src/Net/Listener.cpp index c4c5194..95147fa 100644 --- a/src/Net/Listener.cpp +++ b/src/Net/Listener.cpp @@ -41,7 +41,7 @@ void Listener::acceptHandler(int) { } } -Listener::Listener(const std::string &x905CertFile0, const std::string &x905KeyFile0, const IPAddress &address0) throw(Common::Exception) +Listener::Listener(const std::string &x905CertFile0, const std::string &x905KeyFile0, const IPAddress &address0) throw(Exception) : x905CertFile(x905CertFile0), x905KeyFile(x905KeyFile0), address(address0) { gnutls_dh_params_init(&dh_params); gnutls_dh_params_generate2(dh_params, 768); @@ -49,7 +49,7 @@ Listener::Listener(const std::string &x905CertFile0, const std::string &x905KeyF sock = socket(PF_INET, SOCK_STREAM, 0); if(sock < 0) - throw Common::Exception("socket()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("socket()", Exception::INTERNAL_ERRNO, errno); // Set non-blocking flag int flags = fcntl(sock, F_GETFL, 0); @@ -57,7 +57,7 @@ Listener::Listener(const std::string &x905CertFile0, const std::string &x905KeyF if(flags < 0) { close(sock); - throw Common::Exception("fcntl()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("fcntl()", Exception::INTERNAL_ERRNO, errno); } fcntl(sock, F_SETFL, flags | O_NONBLOCK); @@ -69,13 +69,13 @@ Listener::Listener(const std::string &x905CertFile0, const std::string &x905KeyF if(bind(sock, address.getSockAddr(), address.getSockAddrLength()) < 0) { close(sock); - throw Common::Exception("bind()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("bind()", Exception::INTERNAL_ERRNO, errno); } if(listen(sock, 64) < 0) { close(sock); - throw Common::Exception("listen()", Common::Exception::INTERNAL_ERRNO, errno); + throw Exception("listen()", Exception::INTERNAL_ERRNO, errno); } FdManager::get()->registerFd(sock, sigc::mem_fun(this, &Listener::acceptHandler), POLLIN); diff --git a/src/Net/Listener.h b/src/Net/Listener.h index a095439..ca19947 100644 --- a/src/Net/Listener.h +++ b/src/Net/Listener.h @@ -21,7 +21,6 @@ #define MAD_NET_LISTENER_H_ #include "IPAddress.h" -#include <Common/Exception.h> #include <gnutls/gnutls.h> #include <list> @@ -51,7 +50,7 @@ class Listener { Listener& operator=(const Listener &o); public: - Listener(const std::string &x905CertFile0, const std::string &x905KeyFile0, const IPAddress &address0 = IPAddress()) throw(Common::Exception); + Listener(const std::string &x905CertFile0, const std::string &x905KeyFile0, const IPAddress &address0 = IPAddress()) throw(Exception); virtual ~Listener(); ServerConnection* getConnection(); diff --git a/src/Net/Makefile.am b/src/Net/Makefile.am index e8265fa..65fc504 100644 --- a/src/Net/Makefile.am +++ b/src/Net/Makefile.am @@ -1,4 +1,6 @@ noinst_LTLIBRARIES = libnet.la -libnet_la_SOURCES = ClientConnection.cpp ServerConnection.cpp Connection.cpp FdManager.cpp IPAddress.cpp Listener.cpp Packet.cpp +libnet_la_SOURCES = ClientConnection.cpp Exception.cpp ServerConnection.cpp Connection.cpp FdManager.cpp IPAddress.cpp \ + Listener.cpp Packet.cpp ThreadManager.cpp -noinst_HEADERS = ClientConnection.h ServerConnection.h Connection.h FdManager.h IPAddress.h Listener.h Packet.h +noinst_HEADERS = ClientConnection.h Exception.h ServerConnection.h Connection.h FdManager.h IPAddress.h Listener.h \ + Packet.h ThreadManager.h diff --git a/src/Net/Makefile.in b/src/Net/Makefile.in index 0d65c6d..5d421fb 100644 --- a/src/Net/Makefile.in +++ b/src/Net/Makefile.in @@ -60,8 +60,9 @@ CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libnet_la_LIBADD = -am_libnet_la_OBJECTS = ClientConnection.lo ServerConnection.lo \ - Connection.lo FdManager.lo IPAddress.lo Listener.lo Packet.lo +am_libnet_la_OBJECTS = ClientConnection.lo Exception.lo \ + ServerConnection.lo Connection.lo FdManager.lo IPAddress.lo \ + Listener.lo Packet.lo ThreadManager.lo libnet_la_OBJECTS = $(am_libnet_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp @@ -265,8 +266,12 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libnet.la -libnet_la_SOURCES = ClientConnection.cpp ServerConnection.cpp Connection.cpp FdManager.cpp IPAddress.cpp Listener.cpp Packet.cpp -noinst_HEADERS = ClientConnection.h ServerConnection.h Connection.h FdManager.h IPAddress.h Listener.h Packet.h +libnet_la_SOURCES = ClientConnection.cpp Exception.cpp ServerConnection.cpp Connection.cpp FdManager.cpp IPAddress.cpp \ + Listener.cpp Packet.cpp ThreadManager.cpp + +noinst_HEADERS = ClientConnection.h Exception.h ServerConnection.h Connection.h FdManager.h IPAddress.h Listener.h \ + Packet.h ThreadManager.h + all: all-am .SUFFIXES: @@ -320,11 +325,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClientConnection.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Connection.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Exception.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FdManager.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IPAddress.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Listener.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Packet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ServerConnection.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThreadManager.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< diff --git a/src/Net/ServerConnection.h b/src/Net/ServerConnection.h index 9a67c13..0870143 100644 --- a/src/Net/ServerConnection.h +++ b/src/Net/ServerConnection.h @@ -21,7 +21,6 @@ #define MAD_NET_SERVERCONNECTION_H_ #include "Connection.h" -#include <Common/Exception.h> #include <string> namespace Mad { diff --git a/src/Common/ThreadManager.cpp b/src/Net/ThreadManager.cpp index c0f4d74..9eb965d 100644 --- a/src/Common/ThreadManager.cpp +++ b/src/Net/ThreadManager.cpp @@ -18,11 +18,16 @@ */ #include "ThreadManager.h" +#include "FdManager.h" +#include <fcntl.h> #include <sigc++/bind.h> +#include <sigc++/hide.h> + +#include <ignore-value.h> namespace Mad { -namespace Common { +namespace Net { ThreadManager ThreadManager::threadManager; @@ -62,7 +67,7 @@ void ThreadManager::workerFunc() { void ThreadManager::detach() { if(!isThisMainThread()) { - Logger::log(Logger::CRITICAL, "Tried to detach main thread! This is just WRONG!"); + Common::Logger::log(Common::Logger::CRITICAL, "Tried to detach main thread! This is just WRONG!"); return; } @@ -91,13 +96,59 @@ void ThreadManager::pushWork(const sigc::slot<void> &newWork) { gl_lock_unlock(workLock); } +void ThreadManager::pushIO(const sigc::slot<void> &newIO) { + gl_lock_lock(ioLock); + + ioQueue.push(newIO); + + if(!hasIO) { + hasIO = true; + ignore_value(write(ioNotifyPipe[1], "", 1)); + } + + gl_lock_unlock(ioLock); +} + +void ThreadManager::runIO() { + gl_lock_lock(ioLock); + + // Empty the pipe + char buf; + ignore_value(read(ioNotifyPipe[0], &buf, 1)); + hasIO = false; + + while(!ioQueue.empty()) { + sigc::slot<void> handler = ioQueue.front(); + ioQueue.pop(); + gl_lock_unlock(ioLock); + + handler(); + + gl_lock_lock(ioLock); + } + + gl_lock_unlock(ioLock); +} + void ThreadManager::doInit() { gl_lock_init(threadLock); gl_lock_init(runLock); + gl_lock_init(workLock); gl_cond_init(workCond); + gl_lock_init(ioLock); + hasIO = false; + + // TODO Error handling + pipe(ioNotifyPipe); + + fcntl(ioNotifyPipe[0], F_SETFL, fcntl(ioNotifyPipe[0], F_GETFL) | O_NONBLOCK); + fcntl(ioNotifyPipe[1], F_SETFL, fcntl(ioNotifyPipe[1], F_GETFL) | O_NONBLOCK); + + Net::FdManager::get()->registerFd(ioNotifyPipe[0], sigc::hide(sigc::mem_fun(this, &ThreadManager::runIO)), POLLIN); + running = true; gl_lock_lock(threadLock); @@ -115,6 +166,7 @@ void ThreadManager::doDeinit() { return; } + // First set running = false so the worker threads quit gl_lock_lock(runLock); gl_lock_lock(workLock); @@ -140,11 +192,21 @@ void ThreadManager::doDeinit() { } gl_lock_unlock(threadLock); - LogManager::get()->stopLoggerThread(); + // Finally, the logger thread has to die + Common::LogManager::get()->stopLoggerThread(); gl_thread_join(loggerThread, 0); + // And then we clean everything up + Net::FdManager::get()->unregisterFd(ioNotifyPipe[0]); + + close(ioNotifyPipe[0]); + close(ioNotifyPipe[1]); + + gl_lock_destroy(ioLock); + gl_cond_destroy(workCond); gl_lock_destroy(workLock); + gl_lock_destroy(runLock); gl_lock_destroy(threadLock); } diff --git a/src/Common/ThreadManager.h b/src/Net/ThreadManager.h index 6e8616f..9e2b3d3 100644 --- a/src/Common/ThreadManager.h +++ b/src/Net/ThreadManager.h @@ -22,8 +22,8 @@ #include <config.h> -#include "Initializable.h" -#include "LogManager.h" +#include <Common/Initializable.h> +#include <Common/LogManager.h> #include <queue> #include <set> @@ -34,9 +34,9 @@ #include "glthread/cond.h" namespace Mad { -namespace Common { +namespace Net { -class ThreadManager : public Initializable { +class ThreadManager : public Common::Initializable { private: gl_thread_t mainThread, workerThread, loggerThread; std::set<gl_thread_t> threads; @@ -50,6 +50,11 @@ class ThreadManager : public Initializable { gl_cond_t workCond; std::queue<sigc::slot<void> > work; + gl_lock_t ioLock; + bool hasIO; + int ioNotifyPipe[2]; + std::queue<sigc::slot<void> > ioQueue; + static ThreadManager threadManager; ThreadManager() {} @@ -60,7 +65,7 @@ class ThreadManager : public Initializable { } static void* loggerStart(void*) { - LogManager::get()->loggerThread(); + Common::LogManager::get()->loggerThread(); return 0; } @@ -93,6 +98,9 @@ class ThreadManager : public Initializable { void detach(); void pushWork(const sigc::slot<void> &newWork); + void pushIO(const sigc::slot<void> &newIO); + + void runIO(); static ThreadManager* get() { return &threadManager; diff --git a/src/Server/ConnectionManager.cpp b/src/Server/ConnectionManager.cpp index 279304c..9235700 100644 --- a/src/Server/ConnectionManager.cpp +++ b/src/Server/ConnectionManager.cpp @@ -46,8 +46,8 @@ namespace Server { ConnectionManager ConnectionManager::connectionManager; -bool ConnectionManager::Connection::send(const Net::Packet &packet) { - return connection->send(packet); +void ConnectionManager::Connection::send(const Net::Packet &packet) { + connection->send(packet); } ConnectionManager::Connection::Connection(Net::ServerConnection *connection0, ConnectionType type0) @@ -100,7 +100,7 @@ bool ConnectionManager::handleConfigEntry(const Common::ConfigEntry &entry, bool try { listenerAddresses.push_back(Net::IPAddress(entry[0][0])); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { // TODO Log error } @@ -149,7 +149,7 @@ void ConnectionManager::configFinished() { try { listeners.push_back(new Net::Listener(x509CertFile, x509KeyFile)); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { // TODO Log error } } @@ -158,7 +158,7 @@ void ConnectionManager::configFinished() { try { listeners.push_back(new Net::Listener(x509CertFile, x509KeyFile, *address)); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { // TODO Log error } } @@ -233,14 +233,14 @@ void ConnectionManager::run() { } } -Common::Connection* ConnectionManager::getDaemonConnection(const std::string &name) const throw (Common::Exception&) { +Common::Connection* ConnectionManager::getDaemonConnection(const std::string &name) const throw (Net::Exception&) { const Common::HostInfo *hostInfo; try { hostInfo = &daemonInfo.at(name); } catch(std::out_of_range&) { - throw Common::Exception(Common::Exception::UNKNOWN_DAEMON); + throw Net::Exception(Net::Exception::UNKNOWN_DAEMON); } if(hostInfo->getState() != Common::HostInfo::INACTIVE) { @@ -251,10 +251,10 @@ Common::Connection* ConnectionManager::getDaemonConnection(const std::string &na } } - throw(Common::Exception::NOT_AVAILABLE); + throw(Net::Exception::NOT_AVAILABLE); } -std::string ConnectionManager::getDaemonName(const Common::Connection *con) const throw (Common::Exception&) { +std::string ConnectionManager::getDaemonName(const Common::Connection *con) const throw (Net::Exception&) { const Connection *connection = dynamic_cast<const Connection*>(con); if(connection) { @@ -263,22 +263,22 @@ std::string ConnectionManager::getDaemonName(const Common::Connection *con) cons } } - throw Common::Exception(Common::Exception::UNKNOWN_DAEMON); + throw Net::Exception(Net::Exception::UNKNOWN_DAEMON); } -void ConnectionManager::identifyDaemonConnection(Common::Connection *con, const std::string &name) throw (Common::Exception&) { +void ConnectionManager::identifyDaemonConnection(Common::Connection *con, const std::string &name) throw (Net::Exception&) { // TODO Logging Connection *connection = dynamic_cast<Connection*>(con); if(!connection || (connection->getConnectionType() != Connection::DAEMON)) - throw Common::Exception(Common::Exception::INVALID_ACTION); + throw Net::Exception(Net::Exception::INVALID_ACTION); if(connection->isIdentified()) - throw Common::Exception(Common::Exception::ALREADY_IDENTIFIED); + throw Net::Exception(Net::Exception::ALREADY_IDENTIFIED); if(daemonInfo.count(name) == 0) - throw Common::Exception(Common::Exception::UNKNOWN_DAEMON); + throw Net::Exception(Net::Exception::UNKNOWN_DAEMON); Common::HostInfo *hostInfo = &daemonInfo[name]; @@ -287,7 +287,7 @@ void ConnectionManager::identifyDaemonConnection(Common::Connection *con, const getDaemonConnection(name)->disconnect(); Common::Logger::log(Common::Logger::WARNING, "Disconnecting old connection."); } - catch(Common::Exception&) {} + catch(Net::Exception&) {} } connection->identify(hostInfo); diff --git a/src/Server/ConnectionManager.h b/src/Server/ConnectionManager.h index 5072897..62ecc37 100644 --- a/src/Server/ConnectionManager.h +++ b/src/Server/ConnectionManager.h @@ -25,7 +25,6 @@ #include <map> #include <Common/Configurable.h> -#include <Common/Exception.h> #include <Common/HostInfo.h> #include <Common/Initializable.h> #include <Common/RequestManager.h> @@ -56,7 +55,7 @@ class ConnectionManager : public Common::Configurable, public Common::Initializa Common::HostInfo *hostInfo; protected: - virtual bool send(const Net::Packet &packet); + virtual void send(const Net::Packet &packet); public: Connection(Net::ServerConnection *connection0, ConnectionType type0); @@ -118,10 +117,10 @@ class ConnectionManager : public Common::Configurable, public Common::Initializa void run(); - Common::Connection* getDaemonConnection(const std::string &name) const throw (Common::Exception&); - std::string getDaemonName(const Common::Connection *con) const throw (Common::Exception&); + Common::Connection* getDaemonConnection(const std::string &name) const throw (Net::Exception&); + std::string getDaemonName(const Common::Connection *con) const throw (Net::Exception&); - void identifyDaemonConnection(Common::Connection *con, const std::string &name) throw (Common::Exception&); + void identifyDaemonConnection(Common::Connection *con, const std::string &name) throw (Net::Exception&); std::vector<Common::HostInfo> getDaemonList() const; }; diff --git a/src/Server/RequestHandlers/DaemonCommandRequestHandler.cpp b/src/Server/RequestHandlers/DaemonCommandRequestHandler.cpp index 7c1efb9..314aa97 100644 --- a/src/Server/RequestHandlers/DaemonCommandRequestHandler.cpp +++ b/src/Server/RequestHandlers/DaemonCommandRequestHandler.cpp @@ -33,7 +33,7 @@ void DaemonCommandRequestHandler::handlePacket(const Common::XmlPacket &packet) Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -50,7 +50,7 @@ void DaemonCommandRequestHandler::handlePacket(const Common::XmlPacket &packet) Common::RequestManager::get()->sendRequest<Requests::CommandRequest>(daemonCon, sigc::mem_fun(this, &DaemonCommandRequestHandler::requestFinished), command == "reboot"); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); @@ -66,7 +66,7 @@ void DaemonCommandRequestHandler::requestFinished(const Common::Request &request try { sendPacket(request.getResult()); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); diff --git a/src/Server/RequestHandlers/DaemonFSInfoRequestHandler.cpp b/src/Server/RequestHandlers/DaemonFSInfoRequestHandler.cpp index 9ccca40..eadc0d5 100644 --- a/src/Server/RequestHandlers/DaemonFSInfoRequestHandler.cpp +++ b/src/Server/RequestHandlers/DaemonFSInfoRequestHandler.cpp @@ -33,7 +33,7 @@ void DaemonFSInfoRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -48,7 +48,7 @@ void DaemonFSInfoRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::RequestManager::get()->sendRequest<Common::Requests::FSInfoRequest>(daemonCon, sigc::mem_fun(this, &DaemonFSInfoRequestHandler::requestFinished)); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); @@ -64,7 +64,7 @@ void DaemonFSInfoRequestHandler::requestFinished(const Common::Request &request) try { sendPacket(request.getResult()); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); diff --git a/src/Server/RequestHandlers/DaemonListRequestHandler.cpp b/src/Server/RequestHandlers/DaemonListRequestHandler.cpp index c4b4143..2b21a29 100644 --- a/src/Server/RequestHandlers/DaemonListRequestHandler.cpp +++ b/src/Server/RequestHandlers/DaemonListRequestHandler.cpp @@ -31,7 +31,7 @@ void DaemonListRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); diff --git a/src/Server/RequestHandlers/DaemonStatusRequestHandler.cpp b/src/Server/RequestHandlers/DaemonStatusRequestHandler.cpp index 07e0c4c..9e21127 100644 --- a/src/Server/RequestHandlers/DaemonStatusRequestHandler.cpp +++ b/src/Server/RequestHandlers/DaemonStatusRequestHandler.cpp @@ -33,7 +33,7 @@ void DaemonStatusRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -50,7 +50,7 @@ void DaemonStatusRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::RequestManager::get()->sendRequest<Common::Requests::StatusRequest>(daemonCon, sigc::mem_fun(this, &DaemonStatusRequestHandler::requestFinished)); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); @@ -66,7 +66,7 @@ void DaemonStatusRequestHandler::requestFinished(const Common::Request &request) try { sendPacket(request.getResult()); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); diff --git a/src/Server/RequestHandlers/GSSAPIAuthRequestHandler.cpp b/src/Server/RequestHandlers/GSSAPIAuthRequestHandler.cpp index c665843..5272d7a 100644 --- a/src/Server/RequestHandlers/GSSAPIAuthRequestHandler.cpp +++ b/src/Server/RequestHandlers/GSSAPIAuthRequestHandler.cpp @@ -18,9 +18,8 @@ */ #include "GSSAPIAuthRequestHandler.h" -#include <Common/Exception.h> #include <Common/Logger.h> -#include <Net/Connection.h> +#include <Net/Exception.h> #include <cstring> @@ -36,7 +35,7 @@ void GSSAPIAuthRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -73,10 +72,7 @@ void GSSAPIAuthRequestHandler::handlePacket(const Common::XmlPacket &packet) { ret.setType("AuthGSSAPI"); ret.addBinary("authToken", sendBuffer.value, sendBuffer.length); - if(!sendPacket(ret)) { - gss_release_buffer(&minStat, &sendBuffer); - return; - } + sendPacket(ret); gss_release_buffer(&minStat, &sendBuffer); } @@ -102,10 +98,7 @@ void GSSAPIAuthRequestHandler::handlePacket(const Common::XmlPacket &packet) { ret.setType("AuthGSSAPI"); ret.addBinary("certMic", sendBuffer.value, sendBuffer.length); - if(!sendPacket(ret)) { - gss_release_buffer(&minStat, &sendBuffer); - return; - } + sendPacket(ret); gss_release_buffer(&minStat, &sendBuffer); diff --git a/src/Server/RequestHandlers/IdentifyRequestHandler.cpp b/src/Server/RequestHandlers/IdentifyRequestHandler.cpp index 9db9411..ac8bb42 100644 --- a/src/Server/RequestHandlers/IdentifyRequestHandler.cpp +++ b/src/Server/RequestHandlers/IdentifyRequestHandler.cpp @@ -32,7 +32,7 @@ void IdentifyRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -48,7 +48,7 @@ void IdentifyRequestHandler::handlePacket(const Common::XmlPacket &packet) { ret.setType("OK"); sendPacket(ret); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", e.getErrorCode()); diff --git a/src/Server/RequestHandlers/LogRequestHandler.cpp b/src/Server/RequestHandlers/LogRequestHandler.cpp index ae64921..557a97c 100644 --- a/src/Server/RequestHandlers/LogRequestHandler.cpp +++ b/src/Server/RequestHandlers/LogRequestHandler.cpp @@ -32,7 +32,7 @@ void LogRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -46,7 +46,7 @@ void LogRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::LogManager::get()->log(packet["category"], packet["level"], packet["timestamp"], packet["message"], ConnectionManager::get()->getDaemonName(getConnection())); } - catch(Common::Exception &e) { + catch(Net::Exception &e) { Common::Logger::logf(Common::Logger::ERROR, "Can't determine daemon name: %s", e.strerror().c_str()); } diff --git a/src/Server/RequestHandlers/UserInfoRequestHandler.cpp b/src/Server/RequestHandlers/UserInfoRequestHandler.cpp index 16003a2..39fa63e 100644 --- a/src/Server/RequestHandlers/UserInfoRequestHandler.cpp +++ b/src/Server/RequestHandlers/UserInfoRequestHandler.cpp @@ -19,7 +19,7 @@ #include "UserInfoRequestHandler.h" #include "../UserManager.h" -#include <Common/Exception.h> +#include <Net/Exception.h> #include <Common/Logger.h> namespace Mad { @@ -32,7 +32,7 @@ void UserInfoRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -45,7 +45,7 @@ void UserInfoRequestHandler::handlePacket(const Common::XmlPacket &packet) { if(!UserManager::get()->getUserInfo(packet["uid"], sigc::mem_fun(this, &UserInfoRequestHandler::userInfoHandler))) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::NOT_IMPLEMENTED); + ret.add("ErrorCode", Net::Exception::NOT_IMPLEMENTED); sendPacket(ret); signalFinished().emit(); diff --git a/src/Server/RequestHandlers/UserListRequestHandler.cpp b/src/Server/RequestHandlers/UserListRequestHandler.cpp index 696b1d4..66f67bd 100644 --- a/src/Server/RequestHandlers/UserListRequestHandler.cpp +++ b/src/Server/RequestHandlers/UserListRequestHandler.cpp @@ -19,7 +19,7 @@ #include "UserListRequestHandler.h" #include "../UserManager.h" -#include <Common/Exception.h> +#include <Net/Exception.h> #include <Common/Logger.h> namespace Mad { @@ -32,7 +32,7 @@ void UserListRequestHandler::handlePacket(const Common::XmlPacket &packet) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET); + ret.add("ErrorCode", Net::Exception::UNEXPECTED_PACKET); sendPacket(ret); @@ -45,7 +45,7 @@ void UserListRequestHandler::handlePacket(const Common::XmlPacket &packet) { if(!UserManager::get()->getUserList(sigc::mem_fun(this, &UserListRequestHandler::userListHandler))) { Common::XmlPacket ret; ret.setType("Error"); - ret.add("ErrorCode", Common::Exception::NOT_IMPLEMENTED); + ret.add("ErrorCode", Net::Exception::NOT_IMPLEMENTED); sendPacket(ret); signalFinished().emit(); diff --git a/src/mad-server.cpp b/src/mad-server.cpp index 863d1ee..59d8949 100644 --- a/src/mad-server.cpp +++ b/src/mad-server.cpp @@ -21,7 +21,7 @@ #include "Common/LogManager.h" #include "Common/Logger.h" #include "Common/ModuleManager.h" -#include "Common/ThreadManager.h" +#include "Net/ThreadManager.h" #include "Server/ConnectionManager.h" #include <signal.h> @@ -36,7 +36,7 @@ int main() { sigaddset(&signals, SIGPIPE); sigprocmask(SIG_BLOCK, &signals, 0); - Common::ThreadManager::get()->init(); + Net::ThreadManager::get()->init(); Server::ConnectionManager::get()->init(); Common::ModuleManager::get()->loadModule("FileLogger"); diff --git a/src/mad.cpp b/src/mad.cpp index c3d3a82..bc150e2 100644 --- a/src/mad.cpp +++ b/src/mad.cpp @@ -20,12 +20,12 @@ #include "Net/Connection.h" #include "Net/FdManager.h" #include "Net/IPAddress.h" +#include "Net/ThreadManager.h" #include "Common/ConfigManager.h" #include "Common/LogManager.h" #include "Common/Logger.h" #include "Common/ModuleManager.h" #include "Common/RequestManager.h" -#include "Common/ThreadManager.h" #include "Common/ClientConnection.h" #include "Common/RequestHandlers/FSInfoRequestHandler.h" #include "Common/RequestHandlers/StatusRequestHandler.h" @@ -45,7 +45,7 @@ static void requestFinished(const Common::Request&) { int main() { Net::Connection::init(); - Common::ThreadManager::get()->init(); + Net::ThreadManager::get()->init(); Common::ModuleManager::get()->loadModule("FileLogger"); Common::ModuleManager::get()->loadModule("SystemBackendPosix"); @@ -83,7 +83,7 @@ int main() { Common::RequestManager::get()->unregisterConnection(connection); } - catch(Mad::Common::Exception &e) { + catch(Net::Exception &e) { Common::Logger::logf(Common::Logger::CRITICAL, "Connection error: %s", e.strerror().c_str()); } diff --git a/src/madc.cpp b/src/madc.cpp index b0922a0..46455b0 100644 --- a/src/madc.cpp +++ b/src/madc.cpp @@ -20,12 +20,12 @@ #include "Net/Connection.h" #include "Net/FdManager.h" #include "Net/IPAddress.h" +#include "Net/ThreadManager.h" #include "Common/ClientConnection.h" #include "Common/ConfigManager.h" #include "Common/LogManager.h" #include "Common/Logger.h" #include "Common/RequestManager.h" -#include "Common/ThreadManager.h" #include "Client/CommandParser.h" #include "Client/InformationManager.h" @@ -81,7 +81,7 @@ int main(int argc, char *argv[]) { Net::Connection::init(); - Common::ThreadManager::get()->init(); + Net::ThreadManager::get()->init(); Client::InformationManager::get()->init(); Common::ConfigManager::get()->finish(); @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) { Common::RequestManager::get()->unregisterConnection(connection); } - catch(Mad::Common::Exception &e) { + catch(Net::Exception &e) { Common::Logger::logf(Common::Logger::CRITICAL, "Connection error: %s", e.strerror().c_str()); } |