engineyard-mongrel 1.1.4
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.
- data/CHANGELOG +16 -0
- data/CONTRIBUTORS +17 -0
- data/COPYING +55 -0
- data/LICENSE +55 -0
- data/Manifest +71 -0
- data/README +74 -0
- data/bin/mongrel_rails +285 -0
- data/examples/builder.rb +29 -0
- data/examples/camping/README +3 -0
- data/examples/camping/blog.rb +294 -0
- data/examples/camping/tepee.rb +149 -0
- data/examples/httpd.conf +474 -0
- data/examples/mime.yaml +3 -0
- data/examples/mongrel.conf +9 -0
- data/examples/mongrel_simple_ctrl.rb +92 -0
- data/examples/mongrel_simple_service.rb +116 -0
- data/examples/monitrc +57 -0
- data/examples/random_thrash.rb +19 -0
- data/examples/simpletest.rb +52 -0
- data/examples/webrick_compare.rb +20 -0
- data/ext/http11/ext_help.h +15 -0
- data/ext/http11/extconf.rb +6 -0
- data/ext/http11/http11.c +527 -0
- data/ext/http11/http11_parser.c +1243 -0
- data/ext/http11/http11_parser.h +49 -0
- data/ext/http11/http11_parser.java.rl +171 -0
- data/ext/http11/http11_parser.rl +152 -0
- data/ext/http11/http11_parser_common.rl +54 -0
- data/ext/http11_java/Http11Service.java +13 -0
- data/ext/http11_java/org/jruby/mongrel/Http11.java +266 -0
- data/ext/http11_java/org/jruby/mongrel/Http11Parser.java +474 -0
- data/lib/mongrel.rb +360 -0
- data/lib/mongrel/camping.rb +107 -0
- data/lib/mongrel/cgi.rb +181 -0
- data/lib/mongrel/command.rb +222 -0
- data/lib/mongrel/configurator.rb +389 -0
- data/lib/mongrel/const.rb +110 -0
- data/lib/mongrel/debug.rb +203 -0
- data/lib/mongrel/gems.rb +22 -0
- data/lib/mongrel/handlers.rb +468 -0
- data/lib/mongrel/header_out.rb +28 -0
- data/lib/mongrel/http_request.rb +155 -0
- data/lib/mongrel/http_response.rb +166 -0
- data/lib/mongrel/init.rb +10 -0
- data/lib/mongrel/mime_types.yml +616 -0
- data/lib/mongrel/rails.rb +214 -0
- data/lib/mongrel/stats.rb +89 -0
- data/lib/mongrel/tcphack.rb +18 -0
- data/lib/mongrel/uri_classifier.rb +76 -0
- data/mongrel-public_cert.pem +20 -0
- data/setup.rb +1585 -0
- data/test/benchmark/previous.rb +11 -0
- data/test/benchmark/simple.rb +11 -0
- data/test/benchmark/utils.rb +82 -0
- data/test/mime.yaml +3 -0
- data/test/mongrel.conf +1 -0
- data/test/test_helper.rb +79 -0
- data/test/tools/trickletest.rb +45 -0
- data/test/unit/test_cgi_wrapper.rb +26 -0
- data/test/unit/test_command.rb +86 -0
- data/test/unit/test_conditional.rb +107 -0
- data/test/unit/test_configurator.rb +88 -0
- data/test/unit/test_debug.rb +25 -0
- data/test/unit/test_handlers.rb +136 -0
- data/test/unit/test_http_parser.rb +156 -0
- data/test/unit/test_redirect_handler.rb +45 -0
- data/test/unit/test_request_progress.rb +100 -0
- data/test/unit/test_response.rb +127 -0
- data/test/unit/test_stats.rb +35 -0
- data/test/unit/test_uriclassifier.rb +261 -0
- data/test/unit/test_ws.rb +116 -0
- metadata +158 -0
@@ -0,0 +1,474 @@
|
|
1
|
+
// line 1 "http11_parser.rl"
|
2
|
+
/**
|
3
|
+
* Copyright (c) 2005 Zed A. Shaw
|
4
|
+
* You can redistribute it and/or modify it under the same terms as Ruby.
|
5
|
+
*/
|
6
|
+
#include "http11_parser.h"
|
7
|
+
#include <stdio.h>
|
8
|
+
#include <assert.h>
|
9
|
+
#include <stdlib.h>
|
10
|
+
#include <ctype.h>
|
11
|
+
#include <string.h>
|
12
|
+
|
13
|
+
/*
|
14
|
+
* capitalizes all lower-case ASCII characters,
|
15
|
+
* converts dashes to underscores.
|
16
|
+
*/
|
17
|
+
static void snake_upcase_char(char *c)
|
18
|
+
{
|
19
|
+
if (*c >= 'a' && *c <= 'z')
|
20
|
+
*c &= ~0x20;
|
21
|
+
else if (*c == '-')
|
22
|
+
*c = '_';
|
23
|
+
}
|
24
|
+
|
25
|
+
#define LEN(AT, FPC) (FPC - buffer - parser->AT)
|
26
|
+
#define MARK(M,FPC) (parser->M = (FPC) - buffer)
|
27
|
+
#define PTR_TO(F) (buffer + parser->F)
|
28
|
+
|
29
|
+
/** Machine **/
|
30
|
+
|
31
|
+
// line 87 "http11_parser.rl"
|
32
|
+
|
33
|
+
|
34
|
+
/** Data **/
|
35
|
+
|
36
|
+
// line 37 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
|
37
|
+
private static byte[] init__http_parser_actions_0()
|
38
|
+
{
|
39
|
+
return new byte [] {
|
40
|
+
0, 1, 0, 1, 2, 1, 3, 1, 4, 1, 5, 1,
|
41
|
+
6, 1, 7, 1, 8, 1, 9, 1, 11, 1, 12, 1,
|
42
|
+
13, 2, 0, 8, 2, 1, 2, 2, 4, 5, 2, 10,
|
43
|
+
7, 2, 12, 7, 3, 9, 10, 7
|
44
|
+
};
|
45
|
+
}
|
46
|
+
|
47
|
+
private static final byte _http_parser_actions[] = init__http_parser_actions_0();
|
48
|
+
|
49
|
+
|
50
|
+
private static short[] init__http_parser_key_offsets_0()
|
51
|
+
{
|
52
|
+
return new short [] {
|
53
|
+
0, 0, 8, 17, 27, 29, 30, 31, 32, 33, 34, 36,
|
54
|
+
39, 41, 44, 45, 61, 62, 78, 80, 81, 90, 99, 105,
|
55
|
+
111, 121, 130, 136, 142, 153, 159, 165, 175, 181, 187, 196,
|
56
|
+
205, 211, 217, 226, 235, 244, 253, 262, 271, 280, 289, 298,
|
57
|
+
307, 316, 325, 334, 343, 352, 361, 370, 379, 380
|
58
|
+
};
|
59
|
+
}
|
60
|
+
|
61
|
+
private static final short _http_parser_key_offsets[] = init__http_parser_key_offsets_0();
|
62
|
+
|
63
|
+
|
64
|
+
private static char[] init__http_parser_trans_keys_0()
|
65
|
+
{
|
66
|
+
return new char [] {
|
67
|
+
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45,
|
68
|
+
46, 48, 57, 65, 90, 42, 43, 47, 58, 45, 57, 65,
|
69
|
+
90, 97, 122, 32, 35, 72, 84, 84, 80, 47, 48, 57,
|
70
|
+
46, 48, 57, 48, 57, 13, 48, 57, 10, 13, 33, 124,
|
71
|
+
126, 35, 39, 42, 43, 45, 46, 48, 57, 65, 90, 94,
|
72
|
+
122, 10, 33, 58, 124, 126, 35, 39, 42, 43, 45, 46,
|
73
|
+
48, 57, 65, 90, 94, 122, 13, 32, 13, 32, 37, 60,
|
74
|
+
62, 127, 0, 31, 34, 35, 32, 37, 60, 62, 127, 0,
|
75
|
+
31, 34, 35, 48, 57, 65, 70, 97, 102, 48, 57, 65,
|
76
|
+
70, 97, 102, 43, 58, 45, 46, 48, 57, 65, 90, 97,
|
77
|
+
122, 32, 34, 35, 37, 60, 62, 127, 0, 31, 48, 57,
|
78
|
+
65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 34,
|
79
|
+
35, 37, 59, 60, 62, 63, 127, 0, 31, 48, 57, 65,
|
80
|
+
70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 34, 35,
|
81
|
+
37, 60, 62, 63, 127, 0, 31, 48, 57, 65, 70, 97,
|
82
|
+
102, 48, 57, 65, 70, 97, 102, 32, 34, 35, 37, 60,
|
83
|
+
62, 127, 0, 31, 32, 34, 35, 37, 60, 62, 127, 0,
|
84
|
+
31, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97,
|
85
|
+
102, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
86
|
+
95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
|
87
|
+
48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
|
88
|
+
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
89
|
+
95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
|
90
|
+
48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
|
91
|
+
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
92
|
+
95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
|
93
|
+
48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
|
94
|
+
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
95
|
+
95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
|
96
|
+
48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
|
97
|
+
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
98
|
+
95, 45, 46, 48, 57, 65, 90, 32, 0
|
99
|
+
};
|
100
|
+
}
|
101
|
+
|
102
|
+
private static final char _http_parser_trans_keys[] = init__http_parser_trans_keys_0();
|
103
|
+
|
104
|
+
|
105
|
+
private static byte[] init__http_parser_single_lengths_0()
|
106
|
+
{
|
107
|
+
return new byte [] {
|
108
|
+
0, 2, 3, 4, 2, 1, 1, 1, 1, 1, 0, 1,
|
109
|
+
0, 1, 1, 4, 1, 4, 2, 1, 5, 5, 0, 0,
|
110
|
+
2, 7, 0, 0, 9, 0, 0, 8, 0, 0, 7, 7,
|
111
|
+
0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
112
|
+
3, 3, 3, 3, 3, 3, 3, 3, 1, 0
|
113
|
+
};
|
114
|
+
}
|
115
|
+
|
116
|
+
private static final byte _http_parser_single_lengths[] = init__http_parser_single_lengths_0();
|
117
|
+
|
118
|
+
|
119
|
+
private static byte[] init__http_parser_range_lengths_0()
|
120
|
+
{
|
121
|
+
return new byte [] {
|
122
|
+
0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1,
|
123
|
+
1, 1, 0, 6, 0, 6, 0, 0, 2, 2, 3, 3,
|
124
|
+
4, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 1,
|
125
|
+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
126
|
+
3, 3, 3, 3, 3, 3, 3, 3, 0, 0
|
127
|
+
};
|
128
|
+
}
|
129
|
+
|
130
|
+
private static final byte _http_parser_range_lengths[] = init__http_parser_range_lengths_0();
|
131
|
+
|
132
|
+
|
133
|
+
private static short[] init__http_parser_index_offsets_0()
|
134
|
+
{
|
135
|
+
return new short [] {
|
136
|
+
0, 0, 6, 13, 21, 24, 26, 28, 30, 32, 34, 36,
|
137
|
+
39, 41, 44, 46, 57, 59, 70, 73, 75, 83, 91, 95,
|
138
|
+
99, 106, 115, 119, 123, 134, 138, 142, 152, 156, 160, 169,
|
139
|
+
178, 182, 186, 193, 200, 207, 214, 221, 228, 235, 242, 249,
|
140
|
+
256, 263, 270, 277, 284, 291, 298, 305, 312, 314
|
141
|
+
};
|
142
|
+
}
|
143
|
+
|
144
|
+
private static final short _http_parser_index_offsets[] = init__http_parser_index_offsets_0();
|
145
|
+
|
146
|
+
|
147
|
+
private static byte[] init__http_parser_indicies_0()
|
148
|
+
{
|
149
|
+
return new byte [] {
|
150
|
+
0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3,
|
151
|
+
1, 4, 5, 6, 7, 5, 5, 5, 1, 8, 9, 1,
|
152
|
+
10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1,
|
153
|
+
16, 15, 1, 17, 1, 18, 17, 1, 19, 1, 20, 21,
|
154
|
+
21, 21, 21, 21, 21, 21, 21, 21, 1, 22, 1, 23,
|
155
|
+
24, 23, 23, 23, 23, 23, 23, 23, 23, 1, 26, 27,
|
156
|
+
25, 29, 28, 30, 32, 1, 1, 1, 1, 1, 31, 33,
|
157
|
+
35, 1, 1, 1, 1, 1, 34, 36, 36, 36, 1, 34,
|
158
|
+
34, 34, 1, 37, 38, 37, 37, 37, 37, 1, 8, 1,
|
159
|
+
9, 39, 1, 1, 1, 1, 38, 40, 40, 40, 1, 38,
|
160
|
+
38, 38, 1, 41, 1, 43, 44, 45, 1, 1, 46, 1,
|
161
|
+
1, 42, 47, 47, 47, 1, 42, 42, 42, 1, 8, 1,
|
162
|
+
9, 49, 1, 1, 50, 1, 1, 48, 51, 51, 51, 1,
|
163
|
+
48, 48, 48, 1, 52, 1, 54, 55, 1, 1, 1, 1,
|
164
|
+
53, 56, 1, 58, 59, 1, 1, 1, 1, 57, 60, 60,
|
165
|
+
60, 1, 57, 57, 57, 1, 2, 61, 61, 61, 61, 61,
|
166
|
+
1, 2, 62, 62, 62, 62, 62, 1, 2, 63, 63, 63,
|
167
|
+
63, 63, 1, 2, 64, 64, 64, 64, 64, 1, 2, 65,
|
168
|
+
65, 65, 65, 65, 1, 2, 66, 66, 66, 66, 66, 1,
|
169
|
+
2, 67, 67, 67, 67, 67, 1, 2, 68, 68, 68, 68,
|
170
|
+
68, 1, 2, 69, 69, 69, 69, 69, 1, 2, 70, 70,
|
171
|
+
70, 70, 70, 1, 2, 71, 71, 71, 71, 71, 1, 2,
|
172
|
+
72, 72, 72, 72, 72, 1, 2, 73, 73, 73, 73, 73,
|
173
|
+
1, 2, 74, 74, 74, 74, 74, 1, 2, 75, 75, 75,
|
174
|
+
75, 75, 1, 2, 76, 76, 76, 76, 76, 1, 2, 77,
|
175
|
+
77, 77, 77, 77, 1, 2, 78, 78, 78, 78, 78, 1,
|
176
|
+
2, 1, 1, 0
|
177
|
+
};
|
178
|
+
}
|
179
|
+
|
180
|
+
private static final byte _http_parser_indicies[] = init__http_parser_indicies_0();
|
181
|
+
|
182
|
+
|
183
|
+
private static byte[] init__http_parser_trans_targs_wi_0()
|
184
|
+
{
|
185
|
+
return new byte [] {
|
186
|
+
2, 0, 3, 38, 4, 24, 28, 25, 5, 20, 6, 7,
|
187
|
+
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 57, 17,
|
188
|
+
18, 19, 14, 18, 19, 14, 5, 21, 22, 5, 21, 22,
|
189
|
+
23, 24, 25, 26, 27, 5, 28, 20, 29, 31, 34, 30,
|
190
|
+
31, 32, 34, 33, 5, 35, 20, 36, 5, 35, 20, 36,
|
191
|
+
37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
|
192
|
+
50, 51, 52, 53, 54, 55, 56
|
193
|
+
};
|
194
|
+
}
|
195
|
+
|
196
|
+
private static final byte _http_parser_trans_targs_wi[] = init__http_parser_trans_targs_wi_0();
|
197
|
+
|
198
|
+
|
199
|
+
private static byte[] init__http_parser_trans_actions_wi_0()
|
200
|
+
{
|
201
|
+
return new byte [] {
|
202
|
+
1, 0, 11, 0, 1, 1, 1, 1, 13, 13, 1, 0,
|
203
|
+
0, 0, 0, 0, 0, 0, 19, 0, 0, 28, 23, 3,
|
204
|
+
5, 7, 31, 7, 0, 9, 25, 1, 1, 15, 0, 0,
|
205
|
+
0, 0, 0, 0, 0, 37, 0, 37, 0, 21, 21, 0,
|
206
|
+
0, 0, 0, 0, 40, 17, 40, 17, 34, 0, 34, 0,
|
207
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
208
|
+
0, 0, 0, 0, 0, 0, 0
|
209
|
+
};
|
210
|
+
}
|
211
|
+
|
212
|
+
private static final byte _http_parser_trans_actions_wi[] = init__http_parser_trans_actions_wi_0();
|
213
|
+
|
214
|
+
|
215
|
+
static final int http_parser_start = 1;
|
216
|
+
static final int http_parser_first_final = 57;
|
217
|
+
static final int http_parser_error = 0;
|
218
|
+
|
219
|
+
static final int http_parser_en_main = 1;
|
220
|
+
|
221
|
+
// line 91 "http11_parser.rl"
|
222
|
+
|
223
|
+
int http_parser_init(http_parser *parser) {
|
224
|
+
int cs = 0;
|
225
|
+
|
226
|
+
// line 227 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
|
227
|
+
{
|
228
|
+
cs = http_parser_start;
|
229
|
+
}
|
230
|
+
// line 95 "http11_parser.rl"
|
231
|
+
parser->cs = cs;
|
232
|
+
parser->body_start = 0;
|
233
|
+
parser->content_len = 0;
|
234
|
+
parser->mark = 0;
|
235
|
+
parser->nread = 0;
|
236
|
+
parser->field_len = 0;
|
237
|
+
parser->field_start = 0;
|
238
|
+
|
239
|
+
return(1);
|
240
|
+
}
|
241
|
+
|
242
|
+
|
243
|
+
/** exec **/
|
244
|
+
size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off) {
|
245
|
+
const char *p, *pe;
|
246
|
+
int cs = parser->cs;
|
247
|
+
|
248
|
+
assert(off <= len && "offset past end of buffer");
|
249
|
+
|
250
|
+
p = buffer+off;
|
251
|
+
pe = buffer+len;
|
252
|
+
|
253
|
+
/* assert(*pe == '\0' && "pointer does not end on NUL"); */
|
254
|
+
assert(pe - p == len - off && "pointers aren't same distance");
|
255
|
+
|
256
|
+
|
257
|
+
|
258
|
+
// line 259 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
|
259
|
+
{
|
260
|
+
int _klen;
|
261
|
+
int _trans = 0;
|
262
|
+
int _acts;
|
263
|
+
int _nacts;
|
264
|
+
int _keys;
|
265
|
+
int _goto_targ = 0;
|
266
|
+
|
267
|
+
_goto: while (true) {
|
268
|
+
switch ( _goto_targ ) {
|
269
|
+
case 0:
|
270
|
+
if ( p == pe ) {
|
271
|
+
_goto_targ = 4;
|
272
|
+
continue _goto;
|
273
|
+
}
|
274
|
+
if ( cs == 0 ) {
|
275
|
+
_goto_targ = 5;
|
276
|
+
continue _goto;
|
277
|
+
}
|
278
|
+
case 1:
|
279
|
+
_match: do {
|
280
|
+
_keys = _http_parser_key_offsets[cs];
|
281
|
+
_trans = _http_parser_index_offsets[cs];
|
282
|
+
_klen = _http_parser_single_lengths[cs];
|
283
|
+
if ( _klen > 0 ) {
|
284
|
+
int _lower = _keys;
|
285
|
+
int _mid;
|
286
|
+
int _upper = _keys + _klen - 1;
|
287
|
+
while (true) {
|
288
|
+
if ( _upper < _lower )
|
289
|
+
break;
|
290
|
+
|
291
|
+
_mid = _lower + ((_upper-_lower) >> 1);
|
292
|
+
if ( data[p] < _http_parser_trans_keys[_mid] )
|
293
|
+
_upper = _mid - 1;
|
294
|
+
else if ( data[p] > _http_parser_trans_keys[_mid] )
|
295
|
+
_lower = _mid + 1;
|
296
|
+
else {
|
297
|
+
_trans += (_mid - _keys);
|
298
|
+
break _match;
|
299
|
+
}
|
300
|
+
}
|
301
|
+
_keys += _klen;
|
302
|
+
_trans += _klen;
|
303
|
+
}
|
304
|
+
|
305
|
+
_klen = _http_parser_range_lengths[cs];
|
306
|
+
if ( _klen > 0 ) {
|
307
|
+
int _lower = _keys;
|
308
|
+
int _mid;
|
309
|
+
int _upper = _keys + (_klen<<1) - 2;
|
310
|
+
while (true) {
|
311
|
+
if ( _upper < _lower )
|
312
|
+
break;
|
313
|
+
|
314
|
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
|
315
|
+
if ( data[p] < _http_parser_trans_keys[_mid] )
|
316
|
+
_upper = _mid - 2;
|
317
|
+
else if ( data[p] > _http_parser_trans_keys[_mid+1] )
|
318
|
+
_lower = _mid + 2;
|
319
|
+
else {
|
320
|
+
_trans += ((_mid - _keys)>>1);
|
321
|
+
break _match;
|
322
|
+
}
|
323
|
+
}
|
324
|
+
_trans += _klen;
|
325
|
+
}
|
326
|
+
} while (false);
|
327
|
+
|
328
|
+
_trans = _http_parser_indicies[_trans];
|
329
|
+
cs = _http_parser_trans_targs_wi[_trans];
|
330
|
+
|
331
|
+
if ( _http_parser_trans_actions_wi[_trans] != 0 ) {
|
332
|
+
_acts = _http_parser_trans_actions_wi[_trans];
|
333
|
+
_nacts = (int) _http_parser_actions[_acts++];
|
334
|
+
while ( _nacts-- > 0 )
|
335
|
+
{
|
336
|
+
switch ( _http_parser_actions[_acts++] )
|
337
|
+
{
|
338
|
+
case 0:
|
339
|
+
// line 34 "http11_parser.rl"
|
340
|
+
{MARK(mark, p); }
|
341
|
+
break;
|
342
|
+
case 1:
|
343
|
+
// line 37 "http11_parser.rl"
|
344
|
+
{ MARK(field_start, p); }
|
345
|
+
break;
|
346
|
+
case 2:
|
347
|
+
// line 38 "http11_parser.rl"
|
348
|
+
{ snake_upcase_char((char *)p); }
|
349
|
+
break;
|
350
|
+
case 3:
|
351
|
+
// line 39 "http11_parser.rl"
|
352
|
+
{
|
353
|
+
parser->field_len = LEN(field_start, p);
|
354
|
+
}
|
355
|
+
break;
|
356
|
+
case 4:
|
357
|
+
// line 43 "http11_parser.rl"
|
358
|
+
{ MARK(mark, p); }
|
359
|
+
break;
|
360
|
+
case 5:
|
361
|
+
// line 44 "http11_parser.rl"
|
362
|
+
{
|
363
|
+
if(parser->http_field != NULL) {
|
364
|
+
parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
|
365
|
+
}
|
366
|
+
}
|
367
|
+
break;
|
368
|
+
case 6:
|
369
|
+
// line 49 "http11_parser.rl"
|
370
|
+
{
|
371
|
+
if(parser->request_method != NULL)
|
372
|
+
parser->request_method(parser->data, PTR_TO(mark), LEN(mark, p));
|
373
|
+
}
|
374
|
+
break;
|
375
|
+
case 7:
|
376
|
+
// line 53 "http11_parser.rl"
|
377
|
+
{
|
378
|
+
if(parser->request_uri != NULL)
|
379
|
+
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
|
380
|
+
}
|
381
|
+
break;
|
382
|
+
case 8:
|
383
|
+
// line 57 "http11_parser.rl"
|
384
|
+
{
|
385
|
+
if(parser->fragment != NULL)
|
386
|
+
parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p));
|
387
|
+
}
|
388
|
+
break;
|
389
|
+
case 9:
|
390
|
+
// line 62 "http11_parser.rl"
|
391
|
+
{MARK(query_start, p); }
|
392
|
+
break;
|
393
|
+
case 10:
|
394
|
+
// line 63 "http11_parser.rl"
|
395
|
+
{
|
396
|
+
if(parser->query_string != NULL)
|
397
|
+
parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
|
398
|
+
}
|
399
|
+
break;
|
400
|
+
case 11:
|
401
|
+
// line 68 "http11_parser.rl"
|
402
|
+
{
|
403
|
+
if(parser->http_version != NULL)
|
404
|
+
parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p));
|
405
|
+
}
|
406
|
+
break;
|
407
|
+
case 12:
|
408
|
+
// line 73 "http11_parser.rl"
|
409
|
+
{
|
410
|
+
if(parser->request_path != NULL)
|
411
|
+
parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
|
412
|
+
}
|
413
|
+
break;
|
414
|
+
case 13:
|
415
|
+
// line 78 "http11_parser.rl"
|
416
|
+
{
|
417
|
+
parser->body_start = p - buffer + 1;
|
418
|
+
if(parser->header_done != NULL)
|
419
|
+
parser->header_done(parser->data, p + 1, pe - p - 1);
|
420
|
+
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
421
|
+
}
|
422
|
+
break;
|
423
|
+
// line 424 "../../ext/http11_java/org/jruby/mongrel/Http11Parser.java"
|
424
|
+
}
|
425
|
+
}
|
426
|
+
}
|
427
|
+
|
428
|
+
case 2:
|
429
|
+
if ( cs == 0 ) {
|
430
|
+
_goto_targ = 5;
|
431
|
+
continue _goto;
|
432
|
+
}
|
433
|
+
if ( ++p != pe ) {
|
434
|
+
_goto_targ = 1;
|
435
|
+
continue _goto;
|
436
|
+
}
|
437
|
+
case 4:
|
438
|
+
case 5:
|
439
|
+
}
|
440
|
+
break; }
|
441
|
+
}
|
442
|
+
// line 122 "http11_parser.rl"
|
443
|
+
|
444
|
+
parser->cs = cs;
|
445
|
+
parser->nread += p - (buffer + off);
|
446
|
+
|
447
|
+
assert(p <= pe && "buffer overflow after parsing execute");
|
448
|
+
assert(parser->nread <= len && "nread longer than length");
|
449
|
+
assert(parser->body_start <= len && "body starts after buffer end");
|
450
|
+
assert(parser->mark < len && "mark is after buffer end");
|
451
|
+
assert(parser->field_len <= len && "field has length longer than whole buffer");
|
452
|
+
assert(parser->field_start < len && "field starts after buffer end");
|
453
|
+
|
454
|
+
return(parser->nread);
|
455
|
+
}
|
456
|
+
|
457
|
+
int http_parser_finish(http_parser *parser)
|
458
|
+
{
|
459
|
+
if (http_parser_has_error(parser) ) {
|
460
|
+
return -1;
|
461
|
+
} else if (http_parser_is_finished(parser) ) {
|
462
|
+
return 1;
|
463
|
+
} else {
|
464
|
+
return 0;
|
465
|
+
}
|
466
|
+
}
|
467
|
+
|
468
|
+
int http_parser_has_error(http_parser *parser) {
|
469
|
+
return parser->cs == http_parser_error;
|
470
|
+
}
|
471
|
+
|
472
|
+
int http_parser_is_finished(http_parser *parser) {
|
473
|
+
return parser->cs >= http_parser_first_final;
|
474
|
+
}
|