bad char
[vg.git] / vg_steam_http.h
1 #pragma once
2 #include "vg_steam.h"
3
4 /*
5 * HTTP Status codes that the server can send in response to a request, see
6 * rfc2616 section 10.3 for descriptions of each of these.
7 */
8 typedef enum EHTTPStatusCode
9 {
10 /* Invalid status code (this isn't defined in HTTP, used to indicate unset
11 * in our code) */
12
13 k_EHTTPStatusCodeInvalid = 0,
14
15 /* Informational codes */
16 k_EHTTPStatusCode100Continue = 100,
17 k_EHTTPStatusCode101SwitchingProtocols = 101,
18
19 /* Success codes */
20 k_EHTTPStatusCode200OK = 200,
21 k_EHTTPStatusCode201Created = 201,
22 k_EHTTPStatusCode202Accepted = 202,
23 k_EHTTPStatusCode203NonAuthoritative = 203,
24 k_EHTTPStatusCode204NoContent = 204,
25 k_EHTTPStatusCode205ResetContent = 205,
26 k_EHTTPStatusCode206PartialContent = 206,
27
28 /* Redirection codes */
29 k_EHTTPStatusCode300MultipleChoices = 300,
30 k_EHTTPStatusCode301MovedPermanently = 301,
31 k_EHTTPStatusCode302Found = 302,
32 k_EHTTPStatusCode303SeeOther = 303,
33 k_EHTTPStatusCode304NotModified = 304,
34 k_EHTTPStatusCode305UseProxy = 305,
35
36 /* (used in old HTTP spec, now unused in 1.1)
37 k_EHTTPStatusCode306Unused = 306,
38 */
39
40 k_EHTTPStatusCode307TemporaryRedirect = 307,
41
42 /* Error codes */
43 k_EHTTPStatusCode400BadRequest = 400,
44
45 /*
46 * You probably want 403 or something else. 401 implies you're sending a
47 * WWW-Authenticate header and the client can sent an Authorization header in
48 * response.
49 */
50 k_EHTTPStatusCode401Unauthorized = 401,
51
52 /* This is reserved for future HTTP specs, not really supported by clients */
53 k_EHTTPStatusCode402PaymentRequired = 402,
54 k_EHTTPStatusCode403Forbidden = 403,
55 k_EHTTPStatusCode404NotFound = 404,
56 k_EHTTPStatusCode405MethodNotAllowed = 405,
57 k_EHTTPStatusCode406NotAcceptable = 406,
58 k_EHTTPStatusCode407ProxyAuthRequired = 407,
59 k_EHTTPStatusCode408RequestTimeout = 408,
60 k_EHTTPStatusCode409Conflict = 409,
61 k_EHTTPStatusCode410Gone = 410,
62 k_EHTTPStatusCode411LengthRequired = 411,
63 k_EHTTPStatusCode412PreconditionFailed = 412,
64 k_EHTTPStatusCode413RequestEntityTooLarge=413,
65 k_EHTTPStatusCode414RequestURITooLong = 414,
66 k_EHTTPStatusCode415UnsupportedMediaType =415,
67 k_EHTTPStatusCode416RequestedRangeNotSatisfiable = 416,
68 k_EHTTPStatusCode417ExpectationFailed = 417,
69
70 /* 418 is reserved, so we'll use it to mean unknown */
71 k_EHTTPStatusCode4xxUnknown = 418,
72 k_EHTTPStatusCode429TooManyRequests = 429,
73 k_EHTTPStatusCode444ConnectionClosed = 444, /* nginx only? */
74
75 /* Server error codes */
76 k_EHTTPStatusCode500InternalServerError = 500,
77 k_EHTTPStatusCode501NotImplemented = 501,
78 k_EHTTPStatusCode502BadGateway = 502,
79 k_EHTTPStatusCode503ServiceUnavailable = 503,
80 k_EHTTPStatusCode504GatewayTimeout = 504,
81 k_EHTTPStatusCode505HTTPVersionNotSupported = 505,
82 k_EHTTPStatusCode5xxUnknown = 599,
83 }
84 EHTTPStatusCode;
85
86 enum EHTTPMethod
87 {
88 k_EHTTPMethodInvalid = 0,
89 k_EHTTPMethodGET,
90 k_EHTTPMethodHEAD,
91 k_EHTTPMethodPOST,
92 k_EHTTPMethodPUT,
93 k_EHTTPMethodDELETE,
94 k_EHTTPMethodOPTIONS,
95 k_EHTTPMethodPATCH,
96
97 /* The remaining HTTP methods are not yet supported, per rfc2616 section
98 * 5.1.1 only GET and HEAD are required for a compliant general purpose
99 * server. We'll likely add more as we find uses for them.
100 *
101 * k_EHTTPMethodTRACE,
102 * k_EHTTPMethodCONNECT
103 */
104 };
105 typedef enum EHTTPMethod EHTTPMethod;
106
107 typedef u32 HTTPRequestHandle;
108
109 #ifdef VALVE_CALLBACK_PACK_SMALL
110 #pragma pack( push, 4 )
111 #else
112 #pragma pack( push, 8 )
113 #endif
114
115 typedef struct HTTPRequestCompleted_t HTTPRequestCompleted_t;
116 struct HTTPRequestCompleted_t
117 {
118 HTTPRequestHandle m_hRequest;
119 u64 m_ulContextValue;
120 steamapi_bool m_bRequestSuccessful;
121 EHTTPStatusCode m_eStatusCode;
122 u32 m_unBodySize;
123 };
124
125 #pragma pack(pop)
126
127 /*
128 * Methods
129 * TODO: Copy steamworks documentation here
130 */
131
132 void *SteamAPI_SteamGameServerHTTP_v003(void);
133 static inline void *SteamAPI_SteamGameServerHTTP(void)
134 {
135 return SteamAPI_SteamGameServerHTTP_v003();
136 }
137
138 /* Interfaces */
139 void *SteamAPI_SteamHTTP_v003(void);
140 static inline void *SteamAPI_SteamHTTP(void)
141 {
142 return SteamAPI_SteamHTTP_v003();
143 }
144
145 HTTPRequestHandle SteamAPI_ISteamHTTP_CreateHTTPRequest(
146 void *self, EHTTPMethod eHTTPRequestMethod, const char *pchAbsoluteURL );
147
148 steamapi_bool SteamAPI_ISteamHTTP_SendHTTPRequest( void *self,
149 HTTPRequestHandle hRequest, SteamAPICall_t *pCallHandle );
150
151 steamapi_bool SteamAPI_ISteamHTTP_ReleaseHTTPRequest( void *self,
152 HTTPRequestHandle hRequest );
153
154 steamapi_bool SteamAPI_ISteamHTTP_GetHTTPResponseBodySize( void *self,
155 HTTPRequestHandle hRequest, u32 *unBodySize );
156
157 steamapi_bool SteamAPI_ISteamHTTP_GetHTTPResponseBodyData( void* self,
158 HTTPRequestHandle hRequest, u8 *pBodyDataBuffer, u32 unBufferSize );