nyara 0.0.1.pre.9 → 0.1.pre.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/nyara +3 -3
- data/changes +1 -0
- data/ext/event.c +16 -22
- data/ext/hashes.c +222 -4
- data/ext/inc/rdtsc.h +56 -0
- data/ext/inc/status_codes.inc +64 -0
- data/ext/inc/version.inc +1 -1
- data/ext/nyara.c +12 -10
- data/ext/nyara.h +5 -5
- data/ext/request.c +18 -24
- data/ext/request_parse.c +1 -1
- data/ext/route.cc +2 -4
- data/ext/url_encoded.c +51 -193
- data/lib/nyara/command.rb +39 -12
- data/lib/nyara/config.rb +10 -10
- data/lib/nyara/controller.rb +60 -14
- data/lib/nyara/cookie.rb +1 -1
- data/lib/nyara/hashes/config_hash.rb +2 -24
- data/lib/nyara/nyara.rb +33 -19
- data/lib/nyara/part.rb +7 -3
- data/lib/nyara/reload.rb +85 -0
- data/lib/nyara/request.rb +1 -1
- data/lib/nyara/route.rb +55 -19
- data/lib/nyara/templates/Gemfile +10 -1
- data/lib/nyara/templates/Rakefile +6 -1
- data/lib/nyara/templates/app/controllers/application_controller.rb +3 -0
- data/lib/nyara/templates/app/controllers/welcome_controller.rb +5 -0
- data/lib/nyara/templates/app/views/layouts/application.erb +12 -0
- data/lib/nyara/templates/app/views/welcome/index.erb +1 -0
- data/lib/nyara/templates/config/application.rb +34 -0
- data/lib/nyara/templates/config/boot.rb +4 -0
- data/lib/nyara/templates/config/development.rb +5 -0
- data/lib/nyara/templates/config/production.rb +8 -0
- data/lib/nyara/templates/config/test.rb +2 -0
- data/lib/nyara/templates/public/css/app.css +1 -0
- data/lib/nyara/templates/public/js/app.js +1 -0
- data/lib/nyara/templates/spec/spec_helper.rb +9 -0
- data/lib/nyara/test.rb +10 -2
- data/lib/nyara/view.rb +116 -67
- data/nyara.gemspec +3 -1
- data/rakefile +1 -1
- data/readme.md +1 -1
- data/spec/command_spec.rb +28 -24
- data/spec/config_spec.rb +24 -1
- data/spec/dummy/app/controllers/dummy_controller.rb +2 -0
- data/spec/dummy/app/models/dmmy_model.rb +2 -0
- data/spec/evented_io_spec.rb +2 -1
- data/spec/ext_route_spec.rb +2 -2
- data/spec/flash_spec.rb +8 -0
- data/spec/hashes_spec.rb +127 -0
- data/spec/integration_spec.rb +15 -0
- data/spec/path_helper_spec.rb +17 -5
- data/spec/performance/escape.rb +15 -4
- data/spec/performance/layout_render.rb +15 -10
- data/spec/performance/parse_accept_value.rb +24 -8
- data/spec/performance/parse_param.rb +14 -8
- data/spec/performance/performance_helper.rb +8 -21
- data/spec/performance_spec.rb +5 -4
- data/spec/route_spec.rb +7 -2
- data/spec/url_encoded_spec.rb +18 -74
- data/spec/view_spec.rb +1 -3
- data/spec/views/_partial.slim +1 -0
- data/spec/views/_partial_with_yield.erb +1 -0
- metadata +73 -43
- data/example/factorial.rb +0 -19
- data/example/hello.rb +0 -5
- data/example/project.rb +0 -11
- data/example/stream.rb +0 -14
- data/lib/nyara/controllers/public_controller.rb +0 -14
- data/lib/nyara/templates/config/session.key +0 -1
- data/tools/bench-cookie.rb +0 -22
- data/tools/foo.rb +0 -9
- data/tools/hello.rb +0 -46
- data/tools/memcheck.rb +0 -33
- data/tools/s.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8488241a4b245171cf578a271e64cde4bcb5e992
|
4
|
+
data.tar.gz: 157848c9c7f726ebc67fbb9f63fb823274ed2312
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfc38bc4139cdae9178f69db59bffc2fa46867bb40864e8c1df13f80ca9a95707795ed2a48c9a4b3cc2c248726571cfbff062d515c2bf113095d5deafc89003f
|
7
|
+
data.tar.gz: 9d40524878b0ca0ba9d1606c9ad4f4336dc51ac042946fc53b04285dfbc8625248629522d1497cd36a1e9d95d4c4e00b8646ce0d84d8e936264bf7ca53a5eecd
|
data/bin/nyara
CHANGED
@@ -6,12 +6,12 @@ task_name = args.shift || 'help'
|
|
6
6
|
|
7
7
|
|
8
8
|
case task_name
|
9
|
-
when 'help'
|
10
|
-
Nyara::Command.help
|
11
|
-
when '-h'
|
9
|
+
when 'help', '-h'
|
12
10
|
Nyara::Command.help
|
13
11
|
when '-v'
|
14
12
|
Nyara::Command.version
|
15
13
|
when 'new'
|
16
14
|
Nyara::Command.new_project(*args)
|
15
|
+
when 's','server'
|
16
|
+
Nyara::Command.run_server(*args)
|
17
17
|
end
|
data/changes
CHANGED
data/ext/event.c
CHANGED
@@ -46,9 +46,14 @@ static Request* curr_request;
|
|
46
46
|
static bool graceful_quit = false;
|
47
47
|
|
48
48
|
static VALUE _fiber_func(VALUE _, VALUE args) {
|
49
|
-
VALUE
|
50
|
-
|
51
|
-
|
49
|
+
static VALUE controller_class = Qnil;
|
50
|
+
static ID id_dispatch;
|
51
|
+
if (controller_class == Qnil) {
|
52
|
+
controller_class = rb_const_get(rb_cModule, rb_intern("Nyara"));
|
53
|
+
controller_class = rb_const_get(controller_class, rb_intern("Controller"));
|
54
|
+
id_dispatch = rb_intern("dispatch");
|
55
|
+
}
|
56
|
+
rb_apply(controller_class, id_dispatch, args);
|
52
57
|
return Qnil;
|
53
58
|
}
|
54
59
|
|
@@ -102,27 +107,16 @@ static void _handle_request(VALUE request) {
|
|
102
107
|
// ensure action
|
103
108
|
if (p->fiber == Qnil) {
|
104
109
|
volatile RouteResult result = nyara_lookup_route(p->method, p->path, p->accept);
|
105
|
-
nyara_summary_request(p->method, p->path, result.controller);
|
106
110
|
if (RTEST(result.controller)) {
|
107
|
-
|
108
|
-
// result.args is on stack, no need to worry gc
|
109
|
-
p->fiber = rb_fiber_new(_fiber_func, result.args);
|
110
|
-
p->instance = RARRAY_PTR(result.args)[RARRAY_LEN(result.args) - 1];
|
111
|
-
p->scope = result.scope;
|
112
|
-
p->format = result.format;
|
113
|
-
p->response_header = rb_class_new_instance(0, NULL, nyara_header_hash_class);
|
114
|
-
p->response_header_extra_lines = rb_ary_new();
|
115
|
-
nyara_request_init_env(request);
|
116
|
-
} else {
|
117
|
-
static const char* not_found = "HTTP/1.1 404 Not Found\r\nConnection: close\r\nContent-Length: 0\r\n\r\n";
|
118
|
-
static long not_found_len = 0;
|
119
|
-
if (!not_found_len) {
|
120
|
-
not_found_len = strlen(not_found);
|
121
|
-
}
|
122
|
-
nyara_send_data(p->fd, not_found, not_found_len);
|
123
|
-
nyara_detach_rid(p->rid);
|
124
|
-
return;
|
111
|
+
p->instance = rb_class_new_instance(1, &(p->self), result.controller);
|
125
112
|
}
|
113
|
+
// result.args is on stack, no need to worry gc
|
114
|
+
p->scope = result.scope;
|
115
|
+
p->format = result.format;
|
116
|
+
p->cookie = rb_class_new_instance(0, NULL, nyara_param_hash_class);
|
117
|
+
p->response_header = rb_class_new_instance(0, NULL, nyara_header_hash_class);
|
118
|
+
p->response_header_extra_lines = rb_ary_new();
|
119
|
+
p->fiber = rb_fiber_new(_fiber_func, rb_ary_new3(3, p->self, p->instance, result.args));
|
126
120
|
}
|
127
121
|
|
128
122
|
_resume_action(p);
|
data/ext/hashes.c
CHANGED
@@ -3,18 +3,19 @@
|
|
3
3
|
#include "nyara.h"
|
4
4
|
#include <ruby/st.h>
|
5
5
|
#include "inc/str_intern.h"
|
6
|
+
#include <ctype.h>
|
6
7
|
|
7
8
|
VALUE nyara_param_hash_class;
|
8
9
|
VALUE nyara_header_hash_class;
|
9
10
|
VALUE nyara_config_hash_class;
|
10
11
|
|
11
12
|
// stolen from hash.c
|
12
|
-
|
13
|
+
static bool nyara_rb_hash_has_key(VALUE hash, VALUE key) {
|
13
14
|
if (!RHASH(hash)->ntbl)
|
14
|
-
return
|
15
|
+
return false;
|
15
16
|
if (st_lookup(RHASH(hash)->ntbl, key, 0))
|
16
|
-
return
|
17
|
-
return
|
17
|
+
return true;
|
18
|
+
return false;
|
18
19
|
}
|
19
20
|
|
20
21
|
// NOTE no need to add lots of methods like HashWithIndifferentAccess
|
@@ -41,6 +42,219 @@ static VALUE param_hash_aset(VALUE self, VALUE key, VALUE value) {
|
|
41
42
|
return rb_hash_aset(self, key, value);
|
42
43
|
}
|
43
44
|
|
45
|
+
// prereq: name should be already url decoded <br>
|
46
|
+
// "a[b][][c]" ==> ["a", "b", "", "c"]
|
47
|
+
static VALUE param_hash_split_name(VALUE _, VALUE name) {
|
48
|
+
Check_Type(name, T_STRING);
|
49
|
+
long len = RSTRING_LEN(name);
|
50
|
+
if (len == 0) {
|
51
|
+
rb_raise(rb_eArgError, "name should not be empty");
|
52
|
+
}
|
53
|
+
char* s = RSTRING_PTR(name);
|
54
|
+
|
55
|
+
// NOTE it's OK to compare utf-8 string with ascii chars, because utf-8 code units are either:
|
56
|
+
// - byte with 0 in highest nibble, which is ascii char
|
57
|
+
// - bytes with 1 in highest nibble, which can not be eql to any ascii char
|
58
|
+
|
59
|
+
volatile VALUE keys = rb_ary_new();
|
60
|
+
long i;
|
61
|
+
for (i = 0; i < len; i++) {
|
62
|
+
if (s[i] == '[') {
|
63
|
+
if (i == 0) {
|
64
|
+
rb_raise(rb_eArgError, "bad name (starts with '[')");
|
65
|
+
}
|
66
|
+
volatile VALUE key = rb_enc_str_new(s, i, u8_encoding);
|
67
|
+
rb_ary_push(keys, key);
|
68
|
+
i++;
|
69
|
+
break;
|
70
|
+
} else if (s[i] == ']') {
|
71
|
+
rb_raise(rb_eArgError, "bad name (unmatched ']')");
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
if (RARRAY_LEN(keys)) {
|
76
|
+
if (s[len - 1] != ']') {
|
77
|
+
rb_raise(rb_eArgError, "bad name (not end with ']')");
|
78
|
+
}
|
79
|
+
long last_j = i;
|
80
|
+
for (long j = last_j; j < len; j++) {
|
81
|
+
if (s[j] == ']') {
|
82
|
+
if (j == len - 1 || s[j + 1] == '[') {
|
83
|
+
volatile VALUE key = rb_enc_str_new(s + last_j, j - last_j, u8_encoding);
|
84
|
+
rb_ary_push(keys, key);
|
85
|
+
last_j = j + 2; // fine for last round
|
86
|
+
j++;
|
87
|
+
} else {
|
88
|
+
rb_raise(rb_eArgError, "bad name (']' not followed by '[')");
|
89
|
+
}
|
90
|
+
} else if (s[j] == '[') {
|
91
|
+
rb_raise(rb_eArgError, "bad name (nested '[')");
|
92
|
+
}
|
93
|
+
}
|
94
|
+
} else {
|
95
|
+
// single key
|
96
|
+
rb_ary_push(keys, name);
|
97
|
+
}
|
98
|
+
return keys;
|
99
|
+
}
|
100
|
+
|
101
|
+
// assume keys = [a, b, c] ==> self[a][b][c] = value
|
102
|
+
// blank keys will be translated as array keys.
|
103
|
+
// created hashes has the same class with output
|
104
|
+
// todo make 2 versions, one for public use
|
105
|
+
static VALUE param_hash_nested_aset(VALUE output, volatile VALUE keys, VALUE value) {
|
106
|
+
Check_Type(keys, T_ARRAY);
|
107
|
+
VALUE* arr = RARRAY_PTR(keys);
|
108
|
+
long len = RARRAY_LEN(keys);
|
109
|
+
if (!len) {
|
110
|
+
rb_raise(rb_eArgError, "aset 0 length key");
|
111
|
+
return Qnil;
|
112
|
+
}
|
113
|
+
volatile VALUE klass = rb_obj_class(output);
|
114
|
+
|
115
|
+
// first key seg
|
116
|
+
long is_hash_key = 1;
|
117
|
+
|
118
|
+
// middle key segs
|
119
|
+
for (long i = 0; i < len - 1; i++) {
|
120
|
+
long next_is_hash_key = RSTRING_LEN(arr[i + 1]);
|
121
|
+
# define NEW_CHILD(child) \
|
122
|
+
volatile VALUE child = (next_is_hash_key ? rb_class_new_instance(0, NULL, klass) : rb_ary_new());
|
123
|
+
|
124
|
+
if (is_hash_key) {
|
125
|
+
if (nyara_rb_hash_has_key(output, arr[i])) {
|
126
|
+
output = rb_hash_aref(output, arr[i]);
|
127
|
+
if (next_is_hash_key) {
|
128
|
+
if (TYPE(output) != T_HASH) {
|
129
|
+
rb_raise(rb_eRuntimeError, "hash key at:%ld conflicts with array", i + 1);
|
130
|
+
}
|
131
|
+
} else {
|
132
|
+
if (TYPE(output) != T_ARRAY) {
|
133
|
+
rb_raise(rb_eRuntimeError, "array key at:%ld conflicts with hash", i + 1);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
} else {
|
137
|
+
NEW_CHILD(child);
|
138
|
+
rb_hash_aset(output, arr[i], child);
|
139
|
+
output = child;
|
140
|
+
}
|
141
|
+
} else {
|
142
|
+
NEW_CHILD(child);
|
143
|
+
rb_ary_push(output, child);
|
144
|
+
output = child;
|
145
|
+
}
|
146
|
+
is_hash_key = next_is_hash_key;
|
147
|
+
# undef NEW_CHILD
|
148
|
+
}
|
149
|
+
|
150
|
+
// terminate key seg: add value
|
151
|
+
if (is_hash_key) {
|
152
|
+
rb_hash_aset(output, arr[len - 1], value);
|
153
|
+
} else {
|
154
|
+
rb_ary_push(output, value);
|
155
|
+
}
|
156
|
+
return output;
|
157
|
+
}
|
158
|
+
|
159
|
+
// s, len is the raw kv string
|
160
|
+
// returns trailing length
|
161
|
+
static void _kv(VALUE output, const char* s, long len, bool nested_mode) {
|
162
|
+
// strip
|
163
|
+
for (; len > 0; len--, s++) {
|
164
|
+
if (!isspace(*s)) {
|
165
|
+
break;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
for (; len > 0; len--) {
|
169
|
+
if (!isspace(s[len - 1])) {
|
170
|
+
break;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
if (len > 0) {
|
174
|
+
volatile VALUE key = rb_enc_str_new("", 0, u8_encoding);
|
175
|
+
volatile VALUE value = rb_enc_str_new("", 0, u8_encoding);
|
176
|
+
nyara_decode_uri_kv(key, value, s, len);
|
177
|
+
if (nested_mode) {
|
178
|
+
volatile VALUE keys = param_hash_split_name(Qnil, key);
|
179
|
+
param_hash_nested_aset(output, keys, value);
|
180
|
+
} else {
|
181
|
+
rb_hash_aset(output, key, value);
|
182
|
+
}
|
183
|
+
}
|
184
|
+
}
|
185
|
+
|
186
|
+
// class method:
|
187
|
+
// insert parsing result into output
|
188
|
+
static VALUE param_hash_parse_cookie(VALUE _, VALUE output, VALUE str) {
|
189
|
+
Check_Type(output, T_HASH);
|
190
|
+
Check_Type(str, T_STRING);
|
191
|
+
if (rb_obj_is_kind_of(output, nyara_header_hash_class)) {
|
192
|
+
rb_raise(rb_eArgError, "can not parse cookie into HeaderHash");
|
193
|
+
}
|
194
|
+
const char* s = RSTRING_PTR(str);
|
195
|
+
long len = RSTRING_LEN(str);
|
196
|
+
|
197
|
+
// split with /[,;]/
|
198
|
+
// scan in reverse order because entries on the left of the cookie has greater priority
|
199
|
+
long i = len - 1;
|
200
|
+
long last_i = i;
|
201
|
+
for (; i >= 0; i--) {
|
202
|
+
if (s[i] == ',' || s[i] == ';') {
|
203
|
+
if (i < last_i) {
|
204
|
+
_kv(output, s + i + 1, last_i - i, false);
|
205
|
+
}
|
206
|
+
last_i = i - 1;
|
207
|
+
}
|
208
|
+
}
|
209
|
+
if (last_i > 0) {
|
210
|
+
_kv(output, s, last_i + 1, false);
|
211
|
+
}
|
212
|
+
return output;
|
213
|
+
}
|
214
|
+
|
215
|
+
// class method:
|
216
|
+
// insert parsing result into output
|
217
|
+
static VALUE param_hash_parse_param(VALUE _, VALUE output, VALUE str) {
|
218
|
+
Check_Type(output, T_HASH);
|
219
|
+
Check_Type(str, T_STRING);
|
220
|
+
if (rb_obj_is_kind_of(output, nyara_header_hash_class)) {
|
221
|
+
rb_raise(rb_eArgError, "can not parse param into HeaderHash");
|
222
|
+
}
|
223
|
+
const char* s = RSTRING_PTR(str);
|
224
|
+
long len = RSTRING_LEN(str);
|
225
|
+
|
226
|
+
// split with /[&;]/
|
227
|
+
long i = 0;
|
228
|
+
long last_i = i;
|
229
|
+
for (; i < len; i++) {
|
230
|
+
if (s[i] == '&' || s[i] == ';') {
|
231
|
+
if (i > last_i) {
|
232
|
+
_kv(output, s + last_i, i - last_i, true);
|
233
|
+
}
|
234
|
+
last_i = i + 1;
|
235
|
+
}
|
236
|
+
}
|
237
|
+
if (i > last_i) {
|
238
|
+
_kv(output, s + last_i, i - last_i, true);
|
239
|
+
}
|
240
|
+
return output;
|
241
|
+
}
|
242
|
+
|
243
|
+
static VALUE _tmp_str;
|
244
|
+
|
245
|
+
static VALUE _parse_query_func(VALUE output) {
|
246
|
+
param_hash_parse_param(Qnil, output, _tmp_str);
|
247
|
+
return Qnil;
|
248
|
+
}
|
249
|
+
|
250
|
+
// do not raise error
|
251
|
+
void nyara_parse_query(VALUE output, const char* s, long len) {
|
252
|
+
volatile VALUE str = rb_str_new(s, len);
|
253
|
+
_tmp_str = str;
|
254
|
+
int err = 0;
|
255
|
+
rb_protect(_parse_query_func, output, &err);
|
256
|
+
}
|
257
|
+
|
44
258
|
void nyara_headerlize(VALUE str) {
|
45
259
|
char* s = (char*)RSTRING_PTR(str);
|
46
260
|
long len = RSTRING_LEN(str);
|
@@ -149,6 +363,10 @@ void Init_hashes(VALUE nyara) {
|
|
149
363
|
rb_define_method(nyara_param_hash_class, "[]", param_hash_aref, 1);
|
150
364
|
rb_define_method(nyara_param_hash_class, "key?", param_hash_key_p, 1);
|
151
365
|
rb_define_method(nyara_param_hash_class, "[]=", param_hash_aset, 2);
|
366
|
+
rb_define_method(nyara_param_hash_class, "nested_aset", param_hash_nested_aset, 2);
|
367
|
+
rb_define_singleton_method(nyara_param_hash_class, "split_name", param_hash_split_name, 1);
|
368
|
+
rb_define_singleton_method(nyara_param_hash_class, "parse_param", param_hash_parse_param, 2);
|
369
|
+
rb_define_singleton_method(nyara_param_hash_class, "parse_cookie", param_hash_parse_cookie, 2);
|
152
370
|
|
153
371
|
rb_define_method(nyara_header_hash_class, "[]", header_hash_aref, 1);
|
154
372
|
rb_define_method(nyara_header_hash_class, "key?", header_hash_key_p, 1);
|
data/ext/inc/rdtsc.h
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#ifndef __RDTSC_H_DEFINED__
|
2
|
+
#define __RDTSC_H_DEFINED__
|
3
|
+
|
4
|
+
|
5
|
+
#if defined(__i386__)
|
6
|
+
|
7
|
+
static __inline__ unsigned long long rdtsc(void)
|
8
|
+
{
|
9
|
+
unsigned long long int x;
|
10
|
+
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
|
11
|
+
return x;
|
12
|
+
}
|
13
|
+
#elif defined(__x86_64__)
|
14
|
+
|
15
|
+
static __inline__ unsigned long long rdtsc(void)
|
16
|
+
{
|
17
|
+
unsigned hi, lo;
|
18
|
+
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi));
|
19
|
+
return ( (unsigned long long)lo)|( ((unsigned long long)hi)<<32 );
|
20
|
+
}
|
21
|
+
|
22
|
+
#elif defined(__powerpc__)
|
23
|
+
|
24
|
+
static __inline__ unsigned long long rdtsc(void)
|
25
|
+
{
|
26
|
+
unsigned long long int result=0;
|
27
|
+
unsigned long int upper, lower,tmp;
|
28
|
+
__asm__ volatile(
|
29
|
+
"0: \n"
|
30
|
+
"\tmftbu %0 \n"
|
31
|
+
"\tmftb %1 \n"
|
32
|
+
"\tmftbu %2 \n"
|
33
|
+
"\tcmpw %2,%0 \n"
|
34
|
+
"\tbne 0b \n"
|
35
|
+
: "=r"(upper),"=r"(lower),"=r"(tmp)
|
36
|
+
);
|
37
|
+
result = upper;
|
38
|
+
result = result<<32;
|
39
|
+
result = result|lower;
|
40
|
+
|
41
|
+
return(result);
|
42
|
+
}
|
43
|
+
|
44
|
+
#else
|
45
|
+
|
46
|
+
#error "No tick counter is available!"
|
47
|
+
|
48
|
+
#endif
|
49
|
+
|
50
|
+
|
51
|
+
/* $RCSfile: $ $Author: kazutomo $
|
52
|
+
* $Revision: 1.6 $ $Date: 2005/04/13 18:49:58 $
|
53
|
+
*/
|
54
|
+
|
55
|
+
#endif
|
56
|
+
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#define HTTP_STATUS_CODES(XX)\
|
2
|
+
XX(100, "Continue");\
|
3
|
+
XX(101, "Switching Protocols");\
|
4
|
+
XX(102, "Processing");\
|
5
|
+
XX(200, "OK");\
|
6
|
+
XX(201, "Created");\
|
7
|
+
XX(202, "Accepted");\
|
8
|
+
XX(203, "Non-Authoritative Information");\
|
9
|
+
XX(204, "No Content");\
|
10
|
+
XX(205, "Reset Content");\
|
11
|
+
XX(206, "Partial Content");\
|
12
|
+
XX(207, "Multi-Status");\
|
13
|
+
XX(208, "Already Reported");\
|
14
|
+
XX(226, "IM Used");\
|
15
|
+
XX(300, "Multiple Choices");\
|
16
|
+
XX(301, "Moved Permanently");\
|
17
|
+
XX(302, "Found");\
|
18
|
+
XX(303, "See Other");\
|
19
|
+
XX(304, "Not Modified");\
|
20
|
+
XX(305, "Use Proxy");\
|
21
|
+
XX(306, "Reserved");\
|
22
|
+
XX(307, "Temporary Redirect");\
|
23
|
+
XX(308, "Permanent Redirect");\
|
24
|
+
XX(400, "Bad Request");\
|
25
|
+
XX(401, "Unauthorized");\
|
26
|
+
XX(402, "Payment Required");\
|
27
|
+
XX(403, "Forbidden");\
|
28
|
+
XX(404, "Not Found");\
|
29
|
+
XX(405, "Method Not Allowed");\
|
30
|
+
XX(406, "Not Acceptable");\
|
31
|
+
XX(407, "Proxy Authentication Required");\
|
32
|
+
XX(408, "Request Timeout");\
|
33
|
+
XX(409, "Conflict");\
|
34
|
+
XX(410, "Gone");\
|
35
|
+
XX(411, "Length Required");\
|
36
|
+
XX(412, "Precondition Failed");\
|
37
|
+
XX(413, "Request Entity Too Large");\
|
38
|
+
XX(414, "Request-URI Too Long");\
|
39
|
+
XX(415, "Unsupported Media Type");\
|
40
|
+
XX(416, "Requested Range Not Satisfiable");\
|
41
|
+
XX(417, "Expectation Failed");\
|
42
|
+
XX(422, "Unprocessable Entity");\
|
43
|
+
XX(423, "Locked");\
|
44
|
+
XX(424, "Failed Dependency");\
|
45
|
+
XX(425, "Unassigned");\
|
46
|
+
XX(426, "Upgrade Required");\
|
47
|
+
XX(427, "Unassigned");\
|
48
|
+
XX(428, "Precondition Required");\
|
49
|
+
XX(429, "Too Many Requests");\
|
50
|
+
XX(430, "Unassigned");\
|
51
|
+
XX(431, "Request Header Fields Too Large");\
|
52
|
+
XX(500, "Internal Server Error");\
|
53
|
+
XX(501, "Not Implemented");\
|
54
|
+
XX(502, "Bad Gateway");\
|
55
|
+
XX(503, "Service Unavailable");\
|
56
|
+
XX(504, "Gateway Timeout");\
|
57
|
+
XX(505, "HTTP Version Not Supported");\
|
58
|
+
XX(506, "Variant Also Negotiates (Experimental)");\
|
59
|
+
XX(507, "Insufficient Storage");\
|
60
|
+
XX(508, "Loop Detected");\
|
61
|
+
XX(509, "Unassigned");\
|
62
|
+
XX(510, "Not Extended");\
|
63
|
+
XX(511, "Network Authentication Required");\
|
64
|
+
// end define
|