//===== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======// // // Purpose: Handles all the functions for implementing remote access to the engine // //===========================================================================// #ifndef SV_REMOTEACCESS_H #define SV_REMOTEACCESS_H #ifdef _WIN32 #pragma once #endif #include "igameserverdata.h" #include "utlbuffer.h" #include "utllinkedlist.h" class CRConServer; class CServerRemoteAccess : public IGameServerData { public: CServerRemoteAccess(); // handles a request virtual void WriteDataRequest( ra_listener_id listener, const void *buffer, int bufferSize ); void WriteDataRequest( CRConServer *pNetworkListener, ra_listener_id listener, const void *buffer, int bufferSize); // gets return value from the server // returns the number of bytes read virtual int ReadDataResponse( ra_listener_id listener, void *buffer, int bufferSize); int GetDataResponseSize( ra_listener_id listener ); // sends a message to all the watching admin UI's void SendMessageToAdminUI( ra_listener_id listenerID, const char *message); void SendVProfData( ra_listener_id listenerID, bool bGroupData, void *data, int len ); virtual ra_listener_id GetNextListenerID( bool authConnection, const netadr_t *adr = NULL ); virtual void RegisterAdminUIID( ra_listener_id listener ) { m_AdminUIID = listener; } ra_listener_id GetAdminUIID() { return m_AdminUIID; } void GetStatsString(char *buf, int bufSize); // also used by the 'stats' command void UploadScreenshot( const char *pFileName ); void RemoteBug( const char *pBugPath ); private: void RespondString( ra_listener_id listener, int requestID, const char *pString ); void RequestValue( ra_listener_id listener, int requestID, const char *variable ); void SetValue(const char *variable, const char *value); void ExecCommand(const char *cmdString); bool LookupValue(const char *variable, CUtlBuffer &value); const char *LookupStringValue(const char *variable); bool IsAuthenticated( ra_listener_id listener ); void CheckPassword( CRConServer *pNetworkListener, ra_listener_id listener, int requestID, const char *password ); void BadPassword( CRConServer *pNetworkListener, ra_listener_id listener ); void LogCommand( ra_listener_id listener, const char *msg ); void SendResponseToClient( ra_listener_id listenerID, ServerDataResponseType_t type, void *pData, int nDataLen ); // specific value requests void GetUserBanList(CUtlBuffer &value); void GetPlayerList(CUtlBuffer &value); void GetMapList(CUtlBuffer &value); // list of responses waiting to be sent struct DataResponse_t { CUtlBuffer packet; ra_listener_id responderID; }; CUtlLinkedList m_ResponsePackets; struct ListenerStore_t { ra_listener_id listenerID; bool authenticated; bool m_bHasAddress; netadr_t adr; }; CUtlLinkedList m_ListenerIDs; ra_listener_id m_NextListenerID; int m_nScreenshotListener; int m_nBugListener; int m_iBytesSent; int m_iBytesReceived; ra_listener_id m_AdminUIID; }; extern CServerRemoteAccess g_ServerRemoteAccess; extern "C" void NotifyDedicatedServerUI(const char *message); #endif // SV_REMOTEACCESS_H