Refactor, GLFW->SDL
[vg.git] / vg_steam_http.h
diff --git a/vg_steam_http.h b/vg_steam_http.h
new file mode 100644 (file)
index 0000000..f4b6bd1
--- /dev/null
@@ -0,0 +1,162 @@
+#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 */