summaryrefslogtreecommitdiff
path: root/engine/sv_steamauth.h
diff options
context:
space:
mode:
Diffstat (limited to 'engine/sv_steamauth.h')
-rw-r--r--engine/sv_steamauth.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/engine/sv_steamauth.h b/engine/sv_steamauth.h
new file mode 100644
index 0000000..620c153
--- /dev/null
+++ b/engine/sv_steamauth.h
@@ -0,0 +1,116 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: steam state machine that handles authenticating steam users
+//
+//=============================================================================//
+
+#ifndef STEAMUAUTHSERVER_H
+#define STEAMUAUTHSERVER_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "baseclient.h"
+#include "utlvector.h"
+#include "netadr.h"
+#include "utlstring.h"
+
+#include "steam/steam_gameserver.h"
+
+class CSteam3Server : public CSteamGameServerAPIContext
+{
+public:
+ CSteam3Server();
+ ~CSteam3Server();
+#if !defined(NO_STEAM)
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnLogonSuccess, SteamServersConnected_t, m_CallbackLogonSuccess );
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnLogonFailure, SteamServerConnectFailure_t, m_CallbackLogonFailure );
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnLoggedOff, SteamServersDisconnected_t, m_CallbackLoggedOff );
+ // game server callbacks
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnGSPolicyResponse, GSPolicyResponse_t, m_CallbackGSPolicyResponse );
+
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnValidateAuthTicketResponse, ValidateAuthTicketResponse_t, m_CallbackValidateAuthTicketResponse );
+ STEAM_GAMESERVER_CALLBACK( CSteam3Server, OnComputeNewPlayerCompatibilityResponse, ComputeNewPlayerCompatibilityResult_t, m_CallbackPlayerCompatibilityResponse );
+
+#endif
+
+ // CSteam3 stuff
+ enum EServerType {
+ eServerTypeNormal,
+ // Don't register a game port, use hltv system's port as query port
+ eServerTypeTVRelay
+ };
+ void Activate( EServerType serverType );
+ void NotifyOfLevelChange();
+ void NotifyOfServerNameChange();
+ void SendUpdatedServerDetails();
+ void Shutdown();
+
+ bool NotifyClientConnect( CBaseClient *client, uint32 unUserID, netadr_t & adr, const void *pvCookie, uint32 ucbCookie );
+ bool NotifyLocalClientConnect( CBaseClient *client ); // Used for local player on listen server and bots.
+ void NotifyClientDisconnect( CBaseClient *client );
+
+ void RunFrame();
+
+ bool BSecure() { return SteamGameServer() && SteamGameServer()->BSecure(); }
+ bool BIsActive() { return SteamGameServer() && ( m_eServerMode >= eServerModeNoAuthentication ); }
+ bool BLanOnly() const { return m_eServerMode == eServerModeNoAuthentication; }
+ bool BWantsSecure() { return m_eServerMode == eServerModeAuthenticationAndSecure; }
+ bool BLoggedOn() { return SteamGameServer() && SteamGameServer()->BLoggedOn(); }
+ bool CompareUserID( const USERID_t & id1, const USERID_t & id2 );
+ const CSteamID& GetGSSteamID();
+
+ uint16 GetQueryPort() const { return m_QueryPort; }
+
+ // Fetch public IP. Might return 0 if we don't know
+ uint32 GetPublicIP() { return SteamGameServer() ? SteamGameServer()->GetPublicIP() : 0; }
+
+ bool IsMasterServerUpdaterSharingGameSocket();
+
+ /// Select Steam account name / password to use
+ void SetAccount( const char *pszToken )
+ {
+ m_sAccountToken = pszToken;
+ }
+ void UpdateGroupSteamID( bool bForce );
+
+ /// What account name was selected?
+ const char *GetAccountToken() const { return m_sAccountToken.String(); }
+
+private:
+
+ bool CheckForDuplicateSteamID( const CBaseClient *client );
+ CBaseClient *ClientFindFromSteamID( CSteamID & steamIDFind );
+ void OnValidateAuthTicketResponseHelper( CBaseClient *cl, EAuthSessionResponse eAuthSessionResponse );
+ EServerMode GetCurrentServerMode();
+
+ EServerMode m_eServerMode;
+ EServerType m_eServerType;
+
+ bool m_bMasterServerUpdaterSharingGameSocket;
+ bool m_bLogOnFinished;
+ bool m_bLoggedOn;
+ bool m_bLogOnResult; // if true, show logon result
+ bool m_bHasActivePlayers; // player stats updates are only sent if active players are available
+ CSteamID m_SteamIDGS;
+ CSteamID m_steamIDLanOnly;
+ bool m_bActive;
+ bool m_bWantsSecure;
+ bool m_bInitialized;
+ bool m_bWantsPersistentAccountLogon;
+
+ // The port that we are listening for queries on.
+ uint32 m_unIP;
+ uint16 m_usPort;
+ uint16 m_QueryPort;
+
+ CUtlString m_sAccountToken;
+
+ CSteamID m_SteamIDGroupForBlocking;
+};
+
+// singleton accessor
+CSteam3Server &Steam3Server();
+
+
+#endif