diff options
Diffstat (limited to 'tracker/AdminServer/serverinfomsghandler.cpp')
| -rw-r--r-- | tracker/AdminServer/serverinfomsghandler.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tracker/AdminServer/serverinfomsghandler.cpp b/tracker/AdminServer/serverinfomsghandler.cpp new file mode 100644 index 0000000..9b9a47f --- /dev/null +++ b/tracker/AdminServer/serverinfomsghandler.cpp @@ -0,0 +1,74 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include "ServerInfoMsgHandler.h" + +#include "serverinfo.h" +#include "info.h" + +extern void v_strncpy(char *dest, const char *src, int bufsize); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CServerInfoMsgHandlerDetails::CServerInfoMsgHandlerDetails( CServerInfo *baseobject, HANDLERTYPE type, void *typeinfo /*= NULL*/ ) + : CMsgHandler( type, typeinfo ) +{ + m_pServerInfo = baseobject; +} + +//----------------------------------------------------------------------------- +// Purpose: Process cracked message +//----------------------------------------------------------------------------- +bool CServerInfoMsgHandlerDetails::Process( netadr_t *from, CMsgBuffer *msg ) +{ + // Skip the control character + msg->ReadByte(); + + // get response name + const char *str = msg->ReadString(); + if ( !str || !str[0] ) + return false; + + // get infostring + str = msg->ReadString(); + if ( !str || !str[0] ) + return false; + + char info[ 2048 ]; + strncpy( info, str, 2047 ); + info[2047] = 0; + + char name[256], map[256], gamedir[256], desc[256]; + + v_strncpy(name, Info_ValueForKey(info, "hostname"), 255); + v_strncpy(map, Info_ValueForKey(info, "map"), 255); + v_strncpy(gamedir, Info_ValueForKey(info, "gamedir"), 255); + strlwr(gamedir); + v_strncpy(desc, Info_ValueForKey(info, "description"), 255); + int players = atoi(Info_ValueForKey(info, "players")); + int maxplayers = atoi(Info_ValueForKey(info, "max")); + char serverType = *Info_ValueForKey(info, "type"); + bool password = atoi(Info_ValueForKey(info, "password")); + + m_pServerInfo->UpdateServer(from, // index of server + (serverType == 'p'), + name, + map, + gamedir, + desc, + players, + maxplayers, + msg->GetTime(), // receive time + password + ); + + + return true; +} + + |