summaryrefslogtreecommitdiff
path: root/tracker/AdminServer/rconmsghandler.cpp
blob: d8988387c536f3cca89f41b1066f5718647a0041 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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;
}