protocol-http2 0.11.6 → 0.12.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d8810aec1217f41c16dc254d8a38839766d0a6717ef1d8483b2c21eaa367139
4
- data.tar.gz: 88cb94b5292c4fa1f430de2ee625a11650cd5564bc11a8e2df47eda25f8ce685
3
+ metadata.gz: 99c1f6c39bfa00e6f872c275ce33513a8a5668abd84f790cf3125af3b1d6c5fd
4
+ data.tar.gz: 5e28c4e9f222db72ef413c88dc0205351688557510e81c408051c147da5e4cea
5
5
  SHA512:
6
- metadata.gz: 7119f9553cb2289f9dda868dc50f2624fd1d1205a81293e3fa1ec159424f3566adf7c51eb597ae47a3e421fa0510278071284cc951b87930b496b861321160d6
7
- data.tar.gz: 3a270e16a604ab0fd9b251443472a9ff952a7db25065bd7c29d35fa00cf48bfe8d8c163d35f27d75366ebea50acac3f91cb296feb869c678dce5597cfcf97204
6
+ metadata.gz: 55a6923f22ad89c5c831cafc45bec918424ea368326f1e584fece860cb9e7c8e001c331b39ce5673db7b28cb2cd8df9b4c3994367b27846e63b3d0013d60c147
7
+ data.tar.gz: a0b0a7e36751c4da1472c3a8f26a90c9a55af83a5449a563b20bd5f78b734df659fdecd6f70222a006338e011b7e6e117fa68150deaab0c274e7fef411da2a00
@@ -2,14 +2,16 @@ language: ruby
2
2
  dist: xenial
3
3
  cache: bundler
4
4
 
5
+ script: bundle exec rspec
6
+
5
7
  matrix:
6
8
  include:
7
- - rvm: 2.4
8
9
  - rvm: 2.5
9
10
  - rvm: 2.6
10
11
  - rvm: 2.7
11
12
  - rvm: 2.6
12
13
  env: COVERAGE=PartialSummary,Coveralls
14
+ - rvm: 2.7
13
15
  - rvm: truffleruby
14
16
  - rvm: jruby-head
15
17
  env: JRUBY_OPTS="--debug -X+O"
@@ -55,8 +55,8 @@ module Protocol
55
55
  @decoder = HPACK::Context.new
56
56
  @encoder = HPACK::Context.new
57
57
 
58
- @local_window = Window.new(@local_settings.initial_window_size)
59
- @remote_window = Window.new(@remote_settings.initial_window_size)
58
+ @local_window = LocalWindow.new
59
+ @remote_window = Window.new
60
60
  end
61
61
 
62
62
  def id
@@ -183,13 +183,6 @@ module Protocol
183
183
  frame.pack(changes)
184
184
 
185
185
  write_frame(frame)
186
-
187
- # If the initial window size is set to something bigger than the default, we want to increase it.
188
- difference = @local_settings.pending.initial_window_size - @local_window.capacity
189
-
190
- if difference > 0
191
- send_window_update(difference)
192
- end
193
186
  end
194
187
 
195
188
  # Transition the connection into the closed state.
@@ -235,6 +228,8 @@ module Protocol
235
228
  @streams.each_value do |stream|
236
229
  stream.local_window.capacity = capacity
237
230
  end
231
+
232
+ @local_window.desired = capacity
238
233
  end
239
234
 
240
235
  def update_remote_settings(changes)
@@ -60,13 +60,14 @@ module Protocol
60
60
  end
61
61
 
62
62
  def consume_local_window(frame)
63
+ # For flow-control calculations, the 9-octet frame header is not counted.
63
64
  amount = frame.length
64
65
  @local_window.consume(amount)
65
66
  end
66
67
 
67
68
  def request_window_update
68
69
  if @local_window.limited?
69
- self.send_window_update(@local_window.used)
70
+ self.send_window_update(@local_window.wanted)
70
71
  end
71
72
  end
72
73
 
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Protocol
22
22
  module HTTP2
23
- VERSION = "0.11.6"
23
+ VERSION = "0.12.0"
24
24
  end
25
25
  end
@@ -33,10 +33,6 @@ module Protocol
33
33
  @capacity = capacity
34
34
  end
35
35
 
36
- def dup
37
- return self.class.new(@capacity)
38
- end
39
-
40
36
  # The window is completely full?
41
37
  def full?
42
38
  @available <= 0
@@ -73,6 +69,10 @@ module Protocol
73
69
  end
74
70
  end
75
71
 
72
+ def wanted
73
+ @used
74
+ end
75
+
76
76
  def limited?
77
77
  @available < (@capacity / 2)
78
78
  end
@@ -82,6 +82,30 @@ module Protocol
82
82
  end
83
83
  end
84
84
 
85
+ # This is a window which efficiently maintains a desired capacity.
86
+ class LocalWindow < Window
87
+ def initialize(capacity = 0xFFFF, desired: nil)
88
+ super(capacity)
89
+
90
+ @desired = desired
91
+ end
92
+
93
+ attr_accessor :desired
94
+
95
+ def wanted
96
+ if @desired
97
+ # We must send an update which allows at least @desired bytes to be sent.
98
+ (@desired - @capacity) + @used
99
+ else
100
+ @used
101
+ end
102
+ end
103
+
104
+ def limited?
105
+ @available < ((@desired || @capacity) / 2)
106
+ end
107
+ end
108
+
85
109
  # The WINDOW_UPDATE frame is used to implement flow control.
86
110
  #
87
111
  # +-+-------------------------------------------------------------+
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.required_ruby_version = '~> 2.4'
21
+ spec.required_ruby_version = '~> 2.5'
22
22
 
23
23
  spec.add_dependency "protocol-hpack", "~> 1.4"
24
24
  spec.add_dependency "protocol-http", "~> 0.15"
25
25
 
26
26
  spec.add_development_dependency "covered"
27
+ spec.add_development_dependency "bake-bundler"
27
28
  spec.add_development_dependency "bundler"
28
- spec.add_development_dependency "rake", "~> 10.0"
29
29
  spec.add_development_dependency "rspec", "~> 3.0"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.6
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-23 00:00:00.000000000 Z
11
+ date: 2020-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: protocol-hpack
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: bake-bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -144,14 +144,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
144
  requirements:
145
145
  - - "~>"
146
146
  - !ruby/object:Gem::Version
147
- version: '2.4'
147
+ version: '2.5'
148
148
  required_rubygems_version: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  requirements: []
154
- rubygems_version: 3.0.6
154
+ rubygems_version: 3.1.2
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: A low level implementation of the HTTP/2 protocol.