1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
2 /*
3  * soup-status.h: HTTP status code and status class definitions
4  *
5  * Copyright (C) 2001-2003, Ximian, Inc.
6  */
7 
8 #ifndef __SOUP_STATUS_H__
9 #define __SOUP_STATUS_H__ 1
10 
11 #include <libsoup/soup-version.h>
12 
13 G_BEGIN_DECLS
14 
15 #define SOUP_STATUS_IS_TRANSPORT_ERROR(status) ((status) >  0   && (status) < 100)
16 #define SOUP_STATUS_IS_INFORMATIONAL(status)   ((status) >= 100 && (status) < 200)
17 #define SOUP_STATUS_IS_SUCCESSFUL(status)      ((status) >= 200 && (status) < 300)
18 #define SOUP_STATUS_IS_REDIRECTION(status)     ((status) >= 300 && (status) < 400)
19 #define SOUP_STATUS_IS_CLIENT_ERROR(status)    ((status) >= 400 && (status) < 500)
20 #define SOUP_STATUS_IS_SERVER_ERROR(status)    ((status) >= 500 && (status) < 600)
21 
22 typedef enum {
23 	SOUP_STATUS_NONE,
24 
25 	/* Transport Errors */
26 	SOUP_STATUS_CANCELLED                       = 1,
27 	SOUP_STATUS_CANT_RESOLVE,
28 	SOUP_STATUS_CANT_RESOLVE_PROXY,
29 	SOUP_STATUS_CANT_CONNECT,
30 	SOUP_STATUS_CANT_CONNECT_PROXY,
31 	SOUP_STATUS_SSL_FAILED,
32 	SOUP_STATUS_IO_ERROR,
33 	SOUP_STATUS_MALFORMED,
34 	SOUP_STATUS_TRY_AGAIN,
35 	SOUP_STATUS_TOO_MANY_REDIRECTS,
36 	SOUP_STATUS_TLS_FAILED,
37 
38 	/* HTTP Status Codes */
39 	SOUP_STATUS_CONTINUE                        = 100,
40 	SOUP_STATUS_SWITCHING_PROTOCOLS             = 101,
41 	SOUP_STATUS_PROCESSING                      = 102, /* WebDAV */
42 
43 	SOUP_STATUS_OK                              = 200,
44 	SOUP_STATUS_CREATED                         = 201,
45 	SOUP_STATUS_ACCEPTED                        = 202,
46 	SOUP_STATUS_NON_AUTHORITATIVE               = 203,
47 	SOUP_STATUS_NO_CONTENT                      = 204,
48 	SOUP_STATUS_RESET_CONTENT                   = 205,
49 	SOUP_STATUS_PARTIAL_CONTENT                 = 206,
50 	SOUP_STATUS_MULTI_STATUS                    = 207, /* WebDAV */
51 
52 	SOUP_STATUS_MULTIPLE_CHOICES                = 300,
53 	SOUP_STATUS_MOVED_PERMANENTLY               = 301,
54 	SOUP_STATUS_FOUND                           = 302,
55 	SOUP_STATUS_MOVED_TEMPORARILY               = 302, /* RFC 2068 */
56 	SOUP_STATUS_SEE_OTHER                       = 303,
57 	SOUP_STATUS_NOT_MODIFIED                    = 304,
58 	SOUP_STATUS_USE_PROXY                       = 305,
59 	SOUP_STATUS_NOT_APPEARING_IN_THIS_PROTOCOL  = 306, /* (reserved) */
60 	SOUP_STATUS_TEMPORARY_REDIRECT              = 307,
61 	SOUP_STATUS_PERMANENT_REDIRECT              = 308,
62 
63 	SOUP_STATUS_BAD_REQUEST                     = 400,
64 	SOUP_STATUS_UNAUTHORIZED                    = 401,
65 	SOUP_STATUS_PAYMENT_REQUIRED                = 402, /* (reserved) */
66 	SOUP_STATUS_FORBIDDEN                       = 403,
67 	SOUP_STATUS_NOT_FOUND                       = 404,
68 	SOUP_STATUS_METHOD_NOT_ALLOWED              = 405,
69 	SOUP_STATUS_NOT_ACCEPTABLE                  = 406,
70 	SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED   = 407,
71 	SOUP_STATUS_PROXY_UNAUTHORIZED              = SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED,
72 	SOUP_STATUS_REQUEST_TIMEOUT                 = 408,
73 	SOUP_STATUS_CONFLICT                        = 409,
74 	SOUP_STATUS_GONE                            = 410,
75 	SOUP_STATUS_LENGTH_REQUIRED                 = 411,
76 	SOUP_STATUS_PRECONDITION_FAILED             = 412,
77 	SOUP_STATUS_REQUEST_ENTITY_TOO_LARGE        = 413,
78 	SOUP_STATUS_REQUEST_URI_TOO_LONG            = 414,
79 	SOUP_STATUS_UNSUPPORTED_MEDIA_TYPE          = 415,
80 	SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
81 	SOUP_STATUS_INVALID_RANGE                   = SOUP_STATUS_REQUESTED_RANGE_NOT_SATISFIABLE,
82 	SOUP_STATUS_EXPECTATION_FAILED              = 417,
83 	SOUP_STATUS_UNPROCESSABLE_ENTITY            = 422, /* WebDAV */
84 	SOUP_STATUS_LOCKED                          = 423, /* WebDAV */
85 	SOUP_STATUS_FAILED_DEPENDENCY               = 424, /* WebDAV */
86 
87 	SOUP_STATUS_INTERNAL_SERVER_ERROR           = 500,
88 	SOUP_STATUS_NOT_IMPLEMENTED                 = 501,
89 	SOUP_STATUS_BAD_GATEWAY                     = 502,
90 	SOUP_STATUS_SERVICE_UNAVAILABLE             = 503,
91 	SOUP_STATUS_GATEWAY_TIMEOUT                 = 504,
92 	SOUP_STATUS_HTTP_VERSION_NOT_SUPPORTED      = 505,
93 	SOUP_STATUS_INSUFFICIENT_STORAGE            = 507, /* WebDAV search */
94 	SOUP_STATUS_NOT_EXTENDED                    = 510  /* RFC 2774 */
95 } SoupStatus;
96 
97 SOUP_AVAILABLE_IN_2_4
98 const char *soup_status_get_phrase (guint status_code);
99 SOUP_AVAILABLE_IN_2_26
100 guint       soup_status_proxify    (guint status_code);
101 
102 /**
103  * SOUP_HTTP_ERROR:
104  *
105  * A #GError domain representing an HTTP status. Use a #SoupStatus for
106  * the <structfield>code</structfield> value.
107  **/
108 #define SOUP_HTTP_ERROR (soup_http_error_quark())
109 SOUP_AVAILABLE_IN_2_4
110 GQuark soup_http_error_quark (void);
111 
112 #ifndef SOUP_DISABLE_DEPRECATED
113 /* For introspection purposes, we create a duplicate enum type under
114  * the deprecated type name, since some (all?) bindings don't handle
115  * enum type typedefs the way we want.
116  */
117 typedef enum {
118 	SOUP_KNOWN_STATUS_CODE_NONE,
119 
120 	SOUP_KNOWN_STATUS_CODE_CANCELLED                       = 1,
121 	SOUP_KNOWN_STATUS_CODE_CANT_RESOLVE,
122 	SOUP_KNOWN_STATUS_CODE_CANT_RESOLVE_PROXY,
123 	SOUP_KNOWN_STATUS_CODE_CANT_CONNECT,
124 	SOUP_KNOWN_STATUS_CODE_CANT_CONNECT_PROXY,
125 	SOUP_KNOWN_STATUS_CODE_SSL_FAILED,
126 	SOUP_KNOWN_STATUS_CODE_IO_ERROR,
127 	SOUP_KNOWN_STATUS_CODE_MALFORMED,
128 	SOUP_KNOWN_STATUS_CODE_TRY_AGAIN,
129 	SOUP_KNOWN_STATUS_CODE_TOO_MANY_REDIRECTS,
130 	SOUP_KNOWN_STATUS_CODE_TLS_FAILED,
131 
132 	SOUP_KNOWN_STATUS_CODE_CONTINUE                        = 100,
133 	SOUP_KNOWN_STATUS_CODE_SWITCHING_PROTOCOLS             = 101,
134 	SOUP_KNOWN_STATUS_CODE_PROCESSING                      = 102,
135 
136 	SOUP_KNOWN_STATUS_CODE_OK                              = 200,
137 	SOUP_KNOWN_STATUS_CODE_CREATED                         = 201,
138 	SOUP_KNOWN_STATUS_CODE_ACCEPTED                        = 202,
139 	SOUP_KNOWN_STATUS_CODE_NON_AUTHORITATIVE               = 203,
140 	SOUP_KNOWN_STATUS_CODE_NO_CONTENT                      = 204,
141 	SOUP_KNOWN_STATUS_CODE_RESET_CONTENT                   = 205,
142 	SOUP_KNOWN_STATUS_CODE_PARTIAL_CONTENT                 = 206,
143 	SOUP_KNOWN_STATUS_CODE_MULTI_STATUS                    = 207,
144 
145 	SOUP_KNOWN_STATUS_CODE_MULTIPLE_CHOICES                = 300,
146 	SOUP_KNOWN_STATUS_CODE_MOVED_PERMANENTLY               = 301,
147 	SOUP_KNOWN_STATUS_CODE_FOUND                           = 302,
148 	SOUP_KNOWN_STATUS_CODE_MOVED_TEMPORARILY               = 302,
149 	SOUP_KNOWN_STATUS_CODE_SEE_OTHER                       = 303,
150 	SOUP_KNOWN_STATUS_CODE_NOT_MODIFIED                    = 304,
151 	SOUP_KNOWN_STATUS_CODE_USE_PROXY                       = 305,
152 	SOUP_KNOWN_STATUS_CODE_NOT_APPEARING_IN_THIS_PROTOCOL  = 306,
153 	SOUP_KNOWN_STATUS_CODE_TEMPORARY_REDIRECT              = 307,
154 
155 	SOUP_KNOWN_STATUS_CODE_BAD_REQUEST                     = 400,
156 	SOUP_KNOWN_STATUS_CODE_UNAUTHORIZED                    = 401,
157 	SOUP_KNOWN_STATUS_CODE_PAYMENT_REQUIRED                = 402,
158 	SOUP_KNOWN_STATUS_CODE_FORBIDDEN                       = 403,
159 	SOUP_KNOWN_STATUS_CODE_NOT_FOUND                       = 404,
160 	SOUP_KNOWN_STATUS_CODE_METHOD_NOT_ALLOWED              = 405,
161 	SOUP_KNOWN_STATUS_CODE_NOT_ACCEPTABLE                  = 406,
162 	SOUP_KNOWN_STATUS_CODE_PROXY_AUTHENTICATION_REQUIRED   = 407,
163 	SOUP_KNOWN_STATUS_CODE_PROXY_UNAUTHORIZED              = SOUP_KNOWN_STATUS_CODE_PROXY_AUTHENTICATION_REQUIRED,
164 	SOUP_KNOWN_STATUS_CODE_REQUEST_TIMEOUT                 = 408,
165 	SOUP_KNOWN_STATUS_CODE_CONFLICT                        = 409,
166 	SOUP_KNOWN_STATUS_CODE_GONE                            = 410,
167 	SOUP_KNOWN_STATUS_CODE_LENGTH_REQUIRED                 = 411,
168 	SOUP_KNOWN_STATUS_CODE_PRECONDITION_FAILED             = 412,
169 	SOUP_KNOWN_STATUS_CODE_REQUEST_ENTITY_TOO_LARGE        = 413,
170 	SOUP_KNOWN_STATUS_CODE_REQUEST_URI_TOO_LONG            = 414,
171 	SOUP_KNOWN_STATUS_CODE_UNSUPPORTED_MEDIA_TYPE          = 415,
172 	SOUP_KNOWN_STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
173 	SOUP_KNOWN_STATUS_CODE_INVALID_RANGE                   = SOUP_KNOWN_STATUS_CODE_REQUESTED_RANGE_NOT_SATISFIABLE,
174 	SOUP_KNOWN_STATUS_CODE_EXPECTATION_FAILED              = 417,
175 	SOUP_KNOWN_STATUS_CODE_UNPROCESSABLE_ENTITY            = 422,
176 	SOUP_KNOWN_STATUS_CODE_LOCKED                          = 423,
177 	SOUP_KNOWN_STATUS_CODE_FAILED_DEPENDENCY               = 424,
178 
179 	SOUP_KNOWN_STATUS_CODE_INTERNAL_SERVER_ERROR           = 500,
180 	SOUP_KNOWN_STATUS_CODE_NOT_IMPLEMENTED                 = 501,
181 	SOUP_KNOWN_STATUS_CODE_BAD_GATEWAY                     = 502,
182 	SOUP_KNOWN_STATUS_CODE_SERVICE_UNAVAILABLE             = 503,
183 	SOUP_KNOWN_STATUS_CODE_GATEWAY_TIMEOUT                 = 504,
184 	SOUP_KNOWN_STATUS_CODE_HTTP_VERSION_NOT_SUPPORTED      = 505,
185 	SOUP_KNOWN_STATUS_CODE_INSUFFICIENT_STORAGE            = 507,
186 	SOUP_KNOWN_STATUS_CODE_NOT_EXTENDED                    = 510
187 } SoupKnownStatusCode;
188 #endif
189 
190 G_END_DECLS
191 
192 #endif /* __SOUP_STATUS_H__ */
193