1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-09-20 04:26:03 +08:00
Files
hl2sdk/game/shared/secure_command_line.h

53 lines
2.1 KiB
C
Raw Permalink Normal View History

2025-02-19 18:39:00 -05:00
//====== Copyright Valve Corporation, All rights reserved. =================
//
// Secure Command Line parsing to be able to safely launch with untrusted launch parameters.
//
//=============================================================================
#ifndef SECURE_COMMAND_LINE_H
#define SECURE_COMMAND_LINE_H
#if defined( COMPILER_MSVC )
#pragma once
#endif
#include "steam/steam_api.h"
// Should parse the command line and do whatever handling it wants. The command line coming in
// should be considered actively hostile, from an untrusted source. Note that this is not the
// complete command line--only the options that are from an untrusted source (the others were
// passed directly to us on the command line already).
using FnUnsafeCmdLineProcessor = void( const char *pchUnsafeCmdLine, int cubSize, CSteamID srcSteamID );
//
// We don't really need to be a system, but we do need to exist for the duration of the app.
// (We also need to register some steam callbacks, which we will own--but that will be dispatched
// to a function passed in at construction time).
class CSecureLaunchSystem : public CAutoGameSystem
{
public:
CSecureLaunchSystem( FnUnsafeCmdLineProcessor *pfnUnsafeCmdLineProcessor );
virtual ~CSecureLaunchSystem();
STEAM_CALLBACK( CSecureLaunchSystem, OnNewUrlLaunchParameters, NewUrlLaunchParameters_t );
STEAM_CALLBACK( CSecureLaunchSystem, OnGameRichPresenceJoinRequested, GameRichPresenceJoinRequested_t );
void ProcessCommandLine();
private:
FnUnsafeCmdLineProcessor *m_pfnUnsafeCmdLineProcessor;
};
// This will create the system, and can only be called once. Passing null will fatal error.
void RegisterSecureLaunchProcessFunc( FnUnsafeCmdLineProcessor *pfnUnsafeCmdLineProcessor );
// Call this sometime after you've init'd steam, and are ready to do processing on any parameters that came in
// which could be unsafe.
void ProcessInsecureLaunchParameters();
#ifndef TF_CLIENT_DLL
void UnsafeCmdLineProcessor( const char *pchUnsafeCmdLine, int cubSize, CSteamID srcSteamID );
#else
void TFUnsafeCmdLineProcessor( const char *pchUnsafeCmdLine, int cubSize, CSteamID srcSteamID );
#endif
#endif // SECURE_COMMAND_LINE_H