tipi 0.41 → 0.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/test.yml +3 -1
  4. data/.gitignore +3 -1
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +7 -1
  7. data/Gemfile.lock +53 -33
  8. data/README.md +184 -8
  9. data/Rakefile +1 -7
  10. data/benchmarks/bm_http1_parser.rb +85 -0
  11. data/bin/benchmark +37 -0
  12. data/bin/h1pd +6 -0
  13. data/bin/tipi +3 -21
  14. data/bm.png +0 -0
  15. data/df/agent.rb +1 -1
  16. data/df/sample_agent.rb +2 -2
  17. data/df/server.rb +3 -1
  18. data/df/server_utils.rb +48 -46
  19. data/examples/full_service.rb +13 -0
  20. data/examples/hello.rb +5 -0
  21. data/examples/hello.ru +3 -3
  22. data/examples/http1_parser.rb +10 -8
  23. data/examples/http_server.js +1 -1
  24. data/examples/http_server.rb +4 -1
  25. data/examples/http_server_graceful.rb +1 -1
  26. data/examples/https_server.rb +41 -15
  27. data/examples/rack_server_forked.rb +26 -0
  28. data/examples/rack_server_https_forked.rb +1 -1
  29. data/examples/servername_cb.rb +37 -0
  30. data/examples/websocket_demo.rb +1 -1
  31. data/lib/tipi/acme.rb +320 -0
  32. data/lib/tipi/cli.rb +93 -0
  33. data/lib/tipi/config_dsl.rb +13 -13
  34. data/lib/tipi/configuration.rb +2 -2
  35. data/lib/tipi/controller/bare_polyphony.rb +0 -0
  36. data/lib/tipi/controller/bare_stock.rb +10 -0
  37. data/lib/tipi/controller/extensions.rb +37 -0
  38. data/lib/tipi/controller/stock_http1_adapter.rb +15 -0
  39. data/lib/tipi/controller/web_polyphony.rb +353 -0
  40. data/lib/tipi/controller/web_stock.rb +635 -0
  41. data/lib/tipi/controller.rb +12 -0
  42. data/lib/tipi/digital_fabric/agent.rb +5 -5
  43. data/lib/tipi/digital_fabric/agent_proxy.rb +15 -8
  44. data/lib/tipi/digital_fabric/executive.rb +7 -3
  45. data/lib/tipi/digital_fabric/protocol.rb +3 -3
  46. data/lib/tipi/digital_fabric/request_adapter.rb +0 -4
  47. data/lib/tipi/digital_fabric/service.rb +17 -18
  48. data/lib/tipi/handler.rb +2 -2
  49. data/lib/tipi/http1_adapter.rb +85 -124
  50. data/lib/tipi/http2_adapter.rb +29 -16
  51. data/lib/tipi/http2_stream.rb +52 -57
  52. data/lib/tipi/rack_adapter.rb +2 -2
  53. data/lib/tipi/response_extensions.rb +1 -1
  54. data/lib/tipi/supervisor.rb +75 -0
  55. data/lib/tipi/version.rb +1 -1
  56. data/lib/tipi/websocket.rb +3 -3
  57. data/lib/tipi.rb +9 -7
  58. data/test/coverage.rb +2 -2
  59. data/test/helper.rb +60 -12
  60. data/test/test_http_server.rb +14 -41
  61. data/test/test_request.rb +2 -29
  62. data/tipi.gemspec +10 -10
  63. metadata +80 -54
  64. data/examples/automatic_certificate.rb +0 -193
  65. data/ext/tipi/extconf.rb +0 -12
  66. data/ext/tipi/http1_parser.c +0 -534
  67. data/ext/tipi/http1_parser.h +0 -18
  68. data/ext/tipi/tipi_ext.c +0 -5
  69. data/lib/tipi/http1_adapter_new.rb +0 -293
@@ -4,38 +4,11 @@ require_relative 'helper'
4
4
  require 'tipi'
5
5
 
6
6
  class String
7
- def http_lines
7
+ def crlf_lines
8
8
  gsub "\n", "\r\n"
9
9
  end
10
10
  end
11
11
 
12
- class IO
13
- # Creates two mockup sockets for simulating server-client communication
14
- def self.server_client_mockup
15
- server_in, client_out = IO.pipe
16
- client_in, server_out = IO.pipe
17
-
18
- server_connection = mockup_connection(server_in, server_out, client_out)
19
- client_connection = mockup_connection(client_in, client_out, server_out)
20
-
21
- [server_connection, client_connection]
22
- end
23
-
24
- def self.mockup_connection(input, output, output2)
25
- eg(
26
- :read => ->(*args) { input.read(*args) },
27
- :read_loop => ->(*args, &block) { input.read_loop(*args, &block) },
28
- :recv_loop => ->(*args, &block) { input.read_loop(*args, &block) },
29
- :readpartial => ->(*args) { input.readpartial(*args) },
30
- :recv => ->(*args) { input.readpartial(*args) },
31
- :<< => ->(*args) { output.write(*args) },
32
- :write => ->(*args) { output.write(*args) },
33
- :close => -> { output.close },
34
- :eof? => -> { output2.closed? }
35
- )
36
- end
37
- end
38
-
39
12
  class HTTP1ServerTest < MiniTest::Test
40
13
  def teardown
41
14
  @server&.interrupt if @server&.alive?
@@ -60,7 +33,7 @@ class HTTP1ServerTest < MiniTest::Test
60
33
  connection << "GET / HTTP/1.0\r\n\r\n"
61
34
 
62
35
  response = connection.readpartial(8192)
63
- expected = <<~HTTP.chomp.http_lines.chomp
36
+ expected = <<~HTTP.chomp.crlf_lines.chomp
64
37
  HTTP/1.1 200
65
38
  Content-Length: 13
66
39
 
@@ -78,7 +51,7 @@ class HTTP1ServerTest < MiniTest::Test
78
51
  connection << "GET / HTTP/1.1\r\n\r\n"
79
52
 
80
53
  response = connection.readpartial(8192)
81
- expected = <<~HTTP.http_lines.chomp
54
+ expected = <<~HTTP.crlf_lines.chomp
82
55
  HTTP/1.1 200
83
56
  Content-Length: 13
84
57
 
@@ -100,7 +73,7 @@ class HTTP1ServerTest < MiniTest::Test
100
73
  connection << "GET / HTTP/1.1\r\n\r\n"
101
74
  response = connection.readpartial(8192)
102
75
  assert !connection.eof?
103
- expected = <<~HTTP.http_lines.chomp
76
+ expected = <<~HTTP.crlf_lines.chomp
104
77
  HTTP/1.1 200
105
78
  Content-Length: 2
106
79
 
@@ -127,7 +100,7 @@ class HTTP1ServerTest < MiniTest::Test
127
100
  sleep 0.01
128
101
  response = connection.readpartial(8192)
129
102
 
130
- expected = <<~HTTP.http_lines.chomp
103
+ expected = <<~HTTP.crlf_lines.chomp
131
104
  HTTP/1.1 200
132
105
  Content-Length: 13
133
106
 
@@ -152,7 +125,7 @@ class HTTP1ServerTest < MiniTest::Test
152
125
  req.finish
153
126
  end
154
127
 
155
- connection << <<~HTTP.http_lines
128
+ connection << <<~HTTP.crlf_lines
156
129
  POST / HTTP/1.1
157
130
  Transfer-Encoding: chunked
158
131
 
@@ -178,7 +151,7 @@ class HTTP1ServerTest < MiniTest::Test
178
151
 
179
152
  response = connection.readpartial(8192)
180
153
 
181
- expected = <<~HTTP.http_lines
154
+ expected = <<~HTTP.crlf_lines
182
155
  HTTP/1.1 200
183
156
  Transfer-Encoding: chunked
184
157
 
@@ -199,7 +172,7 @@ class HTTP1ServerTest < MiniTest::Test
199
172
  upgrade: {
200
173
  echo: lambda do |adapter, _headers|
201
174
  conn = adapter.conn
202
- conn << <<~HTTP.http_lines
175
+ conn << <<~HTTP.crlf_lines
203
176
  HTTP/1.1 101 Switching Protocols
204
177
  Upgrade: echo
205
178
  Connection: Upgrade
@@ -219,7 +192,7 @@ class HTTP1ServerTest < MiniTest::Test
219
192
  connection << "GET / HTTP/1.1\r\n\r\n"
220
193
  response = connection.readpartial(8192)
221
194
  assert !connection.eof?
222
- expected = <<~HTTP.http_lines.chomp
195
+ expected = <<~HTTP.crlf_lines.chomp
223
196
  HTTP/1.1 200
224
197
  Content-Length: 2
225
198
 
@@ -227,7 +200,7 @@ class HTTP1ServerTest < MiniTest::Test
227
200
  HTTP
228
201
  assert_equal(expected, response)
229
202
 
230
- connection << <<~HTTP.http_lines
203
+ connection << <<~HTTP.crlf_lines
231
204
  GET / HTTP/1.1
232
205
  Upgrade: echo
233
206
  Connection: upgrade
@@ -237,7 +210,7 @@ class HTTP1ServerTest < MiniTest::Test
237
210
  snooze
238
211
  response = connection.readpartial(8192)
239
212
  assert !connection.eof?
240
- expected = <<~HTTP.http_lines
213
+ expected = <<~HTTP.crlf_lines
241
214
  HTTP/1.1 101 Switching Protocols
242
215
  Upgrade: echo
243
216
  Connection: Upgrade
@@ -255,7 +228,7 @@ class HTTP1ServerTest < MiniTest::Test
255
228
 
256
229
  connection.close
257
230
  assert !done
258
-
231
+
259
232
  sleep 0.01
260
233
  assert done
261
234
  end
@@ -278,7 +251,7 @@ class HTTP1ServerTest < MiniTest::Test
278
251
  count = 0
279
252
 
280
253
  connection << "GET / HTTP/1.1\r\n\r\n"
281
-
254
+
282
255
  while (data = connection.read(chunk_size))
283
256
  response << data
284
257
  count += 1
@@ -286,7 +259,7 @@ class HTTP1ServerTest < MiniTest::Test
286
259
  end
287
260
 
288
261
  chunks = "#{chunk_size.to_s(16)}\n#{'*' * chunk_size}\n" * chunk_count
289
- expected = <<~HTTP.http_lines
262
+ expected = <<~HTTP.crlf_lines
290
263
  HTTP/1.1 200
291
264
  Transfer-Encoding: chunked
292
265
 
data/test/test_request.rb CHANGED
@@ -9,33 +9,6 @@ class String
9
9
  end
10
10
  end
11
11
 
12
- class IO
13
- # Creates two mockup sockets for simulating server-client communication
14
- def self.server_client_mockup
15
- server_in, client_out = IO.pipe
16
- client_in, server_out = IO.pipe
17
-
18
- server_connection = mockup_connection(server_in, server_out, client_out)
19
- client_connection = mockup_connection(client_in, client_out, server_out)
20
-
21
- [server_connection, client_connection]
22
- end
23
-
24
- def self.mockup_connection(input, output, output2)
25
- eg(
26
- :read => ->(*args) { input.read(*args) },
27
- :read_loop => ->(*args, &block) { input.read_loop(*args, &block) },
28
- :recv_loop => ->(*args, &block) { input.read_loop(*args, &block) },
29
- :readpartial => ->(*args) { input.readpartial(*args) },
30
- :recv => ->(*args) { input.readpartial(*args) },
31
- :<< => ->(*args) { output.write(*args) },
32
- :write => ->(*args) { output.write(*args) },
33
- :close => -> { output.close },
34
- :eof? => -> { output2.closed? }
35
- )
36
- end
37
- end
38
-
39
12
  class RequestHeadersTest < MiniTest::Test
40
13
  def teardown
41
14
  @server&.interrupt if @server&.alive?
@@ -65,8 +38,8 @@ class RequestHeadersTest < MiniTest::Test
65
38
  assert_kind_of Qeweney::Request, req
66
39
  assert_equal 'blah.com', req.headers['host']
67
40
  assert_equal 'bar', req.headers['foo']
68
- assert_equal ['1', '3', '2'], req.headers['hi']
69
- assert_equal 'get', req.headers[':method']
41
+ assert_equal ['1', '2', '3'], req.headers['hi']
42
+ assert_equal 'GET', req.headers[':method']
70
43
  assert_equal '/titi', req.headers[':path']
71
44
  end
72
45
 
data/tipi.gemspec CHANGED
@@ -14,30 +14,30 @@ Gem::Specification.new do |s|
14
14
  }
15
15
  s.rdoc_options = ["--title", "tipi", "--main", "README.md"]
16
16
  s.extra_rdoc_files = ["README.md"]
17
- s.extensions = ["ext/tipi/extconf.rb"]
18
17
  s.require_paths = ["lib"]
19
18
  s.required_ruby_version = '>= 2.6'
20
19
 
21
20
  s.executables = ['tipi']
22
21
 
23
- s.add_runtime_dependency 'polyphony', '~>0.64'
24
- s.add_runtime_dependency 'qeweney', '~>0.11'
25
-
26
- s.add_runtime_dependency 'http_parser.rb', '~>0.6.0'
27
- s.add_runtime_dependency 'http-2', '~>0.10.0'
22
+ s.add_runtime_dependency 'polyphony', '~>0.71'
23
+ s.add_runtime_dependency 'ever', '~>0.1'
24
+ s.add_runtime_dependency 'qeweney', '~>0.14'
25
+ s.add_runtime_dependency 'extralite', '~>1.2'
26
+ s.add_runtime_dependency 'h1p', '~>0.2'
27
+
28
+ s.add_runtime_dependency 'http-2', '~>0.11'
28
29
  s.add_runtime_dependency 'rack', '>=2.0.8', '<2.3.0'
29
30
  s.add_runtime_dependency 'websocket', '~>1.2.8'
30
31
  s.add_runtime_dependency 'acme-client', '~>2.0.8'
32
+ s.add_runtime_dependency 'localhost', '~>1.1.4'
31
33
 
32
34
  # for digital fabric
33
35
  s.add_runtime_dependency 'msgpack', '~>1.4.2'
34
36
 
35
- s.add_development_dependency 'rake-compiler', '1.1.1'
36
- s.add_development_dependency 'rake', '~>12.3.3'
37
- s.add_development_dependency 'localhost', '~>1.1.4'
37
+ s.add_development_dependency 'rake', '~>13.0.6'
38
38
  s.add_development_dependency 'minitest', '~>5.11.3'
39
- s.add_development_dependency 'minitest-reporters', '~>1.4.2'
40
39
  s.add_development_dependency 'simplecov', '~>0.17.1'
40
+ s.add_development_dependency 'memory_profiler', '~>1.0.0'
41
41
 
42
42
  s.add_development_dependency 'cuba', '~>3.9.3'
43
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tipi
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.41'
4
+ version: '0.46'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-26 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: polyphony
@@ -16,56 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.64'
19
+ version: '0.71'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.64'
26
+ version: '0.71'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ever
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: qeweney
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '0.11'
47
+ version: '0.14'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '0.11'
54
+ version: '0.14'
55
+ - !ruby/object:Gem::Dependency
56
+ name: extralite
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.2'
41
69
  - !ruby/object:Gem::Dependency
42
- name: http_parser.rb
70
+ name: h1p
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: 0.6.0
75
+ version: '0.2'
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: 0.6.0
82
+ version: '0.2'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: http-2
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.10.0
89
+ version: '0.11'
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.10.0
96
+ version: '0.11'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rack
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -115,61 +143,47 @@ dependencies:
115
143
  - !ruby/object:Gem::Version
116
144
  version: 2.0.8
117
145
  - !ruby/object:Gem::Dependency
118
- name: msgpack
146
+ name: localhost
119
147
  requirement: !ruby/object:Gem::Requirement
120
148
  requirements:
121
149
  - - "~>"
122
150
  - !ruby/object:Gem::Version
123
- version: 1.4.2
151
+ version: 1.1.4
124
152
  type: :runtime
125
153
  prerelease: false
126
154
  version_requirements: !ruby/object:Gem::Requirement
127
155
  requirements:
128
156
  - - "~>"
129
157
  - !ruby/object:Gem::Version
130
- version: 1.4.2
131
- - !ruby/object:Gem::Dependency
132
- name: rake-compiler
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - '='
136
- - !ruby/object:Gem::Version
137
- version: 1.1.1
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - '='
143
- - !ruby/object:Gem::Version
144
- version: 1.1.1
158
+ version: 1.1.4
145
159
  - !ruby/object:Gem::Dependency
146
- name: rake
160
+ name: msgpack
147
161
  requirement: !ruby/object:Gem::Requirement
148
162
  requirements:
149
163
  - - "~>"
150
164
  - !ruby/object:Gem::Version
151
- version: 12.3.3
152
- type: :development
165
+ version: 1.4.2
166
+ type: :runtime
153
167
  prerelease: false
154
168
  version_requirements: !ruby/object:Gem::Requirement
155
169
  requirements:
156
170
  - - "~>"
157
171
  - !ruby/object:Gem::Version
158
- version: 12.3.3
172
+ version: 1.4.2
159
173
  - !ruby/object:Gem::Dependency
160
- name: localhost
174
+ name: rake
161
175
  requirement: !ruby/object:Gem::Requirement
162
176
  requirements:
163
177
  - - "~>"
164
178
  - !ruby/object:Gem::Version
165
- version: 1.1.4
179
+ version: 13.0.6
166
180
  type: :development
167
181
  prerelease: false
168
182
  version_requirements: !ruby/object:Gem::Requirement
169
183
  requirements:
170
184
  - - "~>"
171
185
  - !ruby/object:Gem::Version
172
- version: 1.1.4
186
+ version: 13.0.6
173
187
  - !ruby/object:Gem::Dependency
174
188
  name: minitest
175
189
  requirement: !ruby/object:Gem::Requirement
@@ -185,33 +199,33 @@ dependencies:
185
199
  - !ruby/object:Gem::Version
186
200
  version: 5.11.3
187
201
  - !ruby/object:Gem::Dependency
188
- name: minitest-reporters
202
+ name: simplecov
189
203
  requirement: !ruby/object:Gem::Requirement
190
204
  requirements:
191
205
  - - "~>"
192
206
  - !ruby/object:Gem::Version
193
- version: 1.4.2
207
+ version: 0.17.1
194
208
  type: :development
195
209
  prerelease: false
196
210
  version_requirements: !ruby/object:Gem::Requirement
197
211
  requirements:
198
212
  - - "~>"
199
213
  - !ruby/object:Gem::Version
200
- version: 1.4.2
214
+ version: 0.17.1
201
215
  - !ruby/object:Gem::Dependency
202
- name: simplecov
216
+ name: memory_profiler
203
217
  requirement: !ruby/object:Gem::Requirement
204
218
  requirements:
205
219
  - - "~>"
206
220
  - !ruby/object:Gem::Version
207
- version: 0.17.1
221
+ version: 1.0.0
208
222
  type: :development
209
223
  prerelease: false
210
224
  version_requirements: !ruby/object:Gem::Requirement
211
225
  requirements:
212
226
  - - "~>"
213
227
  - !ruby/object:Gem::Version
214
- version: 0.17.1
228
+ version: 1.0.0
215
229
  - !ruby/object:Gem::Dependency
216
230
  name: cuba
217
231
  requirement: !ruby/object:Gem::Requirement
@@ -226,15 +240,15 @@ dependencies:
226
240
  - - "~>"
227
241
  - !ruby/object:Gem::Version
228
242
  version: 3.9.3
229
- description:
243
+ description:
230
244
  email: sharon@noteflakes.com
231
245
  executables:
232
246
  - tipi
233
- extensions:
234
- - ext/tipi/extconf.rb
247
+ extensions: []
235
248
  extra_rdoc_files:
236
249
  - README.md
237
250
  files:
251
+ - ".github/FUNDING.yml"
238
252
  - ".github/workflows/test.yml"
239
253
  - ".gitignore"
240
254
  - CHANGELOG.md
@@ -244,7 +258,11 @@ files:
244
258
  - README.md
245
259
  - Rakefile
246
260
  - TODO.md
261
+ - benchmarks/bm_http1_parser.rb
262
+ - bin/benchmark
263
+ - bin/h1pd
247
264
  - bin/tipi
265
+ - bm.png
248
266
  - df/agent.rb
249
267
  - df/etc_benchmark.rb
250
268
  - df/multi_agent_supervisor.rb
@@ -258,9 +276,10 @@ files:
258
276
  - df/ws_page.html
259
277
  - docs/README.md
260
278
  - docs/tipi-logo.png
261
- - examples/automatic_certificate.rb
262
279
  - examples/cuba.ru
280
+ - examples/full_service.rb
263
281
  - examples/hanami-api.ru
282
+ - examples/hello.rb
264
283
  - examples/hello.ru
265
284
  - examples/http1_parser.rb
266
285
  - examples/http_request_ws_server.rb
@@ -281,22 +300,29 @@ files:
281
300
  - examples/https_server_forked.rb
282
301
  - examples/https_wss_server.rb
283
302
  - examples/rack_server.rb
303
+ - examples/rack_server_forked.rb
284
304
  - examples/rack_server_https.rb
285
305
  - examples/rack_server_https_forked.rb
286
306
  - examples/routing_server.rb
307
+ - examples/servername_cb.rb
287
308
  - examples/websocket_client.rb
288
309
  - examples/websocket_demo.rb
289
310
  - examples/websocket_secure_server.rb
290
311
  - examples/websocket_server.rb
291
312
  - examples/ws_page.html
292
313
  - examples/wss_page.html
293
- - ext/tipi/extconf.rb
294
- - ext/tipi/http1_parser.c
295
- - ext/tipi/http1_parser.h
296
- - ext/tipi/tipi_ext.c
297
314
  - lib/tipi.rb
315
+ - lib/tipi/acme.rb
316
+ - lib/tipi/cli.rb
298
317
  - lib/tipi/config_dsl.rb
299
318
  - lib/tipi/configuration.rb
319
+ - lib/tipi/controller.rb
320
+ - lib/tipi/controller/bare_polyphony.rb
321
+ - lib/tipi/controller/bare_stock.rb
322
+ - lib/tipi/controller/extensions.rb
323
+ - lib/tipi/controller/stock_http1_adapter.rb
324
+ - lib/tipi/controller/web_polyphony.rb
325
+ - lib/tipi/controller/web_stock.rb
300
326
  - lib/tipi/digital_fabric.rb
301
327
  - lib/tipi/digital_fabric/agent.rb
302
328
  - lib/tipi/digital_fabric/agent_proxy.rb
@@ -307,11 +333,11 @@ files:
307
333
  - lib/tipi/digital_fabric/service.rb
308
334
  - lib/tipi/handler.rb
309
335
  - lib/tipi/http1_adapter.rb
310
- - lib/tipi/http1_adapter_new.rb
311
336
  - lib/tipi/http2_adapter.rb
312
337
  - lib/tipi/http2_stream.rb
313
338
  - lib/tipi/rack_adapter.rb
314
339
  - lib/tipi/response_extensions.rb
340
+ - lib/tipi/supervisor.rb
315
341
  - lib/tipi/version.rb
316
342
  - lib/tipi/websocket.rb
317
343
  - test/coverage.rb
@@ -326,7 +352,7 @@ licenses:
326
352
  - MIT
327
353
  metadata:
328
354
  source_code_uri: https://github.com/digital-fabric/tipi
329
- post_install_message:
355
+ post_install_message:
330
356
  rdoc_options:
331
357
  - "--title"
332
358
  - tipi
@@ -345,8 +371,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
371
  - !ruby/object:Gem::Version
346
372
  version: '0'
347
373
  requirements: []
348
- rubygems_version: 3.1.6
349
- signing_key:
374
+ rubygems_version: 3.3.3
375
+ signing_key:
350
376
  specification_version: 4
351
377
  summary: Tipi - the All-in-one Web Server for Ruby Apps
352
378
  test_files: []