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