diff --git a/src/game/Makefile.am b/src/game/Makefile.am
index 39a6cb5b8..d13bc32af 100644
--- a/src/game/Makefile.am
+++ b/src/game/Makefile.am
@@ -283,8 +283,6 @@ libmangosgame_a_SOURCES = \
Weather.h \
World.cpp \
World.h \
- WorldLog.cpp \
- WorldLog.h \
WorldSession.cpp \
WorldSession.h \
WorldSocket.cpp \
diff --git a/src/game/WorldLog.cpp b/src/game/WorldLog.cpp
deleted file mode 100644
index 6b6f6f337..000000000
--- a/src/game/WorldLog.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/** \file
- \ingroup u2w
-*/
-
-#include "WorldLog.h"
-#include "Policies/SingletonImp.h"
-#include "Config/ConfigEnv.h"
-
-#define CLASS_LOCK MaNGOS::ClassLevelLockable
-INSTANTIATE_SINGLETON_2(WorldLog, CLASS_LOCK);
-INSTANTIATE_CLASS_MUTEX(WorldLog, ACE_Thread_Mutex);
-
-/// Open the log file (if specified so in the configuration file)
-void WorldLog::Initialize()
-{
- std::string logsDir = sConfig.GetStringDefault("LogsDir","");
-
- if(!logsDir.empty())
- {
- if((logsDir.at(logsDir.length()-1)!='/') && (logsDir.at(logsDir.length()-1)!='\\'))
- logsDir.append("/");
- }
-
- std::string logname = sConfig.GetStringDefault("WorldLogFile", "");
- if(!logname.empty())
- {
- i_file = fopen((logsDir+logname).c_str(), "w");
- }
-}
diff --git a/src/game/WorldLog.h b/src/game/WorldLog.h
deleted file mode 100644
index eb11b48a5..000000000
--- a/src/game/WorldLog.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2005-2009 MaNGOS
- *
- * 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 2 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/// \addtogroup u2w
-/// @{
-/// \file
-
-#ifndef MANGOS_WORLDLOG_H
-#define MANGOS_WORLDLOG_H
-
-#include "Common.h"
-#include "Policies/Singleton.h"
-#include "Errors.h"
-
-#include
-
-/// %Log packets to a file
-class MANGOS_DLL_DECL WorldLog : public MaNGOS::Singleton >
-{
- friend class MaNGOS::OperatorNew;
- WorldLog() : i_file(NULL) { Initialize(); }
- WorldLog(const WorldLog &);
- WorldLog& operator=(const WorldLog &);
- typedef MaNGOS::ClassLevelLockable::Lock Guard;
-
- /// Close the file in destructor
- ~WorldLog()
- {
- if( i_file != NULL )
- fclose(i_file);
- i_file = NULL;
- }
-
- public:
- void Initialize();
- /// Is the world logger active?
- bool LogWorld(void) const { return (i_file != NULL); }
- /// %Log to the file
- void Log(char const *fmt, ...)
- {
- if( LogWorld() )
- {
- Guard guard(*this);
- ASSERT(i_file);
-
- va_list args;
- va_start(args, fmt);
- vfprintf(i_file, fmt, args);
- va_end(args);
-
- fflush(i_file);
- }
- }
-
- private:
- FILE *i_file;
-};
-
-#define sWorldLog WorldLog::Instance()
-#endif
-/// @}
diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp
index 1de190ba5..886755359 100644
--- a/src/game/WorldSocket.cpp
+++ b/src/game/WorldSocket.cpp
@@ -42,7 +42,6 @@
#include "WorldSession.h"
#include "WorldSocketMgr.h"
#include "Log.h"
-#include "WorldLog.h"
#if defined( __GNUC__ )
#pragma pack(1)
@@ -166,24 +165,21 @@ int WorldSocket::SendPacket (const WorldPacket& pct)
return -1;
// Dump outgoing packet.
- if (sWorldLog.LogWorld ())
+ if (sLog.IsLogWorld())
{
- sWorldLog.Log ("SERVER:\nSOCKET: %u\nLENGTH: %u\nOPCODE: %s (0x%.4X)\nDATA:\n",
- (uint32) get_handle (),
- pct.size (),
- LookupOpcodeName (pct.GetOpcode ()),
- pct.GetOpcode ());
+ sLog.outWorld("S->C - SOCKET: %u LENGTH: %u OPCODE: %s (0x%.4X)\n",
+ uint32(get_handle()), pct.size (), LookupOpcodeName(pct.GetOpcode()), pct.GetOpcode());
- uint32 p = 0;
- while (p < pct.size ())
+ size_t p = 0;
+ while (p < pct.size())
{
- for (uint32 j = 0; j < 16 && p < pct.size (); j++)
- sWorldLog.Log ("%.2X ", const_cast(pct)[p++]);
+ for (size_t j = 0; j < 16 && p < pct.size(); ++j)
+ sLog.outWorld("%.2X ", const_cast(pct)[p++]);
- sWorldLog.Log ("\n");
+ sLog.outWorld("\n");
}
- sWorldLog.Log ("\n\n");
+ sLog.outWorld("\n\n");
}
ServerPktHeader header(pct.size()+2, pct.GetOpcode());
@@ -682,25 +678,25 @@ int WorldSocket::ProcessIncoming (WorldPacket* new_pct)
return -1;
// Dump received packet.
- if (sWorldLog.LogWorld ())
+ if (sLog.IsLogWorld())
{
- sWorldLog.Log ("CLIENT:\nSOCKET: %u\nLENGTH: %u\nOPCODE: %s (0x%.4X)\nDATA:\n",
- (uint32) get_handle (),
- new_pct->size (),
- LookupOpcodeName (new_pct->GetOpcode ()),
- new_pct->GetOpcode ());
+ sLog.outWorld("C->S - SOCKET: %u LENGTH: %u OPCODE: %s (0x%.4X)\n",
+ uint32(get_handle()), new_pct->size(), LookupOpcodeName(new_pct->GetOpcode()), new_pct->GetOpcode());
- uint32 p = 0;
- while (p < new_pct->size ())
+ size_t p = 0;
+ while (p < new_pct->size())
{
- for (uint32 j = 0; j < 16 && p < new_pct->size (); j++)
- sWorldLog.Log ("%.2X ", (*new_pct)[p++]);
- sWorldLog.Log ("\n");
+ for (size_t j = 0; j < 16 && p < new_pct->size(); ++j)
+ sLog.outWorld("%.2X ", (*new_pct)[p++]);
+
+ sLog.outWorld("\n");
}
- sWorldLog.Log ("\n\n");
+
+ sLog.outWorld("\n\n");
}
- try {
+ try
+ {
switch(opcode)
{
case CMSG_PING:
@@ -738,13 +734,13 @@ int WorldSocket::ProcessIncoming (WorldPacket* new_pct)
}
}
}
- catch(ByteBufferException &)
+ catch (ByteBufferException &)
{
sLog.outError("WorldSocket::ProcessIncoming ByteBufferException occured while parsing an instant handled packet (opcode: %u) from client %s, accountid=%i. Disconnected client.",
opcode, GetRemoteAddress().c_str(), m_Session?m_Session->GetAccountId():-1);
if(sLog.IsOutDebug())
{
- sLog.outDebug("Dumping error causing packet:");
+ sLog.outDebug("Dumping error-causing packet:");
new_pct->hexlike();
}
diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp
index f1c1027b6..2c344fe24 100644
--- a/src/realmd/AuthSocket.cpp
+++ b/src/realmd/AuthSocket.cpp
@@ -22,7 +22,6 @@
#include "Common.h"
#include "Database/DatabaseEnv.h"
-#include "ByteBuffer.h"
#include "Config/ConfigEnv.h"
#include "Log.h"
#include "RealmList.h"
@@ -252,14 +251,37 @@ void AuthSocket::OnRead()
///- Read the packet
TcpSocket::OnRead();
uint8 _cmd;
- while (1)
+ while (true)
{
if (!ibuf.GetLength())
return;
- ///- Get the command out of it
+ ///- Get the command out of it. We can assume it's there, since length is not 0.
ibuf.SoftRead((char *)&_cmd, 1); // UQ1: No longer exists in new net code ???
+ // Dump incoming packet.
+ if (sLog.IsLogWorld())
+ {
+ sLog.outWorld ("C->S - SOCKET: %u LENGTH: %u OPCODE: 0x%.4X\n",
+ GetSocket(), ibuf.GetLength(), _cmd);
+
+ size_t p = 0;
+ while (p < ibuf.GetLength())
+ {
+ char dest;
+ for (size_t j = 0; j < 16 && p < ibuf.GetLength(); ++j)
+ {
+ ibuf.SoftRead(&dest, 1);
+ sLog.outWorld("%.2X ", *((uint8*)dest));
+ p++;
+ }
+
+ sLog.outWorld("\n");
+ }
+
+ sLog.outWorld("\n\n");
+ }
+
size_t i;
///- Circle through known commands and call the correct command handler
@@ -289,7 +311,34 @@ void AuthSocket::OnRead()
}
}
-/// Make the SRP6 calculation from hash in dB
+void AuthSocket::SendPacket(ByteBuffer* buf)
+{
+ // TODO: Also handle outgoing structs?
+
+ uint8 _cmd = buf->read();
+
+ // Dump outgoing packet.
+ if (sLog.IsLogWorld())
+ {
+ sLog.outWorld ("S->C - SOCKET: %u LENGTH: %u OPCODE: 0x%.4X\n",
+ GetSocket(), buf->size(), _cmd);
+
+ size_t p = 0;
+ while (p < buf->size())
+ {
+ for (size_t j = 0; j < 16 && p < buf->size(); ++j)
+ sLog.outWorld("%.2X ", (*buf)[p++]);
+
+ sLog.outWorld("\n");
+ }
+
+ sLog.outWorld("\n\n");
+ }
+
+ SendBuf((char const*)buf->contents(), buf->size());
+}
+
+/// Make the SRP6 calculation from hash in DB
void AuthSocket::_SetVSFields(const std::string& rI)
{
s.SetRand(s_BYTE_SIZE * 8);
@@ -521,7 +570,8 @@ bool AuthSocket::_HandleLogonChallenge()
pkt<< (uint8) REALM_AUTH_NO_MATCH;
}
}
- SendBuf((char const*)pkt.contents(), pkt.size());
+
+ SendPacket(&pkt);
return true;
}
@@ -567,7 +617,7 @@ bool AuthSocket::_HandleLogonProof()
pkt << (uint8) REALM_AUTH_WRONG_BUILD_NUMBER;
DEBUG_LOG("[AuthChallenge] %u is not a valid client version!", _build);
DEBUG_LOG("[AuthChallenge] Patch %s not found", tmp);
- SendBuf((char const*)pkt.contents(), pkt.size());
+ SendPacket(&pkt);
return true;
}
else // have patch
@@ -807,7 +857,7 @@ bool AuthSocket::_HandleReconnectChallenge()
_reconnectProof.SetRand(16 * 8);
pkt.append(_reconnectProof.AsByteArray(16),16); // 16 bytes random
pkt << (uint64) 0x00 << (uint64) 0x00; // 16 bytes zeros
- SendBuf((char const*)pkt.contents(), pkt.size());
+ SendPacket(&pkt);
return true;
}
@@ -839,7 +889,7 @@ bool AuthSocket::_HandleReconnectProof()
pkt << (uint8) AUTH_RECONNECT_PROOF;
pkt << (uint8) 0x00;
pkt << (uint16) 0x00; // 2 bytes zeros
- SendBuf((char const*)pkt.contents(), pkt.size());
+ SendPacket(&pkt);
///- Set _authed to true!
_authed = true;
@@ -921,7 +971,7 @@ bool AuthSocket::_HandleRealmList()
hdr << (uint16)pkt.size();
hdr.append(pkt);
- SendBuf((char const*)hdr.contents(), hdr.size());
+ SendPacket(&pkt);
return true;
}
diff --git a/src/realmd/AuthSocket.h b/src/realmd/AuthSocket.h
index cf82f34f7..be91a99cd 100644
--- a/src/realmd/AuthSocket.h
+++ b/src/realmd/AuthSocket.h
@@ -24,6 +24,7 @@
#define _AUTHSOCKET_H
#include "Common.h"
+#include "ByteBuffer.h"
#include "Auth/BigNumber.h"
#include "sockets/TcpSocket.h"
#include "sockets/SocketHandler.h"
@@ -55,6 +56,8 @@ class AuthSocket: public TcpSocket
bool _HandleXferCancel();
bool _HandleXferAccept();
+ void SendPacket(ByteBuffer* buf);
+
void _SetVSFields(const std::string& rI);
FILE *pPatch;
diff --git a/src/realmd/realmd.conf.dist.in b/src/realmd/realmd.conf.dist.in
index 217cb15d2..286cd900a 100644
--- a/src/realmd/realmd.conf.dist.in
+++ b/src/realmd/realmd.conf.dist.in
@@ -49,6 +49,10 @@ ConfVersion=2007062001
# Default: "Realmd.log"
# "" - empty name disable creating log file
#
+# WorldLogFile
+# Packet logging file for the realmserver
+# Default: "world.log"
+#
# LogTimestamp
# Logfile with timestamp of server start in name
# Default: 0 - no timestamp in name
@@ -105,6 +109,7 @@ PidFile = ""
LogLevel = 0
LogTime = 0
LogFile = "Realmd.log"
+WorldLogFile = ""
LogTimestamp = 0
LogFileLevel = 0
LogColors = ""
diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp
index 15600ed7a..c46cb0d4e 100644
--- a/src/shared/Log.cpp
+++ b/src/shared/Log.cpp
@@ -225,9 +225,9 @@ void Log::Initialize()
}
charLogfile = openLogFile("CharLogFile","CharLogTimestamp","a");
-
dberLogfile = openLogFile("DBErrorLogFile",NULL,"a");
raLogfile = openLogFile("RaLogFile",NULL,"a");
+ worldLogfile = openLogFile("WorldLogFile",NULL,"a");
// Main log file settings
m_includeTime = sConfig.GetBoolDefault("LogTime", false);
@@ -698,6 +698,21 @@ void Log::outChar(const char * str, ... )
}
}
+void Log::outWorld( const char * str, ... )
+{
+ if (!str)
+ return;
+
+ if (worldLogfile)
+ {
+ va_list args;
+ va_start(args, str);
+ vfprintf(worldLogfile, str, args);
+ va_end(args);
+ fflush(worldLogfile);
+ }
+}
+
void Log::outCharDump( const char * str, uint32 account_id, uint32 guid, const char * name )
{
if(charLogfile)
diff --git a/src/shared/Log.h b/src/shared/Log.h
index c9c004512..e4c596979 100644
--- a/src/shared/Log.h
+++ b/src/shared/Log.h
@@ -80,6 +80,10 @@ class Log : public MaNGOS::Singleton 2 || (m_logFileLevel > 2 && logfile); }
bool IsOutCharDump() const { return m_charLog_Dump; }
+ bool IsLogWorld() const { return (worldLogfile); }
bool IsIncludeTime() const { return m_includeTime; }
private:
FILE* openLogFile(char const* configFileName,char const* configTimeStampFlag, char const* mode);
@@ -128,6 +135,7 @@ class Log : public MaNGOS::Singleton::Instance()
#ifdef MANGOS_DEBUG
-#define DEBUG_LOG MaNGOS::Singleton::Instance().outDebug
+#define DEBUG_LOG sLog.outDebug
#else
#define DEBUG_LOG
#endif
diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h
index e9537ab6a..dacf6c37f 100644
--- a/src/shared/revision_nr.h
+++ b/src/shared/revision_nr.h
@@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
- #define REVISION_NR "8796"
+ #define REVISION_NR "8797"
#endif // __REVISION_NR_H__
diff --git a/win/VC100/game.vcxproj b/win/VC100/game.vcxproj
index 6b648c5ac..eaa5566eb 100644
--- a/win/VC100/game.vcxproj
+++ b/win/VC100/game.vcxproj
@@ -488,7 +488,6 @@
-
@@ -621,7 +620,6 @@
-
diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj
index a7b62a9f2..590a5dc25 100644
--- a/win/VC80/game.vcproj
+++ b/win/VC80/game.vcproj
@@ -1485,14 +1485,6 @@
RelativePath="..\..\src\game\SharedDefines.h"
>
-
-
-
-
diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj
index 613c6f080..d860b9f9f 100644
--- a/win/VC90/game.vcproj
+++ b/win/VC90/game.vcproj
@@ -1486,14 +1486,6 @@
RelativePath="..\..\src\game\SharedDefines.h"
>
-
-
-
-