summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-02-24 23:08:23 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-02-24 23:08:23 +0100
commit8f85624a76934b14e0ba0f49413f471f8f4aa4f1 (patch)
tree9fc387bb5523a56d1b4c1d45e3cbccb90c0584b2
parent35ab037e7e6ac08e214b053de8ed87e3f35586fc (diff)
downloadmad-8f85624a76934b14e0ba0f49413f471f8f4aa4f1.tar
mad-8f85624a76934b14e0ba0f49413f471f8f4aa4f1.zip
LogRequest ist jetzt ein XmlRequest
-rw-r--r--src/Core/ConnectionManager.cpp4
-rw-r--r--src/Core/RequestHandlers/LogRequestHandler.cpp23
-rw-r--r--src/Core/RequestHandlers/LogRequestHandler.h6
-rw-r--r--src/Daemon/Backends/NetworkLogger.h2
-rw-r--r--src/Daemon/Requests/LogRequest.cpp18
-rw-r--r--src/Daemon/Requests/LogRequest.h8
-rw-r--r--src/Net/Packet.h2
-rw-r--r--src/Net/Packets/LogPacket.cpp52
-rw-r--r--src/Net/Packets/LogPacket.h85
-rw-r--r--src/Net/Packets/Makefile.am4
-rw-r--r--src/Net/Packets/Makefile.in7
11 files changed, 43 insertions, 168 deletions
diff --git a/src/Core/ConnectionManager.cpp b/src/Core/ConnectionManager.cpp
index 6362314..f46939d 100644
--- a/src/Core/ConnectionManager.cpp
+++ b/src/Core/ConnectionManager.cpp
@@ -142,11 +142,11 @@ void ConnectionManager::doInit() {
Common::RequestManager::get()->registerPacketType<RequestHandlers::DaemonListRequestHandler>(Net::Packet::LIST_DAEMONS);
Common::RequestManager::get()->registerPacketType<RequestHandlers::GSSAPIAuthRequestHandler>(Net::Packet::GSSAPI_AUTH);
Common::RequestManager::get()->registerPacketType<RequestHandlers::IdentifyRequestHandler>(Net::Packet::IDENTIFY);
- Common::RequestManager::get()->registerPacketType<RequestHandlers::LogRequestHandler>(Net::Packet::LOG);
Common::RequestManager::get()->registerPacketType<Common::RequestHandlers::StatusRequestHandler>("GetStatus");
Common::RequestManager::get()->registerPacketType<RequestHandlers::DaemonStatusRequestHandler>("GetDaemonStatus");
Common::RequestManager::get()->registerPacketType<RequestHandlers::UserListRequestHandler>("ListUsers");
+ Common::RequestManager::get()->registerPacketType<RequestHandlers::LogRequestHandler>("Log");
}
void ConnectionManager::doDeinit() {
@@ -163,11 +163,11 @@ void ConnectionManager::doDeinit() {
Common::RequestManager::get()->unregisterPacketType(Net::Packet::LIST_DAEMONS);
Common::RequestManager::get()->unregisterPacketType(Net::Packet::GSSAPI_AUTH);
Common::RequestManager::get()->unregisterPacketType(Net::Packet::IDENTIFY);
- Common::RequestManager::get()->unregisterPacketType(Net::Packet::LOG);
Common::RequestManager::get()->unregisterPacketType("GetStatus");
Common::RequestManager::get()->unregisterPacketType("GetDaemonStatus");
Common::RequestManager::get()->unregisterPacketType("ListUsers");
+ Common::RequestManager::get()->unregisterPacketType("Log");
Net::Connection::deinit();
}
diff --git a/src/Core/RequestHandlers/LogRequestHandler.cpp b/src/Core/RequestHandlers/LogRequestHandler.cpp
index e28ac8e..77be876 100644
--- a/src/Core/RequestHandlers/LogRequestHandler.cpp
+++ b/src/Core/RequestHandlers/LogRequestHandler.cpp
@@ -20,19 +20,23 @@
#include "LogRequestHandler.h"
#include <Common/Logger.h>
#include <Common/LogManager.h>
+#include <Common/XmlPacket.h>
#include "../ConnectionManager.h"
#include <Net/Connection.h>
-#include <Net/Packets/ErrorPacket.h>
-#include <Net/Packets/LogPacket.h>
namespace Mad {
namespace Core {
namespace RequestHandlers {
-void LogRequestHandler::handlePacket(Net::Connection *connection, const Net::Packet &packet) {
- if(packet.getType() != Net::Packet::LOG) {
+void LogRequestHandler::handlePacket(Net::Connection *connection, uint16_t requestId, const Common::XmlPacket &packet) {
+ if(packet.getType() != "Log") {
Common::Logger::log(Common::Logger::ERROR, "Received an unexpected packet.");
- connection->send(Net::Packets::ErrorPacket(Net::Packet::ERROR, packet.getRequestId(), Common::Exception(Common::Exception::UNEXPECTED_PACKET)));
+
+ Common::XmlPacket ret;
+ ret.setType("Error");
+ ret.add("ErrorCode", Common::Exception::UNEXPECTED_PACKET);
+
+ connection->send(ret.encode(requestId));
signalFinished().emit();
return;
@@ -40,17 +44,18 @@ void LogRequestHandler::handlePacket(Net::Connection *connection, const Net::Pac
// TODO Require authentication
- Net::Packets::LogPacket logPacket(packet);
-
try {
- Common::LogManager::get()->log(logPacket.getCategory(), logPacket.getLevel(), logPacket.getTimestamp(), logPacket.getMessage().c_str(),
+ Common::LogManager::get()->log(packet["category"], packet["level"], packet["timestamp"], packet["message"],
ConnectionManager::get()->getDaemonName(connection));
}
catch(Common::Exception &e) {
Common::Logger::logf(Common::Logger::ERROR, "Can't determine daemon name: %s", e.strerror().c_str());
}
- connection->send(Net::Packet(Net::Packet::OK, packet.getRequestId()));
+ Common::XmlPacket ret;
+ ret.setType("OK");
+
+ connection->send(ret.encode(requestId));
signalFinished().emit();
}
diff --git a/src/Core/RequestHandlers/LogRequestHandler.h b/src/Core/RequestHandlers/LogRequestHandler.h
index b82f24b..1c84248 100644
--- a/src/Core/RequestHandlers/LogRequestHandler.h
+++ b/src/Core/RequestHandlers/LogRequestHandler.h
@@ -20,15 +20,15 @@
#ifndef MAD_CORE_REQUESTHANDLERS_LOGREQUESTHANDLER_H_
#define MAD_CORE_REQUESTHANDLERS_LOGREQUESTHANDLER_H_
-#include <Common/RequestHandler.h>
+#include <Common/XmlRequestHandler.h>
namespace Mad {
namespace Core {
namespace RequestHandlers {
-class LogRequestHandler : public Common::RequestHandler {
+class LogRequestHandler : public Common::XmlRequestHandler {
protected:
- virtual void handlePacket(Net::Connection *connection, const Net::Packet &packet);
+ virtual void handlePacket(Net::Connection *connection, uint16_t requestId, const Common::XmlPacket &packet);
public:
LogRequestHandler() {}
diff --git a/src/Daemon/Backends/NetworkLogger.h b/src/Daemon/Backends/NetworkLogger.h
index b33f180..a07fd59 100644
--- a/src/Daemon/Backends/NetworkLogger.h
+++ b/src/Daemon/Backends/NetworkLogger.h
@@ -37,7 +37,7 @@ class NetworkLogger : public Common::Logger {
protected:
virtual void logMessage(Common::Logger::MessageCategory category, Common::Logger::MessageLevel level, time_t messageTimestamp, const std::string &message) {
Common::RequestManager::get()->sendRequest(connection,
- std::auto_ptr<Common::RequestBase>(new Requests::LogRequest(category, level, messageTimestamp, message, Requests::LogRequest::slot_type()))
+ std::auto_ptr<Common::XmlRequest>(new Requests::LogRequest(category, level, messageTimestamp, message, Requests::LogRequest::slot_type()))
);
}
diff --git a/src/Daemon/Requests/LogRequest.cpp b/src/Daemon/Requests/LogRequest.cpp
index 3a04284..f7a498d 100644
--- a/src/Daemon/Requests/LogRequest.cpp
+++ b/src/Daemon/Requests/LogRequest.cpp
@@ -19,23 +19,31 @@
#include "LogRequest.h"
#include <Net/Connection.h>
-#include <Net/Packets/LogPacket.h>
namespace Mad {
namespace Daemon {
namespace Requests {
void LogRequest::sendRequest(Net::Connection *connection, uint16_t requestId) {
- connection->send(Net::Packets::LogPacket(Net::Packet::LOG, requestId, category, level, messageTimestamp, message));
+ Common::XmlPacket packet;
+
+ packet.setType("Log");
+
+ packet.add("category", category);
+ packet.add("level", level);
+ packet.add("timestamp", messageTimestamp);
+ packet.add("message", message);
+
+ connection->send(packet.encode(requestId));
}
-void LogRequest::handlePacket(Net::Connection*, const Net::Packet &packet) {
- if(packet.getType() != Net::Packet::OK) {
+void LogRequest::handlePacket(Net::Connection*, uint16_t, const Common::XmlPacket &packet) {
+ if(packet.getType() != "OK") {
finishWithError(Common::Exception(Common::Exception::UNEXPECTED_PACKET));
return; // TODO Logging
}
- finish();
+ finish(packet);
}
}
diff --git a/src/Daemon/Requests/LogRequest.h b/src/Daemon/Requests/LogRequest.h
index 8d3798a..2a03ce3 100644
--- a/src/Daemon/Requests/LogRequest.h
+++ b/src/Daemon/Requests/LogRequest.h
@@ -20,7 +20,7 @@
#ifndef MAD_DAEMON_REQUESTS_LOGREQUEST_H_
#define MAD_DAEMON_REQUESTS_LOGREQUEST_H_
-#include <Common/Request.h>
+#include <Common/XmlRequest.h>
#include <Common/Logger.h>
#include <ctime>
@@ -28,7 +28,7 @@ namespace Mad {
namespace Daemon {
namespace Requests {
-class LogRequest : public Common::Request<> {
+class LogRequest : public Common::XmlRequest {
private:
Common::Logger::MessageCategory category;
Common::Logger::MessageLevel level;
@@ -37,11 +37,11 @@ class LogRequest : public Common::Request<> {
protected:
virtual void sendRequest(Net::Connection *connection, uint16_t requestId);
- virtual void handlePacket(Net::Connection*, const Net::Packet &packet);
+ virtual void handlePacket(Net::Connection*, uint16_t, const Common::XmlPacket &packet);
public:
LogRequest(Common::Logger::MessageCategory category0, Common::Logger::MessageLevel level0, time_t messageTimestamp0, const std::string &message0, slot_type slot)
- : Common::Request<>(slot), category(category0), level(level0), messageTimestamp(messageTimestamp0), message(message0) {}
+ : Common::XmlRequest(slot), category(category0), level(level0), messageTimestamp(messageTimestamp0), message(message0) {}
};
}
diff --git a/src/Net/Packet.h b/src/Net/Packet.h
index 37df13a..47d44c7 100644
--- a/src/Net/Packet.h
+++ b/src/Net/Packet.h
@@ -31,7 +31,7 @@ namespace Net {
class Packet {
public:
enum Type {
- OK = 0x0000, ERROR = 0x0001, DISCONNECT = 0x0002, LOG = 0x0003,
+ OK = 0x0000, ERROR = 0x0001, DISCONNECT = 0x0002,
GSSAPI_AUTH = 0x0010, IDENTIFY = 0x0011,
LIST_DAEMONS = 0x0020,
FS_INFO = 0x0032, DAEMON_FS_INFO = 0x0033,
diff --git a/src/Net/Packets/LogPacket.cpp b/src/Net/Packets/LogPacket.cpp
deleted file mode 100644
index 1d6ee88..0000000
--- a/src/Net/Packets/LogPacket.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * LogPacket.cpp
- *
- * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de>
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include "LogPacket.h"
-
-namespace Mad {
-namespace Net {
-namespace Packets {
-
-LogPacket::LogPacket(Type type, uint16_t requestId, Common::Logger::MessageCategory category, Common::Logger::MessageLevel level, time_t messageTimestamp, const std::string &message)
-: Packet(type, requestId)
-{
- setLength(sizeof(LogData) + message.length());
- logData = (LogData*)&rawData->data;
-
- logData->category = htons(category);
- logData->level = htons(level);
- logData->messageTimestamp = htonl(messageTimestamp);
-
- std::memcpy(logData->message, message.c_str(), message.length());
-}
-
-LogPacket& LogPacket::operator=(const Packet &p) {
- Packet::operator=(p);
-
- if(getLength() < sizeof(LogData))
- setLength(sizeof(LogData));
-
- logData = (LogData*)&rawData->data;
-
- return *this;
-}
-
-}
-}
-}
diff --git a/src/Net/Packets/LogPacket.h b/src/Net/Packets/LogPacket.h
deleted file mode 100644
index 040f21a..0000000
--- a/src/Net/Packets/LogPacket.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * LogPacket.h
- *
- * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de>
- *
- * This program is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef MAD_NET_PACKETS_LOGPACKET_H_
-#define MAD_NET_PACKETS_LOGPACKET_H_
-
-#include "../Packet.h"
-#include <Common/Logger.h>
-
-#include <string>
-#include <ctime>
-
-namespace Mad {
-namespace Net {
-namespace Packets {
-
-class LogPacket : public Packet {
- protected:
- struct LogData {
- uint16_t category;
- uint16_t level;
- uint32_t messageTimestamp;
- uint8_t message[0];
- };
-
- LogData *logData;
-
- public:
- LogPacket(Type type, uint16_t requestId, Common::Logger::MessageCategory category, Common::Logger::MessageLevel level, time_t messageTimestamp, const std::string &message);
-
- LogPacket(const Packet &p) : Packet(p) {
- if(getLength() < sizeof(LogData))
- setLength(sizeof(LogData));
-
- logData = (LogData*)&rawData->data;
- }
-
- LogPacket(const LogPacket &p) : Packet(p) {
- logData = (LogData*)&rawData->data;
- }
-
- LogPacket& operator=(const Packet &p);
-
- LogPacket& operator=(const LogPacket &p) {
- return (*this = (Packet)p);
- }
-
- Common::Logger::MessageCategory getCategory() const {
- return (Common::Logger::MessageCategory)ntohs(logData->category);
- }
-
- Common::Logger::MessageLevel getLevel() const {
- return (Common::Logger::MessageLevel)ntohs(logData->level);
- }
-
- time_t getTimestamp() const {
- return (time_t)ntohl(logData->messageTimestamp);
- }
-
- std::string getMessage() const {
- return std::string((char*)logData->message, getLength()-sizeof(LogData));
- }
-};
-
-}
-}
-}
-
-#endif /* MAD_NET_PACKETS_LOGPACKET_H_ */
diff --git a/src/Net/Packets/Makefile.am b/src/Net/Packets/Makefile.am
index 6f950c9..9ce8f9d 100644
--- a/src/Net/Packets/Makefile.am
+++ b/src/Net/Packets/Makefile.am
@@ -1,4 +1,4 @@
noinst_LTLIBRARIES = libpackets.la
-libpackets_la_SOURCES = ErrorPacket.cpp FSInfoPacket.cpp HostListPacket.cpp HostStatePacket.cpp LogPacket.cpp
+libpackets_la_SOURCES = ErrorPacket.cpp FSInfoPacket.cpp HostListPacket.cpp HostStatePacket.cpp
-noinst_HEADERS = ErrorPacket.h FSInfoPacket.h HostListPacket.h HostStatePacket.h LogPacket.h
+noinst_HEADERS = ErrorPacket.h FSInfoPacket.h HostListPacket.h HostStatePacket.h
diff --git a/src/Net/Packets/Makefile.in b/src/Net/Packets/Makefile.in
index 2fb4fca..239e753 100644
--- a/src/Net/Packets/Makefile.in
+++ b/src/Net/Packets/Makefile.in
@@ -51,7 +51,7 @@ CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libpackets_la_LIBADD =
am_libpackets_la_OBJECTS = ErrorPacket.lo FSInfoPacket.lo \
- HostListPacket.lo HostStatePacket.lo LogPacket.lo
+ HostListPacket.lo HostStatePacket.lo
libpackets_la_OBJECTS = $(am_libpackets_la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
@@ -217,8 +217,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_LTLIBRARIES = libpackets.la
-libpackets_la_SOURCES = ErrorPacket.cpp FSInfoPacket.cpp HostListPacket.cpp HostStatePacket.cpp LogPacket.cpp
-noinst_HEADERS = ErrorPacket.h FSInfoPacket.h HostListPacket.h HostStatePacket.h LogPacket.h
+libpackets_la_SOURCES = ErrorPacket.cpp FSInfoPacket.cpp HostListPacket.cpp HostStatePacket.cpp
+noinst_HEADERS = ErrorPacket.h FSInfoPacket.h HostListPacket.h HostStatePacket.h
all: all-am
.SUFFIXES:
@@ -274,7 +274,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FSInfoPacket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostListPacket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostStatePacket.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LogPacket.Plo@am__quote@
.cpp.o:
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<