summaryrefslogtreecommitdiff
path: root/public/gcsdk/gcwebapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/gcsdk/gcwebapi.h')
-rw-r--r--public/gcsdk/gcwebapi.h103
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