summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Client/CommandManager.cpp16
-rw-r--r--src/Client/CommandParser.cpp1
-rw-r--r--src/Client/InformationManager.cpp4
-rw-r--r--src/Common/ClientConnection.cpp6
-rw-r--r--src/Common/ClientConnection.h6
-rw-r--r--src/Common/Connection.cpp7
-rw-r--r--src/Common/Connection.h4
-rw-r--r--src/Common/LogManager.cpp1
-rw-r--r--src/Common/LogManager.h7
-rw-r--r--src/Common/Makefile.am8
-rw-r--r--src/Common/Makefile.in17
-rw-r--r--src/Common/Request.cpp4
-rw-r--r--src/Common/Request.h10
-rw-r--r--src/Common/RequestHandler.h4
-rw-r--r--src/Common/RequestHandlers/DisconnectRequestHandler.cpp4
-rw-r--r--src/Common/RequestHandlers/FSInfoRequestHandler.cpp6
-rw-r--r--src/Common/RequestHandlers/StatusRequestHandler.cpp4
-rw-r--r--src/Common/RequestManager.cpp2
-rw-r--r--src/Common/Requests/DisconnectRequest.cpp4
-rw-r--r--src/Common/Requests/GSSAPIAuthRequest.cpp17
-rw-r--r--src/Daemon/RequestHandlers/CommandRequestHandler.cpp6
-rw-r--r--src/Net/ClientConnection.cpp8
-rw-r--r--src/Net/ClientConnection.h4
-rw-r--r--src/Net/Exception.cpp (renamed from src/Common/Exception.cpp)2
-rw-r--r--src/Net/Exception.h (renamed from src/Common/Exception.h)8
-rw-r--r--src/Net/IPAddress.cpp10
-rw-r--r--src/Net/IPAddress.h6
-rw-r--r--src/Net/Listener.cpp10
-rw-r--r--src/Net/Listener.h3
-rw-r--r--src/Net/Makefile.am6
-rw-r--r--src/Net/Makefile.in15
-rw-r--r--src/Net/ServerConnection.h1
-rw-r--r--src/Net/ThreadManager.cpp (renamed from src/Common/ThreadManager.cpp)68
-rw-r--r--src/Net/ThreadManager.h (renamed from src/Common/ThreadManager.h)18
-rw-r--r--src/Server/ConnectionManager.cpp30
-rw-r--r--src/Server/ConnectionManager.h9
-rw-r--r--src/Server/RequestHandlers/DaemonCommandRequestHandler.cpp6
-rw-r--r--src/Server/RequestHandlers/DaemonFSInfoRequestHandler.cpp6
-rw-r--r--src/Server/RequestHandlers/DaemonListRequestHandler.cpp2
-rw-r--r--src/Server/RequestHandlers/DaemonStatusRequestHandler.cpp6
-rw-r--r--src/Server/RequestHandlers/GSSAPIAuthRequestHandler.cpp15
-rw-r--r--src/Server/RequestHandlers/IdentifyRequestHandler.cpp4
-rw-r--r--src/Server/RequestHandlers/LogRequestHandler.cpp4
-rw-r--r--src/Server/RequestHandlers/UserInfoRequestHandler.cpp6
-rw-r--r--src/Server/RequestHandlers/UserListRequestHandler.cpp6
-rw-r--r--src/mad-server.cpp4
-rw-r--r--src/mad.cpp6
-rw-r--r--src/madc.cpp6
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());
}