ebb 0.0.1
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/README +119 -0
- data/VERSION +1 -0
- data/benchmark/application.rb +84 -0
- data/benchmark/bench_results.rb +45 -0
- data/benchmark/server_test.rb +152 -0
- data/benchmark/test.rb +141 -0
- data/bin/ebb_rails +88 -0
- data/libev/ev.c +2440 -0
- data/libev/ev.h +551 -0
- data/libev/ev_epoll.c +174 -0
- data/libev/ev_kqueue.c +186 -0
- data/libev/ev_poll.c +127 -0
- data/libev/ev_port.c +155 -0
- data/libev/ev_select.c +236 -0
- data/libev/ev_vars.h +108 -0
- data/libev/ev_win32.c +117 -0
- data/libev/ev_wrap.h +132 -0
- data/ruby_lib/daemonizable.rb +134 -0
- data/ruby_lib/ebb.rb +179 -0
- data/ruby_lib/rack/adapter/rails.rb +152 -0
- data/src/ebb.c +709 -0
- data/src/ebb.h +102 -0
- data/src/ebb_ruby.c +256 -0
- data/src/extconf.rb +44 -0
- data/src/parser.c +1584 -0
- data/src/parser.h +50 -0
- metadata +80 -0
data/src/ebb.h
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
/* Ebb Web Server
|
2
|
+
* Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
|
3
|
+
* This software is released under the "MIT License". See README file for details.
|
4
|
+
*/
|
5
|
+
#ifndef ebb_h
|
6
|
+
#define ebb_h
|
7
|
+
|
8
|
+
#include <sys/socket.h>
|
9
|
+
#include <netinet/in.h>
|
10
|
+
#include <glib.h>
|
11
|
+
|
12
|
+
#define EV_STANDALONE 1
|
13
|
+
#include <ev.h>
|
14
|
+
|
15
|
+
#include "parser.h"
|
16
|
+
|
17
|
+
|
18
|
+
typedef struct ebb_server ebb_server;
|
19
|
+
typedef struct ebb_client ebb_client;
|
20
|
+
|
21
|
+
#define EBB_BUFFERSIZE (40*1024)
|
22
|
+
#define EBB_MAX_CLIENTS 950
|
23
|
+
#define EBB_TIMEOUT 30.0
|
24
|
+
#define EBB_MAX_ENV 100
|
25
|
+
#define EBB_TCP_COMMON \
|
26
|
+
unsigned open : 1; \
|
27
|
+
int fd; \
|
28
|
+
struct sockaddr_in sockaddr;
|
29
|
+
|
30
|
+
/*** Ebb Client ***/
|
31
|
+
void ebb_client_close(ebb_client*);
|
32
|
+
int ebb_client_read(ebb_client *client, char *buffer, int length);
|
33
|
+
void ebb_client_write(ebb_client*, const char *data, int length);
|
34
|
+
void ebb_client_finished( ebb_client *client);
|
35
|
+
|
36
|
+
enum { EBB_REQUEST_METHOD
|
37
|
+
, EBB_REQUEST_URI
|
38
|
+
, EBB_FRAGMENT
|
39
|
+
, EBB_REQUEST_PATH
|
40
|
+
, EBB_QUERY_STRING
|
41
|
+
, EBB_HTTP_VERSION
|
42
|
+
, EBB_SERVER_NAME
|
43
|
+
, EBB_SERVER_PORT
|
44
|
+
, EBB_CONTENT_LENGTH
|
45
|
+
};
|
46
|
+
|
47
|
+
struct ebb_client {
|
48
|
+
EBB_TCP_COMMON
|
49
|
+
|
50
|
+
ebb_server *server;
|
51
|
+
http_parser parser;
|
52
|
+
|
53
|
+
char request_buffer[EBB_BUFFERSIZE];
|
54
|
+
ev_io read_watcher;
|
55
|
+
size_t read, nread_from_body;
|
56
|
+
|
57
|
+
char upload_file_filename[200];
|
58
|
+
FILE *upload_file;
|
59
|
+
|
60
|
+
int content_length;
|
61
|
+
|
62
|
+
ev_io write_watcher;
|
63
|
+
GString *response_buffer;
|
64
|
+
size_t written;
|
65
|
+
|
66
|
+
ev_timer timeout_watcher;
|
67
|
+
|
68
|
+
/* the ENV structure */
|
69
|
+
int env_size;
|
70
|
+
const char *env_fields[EBB_MAX_ENV];
|
71
|
+
int env_field_lengths[EBB_MAX_ENV];
|
72
|
+
const char *env_values[EBB_MAX_ENV];
|
73
|
+
int env_value_lengths[EBB_MAX_ENV];
|
74
|
+
};
|
75
|
+
|
76
|
+
/*** Ebb Server ***/
|
77
|
+
|
78
|
+
typedef void (*ebb_request_cb)(ebb_client*, void*);
|
79
|
+
|
80
|
+
ebb_server* ebb_server_alloc();
|
81
|
+
void ebb_server_free(ebb_server*);
|
82
|
+
void ebb_server_init( ebb_server *server
|
83
|
+
, struct ev_loop *loop
|
84
|
+
, ebb_request_cb request_cb
|
85
|
+
, void *request_cb_data
|
86
|
+
);
|
87
|
+
int ebb_server_listen_on_port(ebb_server*, const int port);
|
88
|
+
int ebb_server_listen_on_socket(ebb_server*, const char *socketpath);
|
89
|
+
void ebb_server_unlisten(ebb_server*);
|
90
|
+
|
91
|
+
struct ebb_server {
|
92
|
+
EBB_TCP_COMMON
|
93
|
+
char *port;
|
94
|
+
char *socketpath;
|
95
|
+
ev_io request_watcher;
|
96
|
+
ebb_client clients[EBB_MAX_CLIENTS];
|
97
|
+
struct ev_loop *loop;
|
98
|
+
void *request_cb_data;
|
99
|
+
ebb_request_cb request_cb;
|
100
|
+
};
|
101
|
+
|
102
|
+
#endif
|
data/src/ebb_ruby.c
ADDED
@@ -0,0 +1,256 @@
|
|
1
|
+
/* A ruby binding to the ebb web server
|
2
|
+
* Copyright (c) 2007 Ry Dahl <ry.d4hl@gmail.com>
|
3
|
+
* This software is released under the "MIT License". See README file for details.
|
4
|
+
*/
|
5
|
+
|
6
|
+
#include <ruby.h>
|
7
|
+
#include <assert.h>
|
8
|
+
#include <fcntl.h>
|
9
|
+
#include <ebb.h>
|
10
|
+
#include <ev.h>
|
11
|
+
|
12
|
+
static VALUE cServer;
|
13
|
+
static VALUE cClient;
|
14
|
+
|
15
|
+
static VALUE global_http_prefix;
|
16
|
+
static VALUE global_request_method;
|
17
|
+
static VALUE global_request_uri;
|
18
|
+
static VALUE global_fragment;
|
19
|
+
static VALUE global_request_path;
|
20
|
+
static VALUE global_query_string;
|
21
|
+
static VALUE global_http_version;
|
22
|
+
static VALUE global_request_body;
|
23
|
+
static VALUE global_server_name;
|
24
|
+
static VALUE global_server_port;
|
25
|
+
static VALUE global_path_info;
|
26
|
+
static VALUE global_content_length;
|
27
|
+
static VALUE global_http_host;
|
28
|
+
|
29
|
+
|
30
|
+
/* Variables with an underscore are C-level variables */
|
31
|
+
|
32
|
+
VALUE env_field(const char *field, int length)
|
33
|
+
{
|
34
|
+
VALUE f;
|
35
|
+
char *ch, *end;
|
36
|
+
|
37
|
+
if(field == NULL) {
|
38
|
+
switch(length) {
|
39
|
+
case EBB_REQUEST_METHOD: return global_request_method;
|
40
|
+
case EBB_REQUEST_URI: return global_request_uri;
|
41
|
+
case EBB_FRAGMENT: return global_fragment;
|
42
|
+
case EBB_REQUEST_PATH: return global_request_path;
|
43
|
+
case EBB_QUERY_STRING: return global_query_string;
|
44
|
+
case EBB_HTTP_VERSION: return global_http_version;
|
45
|
+
case EBB_SERVER_NAME: return global_server_name;
|
46
|
+
case EBB_SERVER_PORT: return global_server_port;
|
47
|
+
case EBB_CONTENT_LENGTH: return global_content_length;
|
48
|
+
default: assert(FALSE); /* unknown const */
|
49
|
+
}
|
50
|
+
} else {
|
51
|
+
f = rb_str_dup(global_http_prefix);
|
52
|
+
f = rb_str_buf_cat(f, field, length);
|
53
|
+
|
54
|
+
for(ch = RSTRING_PTR(f), end = ch + RSTRING_LEN(f); ch < end; ch++) {
|
55
|
+
if(*ch == '-') {
|
56
|
+
*ch = '_';
|
57
|
+
} else {
|
58
|
+
*ch = toupper(*ch);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
return f;
|
62
|
+
}
|
63
|
+
assert(FALSE);
|
64
|
+
return Qnil;
|
65
|
+
}
|
66
|
+
|
67
|
+
VALUE client_new(ebb_client *_client)
|
68
|
+
{
|
69
|
+
VALUE client = Data_Wrap_Struct(cClient, 0, 0, _client);
|
70
|
+
// rb_iv_set(client, "@content_length", INT2FIX(_client->content_length));
|
71
|
+
return client;
|
72
|
+
}
|
73
|
+
|
74
|
+
void request_cb(ebb_client *_client, void *data)
|
75
|
+
{
|
76
|
+
VALUE server = (VALUE)data;
|
77
|
+
VALUE waiting_clients;
|
78
|
+
VALUE client = client_new(_client);
|
79
|
+
|
80
|
+
waiting_clients = rb_iv_get(server, "@waiting_clients");
|
81
|
+
rb_ary_push(waiting_clients, client);
|
82
|
+
}
|
83
|
+
|
84
|
+
VALUE server_alloc(VALUE self)
|
85
|
+
{
|
86
|
+
ebb_server *_server = ebb_server_alloc();
|
87
|
+
VALUE server = Qnil;
|
88
|
+
server = Data_Wrap_Struct(cServer, 0, ebb_server_free, _server);
|
89
|
+
return server;
|
90
|
+
}
|
91
|
+
|
92
|
+
|
93
|
+
VALUE server_initialize(VALUE x, VALUE server)
|
94
|
+
{
|
95
|
+
struct ev_loop *loop = ev_default_loop (0);
|
96
|
+
ebb_server *_server;
|
97
|
+
|
98
|
+
Data_Get_Struct(server, ebb_server, _server);
|
99
|
+
ebb_server_init(_server, loop, request_cb, (void*)server);
|
100
|
+
return Qnil;
|
101
|
+
}
|
102
|
+
|
103
|
+
|
104
|
+
VALUE server_listen_on_port(VALUE x, VALUE server, VALUE port)
|
105
|
+
{
|
106
|
+
ebb_server *_server;
|
107
|
+
Data_Get_Struct(server, ebb_server, _server);
|
108
|
+
int r = ebb_server_listen_on_port(_server, FIX2INT(port));
|
109
|
+
return r < 0 ? Qfalse : Qtrue;
|
110
|
+
}
|
111
|
+
|
112
|
+
|
113
|
+
VALUE server_listen_on_socket(VALUE x, VALUE server, VALUE socketpath)
|
114
|
+
{
|
115
|
+
ebb_server *_server;
|
116
|
+
Data_Get_Struct(server, ebb_server, _server);
|
117
|
+
int r = ebb_server_listen_on_socket(_server, StringValuePtr(socketpath));
|
118
|
+
return r < 0 ? Qfalse : Qtrue;
|
119
|
+
}
|
120
|
+
|
121
|
+
|
122
|
+
static void
|
123
|
+
oneshot_timeout (struct ev_loop *loop, struct ev_timer *w, int revents) {;}
|
124
|
+
|
125
|
+
|
126
|
+
VALUE server_process_connections(VALUE x, VALUE server)
|
127
|
+
{
|
128
|
+
ebb_server *_server;
|
129
|
+
VALUE host, port;
|
130
|
+
|
131
|
+
Data_Get_Struct(server, ebb_server, _server);
|
132
|
+
|
133
|
+
ev_timer timeout;
|
134
|
+
ev_timer_init (&timeout, oneshot_timeout, 0.5, 0.);
|
135
|
+
ev_timer_start (_server->loop, &timeout);
|
136
|
+
|
137
|
+
ev_loop(_server->loop, EVLOOP_ONESHOT);
|
138
|
+
/* XXX: Need way to know when the loop is finished...
|
139
|
+
* should return true or false */
|
140
|
+
|
141
|
+
ev_timer_stop(_server->loop, &timeout);
|
142
|
+
|
143
|
+
if(_server->open)
|
144
|
+
return Qtrue;
|
145
|
+
else
|
146
|
+
return Qfalse;
|
147
|
+
}
|
148
|
+
|
149
|
+
VALUE server_unlisten(VALUE x, VALUE server)
|
150
|
+
{
|
151
|
+
ebb_server *_server;
|
152
|
+
Data_Get_Struct(server, ebb_server, _server);
|
153
|
+
ebb_server_unlisten(_server);
|
154
|
+
return Qnil;
|
155
|
+
}
|
156
|
+
|
157
|
+
|
158
|
+
VALUE client_env(VALUE x, VALUE client)
|
159
|
+
{
|
160
|
+
ebb_client *_client;
|
161
|
+
VALUE hash = rb_hash_new();
|
162
|
+
int i;
|
163
|
+
Data_Get_Struct(client, ebb_client, _client);
|
164
|
+
/* This client->env_fields, client->env_value structure is pretty hacky
|
165
|
+
* and a bit hard to follow. Look at the #defines at the top of ebb.c to
|
166
|
+
* see what they are doing. Basically it's a list of (ptr,length) pairs
|
167
|
+
* for both a field and value
|
168
|
+
*/
|
169
|
+
for(i=0; i < _client->env_size; i++) {
|
170
|
+
rb_hash_aset(hash, env_field(_client->env_fields[i], _client->env_field_lengths[i])
|
171
|
+
, rb_str_new(_client->env_values[i], _client->env_value_lengths[i])
|
172
|
+
);
|
173
|
+
}
|
174
|
+
rb_hash_aset(hash, global_path_info, rb_hash_aref(hash, global_request_path));
|
175
|
+
return hash;
|
176
|
+
}
|
177
|
+
|
178
|
+
|
179
|
+
VALUE client_read_input(VALUE x, VALUE client, VALUE size)
|
180
|
+
{
|
181
|
+
ebb_client *_client;
|
182
|
+
GString *_string;
|
183
|
+
VALUE string;
|
184
|
+
int _size = FIX2INT(size);
|
185
|
+
Data_Get_Struct(client, ebb_client, _client);
|
186
|
+
|
187
|
+
string = rb_str_buf_new( _size );
|
188
|
+
int nread = ebb_client_read(_client, RSTRING_PTR(string), _size);
|
189
|
+
#if RUBY_VERSION_CODE < 190
|
190
|
+
RSTRING(string)->len = nread;
|
191
|
+
#else
|
192
|
+
rb_str_set_len(string, nread);
|
193
|
+
#endif
|
194
|
+
|
195
|
+
if(nread < 0)
|
196
|
+
rb_raise(rb_eRuntimeError,"There was a problem reading from input (bad tmp file?)");
|
197
|
+
if(nread == 0)
|
198
|
+
return Qnil;
|
199
|
+
return string;
|
200
|
+
}
|
201
|
+
|
202
|
+
|
203
|
+
VALUE client_write(VALUE x, VALUE client, VALUE string)
|
204
|
+
{
|
205
|
+
ebb_client *_client;
|
206
|
+
Data_Get_Struct(client, ebb_client, _client);
|
207
|
+
ebb_client_write(_client, RSTRING_PTR(string), RSTRING_LEN(string));
|
208
|
+
return Qnil;
|
209
|
+
}
|
210
|
+
|
211
|
+
|
212
|
+
VALUE client_finished(VALUE x, VALUE client)
|
213
|
+
{
|
214
|
+
ebb_client *_client;
|
215
|
+
Data_Get_Struct(client, ebb_client, _client);
|
216
|
+
ebb_client_finished(_client);
|
217
|
+
return Qnil;
|
218
|
+
}
|
219
|
+
|
220
|
+
|
221
|
+
void Init_ebb_ext()
|
222
|
+
{
|
223
|
+
VALUE mEbb = rb_define_module("Ebb");
|
224
|
+
VALUE mFFI = rb_define_module_under(mEbb, "FFI");
|
225
|
+
|
226
|
+
/** Defines global strings in the init method. */
|
227
|
+
#define DEF_GLOBAL(N, val) global_##N = rb_obj_freeze(rb_str_new2(val)); rb_global_variable(&global_##N)
|
228
|
+
DEF_GLOBAL(http_prefix, "HTTP_");
|
229
|
+
DEF_GLOBAL(request_method, "REQUEST_METHOD");
|
230
|
+
DEF_GLOBAL(request_uri, "REQUEST_URI");
|
231
|
+
DEF_GLOBAL(fragment, "FRAGMENT");
|
232
|
+
DEF_GLOBAL(request_path, "REQUEST_PATH");
|
233
|
+
DEF_GLOBAL(query_string, "QUERY_STRING");
|
234
|
+
DEF_GLOBAL(http_version, "HTTP_VERSION");
|
235
|
+
DEF_GLOBAL(request_body, "REQUEST_BODY");
|
236
|
+
DEF_GLOBAL(server_name, "SERVER_NAME");
|
237
|
+
DEF_GLOBAL(server_port, "SERVER_PORT");
|
238
|
+
DEF_GLOBAL(path_info, "PATH_INFO");
|
239
|
+
DEF_GLOBAL(content_length, "CONTENT_LENGTH");
|
240
|
+
DEF_GLOBAL(http_host, "HTTP_HOST");
|
241
|
+
|
242
|
+
cServer = rb_define_class_under(mEbb, "Server", rb_cObject);
|
243
|
+
rb_define_alloc_func(cServer, server_alloc);
|
244
|
+
rb_define_singleton_method(mFFI, "server_initialize", server_initialize, 1);
|
245
|
+
rb_define_singleton_method(mFFI, "server_process_connections", server_process_connections, 1);
|
246
|
+
rb_define_singleton_method(mFFI, "server_listen_on_port", server_listen_on_port, 2);
|
247
|
+
rb_define_singleton_method(mFFI, "server_listen_on_socket", server_listen_on_socket, 2);
|
248
|
+
rb_define_singleton_method(mFFI, "server_unlisten", server_unlisten, 1);
|
249
|
+
|
250
|
+
cClient = rb_define_class_under(mEbb, "Client", rb_cObject);
|
251
|
+
rb_define_singleton_method(mFFI, "client_read_input", client_read_input, 2);
|
252
|
+
rb_define_singleton_method(mFFI, "client_write", client_write, 2);
|
253
|
+
rb_define_singleton_method(mFFI, "client_finished", client_finished, 1);
|
254
|
+
rb_define_singleton_method(mFFI, "client_env", client_env, 1);
|
255
|
+
|
256
|
+
}
|
data/src/extconf.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
|
4
|
+
unless pkg_config('glib-2.0')
|
5
|
+
abort "Ebb requires glib-2.0 and pkg_config"
|
6
|
+
end
|
7
|
+
|
8
|
+
flags = []
|
9
|
+
|
10
|
+
if have_header('sys/select.h')
|
11
|
+
flags << '-DEV_USE_SELECT'
|
12
|
+
end
|
13
|
+
|
14
|
+
if have_header('poll.h')
|
15
|
+
flags << '-DEV_USE_POLL'
|
16
|
+
end
|
17
|
+
|
18
|
+
if have_header('sys/epoll.h')
|
19
|
+
flags << '-DEV_USE_EPOLL'
|
20
|
+
end
|
21
|
+
|
22
|
+
if have_header('sys/event.h') and have_header('sys/queue.h')
|
23
|
+
flags << '-DEV_USE_KQUEUE'
|
24
|
+
end
|
25
|
+
|
26
|
+
if have_header('port.h')
|
27
|
+
flags << '-DEV_USE_PORT'
|
28
|
+
end
|
29
|
+
|
30
|
+
if have_header('sys/inotify.h')
|
31
|
+
flags << '-DEV_USE_INOTIFY'
|
32
|
+
end
|
33
|
+
|
34
|
+
dir = File.dirname(__FILE__)
|
35
|
+
libev_dir = File.expand_path(dir + '/../libev')
|
36
|
+
|
37
|
+
$LDFLAGS << " -lpthread "
|
38
|
+
$CFLAGS << " -I#{libev_dir} " << flags.join(' ')
|
39
|
+
$defs << "-DRUBY_VERSION_CODE=#{RUBY_VERSION.gsub(/\D/, '')}"
|
40
|
+
|
41
|
+
|
42
|
+
dir_config('ebb_ext')
|
43
|
+
create_makefile('ebb_ext')
|
44
|
+
|
data/src/parser.c
ADDED
@@ -0,0 +1,1584 @@
|
|
1
|
+
#line 1 "src/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 "parser.h"
|
7
|
+
#include <stdio.h>
|
8
|
+
#include <assert.h>
|
9
|
+
#include <stdlib.h>
|
10
|
+
#include <ctype.h>
|
11
|
+
#include <string.h>
|
12
|
+
|
13
|
+
#define LEN(AT, FPC) (FPC - buffer - parser->AT)
|
14
|
+
#define MARK(M,FPC) (parser->M = (FPC) - buffer)
|
15
|
+
#define PTR_TO(F) (buffer + parser->F)
|
16
|
+
|
17
|
+
/** machine **/
|
18
|
+
#line 122 "src/parser.rl"
|
19
|
+
|
20
|
+
|
21
|
+
/** Data **/
|
22
|
+
|
23
|
+
#line 24 "src/parser.c"
|
24
|
+
static const int http_parser_start = 1;
|
25
|
+
static const int http_parser_first_final = 69;
|
26
|
+
static const int http_parser_error = 0;
|
27
|
+
|
28
|
+
static const int http_parser_en_main = 1;
|
29
|
+
|
30
|
+
#line 126 "src/parser.rl"
|
31
|
+
|
32
|
+
int http_parser_init(http_parser *parser) {
|
33
|
+
int cs = 0;
|
34
|
+
|
35
|
+
#line 36 "src/parser.c"
|
36
|
+
{
|
37
|
+
cs = http_parser_start;
|
38
|
+
}
|
39
|
+
#line 130 "src/parser.rl"
|
40
|
+
parser->cs = cs;
|
41
|
+
parser->body_start = 0;
|
42
|
+
parser->content_len = 0;
|
43
|
+
parser->mark = 0;
|
44
|
+
parser->nread = 0;
|
45
|
+
parser->field_len = 0;
|
46
|
+
parser->field_start = 0;
|
47
|
+
|
48
|
+
return(1);
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
/** exec **/
|
53
|
+
size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off) {
|
54
|
+
const char *p, *pe;
|
55
|
+
int cs = parser->cs;
|
56
|
+
|
57
|
+
assert(off <= len && "offset past end of buffer");
|
58
|
+
|
59
|
+
p = buffer+off;
|
60
|
+
pe = buffer+len;
|
61
|
+
|
62
|
+
assert(*pe == '\0' && "pointer does not end on NUL");
|
63
|
+
assert(pe - p == len - off && "pointers aren't same distance");
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
#line 68 "src/parser.c"
|
68
|
+
{
|
69
|
+
if ( p == pe )
|
70
|
+
goto _out;
|
71
|
+
switch ( cs )
|
72
|
+
{
|
73
|
+
case 1:
|
74
|
+
switch( (*p) ) {
|
75
|
+
case 36: goto tr0;
|
76
|
+
case 95: goto tr0;
|
77
|
+
}
|
78
|
+
if ( (*p) < 48 ) {
|
79
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
80
|
+
goto tr0;
|
81
|
+
} else if ( (*p) > 57 ) {
|
82
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
83
|
+
goto tr0;
|
84
|
+
} else
|
85
|
+
goto tr0;
|
86
|
+
goto st0;
|
87
|
+
st0:
|
88
|
+
goto _out0;
|
89
|
+
tr0:
|
90
|
+
#line 20 "src/parser.rl"
|
91
|
+
{MARK(mark, p); }
|
92
|
+
goto st2;
|
93
|
+
st2:
|
94
|
+
if ( ++p == pe )
|
95
|
+
goto _out2;
|
96
|
+
case 2:
|
97
|
+
#line 98 "src/parser.c"
|
98
|
+
switch( (*p) ) {
|
99
|
+
case 32: goto tr2;
|
100
|
+
case 36: goto st50;
|
101
|
+
case 95: goto st50;
|
102
|
+
}
|
103
|
+
if ( (*p) < 48 ) {
|
104
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
105
|
+
goto st50;
|
106
|
+
} else if ( (*p) > 57 ) {
|
107
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
108
|
+
goto st50;
|
109
|
+
} else
|
110
|
+
goto st50;
|
111
|
+
goto st0;
|
112
|
+
tr2:
|
113
|
+
#line 41 "src/parser.rl"
|
114
|
+
{
|
115
|
+
if(parser->request_method != NULL)
|
116
|
+
parser->request_method(parser->data, PTR_TO(mark), LEN(mark, p));
|
117
|
+
}
|
118
|
+
goto st3;
|
119
|
+
st3:
|
120
|
+
if ( ++p == pe )
|
121
|
+
goto _out3;
|
122
|
+
case 3:
|
123
|
+
#line 124 "src/parser.c"
|
124
|
+
switch( (*p) ) {
|
125
|
+
case 42: goto tr4;
|
126
|
+
case 43: goto tr5;
|
127
|
+
case 47: goto tr6;
|
128
|
+
case 58: goto tr7;
|
129
|
+
}
|
130
|
+
if ( (*p) < 65 ) {
|
131
|
+
if ( 45 <= (*p) && (*p) <= 57 )
|
132
|
+
goto tr5;
|
133
|
+
} else if ( (*p) > 90 ) {
|
134
|
+
if ( 97 <= (*p) && (*p) <= 122 )
|
135
|
+
goto tr5;
|
136
|
+
} else
|
137
|
+
goto tr5;
|
138
|
+
goto st0;
|
139
|
+
tr4:
|
140
|
+
#line 20 "src/parser.rl"
|
141
|
+
{MARK(mark, p); }
|
142
|
+
goto st4;
|
143
|
+
st4:
|
144
|
+
if ( ++p == pe )
|
145
|
+
goto _out4;
|
146
|
+
case 4:
|
147
|
+
#line 148 "src/parser.c"
|
148
|
+
if ( (*p) == 32 )
|
149
|
+
goto tr8;
|
150
|
+
goto st0;
|
151
|
+
tr8:
|
152
|
+
#line 45 "src/parser.rl"
|
153
|
+
{
|
154
|
+
if(parser->request_uri != NULL)
|
155
|
+
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
|
156
|
+
}
|
157
|
+
goto st5;
|
158
|
+
tr52:
|
159
|
+
#line 61 "src/parser.rl"
|
160
|
+
{
|
161
|
+
if(parser->request_path != NULL)
|
162
|
+
parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
|
163
|
+
}
|
164
|
+
#line 45 "src/parser.rl"
|
165
|
+
{
|
166
|
+
if(parser->request_uri != NULL)
|
167
|
+
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
|
168
|
+
}
|
169
|
+
goto st5;
|
170
|
+
tr62:
|
171
|
+
#line 50 "src/parser.rl"
|
172
|
+
{MARK(query_start, p); }
|
173
|
+
#line 51 "src/parser.rl"
|
174
|
+
{
|
175
|
+
if(parser->query_string != NULL)
|
176
|
+
parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
|
177
|
+
}
|
178
|
+
#line 45 "src/parser.rl"
|
179
|
+
{
|
180
|
+
if(parser->request_uri != NULL)
|
181
|
+
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
|
182
|
+
}
|
183
|
+
goto st5;
|
184
|
+
tr65:
|
185
|
+
#line 51 "src/parser.rl"
|
186
|
+
{
|
187
|
+
if(parser->query_string != NULL)
|
188
|
+
parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p));
|
189
|
+
}
|
190
|
+
#line 45 "src/parser.rl"
|
191
|
+
{
|
192
|
+
if(parser->request_uri != NULL)
|
193
|
+
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
|
194
|
+
}
|
195
|
+
goto st5;
|
196
|
+
st5:
|
197
|
+
if ( ++p == pe )
|
198
|
+
goto _out5;
|
199
|
+
case 5:
|
200
|
+
#line 201 "src/parser.c"
|
201
|
+
if ( (*p) == 72 )
|
202
|
+
goto tr9;
|
203
|
+
goto st0;
|
204
|
+
tr9:
|
205
|
+
#line 20 "src/parser.rl"
|
206
|
+
{MARK(mark, p); }
|
207
|
+
goto st6;
|
208
|
+
st6:
|
209
|
+
if ( ++p == pe )
|
210
|
+
goto _out6;
|
211
|
+
case 6:
|
212
|
+
#line 213 "src/parser.c"
|
213
|
+
if ( (*p) == 84 )
|
214
|
+
goto st7;
|
215
|
+
goto st0;
|
216
|
+
st7:
|
217
|
+
if ( ++p == pe )
|
218
|
+
goto _out7;
|
219
|
+
case 7:
|
220
|
+
if ( (*p) == 84 )
|
221
|
+
goto st8;
|
222
|
+
goto st0;
|
223
|
+
st8:
|
224
|
+
if ( ++p == pe )
|
225
|
+
goto _out8;
|
226
|
+
case 8:
|
227
|
+
if ( (*p) == 80 )
|
228
|
+
goto st9;
|
229
|
+
goto st0;
|
230
|
+
st9:
|
231
|
+
if ( ++p == pe )
|
232
|
+
goto _out9;
|
233
|
+
case 9:
|
234
|
+
if ( (*p) == 47 )
|
235
|
+
goto st10;
|
236
|
+
goto st0;
|
237
|
+
st10:
|
238
|
+
if ( ++p == pe )
|
239
|
+
goto _out10;
|
240
|
+
case 10:
|
241
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
242
|
+
goto st11;
|
243
|
+
goto st0;
|
244
|
+
st11:
|
245
|
+
if ( ++p == pe )
|
246
|
+
goto _out11;
|
247
|
+
case 11:
|
248
|
+
if ( (*p) == 46 )
|
249
|
+
goto st12;
|
250
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
251
|
+
goto st11;
|
252
|
+
goto st0;
|
253
|
+
st12:
|
254
|
+
if ( ++p == pe )
|
255
|
+
goto _out12;
|
256
|
+
case 12:
|
257
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
258
|
+
goto st13;
|
259
|
+
goto st0;
|
260
|
+
st13:
|
261
|
+
if ( ++p == pe )
|
262
|
+
goto _out13;
|
263
|
+
case 13:
|
264
|
+
if ( (*p) == 13 )
|
265
|
+
goto tr17;
|
266
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
267
|
+
goto st13;
|
268
|
+
goto st0;
|
269
|
+
tr17:
|
270
|
+
#line 56 "src/parser.rl"
|
271
|
+
{
|
272
|
+
if(parser->http_version != NULL)
|
273
|
+
parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p));
|
274
|
+
}
|
275
|
+
goto st14;
|
276
|
+
tr26:
|
277
|
+
#line 29 "src/parser.rl"
|
278
|
+
{
|
279
|
+
if(parser->http_field != NULL) {
|
280
|
+
parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
|
281
|
+
}
|
282
|
+
}
|
283
|
+
goto st14;
|
284
|
+
tr44:
|
285
|
+
#line 29 "src/parser.rl"
|
286
|
+
{
|
287
|
+
if(parser->http_field != NULL) {
|
288
|
+
parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p));
|
289
|
+
}
|
290
|
+
}
|
291
|
+
#line 35 "src/parser.rl"
|
292
|
+
{
|
293
|
+
if(parser->content_length != NULL) {
|
294
|
+
parser->content_length(parser->data, PTR_TO(mark), LEN(mark, p));
|
295
|
+
}
|
296
|
+
}
|
297
|
+
goto st14;
|
298
|
+
st14:
|
299
|
+
if ( ++p == pe )
|
300
|
+
goto _out14;
|
301
|
+
case 14:
|
302
|
+
#line 303 "src/parser.c"
|
303
|
+
if ( (*p) == 10 )
|
304
|
+
goto st15;
|
305
|
+
goto st0;
|
306
|
+
st15:
|
307
|
+
if ( ++p == pe )
|
308
|
+
goto _out15;
|
309
|
+
case 15:
|
310
|
+
switch( (*p) ) {
|
311
|
+
case 13: goto st16;
|
312
|
+
case 33: goto tr20;
|
313
|
+
case 67: goto tr21;
|
314
|
+
case 99: goto tr21;
|
315
|
+
case 124: goto tr20;
|
316
|
+
case 126: goto tr20;
|
317
|
+
}
|
318
|
+
if ( (*p) < 45 ) {
|
319
|
+
if ( (*p) > 39 ) {
|
320
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
321
|
+
goto tr20;
|
322
|
+
} else if ( (*p) >= 35 )
|
323
|
+
goto tr20;
|
324
|
+
} else if ( (*p) > 46 ) {
|
325
|
+
if ( (*p) < 65 ) {
|
326
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
327
|
+
goto tr20;
|
328
|
+
} else if ( (*p) > 90 ) {
|
329
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
330
|
+
goto tr20;
|
331
|
+
} else
|
332
|
+
goto tr20;
|
333
|
+
} else
|
334
|
+
goto tr20;
|
335
|
+
goto st0;
|
336
|
+
st16:
|
337
|
+
if ( ++p == pe )
|
338
|
+
goto _out16;
|
339
|
+
case 16:
|
340
|
+
if ( (*p) == 10 )
|
341
|
+
goto tr22;
|
342
|
+
goto st0;
|
343
|
+
tr22:
|
344
|
+
#line 66 "src/parser.rl"
|
345
|
+
{
|
346
|
+
parser->body_start = p - buffer + 1;
|
347
|
+
if(parser->header_done != NULL)
|
348
|
+
parser->header_done(parser->data, p + 1, pe - p - 1);
|
349
|
+
goto _out69;
|
350
|
+
}
|
351
|
+
goto st69;
|
352
|
+
st69:
|
353
|
+
if ( ++p == pe )
|
354
|
+
goto _out69;
|
355
|
+
case 69:
|
356
|
+
#line 357 "src/parser.c"
|
357
|
+
goto st0;
|
358
|
+
tr20:
|
359
|
+
#line 23 "src/parser.rl"
|
360
|
+
{ MARK(field_start, p); }
|
361
|
+
goto st17;
|
362
|
+
st17:
|
363
|
+
if ( ++p == pe )
|
364
|
+
goto _out17;
|
365
|
+
case 17:
|
366
|
+
#line 367 "src/parser.c"
|
367
|
+
switch( (*p) ) {
|
368
|
+
case 33: goto st17;
|
369
|
+
case 58: goto tr24;
|
370
|
+
case 124: goto st17;
|
371
|
+
case 126: goto st17;
|
372
|
+
}
|
373
|
+
if ( (*p) < 45 ) {
|
374
|
+
if ( (*p) > 39 ) {
|
375
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
376
|
+
goto st17;
|
377
|
+
} else if ( (*p) >= 35 )
|
378
|
+
goto st17;
|
379
|
+
} else if ( (*p) > 46 ) {
|
380
|
+
if ( (*p) < 65 ) {
|
381
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
382
|
+
goto st17;
|
383
|
+
} else if ( (*p) > 90 ) {
|
384
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
385
|
+
goto st17;
|
386
|
+
} else
|
387
|
+
goto st17;
|
388
|
+
} else
|
389
|
+
goto st17;
|
390
|
+
goto st0;
|
391
|
+
tr24:
|
392
|
+
#line 24 "src/parser.rl"
|
393
|
+
{
|
394
|
+
parser->field_len = LEN(field_start, p);
|
395
|
+
}
|
396
|
+
goto st18;
|
397
|
+
tr27:
|
398
|
+
#line 28 "src/parser.rl"
|
399
|
+
{ MARK(mark, p); }
|
400
|
+
goto st18;
|
401
|
+
st18:
|
402
|
+
if ( ++p == pe )
|
403
|
+
goto _out18;
|
404
|
+
case 18:
|
405
|
+
#line 406 "src/parser.c"
|
406
|
+
switch( (*p) ) {
|
407
|
+
case 13: goto tr26;
|
408
|
+
case 32: goto tr27;
|
409
|
+
}
|
410
|
+
goto tr25;
|
411
|
+
tr25:
|
412
|
+
#line 28 "src/parser.rl"
|
413
|
+
{ MARK(mark, p); }
|
414
|
+
goto st19;
|
415
|
+
st19:
|
416
|
+
if ( ++p == pe )
|
417
|
+
goto _out19;
|
418
|
+
case 19:
|
419
|
+
#line 420 "src/parser.c"
|
420
|
+
if ( (*p) == 13 )
|
421
|
+
goto tr26;
|
422
|
+
goto st19;
|
423
|
+
tr21:
|
424
|
+
#line 23 "src/parser.rl"
|
425
|
+
{ MARK(field_start, p); }
|
426
|
+
goto st20;
|
427
|
+
st20:
|
428
|
+
if ( ++p == pe )
|
429
|
+
goto _out20;
|
430
|
+
case 20:
|
431
|
+
#line 432 "src/parser.c"
|
432
|
+
switch( (*p) ) {
|
433
|
+
case 33: goto st17;
|
434
|
+
case 58: goto tr24;
|
435
|
+
case 79: goto st21;
|
436
|
+
case 111: goto st21;
|
437
|
+
case 124: goto st17;
|
438
|
+
case 126: goto st17;
|
439
|
+
}
|
440
|
+
if ( (*p) < 45 ) {
|
441
|
+
if ( (*p) > 39 ) {
|
442
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
443
|
+
goto st17;
|
444
|
+
} else if ( (*p) >= 35 )
|
445
|
+
goto st17;
|
446
|
+
} else if ( (*p) > 46 ) {
|
447
|
+
if ( (*p) < 65 ) {
|
448
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
449
|
+
goto st17;
|
450
|
+
} else if ( (*p) > 90 ) {
|
451
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
452
|
+
goto st17;
|
453
|
+
} else
|
454
|
+
goto st17;
|
455
|
+
} else
|
456
|
+
goto st17;
|
457
|
+
goto st0;
|
458
|
+
st21:
|
459
|
+
if ( ++p == pe )
|
460
|
+
goto _out21;
|
461
|
+
case 21:
|
462
|
+
switch( (*p) ) {
|
463
|
+
case 33: goto st17;
|
464
|
+
case 58: goto tr24;
|
465
|
+
case 78: goto st22;
|
466
|
+
case 110: goto st22;
|
467
|
+
case 124: goto st17;
|
468
|
+
case 126: goto st17;
|
469
|
+
}
|
470
|
+
if ( (*p) < 45 ) {
|
471
|
+
if ( (*p) > 39 ) {
|
472
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
473
|
+
goto st17;
|
474
|
+
} else if ( (*p) >= 35 )
|
475
|
+
goto st17;
|
476
|
+
} else if ( (*p) > 46 ) {
|
477
|
+
if ( (*p) < 65 ) {
|
478
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
479
|
+
goto st17;
|
480
|
+
} else if ( (*p) > 90 ) {
|
481
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
482
|
+
goto st17;
|
483
|
+
} else
|
484
|
+
goto st17;
|
485
|
+
} else
|
486
|
+
goto st17;
|
487
|
+
goto st0;
|
488
|
+
st22:
|
489
|
+
if ( ++p == pe )
|
490
|
+
goto _out22;
|
491
|
+
case 22:
|
492
|
+
switch( (*p) ) {
|
493
|
+
case 33: goto st17;
|
494
|
+
case 58: goto tr24;
|
495
|
+
case 84: goto st23;
|
496
|
+
case 116: goto st23;
|
497
|
+
case 124: goto st17;
|
498
|
+
case 126: goto st17;
|
499
|
+
}
|
500
|
+
if ( (*p) < 45 ) {
|
501
|
+
if ( (*p) > 39 ) {
|
502
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
503
|
+
goto st17;
|
504
|
+
} else if ( (*p) >= 35 )
|
505
|
+
goto st17;
|
506
|
+
} else if ( (*p) > 46 ) {
|
507
|
+
if ( (*p) < 65 ) {
|
508
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
509
|
+
goto st17;
|
510
|
+
} else if ( (*p) > 90 ) {
|
511
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
512
|
+
goto st17;
|
513
|
+
} else
|
514
|
+
goto st17;
|
515
|
+
} else
|
516
|
+
goto st17;
|
517
|
+
goto st0;
|
518
|
+
st23:
|
519
|
+
if ( ++p == pe )
|
520
|
+
goto _out23;
|
521
|
+
case 23:
|
522
|
+
switch( (*p) ) {
|
523
|
+
case 33: goto st17;
|
524
|
+
case 58: goto tr24;
|
525
|
+
case 69: goto st24;
|
526
|
+
case 101: goto st24;
|
527
|
+
case 124: goto st17;
|
528
|
+
case 126: goto st17;
|
529
|
+
}
|
530
|
+
if ( (*p) < 45 ) {
|
531
|
+
if ( (*p) > 39 ) {
|
532
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
533
|
+
goto st17;
|
534
|
+
} else if ( (*p) >= 35 )
|
535
|
+
goto st17;
|
536
|
+
} else if ( (*p) > 46 ) {
|
537
|
+
if ( (*p) < 65 ) {
|
538
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
539
|
+
goto st17;
|
540
|
+
} else if ( (*p) > 90 ) {
|
541
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
542
|
+
goto st17;
|
543
|
+
} else
|
544
|
+
goto st17;
|
545
|
+
} else
|
546
|
+
goto st17;
|
547
|
+
goto st0;
|
548
|
+
st24:
|
549
|
+
if ( ++p == pe )
|
550
|
+
goto _out24;
|
551
|
+
case 24:
|
552
|
+
switch( (*p) ) {
|
553
|
+
case 33: goto st17;
|
554
|
+
case 58: goto tr24;
|
555
|
+
case 78: goto st25;
|
556
|
+
case 110: goto st25;
|
557
|
+
case 124: goto st17;
|
558
|
+
case 126: goto st17;
|
559
|
+
}
|
560
|
+
if ( (*p) < 45 ) {
|
561
|
+
if ( (*p) > 39 ) {
|
562
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
563
|
+
goto st17;
|
564
|
+
} else if ( (*p) >= 35 )
|
565
|
+
goto st17;
|
566
|
+
} else if ( (*p) > 46 ) {
|
567
|
+
if ( (*p) < 65 ) {
|
568
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
569
|
+
goto st17;
|
570
|
+
} else if ( (*p) > 90 ) {
|
571
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
572
|
+
goto st17;
|
573
|
+
} else
|
574
|
+
goto st17;
|
575
|
+
} else
|
576
|
+
goto st17;
|
577
|
+
goto st0;
|
578
|
+
st25:
|
579
|
+
if ( ++p == pe )
|
580
|
+
goto _out25;
|
581
|
+
case 25:
|
582
|
+
switch( (*p) ) {
|
583
|
+
case 33: goto st17;
|
584
|
+
case 58: goto tr24;
|
585
|
+
case 84: goto st26;
|
586
|
+
case 116: goto st26;
|
587
|
+
case 124: goto st17;
|
588
|
+
case 126: goto st17;
|
589
|
+
}
|
590
|
+
if ( (*p) < 45 ) {
|
591
|
+
if ( (*p) > 39 ) {
|
592
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
593
|
+
goto st17;
|
594
|
+
} else if ( (*p) >= 35 )
|
595
|
+
goto st17;
|
596
|
+
} else if ( (*p) > 46 ) {
|
597
|
+
if ( (*p) < 65 ) {
|
598
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
599
|
+
goto st17;
|
600
|
+
} else if ( (*p) > 90 ) {
|
601
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
602
|
+
goto st17;
|
603
|
+
} else
|
604
|
+
goto st17;
|
605
|
+
} else
|
606
|
+
goto st17;
|
607
|
+
goto st0;
|
608
|
+
st26:
|
609
|
+
if ( ++p == pe )
|
610
|
+
goto _out26;
|
611
|
+
case 26:
|
612
|
+
switch( (*p) ) {
|
613
|
+
case 33: goto st17;
|
614
|
+
case 45: goto st27;
|
615
|
+
case 46: goto st17;
|
616
|
+
case 58: goto tr24;
|
617
|
+
case 124: goto st17;
|
618
|
+
case 126: goto st17;
|
619
|
+
}
|
620
|
+
if ( (*p) < 48 ) {
|
621
|
+
if ( (*p) > 39 ) {
|
622
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
623
|
+
goto st17;
|
624
|
+
} else if ( (*p) >= 35 )
|
625
|
+
goto st17;
|
626
|
+
} else if ( (*p) > 57 ) {
|
627
|
+
if ( (*p) > 90 ) {
|
628
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
629
|
+
goto st17;
|
630
|
+
} else if ( (*p) >= 65 )
|
631
|
+
goto st17;
|
632
|
+
} else
|
633
|
+
goto st17;
|
634
|
+
goto st0;
|
635
|
+
st27:
|
636
|
+
if ( ++p == pe )
|
637
|
+
goto _out27;
|
638
|
+
case 27:
|
639
|
+
switch( (*p) ) {
|
640
|
+
case 33: goto st17;
|
641
|
+
case 58: goto tr24;
|
642
|
+
case 76: goto st28;
|
643
|
+
case 108: goto st28;
|
644
|
+
case 124: goto st17;
|
645
|
+
case 126: goto st17;
|
646
|
+
}
|
647
|
+
if ( (*p) < 45 ) {
|
648
|
+
if ( (*p) > 39 ) {
|
649
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
650
|
+
goto st17;
|
651
|
+
} else if ( (*p) >= 35 )
|
652
|
+
goto st17;
|
653
|
+
} else if ( (*p) > 46 ) {
|
654
|
+
if ( (*p) < 65 ) {
|
655
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
656
|
+
goto st17;
|
657
|
+
} else if ( (*p) > 90 ) {
|
658
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
659
|
+
goto st17;
|
660
|
+
} else
|
661
|
+
goto st17;
|
662
|
+
} else
|
663
|
+
goto st17;
|
664
|
+
goto st0;
|
665
|
+
st28:
|
666
|
+
if ( ++p == pe )
|
667
|
+
goto _out28;
|
668
|
+
case 28:
|
669
|
+
switch( (*p) ) {
|
670
|
+
case 33: goto st17;
|
671
|
+
case 58: goto tr24;
|
672
|
+
case 69: goto st29;
|
673
|
+
case 101: goto st29;
|
674
|
+
case 124: goto st17;
|
675
|
+
case 126: goto st17;
|
676
|
+
}
|
677
|
+
if ( (*p) < 45 ) {
|
678
|
+
if ( (*p) > 39 ) {
|
679
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
680
|
+
goto st17;
|
681
|
+
} else if ( (*p) >= 35 )
|
682
|
+
goto st17;
|
683
|
+
} else if ( (*p) > 46 ) {
|
684
|
+
if ( (*p) < 65 ) {
|
685
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
686
|
+
goto st17;
|
687
|
+
} else if ( (*p) > 90 ) {
|
688
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
689
|
+
goto st17;
|
690
|
+
} else
|
691
|
+
goto st17;
|
692
|
+
} else
|
693
|
+
goto st17;
|
694
|
+
goto st0;
|
695
|
+
st29:
|
696
|
+
if ( ++p == pe )
|
697
|
+
goto _out29;
|
698
|
+
case 29:
|
699
|
+
switch( (*p) ) {
|
700
|
+
case 33: goto st17;
|
701
|
+
case 58: goto tr24;
|
702
|
+
case 78: goto st30;
|
703
|
+
case 110: goto st30;
|
704
|
+
case 124: goto st17;
|
705
|
+
case 126: goto st17;
|
706
|
+
}
|
707
|
+
if ( (*p) < 45 ) {
|
708
|
+
if ( (*p) > 39 ) {
|
709
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
710
|
+
goto st17;
|
711
|
+
} else if ( (*p) >= 35 )
|
712
|
+
goto st17;
|
713
|
+
} else if ( (*p) > 46 ) {
|
714
|
+
if ( (*p) < 65 ) {
|
715
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
716
|
+
goto st17;
|
717
|
+
} else if ( (*p) > 90 ) {
|
718
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
719
|
+
goto st17;
|
720
|
+
} else
|
721
|
+
goto st17;
|
722
|
+
} else
|
723
|
+
goto st17;
|
724
|
+
goto st0;
|
725
|
+
st30:
|
726
|
+
if ( ++p == pe )
|
727
|
+
goto _out30;
|
728
|
+
case 30:
|
729
|
+
switch( (*p) ) {
|
730
|
+
case 33: goto st17;
|
731
|
+
case 58: goto tr24;
|
732
|
+
case 71: goto st31;
|
733
|
+
case 103: goto st31;
|
734
|
+
case 124: goto st17;
|
735
|
+
case 126: goto st17;
|
736
|
+
}
|
737
|
+
if ( (*p) < 45 ) {
|
738
|
+
if ( (*p) > 39 ) {
|
739
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
740
|
+
goto st17;
|
741
|
+
} else if ( (*p) >= 35 )
|
742
|
+
goto st17;
|
743
|
+
} else if ( (*p) > 46 ) {
|
744
|
+
if ( (*p) < 65 ) {
|
745
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
746
|
+
goto st17;
|
747
|
+
} else if ( (*p) > 90 ) {
|
748
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
749
|
+
goto st17;
|
750
|
+
} else
|
751
|
+
goto st17;
|
752
|
+
} else
|
753
|
+
goto st17;
|
754
|
+
goto st0;
|
755
|
+
st31:
|
756
|
+
if ( ++p == pe )
|
757
|
+
goto _out31;
|
758
|
+
case 31:
|
759
|
+
switch( (*p) ) {
|
760
|
+
case 33: goto st17;
|
761
|
+
case 58: goto tr24;
|
762
|
+
case 84: goto st32;
|
763
|
+
case 116: goto st32;
|
764
|
+
case 124: goto st17;
|
765
|
+
case 126: goto st17;
|
766
|
+
}
|
767
|
+
if ( (*p) < 45 ) {
|
768
|
+
if ( (*p) > 39 ) {
|
769
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
770
|
+
goto st17;
|
771
|
+
} else if ( (*p) >= 35 )
|
772
|
+
goto st17;
|
773
|
+
} else if ( (*p) > 46 ) {
|
774
|
+
if ( (*p) < 65 ) {
|
775
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
776
|
+
goto st17;
|
777
|
+
} else if ( (*p) > 90 ) {
|
778
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
779
|
+
goto st17;
|
780
|
+
} else
|
781
|
+
goto st17;
|
782
|
+
} else
|
783
|
+
goto st17;
|
784
|
+
goto st0;
|
785
|
+
st32:
|
786
|
+
if ( ++p == pe )
|
787
|
+
goto _out32;
|
788
|
+
case 32:
|
789
|
+
switch( (*p) ) {
|
790
|
+
case 33: goto st17;
|
791
|
+
case 58: goto tr24;
|
792
|
+
case 72: goto st33;
|
793
|
+
case 104: goto st33;
|
794
|
+
case 124: goto st17;
|
795
|
+
case 126: goto st17;
|
796
|
+
}
|
797
|
+
if ( (*p) < 45 ) {
|
798
|
+
if ( (*p) > 39 ) {
|
799
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
800
|
+
goto st17;
|
801
|
+
} else if ( (*p) >= 35 )
|
802
|
+
goto st17;
|
803
|
+
} else if ( (*p) > 46 ) {
|
804
|
+
if ( (*p) < 65 ) {
|
805
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
806
|
+
goto st17;
|
807
|
+
} else if ( (*p) > 90 ) {
|
808
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
809
|
+
goto st17;
|
810
|
+
} else
|
811
|
+
goto st17;
|
812
|
+
} else
|
813
|
+
goto st17;
|
814
|
+
goto st0;
|
815
|
+
st33:
|
816
|
+
if ( ++p == pe )
|
817
|
+
goto _out33;
|
818
|
+
case 33:
|
819
|
+
switch( (*p) ) {
|
820
|
+
case 33: goto st17;
|
821
|
+
case 58: goto tr42;
|
822
|
+
case 124: goto st17;
|
823
|
+
case 126: goto st17;
|
824
|
+
}
|
825
|
+
if ( (*p) < 45 ) {
|
826
|
+
if ( (*p) > 39 ) {
|
827
|
+
if ( 42 <= (*p) && (*p) <= 43 )
|
828
|
+
goto st17;
|
829
|
+
} else if ( (*p) >= 35 )
|
830
|
+
goto st17;
|
831
|
+
} else if ( (*p) > 46 ) {
|
832
|
+
if ( (*p) < 65 ) {
|
833
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
834
|
+
goto st17;
|
835
|
+
} else if ( (*p) > 90 ) {
|
836
|
+
if ( 94 <= (*p) && (*p) <= 122 )
|
837
|
+
goto st17;
|
838
|
+
} else
|
839
|
+
goto st17;
|
840
|
+
} else
|
841
|
+
goto st17;
|
842
|
+
goto st0;
|
843
|
+
tr42:
|
844
|
+
#line 24 "src/parser.rl"
|
845
|
+
{
|
846
|
+
parser->field_len = LEN(field_start, p);
|
847
|
+
}
|
848
|
+
goto st34;
|
849
|
+
tr45:
|
850
|
+
#line 20 "src/parser.rl"
|
851
|
+
{MARK(mark, p); }
|
852
|
+
#line 28 "src/parser.rl"
|
853
|
+
{ MARK(mark, p); }
|
854
|
+
goto st34;
|
855
|
+
st34:
|
856
|
+
if ( ++p == pe )
|
857
|
+
goto _out34;
|
858
|
+
case 34:
|
859
|
+
#line 860 "src/parser.c"
|
860
|
+
switch( (*p) ) {
|
861
|
+
case 13: goto tr44;
|
862
|
+
case 32: goto tr45;
|
863
|
+
}
|
864
|
+
goto tr43;
|
865
|
+
tr43:
|
866
|
+
#line 20 "src/parser.rl"
|
867
|
+
{MARK(mark, p); }
|
868
|
+
#line 28 "src/parser.rl"
|
869
|
+
{ MARK(mark, p); }
|
870
|
+
goto st35;
|
871
|
+
st35:
|
872
|
+
if ( ++p == pe )
|
873
|
+
goto _out35;
|
874
|
+
case 35:
|
875
|
+
#line 876 "src/parser.c"
|
876
|
+
if ( (*p) == 13 )
|
877
|
+
goto tr44;
|
878
|
+
goto st35;
|
879
|
+
tr5:
|
880
|
+
#line 20 "src/parser.rl"
|
881
|
+
{MARK(mark, p); }
|
882
|
+
goto st36;
|
883
|
+
st36:
|
884
|
+
if ( ++p == pe )
|
885
|
+
goto _out36;
|
886
|
+
case 36:
|
887
|
+
#line 888 "src/parser.c"
|
888
|
+
switch( (*p) ) {
|
889
|
+
case 43: goto st36;
|
890
|
+
case 58: goto st37;
|
891
|
+
}
|
892
|
+
if ( (*p) < 48 ) {
|
893
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
894
|
+
goto st36;
|
895
|
+
} else if ( (*p) > 57 ) {
|
896
|
+
if ( (*p) > 90 ) {
|
897
|
+
if ( 97 <= (*p) && (*p) <= 122 )
|
898
|
+
goto st36;
|
899
|
+
} else if ( (*p) >= 65 )
|
900
|
+
goto st36;
|
901
|
+
} else
|
902
|
+
goto st36;
|
903
|
+
goto st0;
|
904
|
+
tr7:
|
905
|
+
#line 20 "src/parser.rl"
|
906
|
+
{MARK(mark, p); }
|
907
|
+
goto st37;
|
908
|
+
st37:
|
909
|
+
if ( ++p == pe )
|
910
|
+
goto _out37;
|
911
|
+
case 37:
|
912
|
+
#line 913 "src/parser.c"
|
913
|
+
switch( (*p) ) {
|
914
|
+
case 32: goto tr8;
|
915
|
+
case 37: goto st38;
|
916
|
+
case 60: goto st0;
|
917
|
+
case 62: goto st0;
|
918
|
+
case 127: goto st0;
|
919
|
+
}
|
920
|
+
if ( (*p) > 31 ) {
|
921
|
+
if ( 34 <= (*p) && (*p) <= 35 )
|
922
|
+
goto st0;
|
923
|
+
} else if ( (*p) >= 0 )
|
924
|
+
goto st0;
|
925
|
+
goto st37;
|
926
|
+
st38:
|
927
|
+
if ( ++p == pe )
|
928
|
+
goto _out38;
|
929
|
+
case 38:
|
930
|
+
if ( (*p) < 65 ) {
|
931
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
932
|
+
goto st39;
|
933
|
+
} else if ( (*p) > 70 ) {
|
934
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
935
|
+
goto st39;
|
936
|
+
} else
|
937
|
+
goto st39;
|
938
|
+
goto st0;
|
939
|
+
st39:
|
940
|
+
if ( ++p == pe )
|
941
|
+
goto _out39;
|
942
|
+
case 39:
|
943
|
+
if ( (*p) < 65 ) {
|
944
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
945
|
+
goto st37;
|
946
|
+
} else if ( (*p) > 70 ) {
|
947
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
948
|
+
goto st37;
|
949
|
+
} else
|
950
|
+
goto st37;
|
951
|
+
goto st0;
|
952
|
+
tr6:
|
953
|
+
#line 20 "src/parser.rl"
|
954
|
+
{MARK(mark, p); }
|
955
|
+
goto st40;
|
956
|
+
st40:
|
957
|
+
if ( ++p == pe )
|
958
|
+
goto _out40;
|
959
|
+
case 40:
|
960
|
+
#line 961 "src/parser.c"
|
961
|
+
switch( (*p) ) {
|
962
|
+
case 32: goto tr52;
|
963
|
+
case 37: goto st41;
|
964
|
+
case 59: goto tr54;
|
965
|
+
case 60: goto st0;
|
966
|
+
case 62: goto st0;
|
967
|
+
case 63: goto tr55;
|
968
|
+
case 127: goto st0;
|
969
|
+
}
|
970
|
+
if ( (*p) > 31 ) {
|
971
|
+
if ( 34 <= (*p) && (*p) <= 35 )
|
972
|
+
goto st0;
|
973
|
+
} else if ( (*p) >= 0 )
|
974
|
+
goto st0;
|
975
|
+
goto st40;
|
976
|
+
st41:
|
977
|
+
if ( ++p == pe )
|
978
|
+
goto _out41;
|
979
|
+
case 41:
|
980
|
+
if ( (*p) < 65 ) {
|
981
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
982
|
+
goto st42;
|
983
|
+
} else if ( (*p) > 70 ) {
|
984
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
985
|
+
goto st42;
|
986
|
+
} else
|
987
|
+
goto st42;
|
988
|
+
goto st0;
|
989
|
+
st42:
|
990
|
+
if ( ++p == pe )
|
991
|
+
goto _out42;
|
992
|
+
case 42:
|
993
|
+
if ( (*p) < 65 ) {
|
994
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
995
|
+
goto st40;
|
996
|
+
} else if ( (*p) > 70 ) {
|
997
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
998
|
+
goto st40;
|
999
|
+
} else
|
1000
|
+
goto st40;
|
1001
|
+
goto st0;
|
1002
|
+
tr54:
|
1003
|
+
#line 61 "src/parser.rl"
|
1004
|
+
{
|
1005
|
+
if(parser->request_path != NULL)
|
1006
|
+
parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
|
1007
|
+
}
|
1008
|
+
goto st43;
|
1009
|
+
st43:
|
1010
|
+
if ( ++p == pe )
|
1011
|
+
goto _out43;
|
1012
|
+
case 43:
|
1013
|
+
#line 1014 "src/parser.c"
|
1014
|
+
switch( (*p) ) {
|
1015
|
+
case 32: goto tr8;
|
1016
|
+
case 37: goto st44;
|
1017
|
+
case 60: goto st0;
|
1018
|
+
case 62: goto st0;
|
1019
|
+
case 63: goto st46;
|
1020
|
+
case 127: goto st0;
|
1021
|
+
}
|
1022
|
+
if ( (*p) > 31 ) {
|
1023
|
+
if ( 34 <= (*p) && (*p) <= 35 )
|
1024
|
+
goto st0;
|
1025
|
+
} else if ( (*p) >= 0 )
|
1026
|
+
goto st0;
|
1027
|
+
goto st43;
|
1028
|
+
st44:
|
1029
|
+
if ( ++p == pe )
|
1030
|
+
goto _out44;
|
1031
|
+
case 44:
|
1032
|
+
if ( (*p) < 65 ) {
|
1033
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
1034
|
+
goto st45;
|
1035
|
+
} else if ( (*p) > 70 ) {
|
1036
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
1037
|
+
goto st45;
|
1038
|
+
} else
|
1039
|
+
goto st45;
|
1040
|
+
goto st0;
|
1041
|
+
st45:
|
1042
|
+
if ( ++p == pe )
|
1043
|
+
goto _out45;
|
1044
|
+
case 45:
|
1045
|
+
if ( (*p) < 65 ) {
|
1046
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
1047
|
+
goto st43;
|
1048
|
+
} else if ( (*p) > 70 ) {
|
1049
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
1050
|
+
goto st43;
|
1051
|
+
} else
|
1052
|
+
goto st43;
|
1053
|
+
goto st0;
|
1054
|
+
tr55:
|
1055
|
+
#line 61 "src/parser.rl"
|
1056
|
+
{
|
1057
|
+
if(parser->request_path != NULL)
|
1058
|
+
parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
|
1059
|
+
}
|
1060
|
+
goto st46;
|
1061
|
+
st46:
|
1062
|
+
if ( ++p == pe )
|
1063
|
+
goto _out46;
|
1064
|
+
case 46:
|
1065
|
+
#line 1066 "src/parser.c"
|
1066
|
+
switch( (*p) ) {
|
1067
|
+
case 32: goto tr62;
|
1068
|
+
case 37: goto tr63;
|
1069
|
+
case 60: goto st0;
|
1070
|
+
case 62: goto st0;
|
1071
|
+
case 127: goto st0;
|
1072
|
+
}
|
1073
|
+
if ( (*p) > 31 ) {
|
1074
|
+
if ( 34 <= (*p) && (*p) <= 35 )
|
1075
|
+
goto st0;
|
1076
|
+
} else if ( (*p) >= 0 )
|
1077
|
+
goto st0;
|
1078
|
+
goto tr61;
|
1079
|
+
tr61:
|
1080
|
+
#line 50 "src/parser.rl"
|
1081
|
+
{MARK(query_start, p); }
|
1082
|
+
goto st47;
|
1083
|
+
st47:
|
1084
|
+
if ( ++p == pe )
|
1085
|
+
goto _out47;
|
1086
|
+
case 47:
|
1087
|
+
#line 1088 "src/parser.c"
|
1088
|
+
switch( (*p) ) {
|
1089
|
+
case 32: goto tr65;
|
1090
|
+
case 37: goto st48;
|
1091
|
+
case 60: goto st0;
|
1092
|
+
case 62: goto st0;
|
1093
|
+
case 127: goto st0;
|
1094
|
+
}
|
1095
|
+
if ( (*p) > 31 ) {
|
1096
|
+
if ( 34 <= (*p) && (*p) <= 35 )
|
1097
|
+
goto st0;
|
1098
|
+
} else if ( (*p) >= 0 )
|
1099
|
+
goto st0;
|
1100
|
+
goto st47;
|
1101
|
+
tr63:
|
1102
|
+
#line 50 "src/parser.rl"
|
1103
|
+
{MARK(query_start, p); }
|
1104
|
+
goto st48;
|
1105
|
+
st48:
|
1106
|
+
if ( ++p == pe )
|
1107
|
+
goto _out48;
|
1108
|
+
case 48:
|
1109
|
+
#line 1110 "src/parser.c"
|
1110
|
+
if ( (*p) < 65 ) {
|
1111
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
1112
|
+
goto st49;
|
1113
|
+
} else if ( (*p) > 70 ) {
|
1114
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
1115
|
+
goto st49;
|
1116
|
+
} else
|
1117
|
+
goto st49;
|
1118
|
+
goto st0;
|
1119
|
+
st49:
|
1120
|
+
if ( ++p == pe )
|
1121
|
+
goto _out49;
|
1122
|
+
case 49:
|
1123
|
+
if ( (*p) < 65 ) {
|
1124
|
+
if ( 48 <= (*p) && (*p) <= 57 )
|
1125
|
+
goto st47;
|
1126
|
+
} else if ( (*p) > 70 ) {
|
1127
|
+
if ( 97 <= (*p) && (*p) <= 102 )
|
1128
|
+
goto st47;
|
1129
|
+
} else
|
1130
|
+
goto st47;
|
1131
|
+
goto st0;
|
1132
|
+
st50:
|
1133
|
+
if ( ++p == pe )
|
1134
|
+
goto _out50;
|
1135
|
+
case 50:
|
1136
|
+
switch( (*p) ) {
|
1137
|
+
case 32: goto tr2;
|
1138
|
+
case 36: goto st51;
|
1139
|
+
case 95: goto st51;
|
1140
|
+
}
|
1141
|
+
if ( (*p) < 48 ) {
|
1142
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1143
|
+
goto st51;
|
1144
|
+
} else if ( (*p) > 57 ) {
|
1145
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1146
|
+
goto st51;
|
1147
|
+
} else
|
1148
|
+
goto st51;
|
1149
|
+
goto st0;
|
1150
|
+
st51:
|
1151
|
+
if ( ++p == pe )
|
1152
|
+
goto _out51;
|
1153
|
+
case 51:
|
1154
|
+
switch( (*p) ) {
|
1155
|
+
case 32: goto tr2;
|
1156
|
+
case 36: goto st52;
|
1157
|
+
case 95: goto st52;
|
1158
|
+
}
|
1159
|
+
if ( (*p) < 48 ) {
|
1160
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1161
|
+
goto st52;
|
1162
|
+
} else if ( (*p) > 57 ) {
|
1163
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1164
|
+
goto st52;
|
1165
|
+
} else
|
1166
|
+
goto st52;
|
1167
|
+
goto st0;
|
1168
|
+
st52:
|
1169
|
+
if ( ++p == pe )
|
1170
|
+
goto _out52;
|
1171
|
+
case 52:
|
1172
|
+
switch( (*p) ) {
|
1173
|
+
case 32: goto tr2;
|
1174
|
+
case 36: goto st53;
|
1175
|
+
case 95: goto st53;
|
1176
|
+
}
|
1177
|
+
if ( (*p) < 48 ) {
|
1178
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1179
|
+
goto st53;
|
1180
|
+
} else if ( (*p) > 57 ) {
|
1181
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1182
|
+
goto st53;
|
1183
|
+
} else
|
1184
|
+
goto st53;
|
1185
|
+
goto st0;
|
1186
|
+
st53:
|
1187
|
+
if ( ++p == pe )
|
1188
|
+
goto _out53;
|
1189
|
+
case 53:
|
1190
|
+
switch( (*p) ) {
|
1191
|
+
case 32: goto tr2;
|
1192
|
+
case 36: goto st54;
|
1193
|
+
case 95: goto st54;
|
1194
|
+
}
|
1195
|
+
if ( (*p) < 48 ) {
|
1196
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1197
|
+
goto st54;
|
1198
|
+
} else if ( (*p) > 57 ) {
|
1199
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1200
|
+
goto st54;
|
1201
|
+
} else
|
1202
|
+
goto st54;
|
1203
|
+
goto st0;
|
1204
|
+
st54:
|
1205
|
+
if ( ++p == pe )
|
1206
|
+
goto _out54;
|
1207
|
+
case 54:
|
1208
|
+
switch( (*p) ) {
|
1209
|
+
case 32: goto tr2;
|
1210
|
+
case 36: goto st55;
|
1211
|
+
case 95: goto st55;
|
1212
|
+
}
|
1213
|
+
if ( (*p) < 48 ) {
|
1214
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1215
|
+
goto st55;
|
1216
|
+
} else if ( (*p) > 57 ) {
|
1217
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1218
|
+
goto st55;
|
1219
|
+
} else
|
1220
|
+
goto st55;
|
1221
|
+
goto st0;
|
1222
|
+
st55:
|
1223
|
+
if ( ++p == pe )
|
1224
|
+
goto _out55;
|
1225
|
+
case 55:
|
1226
|
+
switch( (*p) ) {
|
1227
|
+
case 32: goto tr2;
|
1228
|
+
case 36: goto st56;
|
1229
|
+
case 95: goto st56;
|
1230
|
+
}
|
1231
|
+
if ( (*p) < 48 ) {
|
1232
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1233
|
+
goto st56;
|
1234
|
+
} else if ( (*p) > 57 ) {
|
1235
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1236
|
+
goto st56;
|
1237
|
+
} else
|
1238
|
+
goto st56;
|
1239
|
+
goto st0;
|
1240
|
+
st56:
|
1241
|
+
if ( ++p == pe )
|
1242
|
+
goto _out56;
|
1243
|
+
case 56:
|
1244
|
+
switch( (*p) ) {
|
1245
|
+
case 32: goto tr2;
|
1246
|
+
case 36: goto st57;
|
1247
|
+
case 95: goto st57;
|
1248
|
+
}
|
1249
|
+
if ( (*p) < 48 ) {
|
1250
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1251
|
+
goto st57;
|
1252
|
+
} else if ( (*p) > 57 ) {
|
1253
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1254
|
+
goto st57;
|
1255
|
+
} else
|
1256
|
+
goto st57;
|
1257
|
+
goto st0;
|
1258
|
+
st57:
|
1259
|
+
if ( ++p == pe )
|
1260
|
+
goto _out57;
|
1261
|
+
case 57:
|
1262
|
+
switch( (*p) ) {
|
1263
|
+
case 32: goto tr2;
|
1264
|
+
case 36: goto st58;
|
1265
|
+
case 95: goto st58;
|
1266
|
+
}
|
1267
|
+
if ( (*p) < 48 ) {
|
1268
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1269
|
+
goto st58;
|
1270
|
+
} else if ( (*p) > 57 ) {
|
1271
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1272
|
+
goto st58;
|
1273
|
+
} else
|
1274
|
+
goto st58;
|
1275
|
+
goto st0;
|
1276
|
+
st58:
|
1277
|
+
if ( ++p == pe )
|
1278
|
+
goto _out58;
|
1279
|
+
case 58:
|
1280
|
+
switch( (*p) ) {
|
1281
|
+
case 32: goto tr2;
|
1282
|
+
case 36: goto st59;
|
1283
|
+
case 95: goto st59;
|
1284
|
+
}
|
1285
|
+
if ( (*p) < 48 ) {
|
1286
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1287
|
+
goto st59;
|
1288
|
+
} else if ( (*p) > 57 ) {
|
1289
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1290
|
+
goto st59;
|
1291
|
+
} else
|
1292
|
+
goto st59;
|
1293
|
+
goto st0;
|
1294
|
+
st59:
|
1295
|
+
if ( ++p == pe )
|
1296
|
+
goto _out59;
|
1297
|
+
case 59:
|
1298
|
+
switch( (*p) ) {
|
1299
|
+
case 32: goto tr2;
|
1300
|
+
case 36: goto st60;
|
1301
|
+
case 95: goto st60;
|
1302
|
+
}
|
1303
|
+
if ( (*p) < 48 ) {
|
1304
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1305
|
+
goto st60;
|
1306
|
+
} else if ( (*p) > 57 ) {
|
1307
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1308
|
+
goto st60;
|
1309
|
+
} else
|
1310
|
+
goto st60;
|
1311
|
+
goto st0;
|
1312
|
+
st60:
|
1313
|
+
if ( ++p == pe )
|
1314
|
+
goto _out60;
|
1315
|
+
case 60:
|
1316
|
+
switch( (*p) ) {
|
1317
|
+
case 32: goto tr2;
|
1318
|
+
case 36: goto st61;
|
1319
|
+
case 95: goto st61;
|
1320
|
+
}
|
1321
|
+
if ( (*p) < 48 ) {
|
1322
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1323
|
+
goto st61;
|
1324
|
+
} else if ( (*p) > 57 ) {
|
1325
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1326
|
+
goto st61;
|
1327
|
+
} else
|
1328
|
+
goto st61;
|
1329
|
+
goto st0;
|
1330
|
+
st61:
|
1331
|
+
if ( ++p == pe )
|
1332
|
+
goto _out61;
|
1333
|
+
case 61:
|
1334
|
+
switch( (*p) ) {
|
1335
|
+
case 32: goto tr2;
|
1336
|
+
case 36: goto st62;
|
1337
|
+
case 95: goto st62;
|
1338
|
+
}
|
1339
|
+
if ( (*p) < 48 ) {
|
1340
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1341
|
+
goto st62;
|
1342
|
+
} else if ( (*p) > 57 ) {
|
1343
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1344
|
+
goto st62;
|
1345
|
+
} else
|
1346
|
+
goto st62;
|
1347
|
+
goto st0;
|
1348
|
+
st62:
|
1349
|
+
if ( ++p == pe )
|
1350
|
+
goto _out62;
|
1351
|
+
case 62:
|
1352
|
+
switch( (*p) ) {
|
1353
|
+
case 32: goto tr2;
|
1354
|
+
case 36: goto st63;
|
1355
|
+
case 95: goto st63;
|
1356
|
+
}
|
1357
|
+
if ( (*p) < 48 ) {
|
1358
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1359
|
+
goto st63;
|
1360
|
+
} else if ( (*p) > 57 ) {
|
1361
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1362
|
+
goto st63;
|
1363
|
+
} else
|
1364
|
+
goto st63;
|
1365
|
+
goto st0;
|
1366
|
+
st63:
|
1367
|
+
if ( ++p == pe )
|
1368
|
+
goto _out63;
|
1369
|
+
case 63:
|
1370
|
+
switch( (*p) ) {
|
1371
|
+
case 32: goto tr2;
|
1372
|
+
case 36: goto st64;
|
1373
|
+
case 95: goto st64;
|
1374
|
+
}
|
1375
|
+
if ( (*p) < 48 ) {
|
1376
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1377
|
+
goto st64;
|
1378
|
+
} else if ( (*p) > 57 ) {
|
1379
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1380
|
+
goto st64;
|
1381
|
+
} else
|
1382
|
+
goto st64;
|
1383
|
+
goto st0;
|
1384
|
+
st64:
|
1385
|
+
if ( ++p == pe )
|
1386
|
+
goto _out64;
|
1387
|
+
case 64:
|
1388
|
+
switch( (*p) ) {
|
1389
|
+
case 32: goto tr2;
|
1390
|
+
case 36: goto st65;
|
1391
|
+
case 95: goto st65;
|
1392
|
+
}
|
1393
|
+
if ( (*p) < 48 ) {
|
1394
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1395
|
+
goto st65;
|
1396
|
+
} else if ( (*p) > 57 ) {
|
1397
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1398
|
+
goto st65;
|
1399
|
+
} else
|
1400
|
+
goto st65;
|
1401
|
+
goto st0;
|
1402
|
+
st65:
|
1403
|
+
if ( ++p == pe )
|
1404
|
+
goto _out65;
|
1405
|
+
case 65:
|
1406
|
+
switch( (*p) ) {
|
1407
|
+
case 32: goto tr2;
|
1408
|
+
case 36: goto st66;
|
1409
|
+
case 95: goto st66;
|
1410
|
+
}
|
1411
|
+
if ( (*p) < 48 ) {
|
1412
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1413
|
+
goto st66;
|
1414
|
+
} else if ( (*p) > 57 ) {
|
1415
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1416
|
+
goto st66;
|
1417
|
+
} else
|
1418
|
+
goto st66;
|
1419
|
+
goto st0;
|
1420
|
+
st66:
|
1421
|
+
if ( ++p == pe )
|
1422
|
+
goto _out66;
|
1423
|
+
case 66:
|
1424
|
+
switch( (*p) ) {
|
1425
|
+
case 32: goto tr2;
|
1426
|
+
case 36: goto st67;
|
1427
|
+
case 95: goto st67;
|
1428
|
+
}
|
1429
|
+
if ( (*p) < 48 ) {
|
1430
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1431
|
+
goto st67;
|
1432
|
+
} else if ( (*p) > 57 ) {
|
1433
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1434
|
+
goto st67;
|
1435
|
+
} else
|
1436
|
+
goto st67;
|
1437
|
+
goto st0;
|
1438
|
+
st67:
|
1439
|
+
if ( ++p == pe )
|
1440
|
+
goto _out67;
|
1441
|
+
case 67:
|
1442
|
+
switch( (*p) ) {
|
1443
|
+
case 32: goto tr2;
|
1444
|
+
case 36: goto st68;
|
1445
|
+
case 95: goto st68;
|
1446
|
+
}
|
1447
|
+
if ( (*p) < 48 ) {
|
1448
|
+
if ( 45 <= (*p) && (*p) <= 46 )
|
1449
|
+
goto st68;
|
1450
|
+
} else if ( (*p) > 57 ) {
|
1451
|
+
if ( 65 <= (*p) && (*p) <= 90 )
|
1452
|
+
goto st68;
|
1453
|
+
} else
|
1454
|
+
goto st68;
|
1455
|
+
goto st0;
|
1456
|
+
st68:
|
1457
|
+
if ( ++p == pe )
|
1458
|
+
goto _out68;
|
1459
|
+
case 68:
|
1460
|
+
if ( (*p) == 32 )
|
1461
|
+
goto tr2;
|
1462
|
+
goto st0;
|
1463
|
+
}
|
1464
|
+
_out0: cs = 0; goto _out;
|
1465
|
+
_out2: cs = 2; goto _out;
|
1466
|
+
_out3: cs = 3; goto _out;
|
1467
|
+
_out4: cs = 4; goto _out;
|
1468
|
+
_out5: cs = 5; goto _out;
|
1469
|
+
_out6: cs = 6; goto _out;
|
1470
|
+
_out7: cs = 7; goto _out;
|
1471
|
+
_out8: cs = 8; goto _out;
|
1472
|
+
_out9: cs = 9; goto _out;
|
1473
|
+
_out10: cs = 10; goto _out;
|
1474
|
+
_out11: cs = 11; goto _out;
|
1475
|
+
_out12: cs = 12; goto _out;
|
1476
|
+
_out13: cs = 13; goto _out;
|
1477
|
+
_out14: cs = 14; goto _out;
|
1478
|
+
_out15: cs = 15; goto _out;
|
1479
|
+
_out16: cs = 16; goto _out;
|
1480
|
+
_out69: cs = 69; goto _out;
|
1481
|
+
_out17: cs = 17; goto _out;
|
1482
|
+
_out18: cs = 18; goto _out;
|
1483
|
+
_out19: cs = 19; goto _out;
|
1484
|
+
_out20: cs = 20; goto _out;
|
1485
|
+
_out21: cs = 21; goto _out;
|
1486
|
+
_out22: cs = 22; goto _out;
|
1487
|
+
_out23: cs = 23; goto _out;
|
1488
|
+
_out24: cs = 24; goto _out;
|
1489
|
+
_out25: cs = 25; goto _out;
|
1490
|
+
_out26: cs = 26; goto _out;
|
1491
|
+
_out27: cs = 27; goto _out;
|
1492
|
+
_out28: cs = 28; goto _out;
|
1493
|
+
_out29: cs = 29; goto _out;
|
1494
|
+
_out30: cs = 30; goto _out;
|
1495
|
+
_out31: cs = 31; goto _out;
|
1496
|
+
_out32: cs = 32; goto _out;
|
1497
|
+
_out33: cs = 33; goto _out;
|
1498
|
+
_out34: cs = 34; goto _out;
|
1499
|
+
_out35: cs = 35; goto _out;
|
1500
|
+
_out36: cs = 36; goto _out;
|
1501
|
+
_out37: cs = 37; goto _out;
|
1502
|
+
_out38: cs = 38; goto _out;
|
1503
|
+
_out39: cs = 39; goto _out;
|
1504
|
+
_out40: cs = 40; goto _out;
|
1505
|
+
_out41: cs = 41; goto _out;
|
1506
|
+
_out42: cs = 42; goto _out;
|
1507
|
+
_out43: cs = 43; goto _out;
|
1508
|
+
_out44: cs = 44; goto _out;
|
1509
|
+
_out45: cs = 45; goto _out;
|
1510
|
+
_out46: cs = 46; goto _out;
|
1511
|
+
_out47: cs = 47; goto _out;
|
1512
|
+
_out48: cs = 48; goto _out;
|
1513
|
+
_out49: cs = 49; goto _out;
|
1514
|
+
_out50: cs = 50; goto _out;
|
1515
|
+
_out51: cs = 51; goto _out;
|
1516
|
+
_out52: cs = 52; goto _out;
|
1517
|
+
_out53: cs = 53; goto _out;
|
1518
|
+
_out54: cs = 54; goto _out;
|
1519
|
+
_out55: cs = 55; goto _out;
|
1520
|
+
_out56: cs = 56; goto _out;
|
1521
|
+
_out57: cs = 57; goto _out;
|
1522
|
+
_out58: cs = 58; goto _out;
|
1523
|
+
_out59: cs = 59; goto _out;
|
1524
|
+
_out60: cs = 60; goto _out;
|
1525
|
+
_out61: cs = 61; goto _out;
|
1526
|
+
_out62: cs = 62; goto _out;
|
1527
|
+
_out63: cs = 63; goto _out;
|
1528
|
+
_out64: cs = 64; goto _out;
|
1529
|
+
_out65: cs = 65; goto _out;
|
1530
|
+
_out66: cs = 66; goto _out;
|
1531
|
+
_out67: cs = 67; goto _out;
|
1532
|
+
_out68: cs = 68; goto _out;
|
1533
|
+
|
1534
|
+
_out: {}
|
1535
|
+
}
|
1536
|
+
#line 157 "src/parser.rl"
|
1537
|
+
|
1538
|
+
parser->cs = cs;
|
1539
|
+
parser->nread += p - (buffer + off);
|
1540
|
+
|
1541
|
+
assert(p <= pe && "buffer overflow after parsing execute");
|
1542
|
+
assert(parser->nread <= len && "nread longer than length");
|
1543
|
+
assert(parser->body_start <= len && "body starts after buffer end");
|
1544
|
+
assert(parser->mark < len && "mark is after buffer end");
|
1545
|
+
assert(parser->field_len <= len && "field has length longer than whole buffer");
|
1546
|
+
assert(parser->field_start < len && "field starts after buffer end");
|
1547
|
+
|
1548
|
+
if(parser->body_start) {
|
1549
|
+
/* final \r\n combo encountered so stop right here */
|
1550
|
+
|
1551
|
+
#line 1552 "src/parser.c"
|
1552
|
+
#line 171 "src/parser.rl"
|
1553
|
+
parser->nread++;
|
1554
|
+
}
|
1555
|
+
|
1556
|
+
return(parser->nread);
|
1557
|
+
}
|
1558
|
+
|
1559
|
+
int http_parser_finish(http_parser *parser)
|
1560
|
+
{
|
1561
|
+
int cs = parser->cs;
|
1562
|
+
|
1563
|
+
|
1564
|
+
#line 1565 "src/parser.c"
|
1565
|
+
#line 182 "src/parser.rl"
|
1566
|
+
|
1567
|
+
parser->cs = cs;
|
1568
|
+
|
1569
|
+
if (http_parser_has_error(parser) ) {
|
1570
|
+
return -1;
|
1571
|
+
} else if (http_parser_is_finished(parser) ) {
|
1572
|
+
return 1;
|
1573
|
+
} else {
|
1574
|
+
return 0;
|
1575
|
+
}
|
1576
|
+
}
|
1577
|
+
|
1578
|
+
int http_parser_has_error(http_parser *parser) {
|
1579
|
+
return parser->cs == http_parser_error;
|
1580
|
+
}
|
1581
|
+
|
1582
|
+
int http_parser_is_finished(http_parser *parser) {
|
1583
|
+
return parser->cs == http_parser_first_final;
|
1584
|
+
}
|