polyphony 0.96 → 0.97

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2db26acbbe9457dc3b3fcdd1e34d35e5347a2e67a5c126b9ddea672957ca3318
4
- data.tar.gz: ac02e27bd659dafbfe0b68db9b22fc3ca8acb744ff82049dbb2bbea999f7e87e
3
+ metadata.gz: 1a8218fc4160e0772ee3aada1f72ea9d063724ccf9b0aee7dfa6e9e4d69ebfe4
4
+ data.tar.gz: 74aae84e991cd4330ad282553061b29e71a6434ce2dafc9985c62feb3a966a68
5
5
  SHA512:
6
- metadata.gz: e99fb459ea41504df54826634d219f8ef1feea3324fe6c56ab18fc46867728d57f36f4c15a35787e0ba42fe588b10d3e849badfcbee0a720c77bb1d8619e8fc3
7
- data.tar.gz: d52ee81b1f1f5a5294cecf09837ccce8cc68f0233d73a0d868326f0a144897542f5ad3e05cc398eb4bf963742fe1fac01a096abf0d77e3201d8c50ca8880e65a
6
+ metadata.gz: 772d0be4ef2f723fa27cc5ecb8ef9e9b5d012c501a364ab23dce7d145fc6d156d5e219e52e871a2aadb41a397c5fb044c8aaee9b42906f4894ff3447af0e93ba
7
+ data.tar.gz: b74d6958ea8a77ffee45aed8184091b5ef54cb4fcaca9798351533b13d2f2202f28ab95f56a26e09692bf40f00e723d2df9c99007dbe10631d1c69c523fb3a58
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.97 2023-02-28
2
+
3
+ - Fix working with IRB (#5)
4
+
1
5
  ## 0.96 2023-02-11
2
6
  - Rework Redis client adapter
3
7
  - Fix working with Pry (#95, thanks @floriandejonckheere)
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ task :recompile => [:clean, :compile]
12
12
  task :default => [:compile, :test]
13
13
 
14
14
  task :test do
15
- exec 'ruby test/run.rb --verbose'
15
+ exec 'ruby test/run.rb'
16
16
  end
17
17
 
18
18
  task :stress_test do
@@ -18,7 +18,8 @@ puts 'Serving HTTPS on port 1234'
18
18
  spin_loop(interval: 1) { STDOUT << '.' }
19
19
 
20
20
  # server.accept_loop do |socket|
21
- while (socket = server.accept)
21
+ server.accept_loop do |socket|
22
+ # while (socket = (server.accept)
22
23
  spin do
23
24
  while (data = socket.gets("\n", 8192))
24
25
  if data.chomp.empty?
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'polyphony'
5
+ require 'localhost/authority'
6
+
7
+ authority = Localhost::Authority.fetch
8
+ server_ctx = authority.server_context
9
+ server_ctx.servername_cb = proc { |_socket, name| server_ctx }
10
+ opts = {
11
+ reuse_addr: true,
12
+ dont_linger: true,
13
+ secure_context: server_ctx
14
+ }
15
+
16
+ server = Polyphony::Net.tcp_listen('localhost', 1234, opts)
17
+
18
+ puts 'Serving HTTPS on port 1234'
19
+
20
+ # server.accept_loop do |socket|
21
+ server.accept_loop do |socket|
22
+ # while (socket = (server.accept)
23
+ spin do
24
+ while (data = socket.gets("\n", 8192))
25
+ if data.chomp.empty?
26
+ socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 4\n\nfoo\n"
27
+ break
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'polyphony'
5
+ require 'localhost/authority'
6
+
7
+ authority = Localhost::Authority.fetch
8
+ server_ctx = authority.server_context
9
+
10
+ resolver = spin_loop do
11
+ name, client = receive
12
+ client << server_ctx
13
+ end
14
+
15
+ server_ctx.servername_cb = proc do |_socket, name|
16
+ resolver << [name, Fiber.current]
17
+ receive
18
+ end
19
+
20
+ opts = {
21
+ reuse_addr: true,
22
+ dont_linger: true,
23
+ secure_context: server_ctx
24
+ }
25
+
26
+ server = Polyphony::Net.tcp_listen('localhost', 1234, opts)
27
+
28
+ puts 'Serving HTTPS on port 1234'
29
+
30
+ # server.accept_loop do |socket|
31
+ server.accept_loop do |socket|
32
+ # while (socket = (server.accept)
33
+ spin do
34
+ while (data = socket.gets("\n", 8192))
35
+ if data.chomp.empty?
36
+ socket << "HTTP/1.1 200 OK\nConnection: close\nContent-Length: 4\n\nfoo\n"
37
+ break
38
+ end
39
+ end
40
+ end
41
+ end
@@ -3,6 +3,7 @@
3
3
  require 'bundler/inline'
4
4
 
5
5
  gemfile do
6
+ source 'https://rubygems.org'
6
7
  gem 'h1p'
7
8
  gem 'polyphony', path: '.'
8
9
  end
@@ -22,10 +23,12 @@ def handle_client(conn)
22
23
 
23
24
  conn << "HTTP/1.1 200 OK\r\nContent-Length: 14\r\n\r\nHello, world!\n"
24
25
  end
26
+ rescue Errno::ECONNRESET
27
+ # ignore
25
28
  rescue H1P::Error
26
29
  puts 'Got invalid request, closing connection...'
27
30
  ensure
28
- conn.close
31
+ conn.close rescue nil
29
32
  end
30
33
  end
31
34
 
@@ -2,46 +2,6 @@
2
2
 
3
3
  require 'polyphony'
4
4
 
5
- if Object.constants.include?(:Reline)
6
- puts "reline"
7
- class Reline::ANSI
8
- def self.select(read_ios = [], write_ios = [], error_ios = [], timeout = nil)
9
- # p [:select, read_ios, timeout]
10
- # puts caller.join("\n")
11
- raise if read_ios.size > 1
12
- raise if write_ios.size > 0
13
- raise if error_ios.size > 0
14
-
15
- # p 1
16
- fiber = Fiber.current
17
- timer = spin do
18
- sleep timeout
19
- fiber.cancel
20
- end
21
- # p 2
22
- read_ios.each do |io|
23
- # p wait: io
24
- Polyphony.backend_wait_io(io, false)
25
- # p :done_wait
26
- return [io]
27
- end
28
- # p 3
29
- rescue Polyphony::Cancel
30
- # p :cancel
31
- return nil
32
- ensure
33
- # p :ensure
34
- timer.stop
35
- # p :ensure_done
36
- end
37
- end
38
- else
39
- require_relative './readline'
40
-
41
- # RubyLex patches
42
- class ::RubyLex
43
- class TerminateLineInput2 < RuntimeError
44
- end
45
- const_set(:TerminateLineInput, TerminateLineInput2)
46
- end
5
+ module Kernel
6
+ alias_method :gets, :orig_gets
47
7
  end
@@ -131,6 +131,16 @@ class ::IO
131
131
  nil
132
132
  end
133
133
 
134
+ def ungetc(c)
135
+ c = c.chr if c.is_a?(Integer)
136
+ if @read_buffer
137
+ @read_buffer.prepend(c)
138
+ else
139
+ @read_buffer = +c
140
+ end
141
+ end
142
+ alias_method :ungetbyte, :ungetc
143
+
134
144
  alias_method :orig_read, :read
135
145
  def read(len = nil, buf = nil, buf_pos = 0)
136
146
  if buf
@@ -252,6 +262,8 @@ class ::IO
252
262
  end
253
263
 
254
264
  def wait_readable(timeout = nil)
265
+ return self if @read_buffer && @read_buffer.size > 0
266
+
255
267
  if timeout
256
268
  move_on_after(timeout) do
257
269
  Polyphony.backend_wait_io(self, false)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polyphony
4
- VERSION = '0.96'
4
+ VERSION = '0.97'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.96'
4
+ version: '0.97'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-11 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -250,6 +250,8 @@ files:
250
250
  - examples/io/http1_splice_chunked.rb
251
251
  - examples/io/httparty.rb
252
252
  - examples/io/https_server.rb
253
+ - examples/io/https_server_sni.rb
254
+ - examples/io/https_server_sni_2.rb
253
255
  - examples/io/irb.rb
254
256
  - examples/io/net-http.rb
255
257
  - examples/io/open.rb