puma 5.3.2 → 5.6.9
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/History.md +216 -11
- data/README.md +47 -6
- data/docs/architecture.md +49 -16
- data/docs/compile_options.md +4 -2
- data/docs/deployment.md +53 -67
- data/docs/plugins.md +15 -15
- data/docs/rails_dev_mode.md +2 -3
- data/docs/restart.md +6 -6
- data/docs/signals.md +11 -10
- data/docs/stats.md +8 -8
- data/docs/systemd.md +64 -67
- data/ext/puma_http11/extconf.rb +34 -6
- data/ext/puma_http11/http11_parser.c +23 -10
- data/ext/puma_http11/http11_parser_common.rl +1 -1
- data/ext/puma_http11/mini_ssl.c +90 -12
- data/ext/puma_http11/org/jruby/puma/Http11.java +2 -0
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +49 -47
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +38 -55
- data/ext/puma_http11/puma_http11.c +1 -1
- data/lib/puma/app/status.rb +7 -4
- data/lib/puma/binder.rb +51 -6
- data/lib/puma/cli.rb +14 -4
- data/lib/puma/client.rb +143 -25
- data/lib/puma/cluster/worker.rb +8 -18
- data/lib/puma/cluster/worker_handle.rb +4 -0
- data/lib/puma/cluster.rb +30 -24
- data/lib/puma/configuration.rb +4 -1
- data/lib/puma/const.rb +17 -8
- data/lib/puma/control_cli.rb +19 -13
- data/lib/puma/detect.rb +8 -2
- data/lib/puma/dsl.rb +111 -13
- data/lib/puma/{json.rb → json_serialization.rb} +1 -1
- data/lib/puma/launcher.rb +15 -1
- data/lib/puma/minissl/context_builder.rb +8 -6
- data/lib/puma/minissl.rb +33 -27
- data/lib/puma/null_io.rb +5 -0
- data/lib/puma/plugin.rb +2 -2
- data/lib/puma/rack/builder.rb +1 -1
- data/lib/puma/request.rb +35 -13
- data/lib/puma/runner.rb +22 -8
- data/lib/puma/server.rb +37 -29
- data/lib/puma/state_file.rb +42 -7
- data/lib/puma/thread_pool.rb +7 -5
- data/lib/puma/util.rb +20 -4
- data/lib/puma.rb +6 -4
- data/lib/rack/version_restriction.rb +15 -0
- data/tools/Dockerfile +1 -1
- metadata +8 -7
data/ext/puma_http11/extconf.rb
CHANGED
@@ -9,11 +9,22 @@ if $mingw && RUBY_VERSION >= '2.4'
|
|
9
9
|
end
|
10
10
|
|
11
11
|
unless ENV["DISABLE_SSL"]
|
12
|
-
|
12
|
+
# don't use pkg_config('openssl') if '--with-openssl-dir' is used
|
13
|
+
has_openssl_dir = dir_config('openssl').any?
|
14
|
+
found_pkg_config = !has_openssl_dir && pkg_config('openssl')
|
13
15
|
|
14
|
-
if
|
16
|
+
found_ssl = if (!$mingw || RUBY_VERSION >= '2.4') && found_pkg_config
|
17
|
+
puts 'using OpenSSL pkgconfig (openssl.pc)'
|
18
|
+
true
|
19
|
+
elsif %w'crypto libeay32'.find {|crypto| have_library(crypto, 'BIO_read')} &&
|
15
20
|
%w'ssl ssleay32'.find {|ssl| have_library(ssl, 'SSL_CTX_new')}
|
21
|
+
true
|
22
|
+
else
|
23
|
+
puts '** Puma will be compiled without SSL support'
|
24
|
+
false
|
25
|
+
end
|
16
26
|
|
27
|
+
if found_ssl
|
17
28
|
have_header "openssl/bio.h"
|
18
29
|
|
19
30
|
# below is yes for 1.0.2 & later
|
@@ -24,18 +35,35 @@ unless ENV["DISABLE_SSL"]
|
|
24
35
|
have_func "SSL_CTX_set_min_proto_version(NULL, 0)", "openssl/ssl.h"
|
25
36
|
|
26
37
|
have_func "X509_STORE_up_ref"
|
27
|
-
have_func
|
38
|
+
have_func "SSL_CTX_set_ecdh_auto(NULL, 0)" , "openssl/ssl.h"
|
39
|
+
|
40
|
+
# below exists in 1.1.0 and later, but isn't documented until 3.0.0
|
41
|
+
have_func "SSL_CTX_set_dh_auto(NULL, 0)" , "openssl/ssl.h"
|
42
|
+
|
43
|
+
# below is yes for 3.0.0 & later
|
44
|
+
have_func "SSL_get1_peer_certificate" , "openssl/ssl.h"
|
45
|
+
|
46
|
+
# Random.bytes available in Ruby 2.5 and later, Random::DEFAULT deprecated in 3.0
|
47
|
+
if Random.respond_to?(:bytes)
|
48
|
+
$defs.push "-DHAVE_RANDOM_BYTES"
|
49
|
+
puts "checking for Random.bytes... yes"
|
50
|
+
else
|
51
|
+
puts "checking for Random.bytes... no"
|
52
|
+
end
|
28
53
|
end
|
29
54
|
end
|
30
55
|
|
31
56
|
if ENV["MAKE_WARNINGS_INTO_ERRORS"]
|
32
57
|
# Make all warnings into errors
|
33
58
|
# Except `implicit-fallthrough` since most failures comes from ragel state machine generated code
|
34
|
-
if respond_to?
|
35
|
-
append_cflags
|
59
|
+
if respond_to?(:append_cflags, true) # Ruby 2.5 and later
|
60
|
+
append_cflags(config_string('WERRORFLAG') || '-Werror')
|
36
61
|
append_cflags '-Wno-implicit-fallthrough'
|
37
62
|
else
|
38
|
-
|
63
|
+
# flag may not exist on some platforms, -Werror may not be defined on some platforms, but
|
64
|
+
# works with all in current CI
|
65
|
+
$CFLAGS << " #{config_string('WERRORFLAG') || '-Werror'}"
|
66
|
+
$CFLAGS << ' -Wno-implicit-fallthrough'
|
39
67
|
end
|
40
68
|
end
|
41
69
|
|
@@ -428,7 +428,13 @@ case 18:
|
|
428
428
|
switch( (*p) ) {
|
429
429
|
case 13: goto tr26;
|
430
430
|
case 32: goto tr27;
|
431
|
+
case 127: goto st0;
|
431
432
|
}
|
433
|
+
if ( (*p) > 8 ) {
|
434
|
+
if ( 10 <= (*p) && (*p) <= 31 )
|
435
|
+
goto st0;
|
436
|
+
} else if ( (*p) >= 0 )
|
437
|
+
goto st0;
|
432
438
|
goto tr25;
|
433
439
|
tr25:
|
434
440
|
#line 46 "ext/puma_http11/http11_parser.rl"
|
@@ -438,9 +444,16 @@ st19:
|
|
438
444
|
if ( ++p == pe )
|
439
445
|
goto _test_eof19;
|
440
446
|
case 19:
|
441
|
-
#line
|
442
|
-
|
443
|
-
goto tr29;
|
447
|
+
#line 448 "ext/puma_http11/http11_parser.c"
|
448
|
+
switch( (*p) ) {
|
449
|
+
case 13: goto tr29;
|
450
|
+
case 127: goto st0;
|
451
|
+
}
|
452
|
+
if ( (*p) > 8 ) {
|
453
|
+
if ( 10 <= (*p) && (*p) <= 31 )
|
454
|
+
goto st0;
|
455
|
+
} else if ( (*p) >= 0 )
|
456
|
+
goto st0;
|
444
457
|
goto st19;
|
445
458
|
tr9:
|
446
459
|
#line 53 "ext/puma_http11/http11_parser.rl"
|
@@ -484,7 +497,7 @@ st20:
|
|
484
497
|
if ( ++p == pe )
|
485
498
|
goto _test_eof20;
|
486
499
|
case 20:
|
487
|
-
#line
|
500
|
+
#line 501 "ext/puma_http11/http11_parser.c"
|
488
501
|
switch( (*p) ) {
|
489
502
|
case 32: goto tr31;
|
490
503
|
case 60: goto st0;
|
@@ -505,7 +518,7 @@ st21:
|
|
505
518
|
if ( ++p == pe )
|
506
519
|
goto _test_eof21;
|
507
520
|
case 21:
|
508
|
-
#line
|
521
|
+
#line 522 "ext/puma_http11/http11_parser.c"
|
509
522
|
switch( (*p) ) {
|
510
523
|
case 32: goto tr33;
|
511
524
|
case 60: goto st0;
|
@@ -526,7 +539,7 @@ st22:
|
|
526
539
|
if ( ++p == pe )
|
527
540
|
goto _test_eof22;
|
528
541
|
case 22:
|
529
|
-
#line
|
542
|
+
#line 543 "ext/puma_http11/http11_parser.c"
|
530
543
|
switch( (*p) ) {
|
531
544
|
case 43: goto st22;
|
532
545
|
case 58: goto st23;
|
@@ -551,7 +564,7 @@ st23:
|
|
551
564
|
if ( ++p == pe )
|
552
565
|
goto _test_eof23;
|
553
566
|
case 23:
|
554
|
-
#line
|
567
|
+
#line 568 "ext/puma_http11/http11_parser.c"
|
555
568
|
switch( (*p) ) {
|
556
569
|
case 32: goto tr8;
|
557
570
|
case 34: goto st0;
|
@@ -571,7 +584,7 @@ st24:
|
|
571
584
|
if ( ++p == pe )
|
572
585
|
goto _test_eof24;
|
573
586
|
case 24:
|
574
|
-
#line
|
587
|
+
#line 588 "ext/puma_http11/http11_parser.c"
|
575
588
|
switch( (*p) ) {
|
576
589
|
case 32: goto tr37;
|
577
590
|
case 34: goto st0;
|
@@ -594,7 +607,7 @@ st25:
|
|
594
607
|
if ( ++p == pe )
|
595
608
|
goto _test_eof25;
|
596
609
|
case 25:
|
597
|
-
#line
|
610
|
+
#line 611 "ext/puma_http11/http11_parser.c"
|
598
611
|
switch( (*p) ) {
|
599
612
|
case 32: goto tr41;
|
600
613
|
case 34: goto st0;
|
@@ -614,7 +627,7 @@ st26:
|
|
614
627
|
if ( ++p == pe )
|
615
628
|
goto _test_eof26;
|
616
629
|
case 26:
|
617
|
-
#line
|
630
|
+
#line 631 "ext/puma_http11/http11_parser.c"
|
618
631
|
switch( (*p) ) {
|
619
632
|
case 32: goto tr44;
|
620
633
|
case 34: goto st0;
|
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
field_name = ( token -- ":" )+ >start_field $snake_upcase_field %write_field;
|
45
45
|
|
46
|
-
field_value = any* >start_value %write_value;
|
46
|
+
field_value = ( (any -- CTL) | "\t" )* >start_value %write_value;
|
47
47
|
|
48
48
|
message_header = field_name ":" " "* field_value :> CRLF;
|
49
49
|
|
data/ext/puma_http11/mini_ssl.c
CHANGED
@@ -30,6 +30,12 @@ typedef struct {
|
|
30
30
|
|
31
31
|
VALUE eError;
|
32
32
|
|
33
|
+
NORETURN(void raise_file_error(const char* caller, const char *filename));
|
34
|
+
|
35
|
+
void raise_file_error(const char* caller, const char *filename) {
|
36
|
+
rb_raise(eError, "%s: error in file '%s': %s", caller, filename, ERR_error_string(ERR_get_error(), NULL));
|
37
|
+
}
|
38
|
+
|
33
39
|
void engine_free(void *ptr) {
|
34
40
|
ms_conn *conn = ptr;
|
35
41
|
ms_cert_buf* cert_buf = (ms_cert_buf*)SSL_get_app_data(conn->ssl);
|
@@ -49,7 +55,8 @@ const rb_data_type_t engine_data_type = {
|
|
49
55
|
0, 0, RUBY_TYPED_FREE_IMMEDIATELY,
|
50
56
|
};
|
51
57
|
|
52
|
-
|
58
|
+
#ifndef HAVE_SSL_CTX_SET_DH_AUTO
|
59
|
+
DH *get_dh2048(void) {
|
53
60
|
/* `openssl dhparam -C 2048`
|
54
61
|
* -----BEGIN DH PARAMETERS-----
|
55
62
|
* MIIBCAKCAQEAjmh1uQHdTfxOyxEbKAV30fUfzqMDF/ChPzjfyzl2jcrqQMhrk76o
|
@@ -91,13 +98,13 @@ DH *get_dh2048() {
|
|
91
98
|
static unsigned char dh2048_g[] = { 0x02 };
|
92
99
|
|
93
100
|
DH *dh;
|
94
|
-
#if !(OPENSSL_VERSION_NUMBER < 0x10100005L
|
101
|
+
#if !(OPENSSL_VERSION_NUMBER < 0x10100005L)
|
95
102
|
BIGNUM *p, *g;
|
96
103
|
#endif
|
97
104
|
|
98
105
|
dh = DH_new();
|
99
106
|
|
100
|
-
#if OPENSSL_VERSION_NUMBER < 0x10100005L
|
107
|
+
#if OPENSSL_VERSION_NUMBER < 0x10100005L
|
101
108
|
dh->p = BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL);
|
102
109
|
dh->g = BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL);
|
103
110
|
|
@@ -119,6 +126,7 @@ DH *get_dh2048() {
|
|
119
126
|
|
120
127
|
return dh;
|
121
128
|
}
|
129
|
+
#endif
|
122
130
|
|
123
131
|
static void
|
124
132
|
sslctx_free(void *ptr) {
|
@@ -208,8 +216,13 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
208
216
|
#endif
|
209
217
|
int ssl_options;
|
210
218
|
VALUE key, cert, ca, verify_mode, ssl_cipher_filter, no_tlsv1, no_tlsv1_1,
|
211
|
-
verification_flags;
|
219
|
+
verification_flags, session_id_bytes, cert_pem, key_pem;
|
220
|
+
#ifndef HAVE_SSL_CTX_SET_DH_AUTO
|
212
221
|
DH *dh;
|
222
|
+
#endif
|
223
|
+
BIO *bio;
|
224
|
+
X509 *x509;
|
225
|
+
EVP_PKEY *pkey;
|
213
226
|
|
214
227
|
#if OPENSSL_VERSION_NUMBER < 0x10002000L
|
215
228
|
EC_KEY *ecdh;
|
@@ -218,13 +231,15 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
218
231
|
TypedData_Get_Struct(self, SSL_CTX, &sslctx_type, ctx);
|
219
232
|
|
220
233
|
key = rb_funcall(mini_ssl_ctx, rb_intern_const("key"), 0);
|
221
|
-
StringValue(key);
|
222
234
|
|
223
235
|
cert = rb_funcall(mini_ssl_ctx, rb_intern_const("cert"), 0);
|
224
|
-
StringValue(cert);
|
225
236
|
|
226
237
|
ca = rb_funcall(mini_ssl_ctx, rb_intern_const("ca"), 0);
|
227
238
|
|
239
|
+
cert_pem = rb_funcall(mini_ssl_ctx, rb_intern_const("cert_pem"), 0);
|
240
|
+
|
241
|
+
key_pem = rb_funcall(mini_ssl_ctx, rb_intern_const("key_pem"), 0);
|
242
|
+
|
228
243
|
verify_mode = rb_funcall(mini_ssl_ctx, rb_intern_const("verify_mode"), 0);
|
229
244
|
|
230
245
|
ssl_cipher_filter = rb_funcall(mini_ssl_ctx, rb_intern_const("ssl_cipher_filter"), 0);
|
@@ -233,8 +248,41 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
233
248
|
|
234
249
|
no_tlsv1_1 = rb_funcall(mini_ssl_ctx, rb_intern_const("no_tlsv1_1"), 0);
|
235
250
|
|
236
|
-
|
237
|
-
|
251
|
+
if (!NIL_P(cert)) {
|
252
|
+
StringValue(cert);
|
253
|
+
|
254
|
+
if (SSL_CTX_use_certificate_chain_file(ctx, RSTRING_PTR(cert)) != 1) {
|
255
|
+
raise_file_error("SSL_CTX_use_certificate_chain_file", RSTRING_PTR(cert));
|
256
|
+
}
|
257
|
+
}
|
258
|
+
|
259
|
+
if (!NIL_P(key)) {
|
260
|
+
StringValue(key);
|
261
|
+
|
262
|
+
if (SSL_CTX_use_PrivateKey_file(ctx, RSTRING_PTR(key), SSL_FILETYPE_PEM) != 1) {
|
263
|
+
raise_file_error("SSL_CTX_use_PrivateKey_file", RSTRING_PTR(key));
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
if (!NIL_P(cert_pem)) {
|
268
|
+
bio = BIO_new(BIO_s_mem());
|
269
|
+
BIO_puts(bio, RSTRING_PTR(cert_pem));
|
270
|
+
x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
|
271
|
+
|
272
|
+
if (SSL_CTX_use_certificate(ctx, x509) != 1) {
|
273
|
+
raise_file_error("SSL_CTX_use_certificate", RSTRING_PTR(cert_pem));
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
277
|
+
if (!NIL_P(key_pem)) {
|
278
|
+
bio = BIO_new(BIO_s_mem());
|
279
|
+
BIO_puts(bio, RSTRING_PTR(key_pem));
|
280
|
+
pkey = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
|
281
|
+
|
282
|
+
if (SSL_CTX_use_PrivateKey(ctx, pkey) != 1) {
|
283
|
+
raise_file_error("SSL_CTX_use_PrivateKey", RSTRING_PTR(key_pem));
|
284
|
+
}
|
285
|
+
}
|
238
286
|
|
239
287
|
verification_flags = rb_funcall(mini_ssl_ctx, rb_intern_const("verification_flags"), 0);
|
240
288
|
|
@@ -246,7 +294,9 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
246
294
|
|
247
295
|
if (!NIL_P(ca)) {
|
248
296
|
StringValue(ca);
|
249
|
-
SSL_CTX_load_verify_locations(ctx, RSTRING_PTR(ca), NULL)
|
297
|
+
if (SSL_CTX_load_verify_locations(ctx, RSTRING_PTR(ca), NULL) != 1) {
|
298
|
+
raise_file_error("SSL_CTX_load_verify_locations", RSTRING_PTR(ca));
|
299
|
+
}
|
250
300
|
}
|
251
301
|
|
252
302
|
ssl_options = SSL_OP_CIPHER_SERVER_PREFERENCE | SSL_OP_SINGLE_ECDH_USE | SSL_OP_NO_COMPRESSION;
|
@@ -289,9 +339,6 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
289
339
|
SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL@STRENGTH");
|
290
340
|
}
|
291
341
|
|
292
|
-
dh = get_dh2048();
|
293
|
-
SSL_CTX_set_tmp_dh(ctx, dh);
|
294
|
-
|
295
342
|
#if OPENSSL_VERSION_NUMBER < 0x10002000L
|
296
343
|
// Remove this case if OpenSSL 1.0.1 (now EOL) support is no
|
297
344
|
// longer needed.
|
@@ -309,7 +356,31 @@ sslctx_initialize(VALUE self, VALUE mini_ssl_ctx) {
|
|
309
356
|
} else {
|
310
357
|
SSL_CTX_set_verify(ctx, NUM2INT(verify_mode), engine_verify_callback);
|
311
358
|
}
|
359
|
+
|
360
|
+
// Random.bytes available in Ruby 2.5 and later, Random::DEFAULT deprecated in 3.0
|
361
|
+
session_id_bytes = rb_funcall(
|
362
|
+
#ifdef HAVE_RANDOM_BYTES
|
363
|
+
rb_cRandom,
|
364
|
+
#else
|
365
|
+
rb_const_get(rb_cRandom, rb_intern_const("DEFAULT")),
|
366
|
+
#endif
|
367
|
+
rb_intern_const("bytes"),
|
368
|
+
1, ULL2NUM(SSL_MAX_SSL_SESSION_ID_LENGTH));
|
369
|
+
|
370
|
+
SSL_CTX_set_session_id_context(ctx,
|
371
|
+
(unsigned char *) RSTRING_PTR(session_id_bytes),
|
372
|
+
SSL_MAX_SSL_SESSION_ID_LENGTH);
|
373
|
+
|
312
374
|
// printf("\ninitialize end security_level %d\n", SSL_CTX_get_security_level(ctx));
|
375
|
+
|
376
|
+
#ifdef HAVE_SSL_CTX_SET_DH_AUTO
|
377
|
+
// https://www.openssl.org/docs/man3.0/man3/SSL_CTX_set_dh_auto.html
|
378
|
+
SSL_CTX_set_dh_auto(ctx, 1);
|
379
|
+
#else
|
380
|
+
dh = get_dh2048();
|
381
|
+
SSL_CTX_set_tmp_dh(ctx, dh);
|
382
|
+
#endif
|
383
|
+
|
313
384
|
rb_obj_freeze(self);
|
314
385
|
return self;
|
315
386
|
}
|
@@ -508,7 +579,11 @@ VALUE engine_peercert(VALUE self) {
|
|
508
579
|
|
509
580
|
TypedData_Get_Struct(self, ms_conn, &engine_data_type, conn);
|
510
581
|
|
582
|
+
#ifdef HAVE_SSL_GET1_PEER_CERTIFICATE
|
583
|
+
cert = SSL_get1_peer_certificate(conn->ssl);
|
584
|
+
#else
|
511
585
|
cert = SSL_get_peer_certificate(conn->ssl);
|
586
|
+
#endif
|
512
587
|
if(!cert) {
|
513
588
|
/*
|
514
589
|
* See if there was a failed certificate associated with this client.
|
@@ -565,7 +640,10 @@ void Init_mini_ssl(VALUE puma) {
|
|
565
640
|
ERR_load_crypto_strings();
|
566
641
|
|
567
642
|
mod = rb_define_module_under(puma, "MiniSSL");
|
643
|
+
|
568
644
|
eng = rb_define_class_under(mod, "Engine", rb_cObject);
|
645
|
+
rb_undef_alloc_func(eng);
|
646
|
+
|
569
647
|
sslctx = rb_define_class_under(mod, "SSLContext", rb_cObject);
|
570
648
|
rb_define_alloc_func(sslctx, sslctx_alloc);
|
571
649
|
rb_define_method(sslctx, "initialize", sslctx_initialize, 1);
|
@@ -34,9 +34,9 @@ private static short[] init__puma_parser_key_offsets_0()
|
|
34
34
|
{
|
35
35
|
return new short [] {
|
36
36
|
0, 0, 8, 17, 27, 29, 30, 31, 32, 33, 34, 36,
|
37
|
-
39, 41, 44, 45, 61, 62, 78,
|
38
|
-
|
39
|
-
|
37
|
+
39, 41, 44, 45, 61, 62, 78, 85, 91, 99, 107, 117,
|
38
|
+
125, 134, 142, 150, 159, 168, 177, 186, 195, 204, 213, 222,
|
39
|
+
231, 240, 249, 258, 267, 276, 285, 294, 303, 312, 313
|
40
40
|
};
|
41
41
|
}
|
42
42
|
|
@@ -52,26 +52,27 @@ private static char[] init__puma_parser_trans_keys_0()
|
|
52
52
|
46, 48, 57, 48, 57, 13, 48, 57, 10, 13, 33, 124,
|
53
53
|
126, 35, 39, 42, 43, 45, 46, 48, 57, 65, 90, 94,
|
54
54
|
122, 10, 33, 58, 124, 126, 35, 39, 42, 43, 45, 46,
|
55
|
-
48, 57, 65, 90, 94, 122, 13, 32,
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
63
|
-
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
64
|
-
46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
65
|
-
65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
66
|
-
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
67
|
-
46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
68
|
-
65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
69
|
-
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
70
|
-
46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
71
|
-
65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
72
|
-
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
73
|
-
46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
74
|
-
65, 90, 32,
|
55
|
+
48, 57, 65, 90, 94, 122, 13, 32, 127, 0, 8, 10,
|
56
|
+
31, 13, 127, 0, 8, 10, 31, 32, 60, 62, 127, 0,
|
57
|
+
31, 34, 35, 32, 60, 62, 127, 0, 31, 34, 35, 43,
|
58
|
+
58, 45, 46, 48, 57, 65, 90, 97, 122, 32, 34, 35,
|
59
|
+
60, 62, 127, 0, 31, 32, 34, 35, 60, 62, 63, 127,
|
60
|
+
0, 31, 32, 34, 35, 60, 62, 127, 0, 31, 32, 34,
|
61
|
+
35, 60, 62, 127, 0, 31, 32, 36, 95, 45, 46, 48,
|
62
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
63
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
64
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
65
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
66
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
67
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
68
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
69
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
70
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
71
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
72
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
73
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
74
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
75
|
+
32, 0
|
75
76
|
};
|
76
77
|
}
|
77
78
|
|
@@ -82,7 +83,7 @@ private static byte[] init__puma_parser_single_lengths_0()
|
|
82
83
|
{
|
83
84
|
return new byte [] {
|
84
85
|
0, 2, 3, 4, 2, 1, 1, 1, 1, 1, 0, 1,
|
85
|
-
0, 1, 1, 4, 1, 4,
|
86
|
+
0, 1, 1, 4, 1, 4, 3, 2, 4, 4, 2, 6,
|
86
87
|
7, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
87
88
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0
|
88
89
|
};
|
@@ -95,7 +96,7 @@ private static byte[] init__puma_parser_range_lengths_0()
|
|
95
96
|
{
|
96
97
|
return new byte [] {
|
97
98
|
0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1,
|
98
|
-
1, 1, 0, 6, 0, 6,
|
99
|
+
1, 1, 0, 6, 0, 6, 2, 2, 2, 2, 4, 1,
|
99
100
|
1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
100
101
|
3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0
|
101
102
|
};
|
@@ -108,9 +109,9 @@ private static short[] init__puma_parser_index_offsets_0()
|
|
108
109
|
{
|
109
110
|
return new short [] {
|
110
111
|
0, 0, 6, 13, 21, 24, 26, 28, 30, 32, 34, 36,
|
111
|
-
39, 41, 44, 46, 57, 59, 70,
|
112
|
-
|
113
|
-
|
112
|
+
39, 41, 44, 46, 57, 59, 70, 76, 81, 88, 95, 102,
|
113
|
+
110, 119, 127, 135, 142, 149, 156, 163, 170, 177, 184, 191,
|
114
|
+
198, 205, 212, 219, 226, 233, 240, 247, 254, 261, 263
|
114
115
|
};
|
115
116
|
}
|
116
117
|
|
@@ -126,22 +127,23 @@ private static byte[] init__puma_parser_indicies_0()
|
|
126
127
|
16, 15, 1, 17, 1, 18, 17, 1, 19, 1, 20, 21,
|
127
128
|
21, 21, 21, 21, 21, 21, 21, 21, 1, 22, 1, 23,
|
128
129
|
24, 23, 23, 23, 23, 23, 23, 23, 23, 1, 26, 27,
|
129
|
-
|
130
|
-
1, 1, 1, 1,
|
131
|
-
|
132
|
-
1,
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
63, 63, 1, 2, 1, 1,
|
130
|
+
1, 1, 1, 25, 29, 1, 1, 1, 28, 30, 1, 1,
|
131
|
+
1, 1, 1, 31, 32, 1, 1, 1, 1, 1, 33, 34,
|
132
|
+
35, 34, 34, 34, 34, 1, 8, 1, 9, 1, 1, 1,
|
133
|
+
1, 35, 36, 1, 38, 1, 1, 39, 1, 1, 37, 40,
|
134
|
+
1, 42, 1, 1, 1, 1, 41, 43, 1, 45, 1, 1,
|
135
|
+
1, 1, 44, 2, 46, 46, 46, 46, 46, 1, 2, 47,
|
136
|
+
47, 47, 47, 47, 1, 2, 48, 48, 48, 48, 48, 1,
|
137
|
+
2, 49, 49, 49, 49, 49, 1, 2, 50, 50, 50, 50,
|
138
|
+
50, 1, 2, 51, 51, 51, 51, 51, 1, 2, 52, 52,
|
139
|
+
52, 52, 52, 1, 2, 53, 53, 53, 53, 53, 1, 2,
|
140
|
+
54, 54, 54, 54, 54, 1, 2, 55, 55, 55, 55, 55,
|
141
|
+
1, 2, 56, 56, 56, 56, 56, 1, 2, 57, 57, 57,
|
142
|
+
57, 57, 1, 2, 58, 58, 58, 58, 58, 1, 2, 59,
|
143
|
+
59, 59, 59, 59, 1, 2, 60, 60, 60, 60, 60, 1,
|
144
|
+
2, 61, 61, 61, 61, 61, 1, 2, 62, 62, 62, 62,
|
145
|
+
62, 1, 2, 63, 63, 63, 63, 63, 1, 2, 1, 1,
|
146
|
+
0
|
145
147
|
};
|
146
148
|
}
|
147
149
|
|
@@ -210,7 +212,7 @@ static final int puma_parser_error = 0;
|
|
210
212
|
cs = 0;
|
211
213
|
|
212
214
|
|
213
|
-
// line
|
215
|
+
// line 216 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
214
216
|
{
|
215
217
|
cs = puma_parser_start;
|
216
218
|
}
|
@@ -242,7 +244,7 @@ static final int puma_parser_error = 0;
|
|
242
244
|
parser.buffer = buffer;
|
243
245
|
|
244
246
|
|
245
|
-
// line
|
247
|
+
// line 248 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
246
248
|
{
|
247
249
|
int _klen;
|
248
250
|
int _trans = 0;
|
@@ -398,7 +400,7 @@ case 1:
|
|
398
400
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
399
401
|
}
|
400
402
|
break;
|
401
|
-
// line
|
403
|
+
// line 404 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
402
404
|
}
|
403
405
|
}
|
404
406
|
}
|