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.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/{History.txt → History.md} +489 -70
  3. data/README.md +143 -174
  4. data/docs/architecture.md +36 -0
  5. data/{DEPLOYMENT.md → docs/deployment.md} +1 -1
  6. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  7. data/docs/images/puma-connection-flow.png +0 -0
  8. data/docs/images/puma-general-arch.png +0 -0
  9. data/docs/nginx.md +2 -2
  10. data/docs/plugins.md +28 -0
  11. data/docs/restart.md +39 -0
  12. data/docs/signals.md +56 -3
  13. data/docs/systemd.md +272 -0
  14. data/ext/puma_http11/extconf.rb +2 -0
  15. data/ext/puma_http11/http11_parser.c +291 -447
  16. data/ext/puma_http11/http11_parser.h +1 -0
  17. data/ext/puma_http11/http11_parser.java.rl +5 -5
  18. data/ext/puma_http11/http11_parser.rl +10 -9
  19. data/ext/puma_http11/http11_parser_common.rl +1 -1
  20. data/ext/puma_http11/io_buffer.c +8 -8
  21. data/ext/puma_http11/mini_ssl.c +64 -6
  22. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +113 -131
  23. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +9 -2
  24. data/ext/puma_http11/puma_http11.c +1 -0
  25. data/lib/puma/app/status.rb +9 -1
  26. data/lib/puma/binder.rb +90 -38
  27. data/lib/puma/cli.rb +134 -491
  28. data/lib/puma/client.rb +142 -4
  29. data/lib/puma/cluster.rb +132 -76
  30. data/lib/puma/commonlogger.rb +19 -20
  31. data/lib/puma/compat.rb +3 -7
  32. data/lib/puma/configuration.rb +206 -67
  33. data/lib/puma/const.rb +21 -31
  34. data/lib/puma/control_cli.rb +92 -103
  35. data/lib/puma/convenient.rb +23 -0
  36. data/lib/puma/daemon_ext.rb +6 -0
  37. data/lib/puma/detect.rb +10 -1
  38. data/lib/puma/dsl.rb +203 -45
  39. data/lib/puma/events.rb +22 -13
  40. data/lib/puma/io_buffer.rb +1 -1
  41. data/lib/puma/jruby_restart.rb +1 -2
  42. data/lib/puma/launcher.rb +431 -0
  43. data/lib/puma/minissl.rb +83 -4
  44. data/lib/puma/null_io.rb +19 -11
  45. data/lib/puma/plugin/tmp_restart.rb +34 -0
  46. data/lib/puma/plugin.rb +115 -0
  47. data/lib/puma/rack/backports/uri/common_193.rb +17 -13
  48. data/lib/puma/rack/builder.rb +3 -0
  49. data/lib/puma/rack/urlmap.rb +9 -8
  50. data/lib/puma/reactor.rb +18 -0
  51. data/lib/puma/runner.rb +43 -15
  52. data/lib/puma/server.rb +141 -35
  53. data/lib/puma/single.rb +16 -6
  54. data/lib/puma/state_file.rb +29 -0
  55. data/lib/puma/tcp_logger.rb +8 -1
  56. data/lib/puma/thread_pool.rb +60 -10
  57. data/lib/puma/util.rb +1 -5
  58. data/lib/puma.rb +13 -4
  59. data/lib/rack/handler/puma.rb +76 -29
  60. data/tools/jungle/README.md +12 -2
  61. data/tools/jungle/init.d/README.md +9 -2
  62. data/tools/jungle/init.d/puma +86 -59
  63. data/tools/jungle/init.d/run-puma +16 -1
  64. data/tools/jungle/rc.d/README.md +74 -0
  65. data/tools/jungle/rc.d/puma +61 -0
  66. data/tools/jungle/rc.d/puma.conf +10 -0
  67. data/tools/jungle/upstart/puma.conf +1 -1
  68. data/tools/trickletest.rb +1 -1
  69. metadata +28 -95
  70. data/COPYING +0 -55
  71. data/Gemfile +0 -13
  72. data/Manifest.txt +0 -74
  73. data/Rakefile +0 -158
  74. data/docs/config.md +0 -0
  75. data/lib/puma/capistrano.rb +0 -94
  76. data/lib/puma/rack/backports/uri/common_18.rb +0 -56
  77. data/lib/puma/rack/backports/uri/common_192.rb +0 -52
  78. 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[] init__http_parser_actions_0()
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 _http_parser_actions[] = init__http_parser_actions_0();
28
+ private static final byte _puma_parser_actions[] = init__puma_parser_actions_0();
29
29
 
30
30
 
31
- private static short[] init__http_parser_key_offsets_0()
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, 90, 99, 105,
36
- 111, 121, 130, 136, 142, 153, 159, 165, 175, 181, 187, 196,
37
- 205, 211, 217, 226, 235, 244, 253, 262, 271, 280, 289, 298,
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 _http_parser_key_offsets[] = init__http_parser_key_offsets_0();
41
+ private static final short _puma_parser_key_offsets[] = init__puma_parser_key_offsets_0();
43
42
 
44
43
 
45
- private static char[] init__http_parser_trans_keys_0()
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, 37, 60,
55
- 62, 127, 0, 31, 34, 35, 32, 37, 60, 62, 127, 0,
56
- 31, 34, 35, 48, 57, 65, 70, 97, 102, 48, 57, 65,
57
- 70, 97, 102, 43, 58, 45, 46, 48, 57, 65, 90, 97,
58
- 122, 32, 34, 35, 37, 60, 62, 127, 0, 31, 48, 57,
59
- 65, 70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 34,
60
- 35, 37, 59, 60, 62, 63, 127, 0, 31, 48, 57, 65,
61
- 70, 97, 102, 48, 57, 65, 70, 97, 102, 32, 34, 35,
62
- 37, 60, 62, 63, 127, 0, 31, 48, 57, 65, 70, 97,
63
- 102, 48, 57, 65, 70, 97, 102, 32, 34, 35, 37, 60,
64
- 62, 127, 0, 31, 32, 34, 35, 37, 60, 62, 127, 0,
65
- 31, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70, 97,
66
- 102, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
67
- 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
68
- 48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
69
- 90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
70
- 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
71
- 48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
72
- 90, 32, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36,
73
- 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46,
74
- 48, 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65,
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 _http_parser_trans_keys[] = init__http_parser_trans_keys_0();
77
+ private static final char _puma_parser_trans_keys[] = init__puma_parser_trans_keys_0();
84
78
 
85
79
 
86
- private static byte[] init__http_parser_single_lengths_0()
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, 5, 5, 0, 0,
91
- 2, 7, 0, 0, 9, 0, 0, 8, 0, 0, 7, 7,
92
- 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
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 _http_parser_single_lengths[] = init__http_parser_single_lengths_0();
90
+ private static final byte _puma_parser_single_lengths[] = init__puma_parser_single_lengths_0();
98
91
 
99
92
 
100
- private static byte[] init__http_parser_range_lengths_0()
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, 3, 3,
105
- 4, 1, 3, 3, 1, 3, 3, 1, 3, 3, 1, 1,
106
- 3, 3, 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 _http_parser_range_lengths[] = init__http_parser_range_lengths_0();
103
+ private static final byte _puma_parser_range_lengths[] = init__puma_parser_range_lengths_0();
112
104
 
113
105
 
114
- private static short[] init__http_parser_index_offsets_0()
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, 83, 91, 95,
119
- 99, 106, 115, 119, 123, 134, 138, 142, 152, 156, 160, 169,
120
- 178, 182, 186, 193, 200, 207, 214, 221, 228, 235, 242, 249,
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 _http_parser_index_offsets[] = init__http_parser_index_offsets_0();
116
+ private static final short _puma_parser_index_offsets[] = init__puma_parser_index_offsets_0();
126
117
 
127
118
 
128
- private static byte[] init__http_parser_indicies_0()
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, 32, 1, 1, 1, 1, 1, 31, 33,
138
- 35, 1, 1, 1, 1, 1, 34, 36, 36, 36, 1, 34,
139
- 34, 34, 1, 37, 38, 37, 37, 37, 37, 1, 8, 1,
140
- 9, 39, 1, 1, 1, 1, 38, 40, 40, 40, 1, 38,
141
- 38, 38, 1, 41, 1, 43, 44, 45, 1, 1, 46, 1,
142
- 1, 42, 47, 47, 47, 1, 42, 42, 42, 1, 8, 1,
143
- 9, 49, 1, 1, 50, 1, 1, 48, 51, 51, 51, 1,
144
- 48, 48, 48, 1, 52, 1, 54, 55, 1, 1, 1, 1,
145
- 53, 56, 1, 58, 59, 1, 1, 1, 1, 57, 60, 60,
146
- 60, 1, 57, 57, 57, 1, 2, 61, 61, 61, 61, 61,
147
- 1, 2, 62, 62, 62, 62, 62, 1, 2, 63, 63, 63,
148
- 63, 63, 1, 2, 64, 64, 64, 64, 64, 1, 2, 65,
149
- 65, 65, 65, 65, 1, 2, 66, 66, 66, 66, 66, 1,
150
- 2, 67, 67, 67, 67, 67, 1, 2, 68, 68, 68, 68,
151
- 68, 1, 2, 69, 69, 69, 69, 69, 1, 2, 70, 70,
152
- 70, 70, 70, 1, 2, 71, 71, 71, 71, 71, 1, 2,
153
- 72, 72, 72, 72, 72, 1, 2, 73, 73, 73, 73, 73,
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 _http_parser_indicies[] = init__http_parser_indicies_0();
148
+ private static final byte _puma_parser_indicies[] = init__puma_parser_indicies_0();
162
149
 
163
150
 
164
- private static byte[] init__http_parser_trans_targs_0()
151
+ private static byte[] init__puma_parser_trans_targs_0()
165
152
  {
166
153
  return new byte [] {
167
- 2, 0, 3, 38, 4, 24, 28, 25, 5, 20, 6, 7,
168
- 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 57, 17,
169
- 18, 19, 14, 18, 19, 14, 5, 21, 22, 5, 21, 22,
170
- 23, 24, 25, 26, 27, 5, 28, 20, 29, 31, 34, 30,
171
- 31, 32, 34, 33, 5, 35, 20, 36, 5, 35, 20, 36,
172
- 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
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 _http_parser_trans_targs[] = init__http_parser_trans_targs_0();
163
+ private static final byte _puma_parser_trans_targs[] = init__puma_parser_trans_targs_0();
178
164
 
179
165
 
180
- private static byte[] init__http_parser_trans_actions_0()
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, 1, 15, 0, 0,
186
- 0, 0, 0, 0, 0, 37, 0, 37, 0, 21, 21, 0,
187
- 0, 0, 0, 0, 40, 17, 40, 17, 34, 0, 34, 0,
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 _http_parser_trans_actions[] = init__http_parser_trans_actions_0();
178
+ private static final byte _puma_parser_trans_actions[] = init__puma_parser_trans_actions_0();
194
179
 
195
180
 
196
- static final int http_parser_start = 1;
197
- static final int http_parser_first_final = 57;
198
- static final int http_parser_error = 0;
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 240 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
220
+
221
+ // line 225 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
240
222
  {
241
- cs = http_parser_start;
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 272 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 = _http_parser_key_offsets[cs];
294
- _trans = _http_parser_index_offsets[cs];
295
- _klen = _http_parser_single_lengths[cs];
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] < _http_parser_trans_keys[_mid] )
287
+ if ( data[p] < _puma_parser_trans_keys[_mid] )
306
288
  _upper = _mid - 1;
307
- else if ( data[p] > _http_parser_trans_keys[_mid] )
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 = _http_parser_range_lengths[cs];
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] < _http_parser_trans_keys[_mid] )
310
+ if ( data[p] < _puma_parser_trans_keys[_mid] )
329
311
  _upper = _mid - 2;
330
- else if ( data[p] > _http_parser_trans_keys[_mid+1] )
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 = _http_parser_indicies[_trans];
342
- cs = _http_parser_trans_targs[_trans];
323
+ _trans = _puma_parser_indicies[_trans];
324
+ cs = _puma_parser_trans_targs[_trans];
343
325
 
344
- if ( _http_parser_trans_actions[_trans] != 0 ) {
345
- _acts = _http_parser_trans_actions[_trans];
346
- _nacts = (int) _http_parser_actions[_acts++];
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 ( _http_parser_actions[_acts++] )
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 437 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
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 == http_parser_error;
464
+ return parser.cs == puma_parser_error;
483
465
  }
484
466
 
485
467
  public boolean is_finished() {
486
- return parser.cs == http_parser_first_final;
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
- return getRuntime().getNil();
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
  }
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2005 Zed A. Shaw
3
3
  * You can redistribute it and/or modify it under the same terms as Ruby.
4
+ * License 3-clause BSD
4
5
  */
5
6
 
6
7
  #define RSTRING_NOT_MODIFIED 1
@@ -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