diff options
Diffstat (limited to 'public/gcsdk/gcwebapi.h')
| -rw-r--r-- | public/gcsdk/gcwebapi.h | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/public/gcsdk/gcwebapi.h b/public/gcsdk/gcwebapi.h new file mode 100644 index 0000000..2ffa164 --- /dev/null +++ b/public/gcsdk/gcwebapi.h @@ -0,0 +1,103 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: CWAPI header for GC access to the Web API server +// +//============================================================================= + +#ifndef GCWEBAPI_H +#define GCWEBAPI_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tier0/memdbgon.h" + +enum EWebAPIPrivilege +{ + k_EWebApiPriv_Invalid = -1, + k_EWebApiPriv_None = 0, // fully public, no auth needed + k_EWebApiPriv_Key = 1, // Requires valid key + k_EWebApiPriv_PublisherKey = 2, // Requires publisher key + k_EWebApiPriv_PublisherKeyOwnsApp = 3, // Requires publisher key and publisher owns appid + //k_EWebApiPriv_Account = 1, // user must have a Steam account with password set +}; + +enum EWebApiParamType +{ + k_EWebApiParamTypeInvalid = -1, + + k_EWebApiParamTypeInt32 = 0, + k_EWebApiParamTypeUInt32 = 1, + k_EWebApiParamTypeInt64 = 2, + k_EWebApiParamTypeUInt64 = 3, + k_EWebApiParamTypeFloat = 4, + k_EWebApiParamTypeString = 5, + k_EWebApiParamTypeBool = 6, + k_EWebApiParamTypeRawBinary = 7, +}; + +const char *PchNameFromEWebApiParamType( int eWebApiParamType ); + +typedef KeyValues *(*GCWebAPIInterfaceMapCreationFunc_t)(); + +class CGCWebAPIInterfaceMapRegistrar +{ +public: + CGCWebAPIInterfaceMapRegistrar( GCWebAPIInterfaceMapCreationFunc_t pFunc ) + { + VecInstance().AddToTail( pFunc ); + } + + static CUtlVector< GCWebAPIInterfaceMapCreationFunc_t > & VecInstance(); +}; + + +// +// Macros for use registering interfaces in webapi_interfacemap.h +// +#define BEGIN_GCWEB_INTERFACE_BLOCK( pchInterfaceName ) \ + KeyValues *CreateWebAPIInterfaceMap_##pchInterfaceName() \ +{ \ + KeyValues *pkvInterface = new KeyValues( #pchInterfaceName ); + +#define DECLARE_GCWEBAPI_METHOD( pchMethodName, unVersion, eHTTPMethod, pchJobName, ePriv ) \ +{ \ + KeyValues *pkvMethod = pkvInterface->FindKey( pchMethodName #unVersion, true ); \ + pkvMethod->SetString( "name", pchMethodName ); \ + pkvMethod->SetInt( "version", unVersion ); \ + pkvMethod->SetInt( "http_method", eHTTPMethod ); \ + pkvMethod->SetString( "job_name", pchJobName); \ + pkvMethod->SetInt( "priv", ePriv ); + +#define REQUIRED_GCWEBAPI_PARAM( pchName, eType, pchDescription ) \ +{ \ + KeyValues *pkvParams = pkvMethod->FindKey( "params", true ); \ + AssertMsg( Q_stricmp( pchName, "format" ) != 0, "'format' is a magic reserved API param for specifying output format!" ); \ + KeyValues *pkvParam = pkvParams->FindKey( pchName, true ); \ + pkvParam->SetString( "description", pchDescription ); \ + pkvParam->SetInt( "type", eType ); \ + pkvParam->SetInt( "optional", 0 ); \ +} + +#define OPTIONAL_GCWEBAPI_PARAM( pchName, eType, pchDescription ) \ +{ \ + KeyValues *pkvParams = pkvMethod->FindKey( "params", true ); \ + AssertMsg( Q_stricmp( pchName, "format" ) != 0, "'format' is a magic reserved API param for specifying output format!" ); \ + KeyValues *pkvParam = pkvParams->FindKey( pchName, true ); \ + pkvParam->SetString( "description", pchDescription ); \ + pkvParam->SetInt( "type", eType ); \ + pkvParam->SetInt( "optional", 1 ); \ +} + +#define END_GCWEBAPI_METHOD() \ +} + + +#define END_GCWEB_INTERFACE_BLOCK( pchInterfaceName ) \ + return pkvInterface; \ +} \ + CGCWebAPIInterfaceMapRegistrar g_Register_GCWebAPIInterfaceMapCreator_##pchInterfaceName( &CreateWebAPIInterfaceMap_##pchInterfaceName ); + +#include "tier0/memdbgoff.h" + +#endif // GCWEBAPI_H |