puma 2.16.0 → 3.11.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.
- checksums.yaml +5 -5
- data/{History.txt → History.md} +489 -70
- data/README.md +143 -174
- data/docs/architecture.md +36 -0
- data/{DEPLOYMENT.md → docs/deployment.md} +1 -1
- data/docs/images/puma-connection-flow-no-reactor.png +0 -0
- data/docs/images/puma-connection-flow.png +0 -0
- data/docs/images/puma-general-arch.png +0 -0
- data/docs/nginx.md +2 -2
- data/docs/plugins.md +28 -0
- data/docs/restart.md +39 -0
- data/docs/signals.md +56 -3
- data/docs/systemd.md +272 -0
- data/ext/puma_http11/extconf.rb +2 -0
- data/ext/puma_http11/http11_parser.c +291 -447
- data/ext/puma_http11/http11_parser.h +1 -0
- data/ext/puma_http11/http11_parser.java.rl +5 -5
- data/ext/puma_http11/http11_parser.rl +10 -9
- data/ext/puma_http11/http11_parser_common.rl +1 -1
- data/ext/puma_http11/io_buffer.c +8 -8
- data/ext/puma_http11/mini_ssl.c +64 -6
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +113 -131
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +9 -2
- data/ext/puma_http11/puma_http11.c +1 -0
- data/lib/puma/app/status.rb +9 -1
- data/lib/puma/binder.rb +90 -38
- data/lib/puma/cli.rb +134 -491
- data/lib/puma/client.rb +142 -4
- data/lib/puma/cluster.rb +132 -76
- data/lib/puma/commonlogger.rb +19 -20
- data/lib/puma/compat.rb +3 -7
- data/lib/puma/configuration.rb +206 -67
- data/lib/puma/const.rb +21 -31
- data/lib/puma/control_cli.rb +92 -103
- data/lib/puma/convenient.rb +23 -0
- data/lib/puma/daemon_ext.rb +6 -0
- data/lib/puma/detect.rb +10 -1
- data/lib/puma/dsl.rb +203 -45
- data/lib/puma/events.rb +22 -13
- data/lib/puma/io_buffer.rb +1 -1
- data/lib/puma/jruby_restart.rb +1 -2
- data/lib/puma/launcher.rb +431 -0
- data/lib/puma/minissl.rb +83 -4
- data/lib/puma/null_io.rb +19 -11
- data/lib/puma/plugin/tmp_restart.rb +34 -0
- data/lib/puma/plugin.rb +115 -0
- data/lib/puma/rack/backports/uri/common_193.rb +17 -13
- data/lib/puma/rack/builder.rb +3 -0
- data/lib/puma/rack/urlmap.rb +9 -8
- data/lib/puma/reactor.rb +18 -0
- data/lib/puma/runner.rb +43 -15
- data/lib/puma/server.rb +141 -35
- data/lib/puma/single.rb +16 -6
- data/lib/puma/state_file.rb +29 -0
- data/lib/puma/tcp_logger.rb +8 -1
- data/lib/puma/thread_pool.rb +60 -10
- data/lib/puma/util.rb +1 -5
- data/lib/puma.rb +13 -4
- data/lib/rack/handler/puma.rb +76 -29
- data/tools/jungle/README.md +12 -2
- data/tools/jungle/init.d/README.md +9 -2
- data/tools/jungle/init.d/puma +86 -59
- data/tools/jungle/init.d/run-puma +16 -1
- data/tools/jungle/rc.d/README.md +74 -0
- data/tools/jungle/rc.d/puma +61 -0
- data/tools/jungle/rc.d/puma.conf +10 -0
- data/tools/jungle/upstart/puma.conf +1 -1
- data/tools/trickletest.rb +1 -1
- metadata +28 -95
- data/COPYING +0 -55
- data/Gemfile +0 -13
- data/Manifest.txt +0 -74
- data/Rakefile +0 -158
- data/docs/config.md +0 -0
- data/lib/puma/capistrano.rb +0 -94
- data/lib/puma/rack/backports/uri/common_18.rb +0 -56
- data/lib/puma/rack/backports/uri/common_192.rb +0 -52
- data/puma.gemspec +0 -52
|
@@ -15,7 +15,7 @@ public class Http11Parser {
|
|
|
15
15
|
/** Data **/
|
|
16
16
|
|
|
17
17
|
// line 18 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
18
|
-
private static byte[]
|
|
18
|
+
private static byte[] init__puma_parser_actions_0()
|
|
19
19
|
{
|
|
20
20
|
return new byte [] {
|
|
21
21
|
0, 1, 0, 1, 2, 1, 3, 1, 4, 1, 5, 1,
|
|
@@ -25,24 +25,23 @@ private static byte[] init__http_parser_actions_0()
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
private static final byte
|
|
28
|
+
private static final byte _puma_parser_actions[] = init__puma_parser_actions_0();
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
private static short[]
|
|
31
|
+
private static short[] init__puma_parser_key_offsets_0()
|
|
32
32
|
{
|
|
33
33
|
return new short [] {
|
|
34
34
|
0, 0, 8, 17, 27, 29, 30, 31, 32, 33, 34, 36,
|
|
35
|
-
39, 41, 44, 45, 61, 62, 78, 80, 81,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
307, 316, 325, 334, 343, 352, 361, 370, 379, 380
|
|
35
|
+
39, 41, 44, 45, 61, 62, 78, 80, 81, 89, 97, 107,
|
|
36
|
+
115, 125, 134, 142, 150, 159, 168, 177, 186, 195, 204, 213,
|
|
37
|
+
222, 231, 240, 249, 258, 267, 276, 285, 294, 303, 312, 313
|
|
39
38
|
};
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
private static final short
|
|
41
|
+
private static final short _puma_parser_key_offsets[] = init__puma_parser_key_offsets_0();
|
|
43
42
|
|
|
44
43
|
|
|
45
|
-
private static char[]
|
|
44
|
+
private static char[] init__puma_parser_trans_keys_0()
|
|
46
45
|
{
|
|
47
46
|
return new char [] {
|
|
48
47
|
36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45,
|
|
@@ -51,81 +50,73 @@ private static char[] init__http_parser_trans_keys_0()
|
|
|
51
50
|
46, 48, 57, 48, 57, 13, 48, 57, 10, 13, 33, 124,
|
|
52
51
|
126, 35, 39, 42, 43, 45, 46, 48, 57, 65, 90, 94,
|
|
53
52
|
122, 10, 33, 58, 124, 126, 35, 39, 42, 43, 45, 46,
|
|
54
|
-
48, 57, 65, 90, 94, 122, 13, 32, 13, 32,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
35,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
|
76
|
-
95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
|
|
77
|
-
48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
|
|
78
|
-
90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
|
|
79
|
-
95, 45, 46, 48, 57, 65, 90, 32, 0
|
|
53
|
+
48, 57, 65, 90, 94, 122, 13, 32, 13, 32, 60, 62,
|
|
54
|
+
127, 0, 31, 34, 35, 32, 60, 62, 127, 0, 31, 34,
|
|
55
|
+
35, 43, 58, 45, 46, 48, 57, 65, 90, 97, 122, 32,
|
|
56
|
+
34, 35, 60, 62, 127, 0, 31, 32, 34, 35, 59, 60,
|
|
57
|
+
62, 63, 127, 0, 31, 32, 34, 35, 60, 62, 63, 127,
|
|
58
|
+
0, 31, 32, 34, 35, 60, 62, 127, 0, 31, 32, 34,
|
|
59
|
+
35, 60, 62, 127, 0, 31, 32, 36, 95, 45, 46, 48,
|
|
60
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
|
61
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
|
62
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
|
63
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
|
64
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
|
65
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
|
66
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
|
67
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
|
68
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
|
69
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
|
70
|
+
32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
|
|
71
|
+
45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
|
|
72
|
+
57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
|
|
73
|
+
32, 0
|
|
80
74
|
};
|
|
81
75
|
}
|
|
82
76
|
|
|
83
|
-
private static final char
|
|
77
|
+
private static final char _puma_parser_trans_keys[] = init__puma_parser_trans_keys_0();
|
|
84
78
|
|
|
85
79
|
|
|
86
|
-
private static byte[]
|
|
80
|
+
private static byte[] init__puma_parser_single_lengths_0()
|
|
87
81
|
{
|
|
88
82
|
return new byte [] {
|
|
89
83
|
0, 2, 3, 4, 2, 1, 1, 1, 1, 1, 0, 1,
|
|
90
|
-
0, 1, 1, 4, 1, 4, 2, 1,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
3, 3, 3, 3, 3, 3, 3, 3, 1, 0
|
|
84
|
+
0, 1, 1, 4, 1, 4, 2, 1, 4, 4, 2, 6,
|
|
85
|
+
8, 7, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
86
|
+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0
|
|
94
87
|
};
|
|
95
88
|
}
|
|
96
89
|
|
|
97
|
-
private static final byte
|
|
90
|
+
private static final byte _puma_parser_single_lengths[] = init__puma_parser_single_lengths_0();
|
|
98
91
|
|
|
99
92
|
|
|
100
|
-
private static byte[]
|
|
93
|
+
private static byte[] init__puma_parser_range_lengths_0()
|
|
101
94
|
{
|
|
102
95
|
return new byte [] {
|
|
103
96
|
0, 3, 3, 3, 0, 0, 0, 0, 0, 0, 1, 1,
|
|
104
|
-
1, 1, 0, 6, 0, 6, 0, 0, 2, 2,
|
|
105
|
-
|
|
106
|
-
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
107
|
-
3, 3, 3, 3, 3, 3, 3, 3, 0, 0
|
|
97
|
+
1, 1, 0, 6, 0, 6, 0, 0, 2, 2, 4, 1,
|
|
98
|
+
1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
|
|
99
|
+
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0
|
|
108
100
|
};
|
|
109
101
|
}
|
|
110
102
|
|
|
111
|
-
private static final byte
|
|
103
|
+
private static final byte _puma_parser_range_lengths[] = init__puma_parser_range_lengths_0();
|
|
112
104
|
|
|
113
105
|
|
|
114
|
-
private static short[]
|
|
106
|
+
private static short[] init__puma_parser_index_offsets_0()
|
|
115
107
|
{
|
|
116
108
|
return new short [] {
|
|
117
109
|
0, 0, 6, 13, 21, 24, 26, 28, 30, 32, 34, 36,
|
|
118
|
-
39, 41, 44, 46, 57, 59, 70, 73, 75,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
256, 263, 270, 277, 284, 291, 298, 305, 312, 314
|
|
110
|
+
39, 41, 44, 46, 57, 59, 70, 73, 75, 82, 89, 96,
|
|
111
|
+
104, 114, 123, 131, 139, 146, 153, 160, 167, 174, 181, 188,
|
|
112
|
+
195, 202, 209, 216, 223, 230, 237, 244, 251, 258, 265, 267
|
|
122
113
|
};
|
|
123
114
|
}
|
|
124
115
|
|
|
125
|
-
private static final short
|
|
116
|
+
private static final short _puma_parser_index_offsets[] = init__puma_parser_index_offsets_0();
|
|
126
117
|
|
|
127
118
|
|
|
128
|
-
private static byte[]
|
|
119
|
+
private static byte[] init__puma_parser_indicies_0()
|
|
129
120
|
{
|
|
130
121
|
return new byte [] {
|
|
131
122
|
0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3,
|
|
@@ -134,71 +125,62 @@ private static byte[] init__http_parser_indicies_0()
|
|
|
134
125
|
16, 15, 1, 17, 1, 18, 17, 1, 19, 1, 20, 21,
|
|
135
126
|
21, 21, 21, 21, 21, 21, 21, 21, 1, 22, 1, 23,
|
|
136
127
|
24, 23, 23, 23, 23, 23, 23, 23, 23, 1, 26, 27,
|
|
137
|
-
25, 29, 28, 30,
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
1,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
53,
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
1, 2, 74, 74, 74, 74, 74, 1, 2, 75, 75, 75,
|
|
155
|
-
75, 75, 1, 2, 76, 76, 76, 76, 76, 1, 2, 77,
|
|
156
|
-
77, 77, 77, 77, 1, 2, 78, 78, 78, 78, 78, 1,
|
|
157
|
-
2, 1, 1, 0
|
|
128
|
+
25, 29, 28, 30, 1, 1, 1, 1, 1, 31, 32, 1,
|
|
129
|
+
1, 1, 1, 1, 33, 34, 35, 34, 34, 34, 34, 1,
|
|
130
|
+
8, 1, 9, 1, 1, 1, 1, 35, 36, 1, 38, 39,
|
|
131
|
+
1, 1, 40, 1, 1, 37, 8, 1, 9, 1, 1, 42,
|
|
132
|
+
1, 1, 41, 43, 1, 45, 1, 1, 1, 1, 44, 46,
|
|
133
|
+
1, 48, 1, 1, 1, 1, 47, 2, 49, 49, 49, 49,
|
|
134
|
+
49, 1, 2, 50, 50, 50, 50, 50, 1, 2, 51, 51,
|
|
135
|
+
51, 51, 51, 1, 2, 52, 52, 52, 52, 52, 1, 2,
|
|
136
|
+
53, 53, 53, 53, 53, 1, 2, 54, 54, 54, 54, 54,
|
|
137
|
+
1, 2, 55, 55, 55, 55, 55, 1, 2, 56, 56, 56,
|
|
138
|
+
56, 56, 1, 2, 57, 57, 57, 57, 57, 1, 2, 58,
|
|
139
|
+
58, 58, 58, 58, 1, 2, 59, 59, 59, 59, 59, 1,
|
|
140
|
+
2, 60, 60, 60, 60, 60, 1, 2, 61, 61, 61, 61,
|
|
141
|
+
61, 1, 2, 62, 62, 62, 62, 62, 1, 2, 63, 63,
|
|
142
|
+
63, 63, 63, 1, 2, 64, 64, 64, 64, 64, 1, 2,
|
|
143
|
+
65, 65, 65, 65, 65, 1, 2, 66, 66, 66, 66, 66,
|
|
144
|
+
1, 2, 1, 1, 0
|
|
158
145
|
};
|
|
159
146
|
}
|
|
160
147
|
|
|
161
|
-
private static final byte
|
|
148
|
+
private static final byte _puma_parser_indicies[] = init__puma_parser_indicies_0();
|
|
162
149
|
|
|
163
150
|
|
|
164
|
-
private static byte[]
|
|
151
|
+
private static byte[] init__puma_parser_trans_targs_0()
|
|
165
152
|
{
|
|
166
153
|
return new byte [] {
|
|
167
|
-
2, 0, 3,
|
|
168
|
-
8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
|
169
|
-
18, 19, 14, 18, 19, 14, 5, 21,
|
|
170
|
-
|
|
171
|
-
31, 32,
|
|
172
|
-
|
|
173
|
-
50, 51, 52, 53, 54, 55, 56
|
|
154
|
+
2, 0, 3, 28, 4, 22, 24, 23, 5, 20, 6, 7,
|
|
155
|
+
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 47, 17,
|
|
156
|
+
18, 19, 14, 18, 19, 14, 5, 21, 5, 21, 22, 23,
|
|
157
|
+
5, 24, 20, 25, 26, 25, 26, 5, 27, 20, 5, 27,
|
|
158
|
+
20, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
|
|
159
|
+
40, 41, 42, 43, 44, 45, 46
|
|
174
160
|
};
|
|
175
161
|
}
|
|
176
162
|
|
|
177
|
-
private static final byte
|
|
163
|
+
private static final byte _puma_parser_trans_targs[] = init__puma_parser_trans_targs_0();
|
|
178
164
|
|
|
179
165
|
|
|
180
|
-
private static byte[]
|
|
166
|
+
private static byte[] init__puma_parser_trans_actions_0()
|
|
181
167
|
{
|
|
182
168
|
return new byte [] {
|
|
183
169
|
1, 0, 11, 0, 1, 1, 1, 1, 13, 13, 1, 0,
|
|
184
170
|
0, 0, 0, 0, 0, 0, 19, 0, 0, 28, 23, 3,
|
|
185
|
-
5, 7, 31, 7, 0, 9, 25, 1,
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
171
|
+
5, 7, 31, 7, 0, 9, 25, 1, 15, 0, 0, 0,
|
|
172
|
+
37, 0, 37, 21, 21, 0, 0, 40, 17, 40, 34, 0,
|
|
173
|
+
34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
189
174
|
0, 0, 0, 0, 0, 0, 0
|
|
190
175
|
};
|
|
191
176
|
}
|
|
192
177
|
|
|
193
|
-
private static final byte
|
|
178
|
+
private static final byte _puma_parser_trans_actions[] = init__puma_parser_trans_actions_0();
|
|
194
179
|
|
|
195
180
|
|
|
196
|
-
static final int
|
|
197
|
-
static final int
|
|
198
|
-
static final int
|
|
199
|
-
|
|
200
|
-
static final int http_parser_en_main = 1;
|
|
201
|
-
|
|
181
|
+
static final int puma_parser_start = 1;
|
|
182
|
+
static final int puma_parser_first_final = 47;
|
|
183
|
+
static final int puma_parser_error = 0;
|
|
202
184
|
|
|
203
185
|
// line 69 "ext/puma_http11/http11_parser.java.rl"
|
|
204
186
|
|
|
@@ -235,10 +217,10 @@ static final int http_parser_en_main = 1;
|
|
|
235
217
|
public void init() {
|
|
236
218
|
cs = 0;
|
|
237
219
|
|
|
238
|
-
|
|
239
|
-
// line
|
|
220
|
+
|
|
221
|
+
// line 225 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
240
222
|
{
|
|
241
|
-
cs =
|
|
223
|
+
cs = puma_parser_start;
|
|
242
224
|
}
|
|
243
225
|
|
|
244
226
|
// line 104 "ext/puma_http11/http11_parser.java.rl"
|
|
@@ -267,8 +249,8 @@ static final int http_parser_en_main = 1;
|
|
|
267
249
|
byte[] data = buffer.bytes();
|
|
268
250
|
parser.buffer = buffer;
|
|
269
251
|
|
|
270
|
-
|
|
271
|
-
// line
|
|
252
|
+
|
|
253
|
+
// line 257 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
272
254
|
{
|
|
273
255
|
int _klen;
|
|
274
256
|
int _trans = 0;
|
|
@@ -290,9 +272,9 @@ static final int http_parser_en_main = 1;
|
|
|
290
272
|
}
|
|
291
273
|
case 1:
|
|
292
274
|
_match: do {
|
|
293
|
-
_keys =
|
|
294
|
-
_trans =
|
|
295
|
-
_klen =
|
|
275
|
+
_keys = _puma_parser_key_offsets[cs];
|
|
276
|
+
_trans = _puma_parser_index_offsets[cs];
|
|
277
|
+
_klen = _puma_parser_single_lengths[cs];
|
|
296
278
|
if ( _klen > 0 ) {
|
|
297
279
|
int _lower = _keys;
|
|
298
280
|
int _mid;
|
|
@@ -302,9 +284,9 @@ case 1:
|
|
|
302
284
|
break;
|
|
303
285
|
|
|
304
286
|
_mid = _lower + ((_upper-_lower) >> 1);
|
|
305
|
-
if ( data[p] <
|
|
287
|
+
if ( data[p] < _puma_parser_trans_keys[_mid] )
|
|
306
288
|
_upper = _mid - 1;
|
|
307
|
-
else if ( data[p] >
|
|
289
|
+
else if ( data[p] > _puma_parser_trans_keys[_mid] )
|
|
308
290
|
_lower = _mid + 1;
|
|
309
291
|
else {
|
|
310
292
|
_trans += (_mid - _keys);
|
|
@@ -315,7 +297,7 @@ case 1:
|
|
|
315
297
|
_trans += _klen;
|
|
316
298
|
}
|
|
317
299
|
|
|
318
|
-
_klen =
|
|
300
|
+
_klen = _puma_parser_range_lengths[cs];
|
|
319
301
|
if ( _klen > 0 ) {
|
|
320
302
|
int _lower = _keys;
|
|
321
303
|
int _mid;
|
|
@@ -325,9 +307,9 @@ case 1:
|
|
|
325
307
|
break;
|
|
326
308
|
|
|
327
309
|
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
|
|
328
|
-
if ( data[p] <
|
|
310
|
+
if ( data[p] < _puma_parser_trans_keys[_mid] )
|
|
329
311
|
_upper = _mid - 2;
|
|
330
|
-
else if ( data[p] >
|
|
312
|
+
else if ( data[p] > _puma_parser_trans_keys[_mid+1] )
|
|
331
313
|
_lower = _mid + 2;
|
|
332
314
|
else {
|
|
333
315
|
_trans += ((_mid - _keys)>>1);
|
|
@@ -338,15 +320,15 @@ case 1:
|
|
|
338
320
|
}
|
|
339
321
|
} while (false);
|
|
340
322
|
|
|
341
|
-
_trans =
|
|
342
|
-
cs =
|
|
323
|
+
_trans = _puma_parser_indicies[_trans];
|
|
324
|
+
cs = _puma_parser_trans_targs[_trans];
|
|
343
325
|
|
|
344
|
-
if (
|
|
345
|
-
_acts =
|
|
346
|
-
_nacts = (int)
|
|
326
|
+
if ( _puma_parser_trans_actions[_trans] != 0 ) {
|
|
327
|
+
_acts = _puma_parser_trans_actions[_trans];
|
|
328
|
+
_nacts = (int) _puma_parser_actions[_acts++];
|
|
347
329
|
while ( _nacts-- > 0 )
|
|
348
330
|
{
|
|
349
|
-
switch (
|
|
331
|
+
switch ( _puma_parser_actions[_acts++] )
|
|
350
332
|
{
|
|
351
333
|
case 0:
|
|
352
334
|
// line 13 "ext/puma_http11/http11_parser.java.rl"
|
|
@@ -362,7 +344,7 @@ case 1:
|
|
|
362
344
|
break;
|
|
363
345
|
case 3:
|
|
364
346
|
// line 17 "ext/puma_http11/http11_parser.java.rl"
|
|
365
|
-
{
|
|
347
|
+
{
|
|
366
348
|
parser.field_len = p-parser.field_start;
|
|
367
349
|
}
|
|
368
350
|
break;
|
|
@@ -372,7 +354,7 @@ case 1:
|
|
|
372
354
|
break;
|
|
373
355
|
case 5:
|
|
374
356
|
// line 22 "ext/puma_http11/http11_parser.java.rl"
|
|
375
|
-
{
|
|
357
|
+
{
|
|
376
358
|
if(parser.http_field != null) {
|
|
377
359
|
parser.http_field.call(parser.data, parser.field_start, parser.field_len, parser.mark, p-parser.mark);
|
|
378
360
|
}
|
|
@@ -380,21 +362,21 @@ case 1:
|
|
|
380
362
|
break;
|
|
381
363
|
case 6:
|
|
382
364
|
// line 27 "ext/puma_http11/http11_parser.java.rl"
|
|
383
|
-
{
|
|
384
|
-
if(parser.request_method != null)
|
|
365
|
+
{
|
|
366
|
+
if(parser.request_method != null)
|
|
385
367
|
parser.request_method.call(parser.data, parser.mark, p-parser.mark);
|
|
386
368
|
}
|
|
387
369
|
break;
|
|
388
370
|
case 7:
|
|
389
371
|
// line 31 "ext/puma_http11/http11_parser.java.rl"
|
|
390
|
-
{
|
|
372
|
+
{
|
|
391
373
|
if(parser.request_uri != null)
|
|
392
374
|
parser.request_uri.call(parser.data, parser.mark, p-parser.mark);
|
|
393
375
|
}
|
|
394
376
|
break;
|
|
395
377
|
case 8:
|
|
396
378
|
// line 35 "ext/puma_http11/http11_parser.java.rl"
|
|
397
|
-
{
|
|
379
|
+
{
|
|
398
380
|
if(parser.fragment != null)
|
|
399
381
|
parser.fragment.call(parser.data, parser.mark, p-parser.mark);
|
|
400
382
|
}
|
|
@@ -405,14 +387,14 @@ case 1:
|
|
|
405
387
|
break;
|
|
406
388
|
case 10:
|
|
407
389
|
// line 41 "ext/puma_http11/http11_parser.java.rl"
|
|
408
|
-
{
|
|
390
|
+
{
|
|
409
391
|
if(parser.query_string != null)
|
|
410
392
|
parser.query_string.call(parser.data, parser.query_start, p-parser.query_start);
|
|
411
393
|
}
|
|
412
394
|
break;
|
|
413
395
|
case 11:
|
|
414
396
|
// line 46 "ext/puma_http11/http11_parser.java.rl"
|
|
415
|
-
{
|
|
397
|
+
{
|
|
416
398
|
if(parser.http_version != null)
|
|
417
399
|
parser.http_version.call(parser.data, parser.mark, p-parser.mark);
|
|
418
400
|
}
|
|
@@ -426,14 +408,14 @@ case 1:
|
|
|
426
408
|
break;
|
|
427
409
|
case 13:
|
|
428
410
|
// line 56 "ext/puma_http11/http11_parser.java.rl"
|
|
429
|
-
{
|
|
430
|
-
parser.body_start = p + 1;
|
|
411
|
+
{
|
|
412
|
+
parser.body_start = p + 1;
|
|
431
413
|
if(parser.header_done != null)
|
|
432
414
|
parser.header_done.call(parser.data, p + 1, pe - p - 1);
|
|
433
415
|
{ p += 1; _goto_targ = 5; if (true) continue _goto;}
|
|
434
416
|
}
|
|
435
417
|
break;
|
|
436
|
-
// line
|
|
418
|
+
// line 422 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
|
|
437
419
|
}
|
|
438
420
|
}
|
|
439
421
|
}
|
|
@@ -457,7 +439,7 @@ case 5:
|
|
|
457
439
|
|
|
458
440
|
parser.cs = cs;
|
|
459
441
|
parser.nread += (p - off);
|
|
460
|
-
|
|
442
|
+
|
|
461
443
|
assert p <= pe : "buffer overflow after parsing execute";
|
|
462
444
|
assert parser.nread <= len : "nread longer than length";
|
|
463
445
|
assert parser.body_start <= len : "body starts after buffer end";
|
|
@@ -479,10 +461,10 @@ case 5:
|
|
|
479
461
|
}
|
|
480
462
|
|
|
481
463
|
public boolean has_error() {
|
|
482
|
-
return parser.cs ==
|
|
464
|
+
return parser.cs == puma_parser_error;
|
|
483
465
|
}
|
|
484
466
|
|
|
485
467
|
public boolean is_finished() {
|
|
486
|
-
return parser.cs ==
|
|
468
|
+
return parser.cs == puma_parser_first_final;
|
|
487
469
|
}
|
|
488
470
|
}
|
|
@@ -6,6 +6,7 @@ import org.jruby.RubyModule;
|
|
|
6
6
|
import org.jruby.RubyObject;
|
|
7
7
|
import org.jruby.RubyString;
|
|
8
8
|
import org.jruby.anno.JRubyMethod;
|
|
9
|
+
import org.jruby.javasupport.JavaEmbedUtils;
|
|
9
10
|
import org.jruby.runtime.Block;
|
|
10
11
|
import org.jruby.runtime.ObjectAllocator;
|
|
11
12
|
import org.jruby.runtime.ThreadContext;
|
|
@@ -18,6 +19,7 @@ import javax.net.ssl.SSLContext;
|
|
|
18
19
|
import javax.net.ssl.SSLEngine;
|
|
19
20
|
import javax.net.ssl.SSLEngineResult;
|
|
20
21
|
import javax.net.ssl.SSLException;
|
|
22
|
+
import javax.net.ssl.SSLPeerUnverifiedException;
|
|
21
23
|
import javax.net.ssl.SSLSession;
|
|
22
24
|
import java.io.FileInputStream;
|
|
23
25
|
import java.io.IOException;
|
|
@@ -27,6 +29,7 @@ import java.security.KeyStore;
|
|
|
27
29
|
import java.security.KeyStoreException;
|
|
28
30
|
import java.security.NoSuchAlgorithmException;
|
|
29
31
|
import java.security.UnrecoverableKeyException;
|
|
32
|
+
import java.security.cert.CertificateEncodingException;
|
|
30
33
|
import java.security.cert.CertificateException;
|
|
31
34
|
|
|
32
35
|
import static javax.net.ssl.SSLEngineResult.Status;
|
|
@@ -333,7 +336,11 @@ public class MiniSSL extends RubyObject {
|
|
|
333
336
|
}
|
|
334
337
|
|
|
335
338
|
@JRubyMethod
|
|
336
|
-
public IRubyObject peercert() {
|
|
337
|
-
|
|
339
|
+
public IRubyObject peercert() throws CertificateEncodingException {
|
|
340
|
+
try {
|
|
341
|
+
return JavaEmbedUtils.javaToRuby(getRuntime(), engine.getSession().getPeerCertificates()[0].getEncoded());
|
|
342
|
+
} catch (SSLPeerUnverifiedException ex) {
|
|
343
|
+
return getRuntime().getNil();
|
|
344
|
+
}
|
|
338
345
|
}
|
|
339
346
|
}
|
data/lib/puma/app/status.rb
CHANGED
|
@@ -49,12 +49,20 @@ module Puma
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
when /\/reload-worker-directory$/
|
|
52
|
-
if !@cli.reload_worker_directory
|
|
52
|
+
if !@cli.send(:reload_worker_directory)
|
|
53
53
|
return rack_response(404, '{ "error": "reload_worker_directory not available" }')
|
|
54
54
|
else
|
|
55
55
|
return rack_response(200, OK_STATUS)
|
|
56
56
|
end
|
|
57
57
|
|
|
58
|
+
when /\/gc$/
|
|
59
|
+
GC.start
|
|
60
|
+
return rack_response(200, OK_STATUS)
|
|
61
|
+
|
|
62
|
+
when /\/gc-stats$/
|
|
63
|
+
json = "{" + GC.stat.map { |k, v| "\"#{k}\": #{v}" }.join(",") + "}"
|
|
64
|
+
return rack_response(200, json)
|
|
65
|
+
|
|
58
66
|
when /\/stats$/
|
|
59
67
|
return rack_response(200, @cli.stats)
|
|
60
68
|
else
|