http-protocol 0.6.0 → 0.6.1
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06c19174884cf3035af9e9f8ae64625b8973238ee4c0e6ae8b55a5d1a5d7392c
|
4
|
+
data.tar.gz: 0b82b044493d1c712d920f08932062d731abc1b204ed79c557ece5aaf340e9a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bddc90de39bfc55f4ee72d44701e248828342a7a171d80d874e1df5ea94944544030b4edbfb3f9017cdfbf6df0564fc0b219dabe6969bee9b02cdb1d221aa5d6
|
7
|
+
data.tar.gz: f1981cbbce0573ac3de49212193ab7cdabc32ec3e865396caac80a6c5cd6728fbcfae64418e1ea4b972e24b2f861c8011244c6d7a8d1f4e7628898a2e03b67f6
|
@@ -111,6 +111,7 @@ module HTTP
|
|
111
111
|
def read_frame
|
112
112
|
frame = @framer.read_frame(@local_settings.maximum_frame_size)
|
113
113
|
# puts "#{self.class} #{@state} read_frame: class=#{frame.class} flags=#{frame.flags} length=#{frame.length}"
|
114
|
+
# puts "Windows: local_window=#{@local_window.inspect}; remote_window=#{@remote_window.inspect}"
|
114
115
|
|
115
116
|
yield frame if block_given?
|
116
117
|
|
@@ -171,6 +172,7 @@ module HTTP
|
|
171
172
|
|
172
173
|
def update_local_settings(changes)
|
173
174
|
capacity = @local_settings.initial_window_size
|
175
|
+
|
174
176
|
@streams.each_value do |stream|
|
175
177
|
stream.local_window.capacity = capacity
|
176
178
|
end
|
@@ -178,6 +180,7 @@ module HTTP
|
|
178
180
|
|
179
181
|
def update_remote_settings(changes)
|
180
182
|
capacity = @remote_settings.initial_window_size
|
183
|
+
|
181
184
|
@streams.each_value do |stream|
|
182
185
|
stream.remote_window.capacity = capacity
|
183
186
|
end
|
@@ -210,9 +213,6 @@ module HTTP
|
|
210
213
|
end
|
211
214
|
|
212
215
|
def open!
|
213
|
-
@local_window.capacity = self.local_settings.initial_window_size
|
214
|
-
@remote_window.capacity = self.remote_settings.initial_window_size
|
215
|
-
|
216
216
|
@state = :open
|
217
217
|
|
218
218
|
return self
|
@@ -66,12 +66,13 @@ module HTTP
|
|
66
66
|
|
67
67
|
write_frame(frame)
|
68
68
|
|
69
|
-
@local_window.
|
69
|
+
@local_window.expand(window_increment)
|
70
70
|
end
|
71
71
|
|
72
72
|
def receive_window_update(frame)
|
73
73
|
was_full = @remote_window.full?
|
74
74
|
|
75
|
+
# puts "expand remote_window=#{@remote_window} by #{frame.unpack}"
|
75
76
|
@remote_window.expand(frame.unpack)
|
76
77
|
|
77
78
|
self.window_updated if was_full
|
@@ -83,8 +83,8 @@ module HTTP
|
|
83
83
|
@state = :idle
|
84
84
|
|
85
85
|
@priority = nil
|
86
|
-
@local_window = connection.
|
87
|
-
@remote_window = connection.
|
86
|
+
@local_window = Window.new(connection.local_settings.initial_window_size)
|
87
|
+
@remote_window = Window.new(connection.remote_settings.initial_window_size)
|
88
88
|
|
89
89
|
@headers = nil
|
90
90
|
@data = nil
|
@@ -22,7 +22,12 @@ module HTTP
|
|
22
22
|
module Protocol
|
23
23
|
module HTTP2
|
24
24
|
class Window
|
25
|
-
|
25
|
+
# @param capacity [Integer] The initial window size, typically from the settings.
|
26
|
+
def initialize(capacity = 0xFFFF)
|
27
|
+
# This is the main field required:
|
28
|
+
@available = capacity
|
29
|
+
|
30
|
+
# These two fields are primarily used for efficiently sending window updates:
|
26
31
|
@used = 0
|
27
32
|
@capacity = capacity
|
28
33
|
|
@@ -35,34 +40,40 @@ module HTTP
|
|
35
40
|
|
36
41
|
# The window is completely full?
|
37
42
|
def full?
|
38
|
-
@
|
43
|
+
@available.zero?
|
39
44
|
end
|
40
45
|
|
41
|
-
|
42
|
-
|
46
|
+
attr :used
|
47
|
+
attr :capacity
|
48
|
+
|
49
|
+
# When the value of SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST adjust the size of all stream flow-control windows that it maintains by the difference between the new value and the old value.
|
50
|
+
def capacity= value
|
51
|
+
difference = value - @capacity
|
52
|
+
@available += difference
|
53
|
+
end
|
43
54
|
|
44
55
|
def consume(amount)
|
56
|
+
@available -= amount
|
45
57
|
@used += amount
|
46
58
|
end
|
47
59
|
|
48
|
-
|
49
|
-
@capacity - @used
|
50
|
-
end
|
60
|
+
attr :available
|
51
61
|
|
52
62
|
def available?
|
53
|
-
available > 0
|
63
|
+
@available > 0
|
54
64
|
end
|
55
65
|
|
56
66
|
def expand(amount)
|
67
|
+
@available += amount
|
57
68
|
@used -= amount
|
58
69
|
end
|
59
70
|
|
60
71
|
def limited?
|
61
|
-
@
|
72
|
+
@available < (@capacity / 2)
|
62
73
|
end
|
63
74
|
|
64
75
|
def to_s
|
65
|
-
"\#<Window
|
76
|
+
"\#<Window used=#{@used} available=#{@available} capacity=#{@capacity}>"
|
66
77
|
end
|
67
78
|
end
|
68
79
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http-protocol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-hpack
|