source-engine/engine/cl_rcon.h
2022-05-13 12:16:34 +03:00

99 lines
2.6 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//===========================================================================//
#ifndef CL_RCON_H
#define CL_RCON_H
#ifdef _WIN32
#pragma once
#endif
#include "sv_main.h"
#include "netmessages.h"
#include "net.h"
#include "client.h"
#include "utlvector.h"
#include "utllinkedlist.h"
#include "netadr.h"
#include "sv_remoteaccess.h"
#include "sv_rcon.h"
#include "socketcreator.h"
#include "igameserverdata.h"
#include "ivprofexport.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
class CRConClient : public ISocketCreatorListener
{
public:
CRConClient();
~CRConClient();
void SetAddress( const netadr_t & netAdr );
// Connects to the address specified by SetAddress
bool ConnectSocket();
void Disconnect() { CloseSocket(); }
// Creates a listen server, connects to remote machines that connect to it
void CreateListenSocket( const netadr_t &netAdr );
void CloseListenSocket();
void RunFrame();
void SendCmd( const char *msg );
bool IsConnected() const;
bool IsAuthenticated() const { return m_bAuthenticated; }
void TakeScreenshot();
void GrabConsoleLog();
void SetPassword( const char *pPassword );
void SetRemoteFileDirectory( const char *pDir );
// Inherited from ISocketCreatorListener
virtual bool ShouldAcceptSocket( SocketHandle_t hSocket, const netadr_t & netAdr );
virtual void OnSocketAccepted( SocketHandle_t hSocket, const netadr_t & netAdr, void** ppData );
virtual void OnSocketClosed( SocketHandle_t hSocket, const netadr_t & netAdr, void* pData );
private:
SocketHandle_t GetSocketHandle() const;
void CloseSocket();
void Authenticate();
void ParseReceivedData();
void SendQueuedData();
void SendResponse( CUtlBuffer &response, bool bAutoAuthenticate = true );
void BuildResponse( CUtlBuffer &response, ServerDataRequestType_t msg, const char *pString1, const char *pString2 );
void SaveRemoteScreenshot( const void* pBuffer, int nBufLen );
void SaveRemoteConsoleLog( const void* pBuffer, int nBufLen );
CSocketCreator m_Socket;
netadr_t m_Address;
int m_iAuthRequestID;
int m_iReqID;
bool m_bAuthenticated;
CUtlBuffer m_RecvBuffer;
CUtlBuffer m_SendBuffer;
CUtlString m_Password;
CUtlString m_RemoteFileDir;
int m_nScreenShotIndex;
int m_nConsoleLogIndex;
};
inline SocketHandle_t CRConClient::GetSocketHandle() const
{
return m_Socket.GetAcceptedSocketHandle( 0 );
}
CRConClient & RCONClient();
#ifdef ENABLE_RPT
CRConClient & RPTClient(); // used in remote perf testing
#endif // ENABLE_RPT
#endif // CL_RCON_H