puma 2.2.0 → 8.0.2

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 (136) hide show
  1. checksums.yaml +7 -0
  2. data/History.md +3334 -0
  3. data/LICENSE +23 -20
  4. data/README.md +387 -100
  5. data/bin/puma-wild +25 -0
  6. data/bin/pumactl +1 -1
  7. data/docs/5.0-Upgrade.md +98 -0
  8. data/docs/6.0-Upgrade.md +56 -0
  9. data/docs/7.0-Upgrade.md +52 -0
  10. data/docs/8.0-Upgrade.md +100 -0
  11. data/docs/architecture.md +74 -0
  12. data/docs/compile_options.md +55 -0
  13. data/docs/deployment.md +137 -0
  14. data/docs/fork_worker.md +41 -0
  15. data/docs/grpc.md +62 -0
  16. data/docs/images/favicon.svg +1 -0
  17. data/docs/images/puma-connection-flow-no-reactor.png +0 -0
  18. data/docs/images/puma-connection-flow.png +0 -0
  19. data/docs/images/puma-general-arch.png +0 -0
  20. data/docs/images/running-puma.svg +1 -0
  21. data/docs/images/standard-logo.svg +1 -0
  22. data/docs/java_options.md +54 -0
  23. data/docs/jungle/README.md +9 -0
  24. data/docs/jungle/rc.d/README.md +74 -0
  25. data/docs/jungle/rc.d/puma +61 -0
  26. data/docs/jungle/rc.d/puma.conf +10 -0
  27. data/docs/kubernetes.md +73 -0
  28. data/docs/nginx.md +5 -5
  29. data/docs/plugins.md +42 -0
  30. data/docs/rails_dev_mode.md +28 -0
  31. data/docs/restart.md +65 -0
  32. data/docs/signals.md +98 -0
  33. data/docs/stats.md +148 -0
  34. data/docs/systemd.md +253 -0
  35. data/docs/testing_benchmarks_local_files.md +150 -0
  36. data/docs/testing_test_rackup_ci_files.md +36 -0
  37. data/ext/puma_http11/PumaHttp11Service.java +2 -2
  38. data/ext/puma_http11/extconf.rb +59 -2
  39. data/ext/puma_http11/http11_parser.c +319 -487
  40. data/ext/puma_http11/http11_parser.h +15 -13
  41. data/ext/puma_http11/http11_parser.java.rl +64 -94
  42. data/ext/puma_http11/http11_parser.rl +27 -24
  43. data/ext/puma_http11/http11_parser_common.rl +8 -8
  44. data/ext/puma_http11/mini_ssl.c +696 -38
  45. data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
  46. data/ext/puma_http11/org/jruby/puma/EnvKey.java +241 -0
  47. data/ext/puma_http11/org/jruby/puma/Http11.java +241 -145
  48. data/ext/puma_http11/org/jruby/puma/Http11Parser.java +174 -221
  49. data/ext/puma_http11/org/jruby/puma/MiniSSL.java +413 -193
  50. data/ext/puma_http11/puma_http11.c +183 -175
  51. data/lib/puma/app/status.rb +77 -29
  52. data/lib/puma/binder.rb +349 -119
  53. data/lib/puma/cli.rb +163 -801
  54. data/lib/puma/client.rb +627 -144
  55. data/lib/puma/client_env.rb +171 -0
  56. data/lib/puma/cluster/worker.rb +183 -0
  57. data/lib/puma/cluster/worker_handle.rb +127 -0
  58. data/lib/puma/cluster.rb +634 -0
  59. data/lib/puma/cluster_accept_loop_delay.rb +91 -0
  60. data/lib/puma/commonlogger.rb +115 -0
  61. data/lib/puma/configuration.rb +420 -198
  62. data/lib/puma/const.rb +266 -115
  63. data/lib/puma/control_cli.rb +219 -120
  64. data/lib/puma/detect.rb +56 -2
  65. data/lib/puma/dsl.rb +1562 -0
  66. data/lib/puma/error_logger.rb +115 -0
  67. data/lib/puma/events.rb +44 -60
  68. data/lib/puma/io_buffer.rb +48 -5
  69. data/lib/puma/jruby_restart.rb +2 -51
  70. data/lib/puma/json_serialization.rb +96 -0
  71. data/lib/puma/launcher/bundle_pruner.rb +102 -0
  72. data/lib/puma/launcher.rb +501 -0
  73. data/lib/puma/log_writer.rb +153 -0
  74. data/lib/puma/minissl/context_builder.rb +96 -0
  75. data/lib/puma/minissl.rb +355 -37
  76. data/lib/puma/null_io.rb +79 -12
  77. data/lib/puma/plugin/systemd.rb +90 -0
  78. data/lib/puma/plugin/tmp_restart.rb +36 -0
  79. data/lib/puma/plugin.rb +111 -0
  80. data/lib/puma/rack/builder.rb +297 -0
  81. data/lib/puma/rack/urlmap.rb +93 -0
  82. data/lib/puma/rack_default.rb +21 -4
  83. data/lib/puma/reactor.rb +102 -133
  84. data/lib/puma/response.rb +532 -0
  85. data/lib/puma/runner.rb +211 -0
  86. data/lib/puma/sd_notify.rb +146 -0
  87. data/lib/puma/server.rb +582 -445
  88. data/lib/puma/server_plugin_control.rb +32 -0
  89. data/lib/puma/single.rb +72 -0
  90. data/lib/puma/state_file.rb +69 -0
  91. data/lib/puma/thread_pool.rb +389 -57
  92. data/lib/puma/util.rb +125 -0
  93. data/lib/puma.rb +80 -6
  94. data/lib/rack/handler/puma.rb +125 -47
  95. data/tools/Dockerfile +26 -0
  96. data/tools/trickletest.rb +44 -0
  97. metadata +88 -148
  98. data/COPYING +0 -55
  99. data/Gemfile +0 -10
  100. data/History.txt +0 -302
  101. data/Manifest.txt +0 -60
  102. data/Rakefile +0 -165
  103. data/TODO +0 -5
  104. data/docs/config.md +0 -0
  105. data/ext/puma_http11/ext_help.h +0 -15
  106. data/ext/puma_http11/io_buffer.c +0 -154
  107. data/lib/puma/accept_nonblock.rb +0 -23
  108. data/lib/puma/capistrano.rb +0 -34
  109. data/lib/puma/compat.rb +0 -11
  110. data/lib/puma/daemon_ext.rb +0 -20
  111. data/lib/puma/delegation.rb +0 -11
  112. data/lib/puma/java_io_buffer.rb +0 -45
  113. data/lib/puma/rack_patch.rb +0 -25
  114. data/puma.gemspec +0 -45
  115. data/test/test_app_status.rb +0 -88
  116. data/test/test_cli.rb +0 -171
  117. data/test/test_config.rb +0 -16
  118. data/test/test_http10.rb +0 -27
  119. data/test/test_http11.rb +0 -126
  120. data/test/test_integration.rb +0 -154
  121. data/test/test_iobuffer.rb +0 -38
  122. data/test/test_minissl.rb +0 -25
  123. data/test/test_null_io.rb +0 -31
  124. data/test/test_persistent.rb +0 -238
  125. data/test/test_puma_server.rb +0 -224
  126. data/test/test_rack_handler.rb +0 -10
  127. data/test/test_rack_server.rb +0 -141
  128. data/test/test_thread_pool.rb +0 -146
  129. data/test/test_unix_socket.rb +0 -39
  130. data/test/test_ws.rb +0 -89
  131. data/tools/jungle/init.d/README.md +0 -54
  132. data/tools/jungle/init.d/puma +0 -332
  133. data/tools/jungle/init.d/run-puma +0 -3
  134. data/tools/jungle/upstart/README.md +0 -61
  135. data/tools/jungle/upstart/puma-manager.conf +0 -31
  136. data/tools/jungle/upstart/puma.conf +0 -52
@@ -2,6 +2,9 @@
2
2
  // line 1 "ext/puma_http11/http11_parser.java.rl"
3
3
  package org.jruby.puma;
4
4
 
5
+ import org.jruby.Ruby;
6
+ import org.jruby.RubyHash;
7
+ import org.jruby.RubyString;
5
8
  import org.jruby.util.ByteList;
6
9
 
7
10
  public class Http11Parser {
@@ -9,13 +12,13 @@ public class Http11Parser {
9
12
  /** Machine **/
10
13
 
11
14
 
12
- // line 65 "ext/puma_http11/http11_parser.java.rl"
15
+ // line 59 "ext/puma_http11/http11_parser.java.rl"
13
16
 
14
17
 
15
18
  /** Data **/
16
19
 
17
- // line 18 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
18
- private static byte[] init__http_parser_actions_0()
20
+ // line 21 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
21
+ private static byte[] init__puma_parser_actions_0()
19
22
  {
20
23
  return new byte [] {
21
24
  0, 1, 0, 1, 2, 1, 3, 1, 4, 1, 5, 1,
@@ -25,24 +28,23 @@ private static byte[] init__http_parser_actions_0()
25
28
  };
26
29
  }
27
30
 
28
- private static final byte _http_parser_actions[] = init__http_parser_actions_0();
31
+ private static final byte _puma_parser_actions[] = init__puma_parser_actions_0();
29
32
 
30
33
 
31
- private static short[] init__http_parser_key_offsets_0()
34
+ private static short[] init__puma_parser_key_offsets_0()
32
35
  {
33
36
  return new short [] {
34
37
  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
38
+ 39, 41, 44, 45, 61, 62, 78, 85, 91, 99, 107, 117,
39
+ 125, 134, 142, 150, 159, 168, 177, 186, 195, 204, 213, 222,
40
+ 231, 240, 249, 258, 267, 276, 285, 294, 303, 312, 313
39
41
  };
40
42
  }
41
43
 
42
- private static final short _http_parser_key_offsets[] = init__http_parser_key_offsets_0();
44
+ private static final short _puma_parser_key_offsets[] = init__puma_parser_key_offsets_0();
43
45
 
44
46
 
45
- private static char[] init__http_parser_trans_keys_0()
47
+ private static char[] init__puma_parser_trans_keys_0()
46
48
  {
47
49
  return new char [] {
48
50
  36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95, 45,
@@ -51,81 +53,73 @@ private static char[] init__http_parser_trans_keys_0()
51
53
  46, 48, 57, 48, 57, 13, 48, 57, 10, 13, 33, 124,
52
54
  126, 35, 39, 42, 43, 45, 46, 48, 57, 65, 90, 94,
53
55
  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
56
+ 48, 57, 65, 90, 94, 122, 13, 32, 127, 0, 8, 10,
57
+ 31, 13, 127, 0, 8, 10, 31, 32, 60, 62, 127, 0,
58
+ 31, 34, 35, 32, 60, 62, 127, 0, 31, 34, 35, 43,
59
+ 58, 45, 46, 48, 57, 65, 90, 97, 122, 32, 34, 35,
60
+ 60, 62, 127, 0, 31, 32, 34, 35, 60, 62, 63, 127,
61
+ 0, 31, 32, 34, 35, 60, 62, 127, 0, 31, 32, 34,
62
+ 35, 60, 62, 127, 0, 31, 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, 36, 95, 45, 46, 48, 57, 65, 90, 32, 36, 95,
74
+ 45, 46, 48, 57, 65, 90, 32, 36, 95, 45, 46, 48,
75
+ 57, 65, 90, 32, 36, 95, 45, 46, 48, 57, 65, 90,
76
+ 32, 0
80
77
  };
81
78
  }
82
79
 
83
- private static final char _http_parser_trans_keys[] = init__http_parser_trans_keys_0();
80
+ private static final char _puma_parser_trans_keys[] = init__puma_parser_trans_keys_0();
84
81
 
85
82
 
86
- private static byte[] init__http_parser_single_lengths_0()
83
+ private static byte[] init__puma_parser_single_lengths_0()
87
84
  {
88
85
  return new byte [] {
89
86
  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
87
+ 0, 1, 1, 4, 1, 4, 3, 2, 4, 4, 2, 6,
88
+ 7, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
89
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 0
94
90
  };
95
91
  }
96
92
 
97
- private static final byte _http_parser_single_lengths[] = init__http_parser_single_lengths_0();
93
+ private static final byte _puma_parser_single_lengths[] = init__puma_parser_single_lengths_0();
98
94
 
99
95
 
100
- private static byte[] init__http_parser_range_lengths_0()
96
+ private static byte[] init__puma_parser_range_lengths_0()
101
97
  {
102
98
  return new byte [] {
103
99
  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
100
+ 1, 1, 0, 6, 0, 6, 2, 2, 2, 2, 4, 1,
101
+ 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
102
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0
108
103
  };
109
104
  }
110
105
 
111
- private static final byte _http_parser_range_lengths[] = init__http_parser_range_lengths_0();
106
+ private static final byte _puma_parser_range_lengths[] = init__puma_parser_range_lengths_0();
112
107
 
113
108
 
114
- private static short[] init__http_parser_index_offsets_0()
109
+ private static short[] init__puma_parser_index_offsets_0()
115
110
  {
116
111
  return new short [] {
117
112
  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
113
+ 39, 41, 44, 46, 57, 59, 70, 76, 81, 88, 95, 102,
114
+ 110, 119, 127, 135, 142, 149, 156, 163, 170, 177, 184, 191,
115
+ 198, 205, 212, 219, 226, 233, 240, 247, 254, 261, 263
122
116
  };
123
117
  }
124
118
 
125
- private static final short _http_parser_index_offsets[] = init__http_parser_index_offsets_0();
119
+ private static final short _puma_parser_index_offsets[] = init__puma_parser_index_offsets_0();
126
120
 
127
121
 
128
- private static byte[] init__http_parser_indicies_0()
122
+ private static byte[] init__puma_parser_indicies_0()
129
123
  {
130
124
  return new byte [] {
131
125
  0, 0, 0, 0, 0, 1, 2, 3, 3, 3, 3, 3,
@@ -134,141 +128,109 @@ private static byte[] init__http_parser_indicies_0()
134
128
  16, 15, 1, 17, 1, 18, 17, 1, 19, 1, 20, 21,
135
129
  21, 21, 21, 21, 21, 21, 21, 21, 1, 22, 1, 23,
136
130
  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
131
+ 1, 1, 1, 25, 29, 1, 1, 1, 28, 30, 1, 1,
132
+ 1, 1, 1, 31, 32, 1, 1, 1, 1, 1, 33, 34,
133
+ 35, 34, 34, 34, 34, 1, 8, 1, 9, 1, 1, 1,
134
+ 1, 35, 36, 1, 38, 1, 1, 39, 1, 1, 37, 40,
135
+ 1, 42, 1, 1, 1, 1, 41, 43, 1, 45, 1, 1,
136
+ 1, 1, 44, 2, 46, 46, 46, 46, 46, 1, 2, 47,
137
+ 47, 47, 47, 47, 1, 2, 48, 48, 48, 48, 48, 1,
138
+ 2, 49, 49, 49, 49, 49, 1, 2, 50, 50, 50, 50,
139
+ 50, 1, 2, 51, 51, 51, 51, 51, 1, 2, 52, 52,
140
+ 52, 52, 52, 1, 2, 53, 53, 53, 53, 53, 1, 2,
141
+ 54, 54, 54, 54, 54, 1, 2, 55, 55, 55, 55, 55,
142
+ 1, 2, 56, 56, 56, 56, 56, 1, 2, 57, 57, 57,
143
+ 57, 57, 1, 2, 58, 58, 58, 58, 58, 1, 2, 59,
144
+ 59, 59, 59, 59, 1, 2, 60, 60, 60, 60, 60, 1,
145
+ 2, 61, 61, 61, 61, 61, 1, 2, 62, 62, 62, 62,
146
+ 62, 1, 2, 63, 63, 63, 63, 63, 1, 2, 1, 1,
147
+ 0
158
148
  };
159
149
  }
160
150
 
161
- private static final byte _http_parser_indicies[] = init__http_parser_indicies_0();
151
+ private static final byte _puma_parser_indicies[] = init__puma_parser_indicies_0();
162
152
 
163
153
 
164
- private static byte[] init__http_parser_trans_targs_0()
154
+ private static byte[] init__puma_parser_trans_targs_0()
165
155
  {
166
156
  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
157
+ 2, 0, 3, 27, 4, 22, 24, 23, 5, 20, 6, 7,
158
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 46, 17,
159
+ 18, 19, 14, 18, 19, 14, 5, 21, 5, 21, 22, 23,
160
+ 5, 24, 20, 25, 5, 26, 20, 5, 26, 20, 28, 29,
161
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
162
+ 42, 43, 44, 45
174
163
  };
175
164
  }
176
165
 
177
- private static final byte _http_parser_trans_targs[] = init__http_parser_trans_targs_0();
166
+ private static final byte _puma_parser_trans_targs[] = init__puma_parser_trans_targs_0();
178
167
 
179
168
 
180
- private static byte[] init__http_parser_trans_actions_0()
169
+ private static byte[] init__puma_parser_trans_actions_0()
181
170
  {
182
171
  return new byte [] {
183
172
  1, 0, 11, 0, 1, 1, 1, 1, 13, 13, 1, 0,
184
173
  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,
174
+ 5, 7, 31, 7, 0, 9, 25, 1, 15, 0, 0, 0,
175
+ 37, 0, 37, 21, 40, 17, 40, 34, 0, 34, 0, 0,
188
176
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
189
- 0, 0, 0, 0, 0, 0, 0
177
+ 0, 0, 0, 0
190
178
  };
191
179
  }
192
180
 
193
- private static final byte _http_parser_trans_actions[] = init__http_parser_trans_actions_0();
181
+ private static final byte _puma_parser_trans_actions[] = init__puma_parser_trans_actions_0();
194
182
 
195
183
 
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;
184
+ static final int puma_parser_start = 1;
185
+ static final int puma_parser_first_final = 46;
186
+ static final int puma_parser_error = 0;
199
187
 
200
- static final int http_parser_en_main = 1;
201
188
 
189
+ // line 63 "ext/puma_http11/http11_parser.java.rl"
202
190
 
203
- // line 69 "ext/puma_http11/http11_parser.java.rl"
191
+ int cs;
192
+ int body_start;
193
+ int nread;
194
+ int mark;
195
+ int field_start;
196
+ int field_len;
197
+ int query_start;
204
198
 
205
- public static interface ElementCB {
206
- public void call(Object data, int at, int length);
207
- }
199
+ RubyHash data;
200
+ byte[] buffer;
208
201
 
209
- public static interface FieldCB {
210
- public void call(Object data, int field, int flen, int value, int vlen);
211
- }
202
+ public void init() {
212
203
 
213
- public static class HttpParser {
214
- int cs;
215
- int body_start;
216
- int content_len;
217
- int nread;
218
- int mark;
219
- int field_start;
220
- int field_len;
221
- int query_start;
222
-
223
- Object data;
224
- ByteList buffer;
225
-
226
- public FieldCB http_field;
227
- public ElementCB request_method;
228
- public ElementCB request_uri;
229
- public ElementCB fragment;
230
- public ElementCB request_path;
231
- public ElementCB query_string;
232
- public ElementCB http_version;
233
- public ElementCB header_done;
234
-
235
- public void init() {
236
- cs = 0;
237
-
238
-
239
- // line 240 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
204
+
205
+ // line 206 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
240
206
  {
241
- cs = http_parser_start;
207
+ cs = puma_parser_start;
242
208
  }
243
209
 
244
- // line 104 "ext/puma_http11/http11_parser.java.rl"
210
+ // line 78 "ext/puma_http11/http11_parser.java.rl"
245
211
 
246
- body_start = 0;
247
- content_len = 0;
248
- mark = 0;
249
- nread = 0;
250
- field_len = 0;
251
- field_start = 0;
252
- }
212
+ body_start = 0;
213
+ mark = 0;
214
+ nread = 0;
215
+ field_len = 0;
216
+ field_start = 0;
253
217
  }
254
218
 
255
- public final HttpParser parser = new HttpParser();
256
-
257
- public int execute(ByteList buffer, int off) {
219
+ public int execute(Ruby runtime, Http11 http, ByteList buffer, int off) {
258
220
  int p, pe;
259
- int cs = parser.cs;
221
+ int cs = this.cs;
260
222
  int len = buffer.length();
223
+ int beg = buffer.begin();
224
+ RubyString[] envStrings = http.envStrings;
261
225
  assert off<=len : "offset past end of buffer";
262
226
 
263
- p = off;
264
- pe = len;
265
- // get a copy of the bytes, since it may not start at 0
266
- // FIXME: figure out how to just use the bytes in-place
267
- byte[] data = buffer.bytes();
268
- parser.buffer = buffer;
227
+ p = beg + off;
228
+ pe = beg + len;
229
+ byte[] data = buffer.unsafeBytes();
230
+ this.buffer = data;
269
231
 
270
232
 
271
- // line 272 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
233
+ // line 234 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
272
234
  {
273
235
  int _klen;
274
236
  int _trans = 0;
@@ -290,9 +252,9 @@ static final int http_parser_en_main = 1;
290
252
  }
291
253
  case 1:
292
254
  _match: do {
293
- _keys = _http_parser_key_offsets[cs];
294
- _trans = _http_parser_index_offsets[cs];
295
- _klen = _http_parser_single_lengths[cs];
255
+ _keys = _puma_parser_key_offsets[cs];
256
+ _trans = _puma_parser_index_offsets[cs];
257
+ _klen = _puma_parser_single_lengths[cs];
296
258
  if ( _klen > 0 ) {
297
259
  int _lower = _keys;
298
260
  int _mid;
@@ -302,9 +264,9 @@ case 1:
302
264
  break;
303
265
 
304
266
  _mid = _lower + ((_upper-_lower) >> 1);
305
- if ( data[p] < _http_parser_trans_keys[_mid] )
267
+ if ( data[p] < _puma_parser_trans_keys[_mid] )
306
268
  _upper = _mid - 1;
307
- else if ( data[p] > _http_parser_trans_keys[_mid] )
269
+ else if ( data[p] > _puma_parser_trans_keys[_mid] )
308
270
  _lower = _mid + 1;
309
271
  else {
310
272
  _trans += (_mid - _keys);
@@ -315,7 +277,7 @@ case 1:
315
277
  _trans += _klen;
316
278
  }
317
279
 
318
- _klen = _http_parser_range_lengths[cs];
280
+ _klen = _puma_parser_range_lengths[cs];
319
281
  if ( _klen > 0 ) {
320
282
  int _lower = _keys;
321
283
  int _mid;
@@ -325,9 +287,9 @@ case 1:
325
287
  break;
326
288
 
327
289
  _mid = _lower + (((_upper-_lower) >> 1) & ~1);
328
- if ( data[p] < _http_parser_trans_keys[_mid] )
290
+ if ( data[p] < _puma_parser_trans_keys[_mid] )
329
291
  _upper = _mid - 2;
330
- else if ( data[p] > _http_parser_trans_keys[_mid+1] )
292
+ else if ( data[p] > _puma_parser_trans_keys[_mid+1] )
331
293
  _lower = _mid + 2;
332
294
  else {
333
295
  _trans += ((_mid - _keys)>>1);
@@ -338,102 +300,93 @@ case 1:
338
300
  }
339
301
  } while (false);
340
302
 
341
- _trans = _http_parser_indicies[_trans];
342
- cs = _http_parser_trans_targs[_trans];
303
+ _trans = _puma_parser_indicies[_trans];
304
+ cs = _puma_parser_trans_targs[_trans];
343
305
 
344
- if ( _http_parser_trans_actions[_trans] != 0 ) {
345
- _acts = _http_parser_trans_actions[_trans];
346
- _nacts = (int) _http_parser_actions[_acts++];
306
+ if ( _puma_parser_trans_actions[_trans] != 0 ) {
307
+ _acts = _puma_parser_trans_actions[_trans];
308
+ _nacts = (int) _puma_parser_actions[_acts++];
347
309
  while ( _nacts-- > 0 )
348
310
  {
349
- switch ( _http_parser_actions[_acts++] )
311
+ switch ( _puma_parser_actions[_acts++] )
350
312
  {
351
313
  case 0:
352
- // line 13 "ext/puma_http11/http11_parser.java.rl"
353
- {parser.mark = p; }
314
+ // line 16 "ext/puma_http11/http11_parser.java.rl"
315
+ {this.mark = p; }
354
316
  break;
355
317
  case 1:
356
- // line 15 "ext/puma_http11/http11_parser.java.rl"
357
- { parser.field_start = p; }
318
+ // line 18 "ext/puma_http11/http11_parser.java.rl"
319
+ { this.field_start = p; }
358
320
  break;
359
321
  case 2:
360
- // line 16 "ext/puma_http11/http11_parser.java.rl"
361
- { /* FIXME stub */ }
322
+ // line 19 "ext/puma_http11/http11_parser.java.rl"
323
+ { /* done lazily as needed */ }
362
324
  break;
363
325
  case 3:
364
- // line 17 "ext/puma_http11/http11_parser.java.rl"
326
+ // line 20 "ext/puma_http11/http11_parser.java.rl"
365
327
  {
366
- parser.field_len = p-parser.field_start;
328
+ this.field_len = p-this.field_start;
367
329
  }
368
330
  break;
369
331
  case 4:
370
- // line 21 "ext/puma_http11/http11_parser.java.rl"
371
- { parser.mark = p; }
332
+ // line 24 "ext/puma_http11/http11_parser.java.rl"
333
+ { this.mark = p; }
372
334
  break;
373
335
  case 5:
374
- // line 22 "ext/puma_http11/http11_parser.java.rl"
375
- {
376
- if(parser.http_field != null) {
377
- parser.http_field.call(parser.data, parser.field_start, parser.field_len, parser.mark, p-parser.mark);
378
- }
336
+ // line 25 "ext/puma_http11/http11_parser.java.rl"
337
+ {
338
+ Http11.http_field(runtime, envStrings, this, p-this.mark);
379
339
  }
380
340
  break;
381
341
  case 6:
382
- // line 27 "ext/puma_http11/http11_parser.java.rl"
383
- {
384
- if(parser.request_method != null)
385
- parser.request_method.call(parser.data, parser.mark, p-parser.mark);
342
+ // line 28 "ext/puma_http11/http11_parser.java.rl"
343
+ {
344
+ Http11.request_method(runtime, envStrings, this, p-this.mark);
386
345
  }
387
346
  break;
388
347
  case 7:
389
348
  // line 31 "ext/puma_http11/http11_parser.java.rl"
390
- {
391
- if(parser.request_uri != null)
392
- parser.request_uri.call(parser.data, parser.mark, p-parser.mark);
349
+ {
350
+ Http11.request_uri(runtime, envStrings, this, p-this.mark);
393
351
  }
394
352
  break;
395
353
  case 8:
396
- // line 35 "ext/puma_http11/http11_parser.java.rl"
397
- {
398
- if(parser.fragment != null)
399
- parser.fragment.call(parser.data, parser.mark, p-parser.mark);
354
+ // line 34 "ext/puma_http11/http11_parser.java.rl"
355
+ {
356
+ Http11.fragment(runtime, envStrings, this, p-this.mark);
400
357
  }
401
358
  break;
402
359
  case 9:
403
- // line 40 "ext/puma_http11/http11_parser.java.rl"
404
- {parser.query_start = p; }
360
+ // line 38 "ext/puma_http11/http11_parser.java.rl"
361
+ {this.query_start = p; }
405
362
  break;
406
363
  case 10:
407
- // line 41 "ext/puma_http11/http11_parser.java.rl"
408
- {
409
- if(parser.query_string != null)
410
- parser.query_string.call(parser.data, parser.query_start, p-parser.query_start);
364
+ // line 39 "ext/puma_http11/http11_parser.java.rl"
365
+ {
366
+ Http11.query_string(runtime, envStrings, this, p-this.query_start);
411
367
  }
412
368
  break;
413
369
  case 11:
414
- // line 46 "ext/puma_http11/http11_parser.java.rl"
415
- {
416
- if(parser.http_version != null)
417
- parser.http_version.call(parser.data, parser.mark, p-parser.mark);
370
+ // line 43 "ext/puma_http11/http11_parser.java.rl"
371
+ {
372
+ Http11.server_protocol(runtime, envStrings, this, p-this.mark);
418
373
  }
419
374
  break;
420
375
  case 12:
421
- // line 51 "ext/puma_http11/http11_parser.java.rl"
376
+ // line 47 "ext/puma_http11/http11_parser.java.rl"
422
377
  {
423
- if(parser.request_path != null)
424
- parser.request_path.call(parser.data, parser.mark, p-parser.mark);
378
+ Http11.request_path(runtime, envStrings, this, p-this.mark);
425
379
  }
426
380
  break;
427
381
  case 13:
428
- // line 56 "ext/puma_http11/http11_parser.java.rl"
382
+ // line 51 "ext/puma_http11/http11_parser.java.rl"
429
383
  {
430
- parser.body_start = p + 1;
431
- if(parser.header_done != null)
432
- parser.header_done.call(parser.data, p + 1, pe - p - 1);
384
+ this.body_start = p + 1;
385
+ http.header_done(runtime, this, p + 1, pe - p - 1);
433
386
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
434
387
  }
435
388
  break;
436
- // line 437 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
389
+ // line 390 "ext/puma_http11/org/jruby/puma/Http11Parser.java"
437
390
  }
438
391
  }
439
392
  }
@@ -453,19 +406,19 @@ case 5:
453
406
  break; }
454
407
  }
455
408
 
456
- // line 130 "ext/puma_http11/http11_parser.java.rl"
409
+ // line 100 "ext/puma_http11/http11_parser.java.rl"
457
410
 
458
- parser.cs = cs;
459
- parser.nread += (p - off);
411
+ this.cs = cs;
412
+ this.nread += (p - off);
460
413
 
461
414
  assert p <= pe : "buffer overflow after parsing execute";
462
- assert parser.nread <= len : "nread longer than length";
463
- assert parser.body_start <= len : "body starts after buffer end";
464
- assert parser.mark < len : "mark is after buffer end";
465
- assert parser.field_len <= len : "field has length longer than whole buffer";
466
- assert parser.field_start < len : "field starts after buffer end";
415
+ assert this.nread <= len : "nread longer than length";
416
+ assert this.body_start <= len : "body starts after buffer end";
417
+ assert this.mark < len : "mark is after buffer end";
418
+ assert this.field_len <= len : "field has length longer than whole buffer";
419
+ assert this.field_start < len : "field starts after buffer end";
467
420
 
468
- return parser.nread;
421
+ return this.nread;
469
422
  }
470
423
 
471
424
  public int finish() {
@@ -479,10 +432,10 @@ case 5:
479
432
  }
480
433
 
481
434
  public boolean has_error() {
482
- return parser.cs == http_parser_error;
435
+ return this.cs == puma_parser_error;
483
436
  }
484
437
 
485
438
  public boolean is_finished() {
486
- return parser.cs == http_parser_first_final;
439
+ return this.cs == puma_parser_first_final;
487
440
  }
488
441
  }