http-2 0.8.1 → 0.8.2
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 +4 -4
- data/Gemfile +0 -1
- data/lib/http/2/connection.rb +8 -0
- data/lib/http/2/stream.rb +18 -1
- data/lib/http/2/version.rb +1 -1
- data/spec/connection_spec.rb +8 -0
- data/spec/stream_spec.rb +23 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90034b82f924807e4b3cb874fceae2d8fde0c74d
|
4
|
+
data.tar.gz: afe0a06580910045bd50d8920f1aaf2e7f5a9a01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a272a1d3f656e7a94888d027b81cd42a462b05d3d2c94525d39d91f6d327a13a79dbfdd63f275237ca7fbf46d95694f682305e279e2803b9616922f1dbe7bcf
|
7
|
+
data.tar.gz: de83deb546e98b3819904aae7b9d66024ee49f72c363c071829461ced9e3c4641529404bb17e5631c6274f90f7fdb89574315d6153e45dc17298c060bd0b6674
|
data/Gemfile
CHANGED
data/lib/http/2/connection.rb
CHANGED
@@ -142,6 +142,13 @@ module HTTP2
|
|
142
142
|
@state = :closed
|
143
143
|
end
|
144
144
|
|
145
|
+
# Sends a WINDOW_UPDATE frame to the peer.
|
146
|
+
#
|
147
|
+
# @param increment [Integer]
|
148
|
+
def window_update(increment)
|
149
|
+
send(type: :window_update, stream: 0, increment: increment)
|
150
|
+
end
|
151
|
+
|
145
152
|
# Sends a connection SETTINGS frame to the peer.
|
146
153
|
# The values are reflected when the corresponding ACK is received.
|
147
154
|
#
|
@@ -628,6 +635,7 @@ module HTTP2
|
|
628
635
|
stream.once(:close) { @active_stream_count -= 1 }
|
629
636
|
stream.on(:promise, &method(:promise)) if self.is_a? Server
|
630
637
|
stream.on(:frame, &method(:send))
|
638
|
+
stream.on(:window_update, &method(:window_update))
|
631
639
|
|
632
640
|
@streams[id] = stream
|
633
641
|
end
|
data/lib/http/2/stream.rb
CHANGED
@@ -97,8 +97,14 @@ module HTTP2
|
|
97
97
|
|
98
98
|
case frame[:type]
|
99
99
|
when :data
|
100
|
-
|
100
|
+
window_size = frame[:payload].bytesize
|
101
|
+
window_size += frame[:padding] || 0
|
102
|
+
@local_window -= window_size
|
101
103
|
emit(:data, frame[:payload]) unless frame[:ignore]
|
104
|
+
|
105
|
+
# Automatically send WINDOW_UPDATE,
|
106
|
+
# assuming that emit(:data) can now receive next data
|
107
|
+
window_update(window_size) if window_size > 0
|
102
108
|
when :headers, :push_promise
|
103
109
|
emit(:headers, frame[:payload]) unless frame[:ignore]
|
104
110
|
when :priority
|
@@ -205,6 +211,17 @@ module HTTP2
|
|
205
211
|
send(type: :rst_stream, error: :refused_stream)
|
206
212
|
end
|
207
213
|
|
214
|
+
# Sends a WINDOW_UPDATE frame to the peer.
|
215
|
+
#
|
216
|
+
# @param increment [Integer]
|
217
|
+
def window_update(increment)
|
218
|
+
# always emit connection-level WINDOW_UPDATE
|
219
|
+
emit(:window_update, increment)
|
220
|
+
# emit stream-level WINDOW_UPDATE unless stream is closed
|
221
|
+
return if @state == :closed || @state == :remote_closed
|
222
|
+
send(type: :window_update, increment: increment)
|
223
|
+
end
|
224
|
+
|
208
225
|
private
|
209
226
|
|
210
227
|
# HTTP 2.0 Stream States
|
data/lib/http/2/version.rb
CHANGED
data/spec/connection_spec.rb
CHANGED
@@ -577,5 +577,13 @@ RSpec.describe HTTP2::Connection do
|
|
577
577
|
|
578
578
|
@conn.goaway(:internal_error, 'payload')
|
579
579
|
end
|
580
|
+
it '.window_update should emit WINDOW_UPDATE frames' do
|
581
|
+
expect(@conn).to receive(:send) do |frame|
|
582
|
+
expect(frame[:type]).to eq :window_update
|
583
|
+
expect(frame[:increment]).to eq 20
|
584
|
+
expect(frame[:stream]).to eq 0
|
585
|
+
end
|
586
|
+
@conn.window_update(20)
|
587
|
+
end
|
580
588
|
end
|
581
589
|
end
|
data/spec/stream_spec.rb
CHANGED
@@ -573,6 +573,21 @@ RSpec.describe HTTP2::Stream do
|
|
573
573
|
expect(s1.buffered_amount).to eq 0
|
574
574
|
expect(s1.remote_window).to eq 900
|
575
575
|
end
|
576
|
+
|
577
|
+
it 'should keep track of incoming flow control' do
|
578
|
+
data = DATA.deep_dup
|
579
|
+
datalen = data[:payload].bytesize
|
580
|
+
expect(@stream).to receive(:send) do |frame|
|
581
|
+
expect(frame[:type]).to eq :window_update
|
582
|
+
expect(frame[:increment]).to eq datalen
|
583
|
+
end
|
584
|
+
expect(@client).to receive(:send) do |frame|
|
585
|
+
expect(frame[:type]).to eq :window_update
|
586
|
+
expect(frame[:increment]).to eq datalen
|
587
|
+
end
|
588
|
+
@stream.receive HEADERS.deep_dup
|
589
|
+
@stream.receive data
|
590
|
+
end
|
576
591
|
end
|
577
592
|
|
578
593
|
context 'client API' do
|
@@ -660,6 +675,14 @@ RSpec.describe HTTP2::Stream do
|
|
660
675
|
|
661
676
|
@stream.refuse
|
662
677
|
end
|
678
|
+
|
679
|
+
it '.window_update should emit WINDOW_UPDATE frames' do
|
680
|
+
expect(@stream).to receive(:send) do |frame|
|
681
|
+
expect(frame[:type]).to eq :window_update
|
682
|
+
expect(frame[:increment]).to eq 20
|
683
|
+
end
|
684
|
+
@stream.window_update(20)
|
685
|
+
end
|
663
686
|
end
|
664
687
|
|
665
688
|
context 'server API' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http-2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Grigorik
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-05-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|