summaryrefslogtreecommitdiff
path: root/tracker/AdminServer/rconmsghandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/AdminServer/rconmsghandler.cpp')
-rw-r--r--tracker/AdminServer/rconmsghandler.cpp67
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;
+}
+
+