--- /dev/null
+#ifndef VG_STEAM_HTTP_H
+#define VG_STEAM_HTTP_H
+
+#include "vg_steam.h"
+
+/*
+ * HTTP Status codes that the server can send in response to a request, see
+ * rfc2616 section 10.3 for descriptions of each of these.
+ */
+typedef enum EHTTPStatusCode
+{
+ /* Invalid status code (this isn't defined in HTTP, used to indicate unset
+ * in our code) */
+
+ k_EHTTPStatusCodeInvalid = 0,
+
+ /* Informational codes */
+ k_EHTTPStatusCode100Continue = 100,
+ k_EHTTPStatusCode101SwitchingProtocols = 101,
+
+ /* Success codes */
+ k_EHTTPStatusCode200OK = 200,
+ k_EHTTPStatusCode201Created = 201,
+ k_EHTTPStatusCode202Accepted = 202,
+ k_EHTTPStatusCode203NonAuthoritative = 203,
+ k_EHTTPStatusCode204NoContent = 204,
+ k_EHTTPStatusCode205ResetContent = 205,
+ k_EHTTPStatusCode206PartialContent = 206,
+
+ /* Redirection codes */
+ k_EHTTPStatusCode300MultipleChoices = 300,
+ k_EHTTPStatusCode301MovedPermanently = 301,
+ k_EHTTPStatusCode302Found = 302,
+ k_EHTTPStatusCode303SeeOther = 303,
+ k_EHTTPStatusCode304NotModified = 304,
+ k_EHTTPStatusCode305UseProxy = 305,
+
+ /* (used in old HTTP spec, now unused in 1.1)
+ k_EHTTPStatusCode306Unused = 306,
+ */
+
+ k_EHTTPStatusCode307TemporaryRedirect = 307,
+
+ /* Error codes */
+ k_EHTTPStatusCode400BadRequest = 400,
+
+ /*
+ * You probably want 403 or something else. 401 implies you're sending a
+ * WWW-Authenticate header and the client can sent an Authorization header in
+ * response.
+ */
+ k_EHTTPStatusCode401Unauthorized = 401,
+
+ /* This is reserved for future HTTP specs, not really supported by clients */
+ k_EHTTPStatusCode402PaymentRequired = 402,
+ k_EHTTPStatusCode403Forbidden = 403,
+ k_EHTTPStatusCode404NotFound = 404,
+ k_EHTTPStatusCode405MethodNotAllowed = 405,
+ k_EHTTPStatusCode406NotAcceptable = 406,
+ k_EHTTPStatusCode407ProxyAuthRequired = 407,
+ k_EHTTPStatusCode408RequestTimeout = 408,
+ k_EHTTPStatusCode409Conflict = 409,
+ k_EHTTPStatusCode410Gone = 410,
+ k_EHTTPStatusCode411LengthRequired = 411,
+ k_EHTTPStatusCode412PreconditionFailed = 412,
+ k_EHTTPStatusCode413RequestEntityTooLarge=413,
+ k_EHTTPStatusCode414RequestURITooLong = 414,
+ k_EHTTPStatusCode415UnsupportedMediaType =415,
+ k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
+ k_EHTTPStatusCode417ExpectationFailed = 417,
+
+ /* 418 is reserved, so we'll use it to mean unknown */
+ k_EHTTPStatusCode4xxUnknown = 418,
+ k_EHTTPStatusCode429TooManyRequests = 429,
+ k_EHTTPStatusCode444ConnectionClosed = 444, /* nginx only? */
+
+ /* Server error codes */
+ k_EHTTPStatusCode500InternalServerError = 500,
+ k_EHTTPStatusCode501NotImplemented = 501,
+ k_EHTTPStatusCode502BadGateway = 502,
+ k_EHTTPStatusCode503ServiceUnavailable = 503,
+ k_EHTTPStatusCode504GatewayTimeout = 504,
+ k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
+ k_EHTTPStatusCode5xxUnknown = 599,
+}
+EHTTPStatusCode;
+
+enum EHTTPMethod
+{
+ k_EHTTPMethodInvalid = 0,
+ k_EHTTPMethodGET,
+ k_EHTTPMethodHEAD,
+ k_EHTTPMethodPOST,
+ k_EHTTPMethodPUT,
+ k_EHTTPMethodDELETE,
+ k_EHTTPMethodOPTIONS,
+ k_EHTTPMethodPATCH,
+
+ /* The remaining HTTP methods are not yet supported, per rfc2616 section
+ * 5.1.1 only GET and HEAD are required for a compliant general purpose
+ * server. We'll likely add more as we find uses for them.
+ *
+ * k_EHTTPMethodTRACE,
+ * k_EHTTPMethodCONNECT
+ */
+};
+typedef enum EHTTPMethod EHTTPMethod;
+
+typedef u32 HTTPRequestHandle;
+
+#ifdef VALVE_CALLBACK_PACK_SMALL
+ #pragma pack( push, 4 )
+#else
+ #pragma pack( push, 8 )
+#endif
+
+typedef struct HTTPRequestCompleted_t HTTPRequestCompleted_t;
+struct HTTPRequestCompleted_t
+{
+ HTTPRequestHandle m_hRequest;
+ u64 m_ulContextValue;
+ int m_bRequestSuccessful;
+ EHTTPStatusCode m_eStatusCode;
+ u32 m_unBodySize;
+};
+
+#pragma pack(pop)
+
+/*
+ * Methods
+ * TODO: Copy steamworks documentation here
+ */
+
+void *SteamAPI_SteamGameServerHTTP_v003(void);
+void *SteamAPI_SteamGameServerHTTP(void)
+{
+ return SteamAPI_SteamGameServerHTTP_v003();
+}
+
+/* Interfaces */
+void *SteamAPI_SteamHTTP_v003(void);
+void *SteamAPI_SteamHTTP(void)
+{
+ return SteamAPI_SteamHTTP_v003();
+}
+
+HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(
+ void *self, EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL );
+
+int SteamAPI_ISteamHTTP_SendHTTPRequest( void* self, HTTPRequestHandle hRequest,
+ SteamAPICall_t * pCallHandle );
+
+int SteamAPI_ISteamHTTP_ReleaseHTTPRequest( void *self,
+ HTTPRequestHandle hRequest );
+
+int SteamAPI_ISteamHTTP_GetHTTPResponseBodySize( void *self,
+ HTTPRequestHandle hRequest, u32 *unBodySize );
+
+int SteamAPI_ISteamHTTP_GetHTTPResponseBodyData( void* self,
+ HTTPRequestHandle hRequest, u8 *pBodyDataBuffer, u32 unBufferSize );
+
+#endif /* VG_STEAM_HTTP_H */