net-http2 0.15.0 → 0.18.3

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
- SHA1:
3
- metadata.gz: 1d1bbb7eb0d7324fb63a671d0f8fbc2075b6a625
4
- data.tar.gz: 9d4dd0e9e5131ac605292030235b9a68a8087b83
2
+ SHA256:
3
+ metadata.gz: 47851ec1e94857e836b5e282289ee6295903bf37ad86ea6922d100eac62d002b
4
+ data.tar.gz: 7f2e870165baf00d5cd6cc5c5e42915a7f918f0567ce446c14aec0dd5f011a32
5
5
  SHA512:
6
- metadata.gz: 1db0898b540554278ee5a3789bafae4aac29e9a8075fdfbd26c0aca57f360136b9c3c4c60f57b0ff412030ad87c2878b5890f4e9df255535a73ddf7535609ef4
7
- data.tar.gz: 064cdc09d94dbd1e13623ae2a42b5cb5f695344f83ed60faadfab7aa1e9f7c721099e8fc8187133f9cbb36523f89142a1672c6071b8bf937b9ca342c954d4ada
6
+ metadata.gz: ace452983904e4c82024a59bb8222bc31eb44f8251402a21dee6f6e1395e57c18fd02ee6677e43415f9af5a15dafd510de3eebd54769926fa5ed42de79bc2978
7
+ data.tar.gz: f409ce5ec39eb3a565095cb4831cb04153153d308abeeea75fcac010f07fa48cf9100ee1e7cc925e68fa0d8b50d3c56c96fd030835a6aacf07d37c5d8e673344
@@ -0,0 +1 @@
1
+ ruby 2.7.1
@@ -1,10 +1,13 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1
4
- - 2.2
5
- - 2.3.0
6
- - 2.3.1
3
+ - 2.4
4
+ - 2.5
5
+ - 2.6
6
+ - 2.7
7
7
 
8
8
  branches:
9
9
  only:
10
10
  - master
11
+
12
+ before_install:
13
+ - gem install bundler
data/README.md CHANGED
@@ -59,7 +59,7 @@ request.on(:close) { puts "request completed!" }
59
59
  client.call_async(request)
60
60
 
61
61
  # Wait for all outgoing stream to be closed
62
- client.join
62
+ client.join(timeout: 5)
63
63
 
64
64
  # close the connection
65
65
  client.close
@@ -103,7 +103,7 @@ Allows to set a callback for the client. The only available event is `:error`, w
103
103
  client.on(:error) { |exception| puts "Exception has been raised: #{exception}" }
104
104
  ```
105
105
 
106
- > It is RECOMMENDED to set the `:error` callback: if none is defined, the underlying socket thread may raise an error in the main thread at unexpected execution times.
106
+ > It is RECOMMENDED to set the `:error` callback: if none is defined, the underlying socket thread may raise an error in the main thread at unexpected execution times.
107
107
 
108
108
  * **uri** → **`URI`**
109
109
 
@@ -140,9 +140,9 @@ The real benefit of HTTP/2 is being able to receive body and header streams. Ins
140
140
 
141
141
  Calls the server with the async request.
142
142
 
143
- * **join**
143
+ * **join(timeout:)**
144
144
 
145
- Wait for all outstanding requests to be completed.
145
+ Wait for all outstanding requests to be completed, optionally with a timeout for this condition to be met. Raises NetHttp2::AsyncRequestTimeout if the timeout is reached.
146
146
 
147
147
 
148
148
  ### `NetHttp2::Request`
@@ -6,8 +6,6 @@ require 'net-http2/socket'
6
6
  require 'net-http2/stream'
7
7
  require 'net-http2/version'
8
8
 
9
- require 'http2_patch'
10
-
11
9
  module NetHttp2
12
10
  raise "Cannot require NetHttp2, unsupported engine '#{RUBY_ENGINE}'" unless RUBY_ENGINE == "ruby"
13
11
  end
@@ -8,6 +8,8 @@ module NetHttp2
8
8
  DRAFT = 'h2'
9
9
  PROXY_SETTINGS_KEYS = [:proxy_addr, :proxy_port, :proxy_user, :proxy_pass]
10
10
 
11
+ AsyncRequestTimeout = Class.new(StandardError)
12
+
11
13
  class Client
12
14
 
13
15
  include Callbacks
@@ -54,12 +56,22 @@ module NetHttp2
54
56
  init_vars
55
57
  end
56
58
 
57
- def join
59
+ def join(timeout: nil)
60
+ starting_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
58
61
  while !@streams.empty? do
62
+ raise AsyncRequestTimeout if timeout && Process.clock_gettime(Process::CLOCK_MONOTONIC) - starting_time > timeout
59
63
  sleep 0.05
60
64
  end
61
65
  end
62
66
 
67
+ def remote_settings
68
+ h2.remote_settings
69
+ end
70
+
71
+ def stream_count
72
+ @streams.length
73
+ end
74
+
63
75
  private
64
76
 
65
77
  def init_vars
@@ -75,7 +87,7 @@ module NetHttp2
75
87
  end
76
88
 
77
89
  def new_stream
78
- NetHttp2::Stream.new(h2_stream: h2.new_stream)
90
+ @mutex.synchronize { NetHttp2::Stream.new(h2_stream: h2.new_stream) }
79
91
  rescue StandardError => e
80
92
  close
81
93
  raise e
@@ -39,7 +39,8 @@ module NetHttp2
39
39
 
40
40
  @headers.update(@headers) { |_k, v| v.to_s }
41
41
 
42
- @headers
42
+ # see <https://github.com/ostinelli/apnotic/issues/68>
43
+ @headers.sort.to_h
43
44
  end
44
45
 
45
46
  def full_path
@@ -1,3 +1,3 @@
1
1
  module NetHttp2
2
- VERSION = '0.15.0'.freeze
2
+ VERSION = '0.18.3'.freeze
3
3
  end
@@ -19,9 +19,9 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "http-2", "0.8.2"
22
+ spec.add_dependency "http-2", "~> 0.10.1"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.3"
25
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake", ">= 12.3.3"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-http2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.18.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Ostinelli
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-28 00:00:00.000000000 Z
11
+ date: 2020-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.2
19
+ version: 0.10.1
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.8.2
26
+ version: 0.10.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: 12.3.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
- description:
69
+ description:
70
70
  email:
71
71
  - roberto@ostinelli.net
72
72
  executables: []
@@ -75,8 +75,7 @@ extra_rdoc_files: []
75
75
  files:
76
76
  - ".gitignore"
77
77
  - ".rspec"
78
- - ".ruby-gemset"
79
- - ".ruby-version"
78
+ - ".tool-versions"
80
79
  - ".travis.yml"
81
80
  - Gemfile
82
81
  - LICENSE.md
@@ -84,7 +83,6 @@ files:
84
83
  - Rakefile
85
84
  - bin/console
86
85
  - bin/setup
87
- - lib/http2_patch.rb
88
86
  - lib/net-http2.rb
89
87
  - lib/net-http2/callbacks.rb
90
88
  - lib/net-http2/client.rb
@@ -98,7 +96,7 @@ homepage: http://github.com/ostinelli/net-http2
98
96
  licenses:
99
97
  - MIT
100
98
  metadata: {}
101
- post_install_message:
99
+ post_install_message:
102
100
  rdoc_options: []
103
101
  require_paths:
104
102
  - lib
@@ -113,9 +111,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
111
  - !ruby/object:Gem::Version
114
112
  version: '0'
115
113
  requirements: []
116
- rubyforge_project:
117
- rubygems_version: 2.5.1
118
- signing_key:
114
+ rubygems_version: 3.1.2
115
+ signing_key:
119
116
  specification_version: 4
120
117
  summary: NetHttp2 is an HTTP2 client for Ruby.
121
118
  test_files: []
@@ -1 +0,0 @@
1
- net-http2
@@ -1 +0,0 @@
1
- ruby-2.3.1
@@ -1,49 +0,0 @@
1
- require 'http/2/connection'
2
-
3
- # We are currently locked to using the Http2 library v0.8.2 since v0.8.3 still has some compatibility issues:
4
- # <https://github.com/igrigorik/http-2/issues/92>
5
- #
6
- # However, v0.8.2 had a memory leak that was reported in the following issues:
7
- # <https://github.com/igrigorik/http-2/issues/73>
8
- # <https://github.com/ostinelli/net-http2/issues/7>
9
- #
10
- # Hence, this is a temporary monkey-patch to the HTTP2 library in order to solve the mentioned leak
11
- # while waiting to fix the issues on v0.8.3.
12
-
13
- module HTTP2
14
-
15
- class Connection
16
-
17
- private
18
-
19
- def activate_stream(id: nil, **args)
20
- connection_error(msg: 'Stream ID already exists') if @streams.key?(id)
21
-
22
- stream = Stream.new({ connection: self, id: id }.merge(args))
23
-
24
- # Streams that are in the "open" state, or either of the "half closed"
25
- # states count toward the maximum number of streams that an endpoint is
26
- # permitted to open.
27
- stream.once(:active) { @active_stream_count += 1 }
28
-
29
- @streams_recently_closed ||= {}
30
- stream.once(:close) do
31
- @active_stream_count -= 1
32
-
33
- @streams_recently_closed.delete_if do |closed_stream_id, v|
34
- to_be_deleted = (Time.now - v) > 15
35
- @streams.delete(closed_stream_id) if to_be_deleted
36
- to_be_deleted
37
- end
38
-
39
- @streams_recently_closed[id] = Time.now
40
- end
41
-
42
- stream.on(:promise, &method(:promise)) if self.is_a? Server
43
- stream.on(:frame, &method(:send))
44
- stream.on(:window_update, &method(:window_update))
45
-
46
- @streams[id] = stream
47
- end
48
- end
49
- end