You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.3 KiB
103 lines
3.3 KiB
//========= 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
|
|
|