tipi 0.41 → 0.46

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 (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: []