summaryrefslogtreecommitdiffstats
path: root/src/Net
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-09-22 18:24:26 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-09-22 18:24:26 +0200
commit1af3eab2b23c67795b188e5edaf83bf47a8879bd (patch)
tree949611a5591a20533db9526a66272c7a693a15fd /src/Net
parentfe6d06a7df225e79756229131f128981bbb83b40 (diff)
downloadmad-1af3eab2b23c67795b188e5edaf83bf47a8879bd.tar
mad-1af3eab2b23c67795b188e5edaf83bf47a8879bd.zip
NetworkLogger implementiert
Diffstat (limited to 'src/Net')
-rw-r--r--src/Net/Packet.h2
-rw-r--r--src/Net/Packets/LogPacket.cpp51
-rw-r--r--src/Net/Packets/LogPacket.h79
-rw-r--r--src/Net/Packets/Makefile.am4
-rw-r--r--src/Net/Packets/Makefile.in7
5 files changed, 137 insertions, 6 deletions
diff --git a/src/Net/Packet.h b/src/Net/Packet.h
index 9c23132..6b6ed75 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,
+ OK = 0x0000, ERROR = 0x0001, DISCONNECT = 0x0002, LOG = 0x0003,
GSSAPI_AUTH = 0x0010, IDENTIFY = 0x0011,
LIST_DAEMONS = 0x0020,
STATUS = 0x0030, DAEMON_STATUS = 0x0031
diff --git a/src/Net/Packets/LogPacket.cpp b/src/Net/Packets/LogPacket.cpp
new file mode 100644
index 0000000..97994b0
--- /dev/null
+++ b/src/Net/Packets/LogPacket.cpp
@@ -0,0 +1,51 @@
+/*
+ * 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, const std::string &message)
+: Packet(type, requestId)
+{
+ setLength(sizeof(LogData) + message.length());
+ logData = (LogData*)&rawData->data;
+
+ logData->category = htons(category);
+ logData->level = htons(level);
+
+ 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
new file mode 100644
index 0000000..814ea28
--- /dev/null
+++ b/src/Net/Packets/LogPacket.h
@@ -0,0 +1,79 @@
+/*
+ * 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>
+
+namespace Mad {
+namespace Net {
+namespace Packets {
+
+class LogPacket : public Packet {
+ protected:
+ struct LogData {
+ uint16_t category;
+ uint16_t level;
+ uint8_t message[0];
+ };
+
+ LogData *logData;
+
+ public:
+ LogPacket(Type type, uint16_t requestId, Common::Logger::MessageCategory category, Common::Logger::MessageLevel level, 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);
+ }
+
+ 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 6402c10..0b44f6d 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 HostListPacket.cpp HostStatusPacket.cpp
+libpackets_la_SOURCES = ErrorPacket.cpp HostListPacket.cpp HostStatusPacket.cpp LogPacket.cpp
-noinst_HEADERS = ErrorPacket.h HostListPacket.h HostStatusPacket.h
+noinst_HEADERS = ErrorPacket.h HostListPacket.h HostStatusPacket.h LogPacket.h
diff --git a/src/Net/Packets/Makefile.in b/src/Net/Packets/Makefile.in
index b258c93..9109103 100644
--- a/src/Net/Packets/Makefile.in
+++ b/src/Net/Packets/Makefile.in
@@ -49,7 +49,7 @@ CONFIG_CLEAN_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libpackets_la_LIBADD =
am_libpackets_la_OBJECTS = ErrorPacket.lo HostListPacket.lo \
- HostStatusPacket.lo
+ HostStatusPacket.lo LogPacket.lo
libpackets_la_OBJECTS = $(am_libpackets_la_OBJECTS)
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -188,8 +188,8 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
noinst_LTLIBRARIES = libpackets.la
-libpackets_la_SOURCES = ErrorPacket.cpp HostListPacket.cpp HostStatusPacket.cpp
-noinst_HEADERS = ErrorPacket.h HostListPacket.h HostStatusPacket.h
+libpackets_la_SOURCES = ErrorPacket.cpp HostListPacket.cpp HostStatusPacket.cpp LogPacket.cpp
+noinst_HEADERS = ErrorPacket.h HostListPacket.h HostStatusPacket.h LogPacket.h
all: all-am
.SUFFIXES:
@@ -244,6 +244,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ErrorPacket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostListPacket.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostStatusPacket.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 $@ $<