about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/system.c20
-rw-r--r--src/base/system.h2
-rw-r--r--src/engine/client/client.cpp1
-rw-r--r--src/engine/engine.h1
-rw-r--r--src/engine/server/server.cpp1
-rw-r--r--src/engine/shared/engine.cpp55
-rw-r--r--src/engine/shared/network.cpp46
-rw-r--r--src/engine/shared/network.h3
8 files changed, 94 insertions, 35 deletions
diff --git a/src/base/system.c b/src/base/system.c
index 0f0aaf70..c0b8edec 100644
--- a/src/base/system.c
+++ b/src/base/system.c
@@ -210,20 +210,24 @@ void mem_free(void *p)
 	}
 }
 
-void mem_debug_dump()
+void mem_debug_dump(IOHANDLE file)
 {
 	char buf[1024];
 	MEMHEADER *header = first;
-	IOHANDLE f = io_open("memory.txt", IOFLAG_WRITE);
+	if(!file)
+		file = io_open("memory.txt", IOFLAG_WRITE);
 	
-	while(header)
+	if(file)
 	{
-		str_format(buf, sizeof(buf), "%s(%d): %d\n", header->filename, header->line, header->size);
-		io_write(f, buf, strlen(buf));
-		header = header->next;
-	}
+		while(header)
+		{
+			str_format(buf, sizeof(buf), "%s(%d): %d\n", header->filename, header->line, header->size);
+			io_write(file, buf, strlen(buf));
+			header = header->next;
+		}
 	
-	io_close(f);
+		io_close(file);
+	}
 }
 
 
diff --git a/src/base/system.h b/src/base/system.h
index 725f3008..ed46cef7 100644
--- a/src/base/system.h
+++ b/src/base/system.h
@@ -1090,7 +1090,7 @@ int net_would_block();
 
 int net_socket_read_wait(NETSOCKET sock, int time);
 
-void mem_debug_dump();
+void mem_debug_dump(IOHANDLE file);
 
 void swap_endian(void *data, unsigned elem_size, unsigned num);
 
diff --git a/src/engine/client/client.cpp b/src/engine/client/client.cpp
index 60a2cf12..125991c1 100644
--- a/src/engine/client/client.cpp
+++ b/src/engine/client/client.cpp
@@ -2328,6 +2328,7 @@ int main(int argc, const char **argv) // ignore_convention
 			return -1;
 	}
 
+	pEngine->Init();
 	pConfig->Init();
 	pEngineMasterServer->Init();
 	pEngineMasterServer->Load();
diff --git a/src/engine/engine.h b/src/engine/engine.h
index 725ef4f6..c439c4ee 100644
--- a/src/engine/engine.h
+++ b/src/engine/engine.h
@@ -22,6 +22,7 @@ protected:
 	class CJobPool m_JobPool;
 
 public:
+	virtual void Init() = 0;
 	virtual void InitLogfile() = 0;
 	virtual void HostLookup(CHostLookup *pLookup, const char *pHostname) = 0;
 	virtual void AddJob(CJob *pJob, JOBFUNC pfnFunc, void *pData) = 0;
diff --git a/src/engine/server/server.cpp b/src/engine/server/server.cpp
index bd6f9829..39e63b42 100644
--- a/src/engine/server/server.cpp
+++ b/src/engine/server/server.cpp
@@ -1499,6 +1499,7 @@ int main(int argc, const char **argv) // ignore_convention
 			return -1;
 	}
 	
+	pEngine->Init();
 	pConfig->Init();
 	pEngineMasterServer->Init();
 	pEngineMasterServer->Load();
diff --git a/src/engine/shared/engine.cpp b/src/engine/shared/engine.cpp
index 0fa0a81a..6839cc64 100644
--- a/src/engine/shared/engine.cpp
+++ b/src/engine/shared/engine.cpp
@@ -3,10 +3,11 @@
 
 #include <base/system.h>
 
+#include <engine/console.h>
 #include <engine/engine.h>
+#include <engine/storage.h>
 #include <engine/shared/config.h>
 #include <engine/shared/network.h>
-#include <engine/console.h>
 
 
 static int HostLookupThread(void *pUser)
@@ -19,16 +20,41 @@ static int HostLookupThread(void *pUser)
 class CEngine : public IEngine
 {
 public:
-	/*
-	static void con_dbg_dumpmem(IConsole::IResult *result, void *user_data)
+	IConsole *m_pConsole;
+	IStorage *m_pStorage;
+	bool m_Logging;
+
+	static void Con_DbgDumpmem(IConsole::IResult *pResult, void *pUserData)
 	{
-		mem_debug_dump();
+		CEngine *pEngine = static_cast<CEngine *>(pUserData);
+		char aBuf[32];
+		str_timestamp(aBuf, sizeof(aBuf));
+		char aFilename[128];
+		str_format(aFilename, sizeof(aFilename), "dumps/memory_%s.txt", aBuf);
+		mem_debug_dump(pEngine->m_pStorage->OpenFile(aFilename, IOFLAG_WRITE, IStorage::TYPE_SAVE));
 	}
 
-	static void con_dbg_lognetwork(IConsole::IResult *result, void *user_data)
+	static void Con_DbgLognetwork(IConsole::IResult *pResult, void *pUserData)
 	{
-		CNetBase::OpenLog("network_sent.dat", "network_recv.dat");
-	}*/
+		CEngine *pEngine = static_cast<CEngine *>(pUserData);
+
+		if(pEngine->m_Logging)
+		{
+			CNetBase::CloseLog();
+			pEngine->m_Logging = false;
+		}
+		else
+		{			
+			char aBuf[32];
+			str_timestamp(aBuf, sizeof(aBuf));
+			char aFilenameSent[128], aFilenameRecv[128];
+			str_format(aFilenameSent, sizeof(aFilenameSent), "dumps/network_sent_%s.txt", aBuf);
+			str_format(aFilenameRecv, sizeof(aFilenameRecv), "dumps/network_recv_%s.txt", aBuf);
+			CNetBase::OpenLog(pEngine->m_pStorage->OpenFile(aFilenameSent, IOFLAG_WRITE, IStorage::TYPE_SAVE),
+								pEngine->m_pStorage->OpenFile(aFilenameRecv, IOFLAG_WRITE, IStorage::TYPE_SAVE));
+			pEngine->m_Logging = true;
+		}
+	}
 
 	CEngine(const char *pAppname)
 	{
@@ -51,8 +77,19 @@ public:
 	
 		m_JobPool.Init(1);
 
-		//MACRO_REGISTER_COMMAND("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_dumpmem, 0x0, "Dump the memory");
-		//MACRO_REGISTER_COMMAND("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, con_dbg_lognetwork, 0x0, "Log the network");
+		m_Logging = false;
+	}
+
+	void Init()
+	{
+		m_pConsole = Kernel()->RequestInterface<IConsole>();
+		m_pStorage = Kernel()->RequestInterface<IStorage>();
+
+		if(!m_pConsole || !m_pStorage)
+			return;
+
+		m_pConsole->Register("dbg_dumpmem", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, Con_DbgDumpmem, this, "Dump the memory");
+		m_pConsole->Register("dbg_lognetwork", "", CFGFLAG_SERVER|CFGFLAG_CLIENT, Con_DbgLognetwork, this, "Log the network");
 	}
 
 	void InitLogfile()
diff --git a/src/engine/shared/network.cpp b/src/engine/shared/network.cpp
index 43c1e645..89ffae6d 100644
--- a/src/engine/shared/network.cpp
+++ b/src/engine/shared/network.cpp
@@ -293,26 +293,40 @@ IOHANDLE CNetBase::ms_DataLogRecv = 0;
 CHuffman CNetBase::ms_Huffman;
 
 
-void CNetBase::OpenLog(const char *pSentLog, const char *pRecvLog)
+void CNetBase::OpenLog(IOHANDLE DataLogSent, IOHANDLE DataLogRecv)
 {
-	/*
-	if(pSentLog)
+	if(DataLogSent)
 	{
-		ms_DataLogSent = engine_openfile(pSentLog, IOFLAG_WRITE);
-		if(ms_DataLogSent)
-			dbg_msg("network", "logging sent packages to '%s'", pSentLog);
-		else
-			dbg_msg("network", "failed to open for logging '%s'", pSentLog);
+		ms_DataLogSent = DataLogSent;
+		dbg_msg("network", "logging sent packages");
 	}
-	
-	if(pRecvLog)
+	else
+		dbg_msg("network", "failed to start logging sent packages");
+
+	if(DataLogRecv)
 	{
-		ms_DataLogRecv = engine_openfile(pRecvLog, IOFLAG_WRITE);
-		if(ms_DataLogRecv)
-			dbg_msg("network", "logging recv packages to '%s'", pRecvLog);
-		else
-			dbg_msg("network", "failed to open for logging '%s'", pRecvLog);
-	}*/
+		ms_DataLogRecv = DataLogRecv;
+		dbg_msg("network", "logging recv packages");
+	}
+	else
+		dbg_msg("network", "failed to start logging recv packages");
+}
+
+void CNetBase::CloseLog()
+{
+	if(ms_DataLogSent)
+	{
+		dbg_msg("network", "stopped logging sent packages");
+		io_close(ms_DataLogSent);
+		ms_DataLogSent = 0;
+	}
+
+	if(ms_DataLogRecv)
+	{
+		dbg_msg("network", "stopped logging recv packages");
+		io_close(ms_DataLogRecv);
+		ms_DataLogRecv = 0;
+	}
 }
 
 int CNetBase::Compress(const void *pData, int DataSize, void *pOutput, int OutputSize)
diff --git a/src/engine/shared/network.h b/src/engine/shared/network.h
index 67175db9..0fc3f0a8 100644
--- a/src/engine/shared/network.h
+++ b/src/engine/shared/network.h
@@ -335,7 +335,8 @@ class CNetBase
 	static IOHANDLE ms_DataLogRecv;
 	static CHuffman ms_Huffman;
 public:
-	static void OpenLog(const char *pSentlog, const char *pRecvlog);
+	static void OpenLog(IOHANDLE DataLogSent, IOHANDLE DataLogRecv);
+	static void CloseLog();
 	static void Init();
 	static int Compress(const void *pData, int DataSize, void *pOutput, int OutputSize);
 	static int Decompress(const void *pData, int DataSize, void *pOutput, int OutputSize);