From 8f85624a76934b14e0ba0f49413f471f8f4aa4f1 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 24 Feb 2009 23:08:23 +0100 Subject: LogRequest ist jetzt ein XmlRequest --- src/Core/ConnectionManager.cpp | 4 +- src/Core/RequestHandlers/LogRequestHandler.cpp | 23 ++++--- src/Core/RequestHandlers/LogRequestHandler.h | 6 +- src/Daemon/Backends/NetworkLogger.h | 2 +- src/Daemon/Requests/LogRequest.cpp | 18 ++++-- src/Daemon/Requests/LogRequest.h | 8 +-- src/Net/Packet.h | 2 +- src/Net/Packets/LogPacket.cpp | 52 ---------------- src/Net/Packets/LogPacket.h | 85 -------------------------- src/Net/Packets/Makefile.am | 4 +- src/Net/Packets/Makefile.in | 7 +-- 11 files changed, 43 insertions(+), 168 deletions(-) delete mode 100644 src/Net/Packets/LogPacket.cpp delete mode 100644 src/Net/Packets/LogPacket.h 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(Net::Packet::LIST_DAEMONS); Common::RequestManager::get()->registerPacketType(Net::Packet::GSSAPI_AUTH); Common::RequestManager::get()->registerPacketType(Net::Packet::IDENTIFY); - Common::RequestManager::get()->registerPacketType(Net::Packet::LOG); Common::RequestManager::get()->registerPacketType("GetStatus"); Common::RequestManager::get()->registerPacketType("GetDaemonStatus"); Common::RequestManager::get()->registerPacketType("ListUsers"); + Common::RequestManager::get()->registerPacketType("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 #include +#include #include "../ConnectionManager.h" #include -#include -#include 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 +#include 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(new Requests::LogRequest(category, level, messageTimestamp, message, Requests::LogRequest::slot_type())) + std::auto_ptr(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 -#include 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 +#include #include #include @@ -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 - * - * 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 . - */ - -#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 - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#ifndef MAD_NET_PACKETS_LOGPACKET_H_ -#define MAD_NET_PACKETS_LOGPACKET_H_ - -#include "../Packet.h" -#include - -#include -#include - -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 $@ $< -- cgit v1.2.3