diff options
Diffstat (limited to 'tracker/AdminServer/rconmsghandler.cpp')
| -rw-r--r-- | tracker/AdminServer/rconmsghandler.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tracker/AdminServer/rconmsghandler.cpp b/tracker/AdminServer/rconmsghandler.cpp new file mode 100644 index 0000000..d898838 --- /dev/null +++ b/tracker/AdminServer/rconmsghandler.cpp @@ -0,0 +1,67 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include "RconMsgHandler.h" + +#include "rcon.h" +#include "info.h" + +#include "DialogGameInfo.h" +#include "inetapi.h" +#include "proto_oob.h" + +extern void v_strncpy(char *dest, const char *src, int bufsize); + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CRconMsgHandlerDetails::CRconMsgHandlerDetails( CRcon *baseobject, HANDLERTYPE type, void *typeinfo /*= NULL*/ ) + : CMsgHandler( type, typeinfo ) +{ + m_pRcon = baseobject; +} + +//----------------------------------------------------------------------------- +// Purpose: Process cracked message +//----------------------------------------------------------------------------- +bool CRconMsgHandlerDetails::Process( netadr_t *from, CMsgBuffer *msg ) +{ + // Skip the control character + //if (!m_pRcon->Challenge() && msg->ReadByte()!=A2C_PRINT) + // return false; + + // get response name + const char *str = msg->ReadString(); + if ( !str || !str[0] ) + return false; + + char info[ 2048 ]; + v_strncpy( info, str, 2047 ); + info[2047] = 0; + + if(!_strnicmp(info,"lBad rcon_password",18) ) + { + m_pRcon->BadPassword(info+1); + return true; + } + + + if(m_pRcon->Challenge() ) + { // if we know the challenge value pass it to UpdateServer + + int challenge = atoi(info+strlen("challenge rcon")); + m_pRcon->UpdateServer(from, challenge, NULL); + } + else // else pass a default value + { + m_pRcon->UpdateServer(from, -1, info+1 ); + } + + return true; +} + + |