http-protocol 0.3.1 → 0.3.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/lib/http/protocol/http2/connection.rb +22 -4
- data/lib/http/protocol/http2/continuation_frame.rb +2 -2
- data/lib/http/protocol/http2/frame.rb +9 -1
- data/lib/http/protocol/http2/framer.rb +3 -2
- data/lib/http/protocol/http2/settings_frame.rb +0 -3
- data/lib/http/protocol/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84fb025f5c2cc394607d0c28b592c8fda12285a8340c0d3eb2a5ec8328aab371
|
4
|
+
data.tar.gz: 98a7233fe2c8e0f706d9738b0845bd86a9edd7e4fadf4335fc30763a3a468927
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a436986f8203efcc943a7353acb3a8c9489f5e5576127b913482b684f4d879de6f4b88b05c9b17bd5c981826177be00b7f1f2876a6239ee0a5b7c17763afc84
|
7
|
+
data.tar.gz: 4453a7d3c4cab53a2ba6fdb1db9eb82988157582cd9c01b8aca9dd437d13cd6adfc4b20e1e03065cfc0150c497f67f8a05de3d1706d0ec932519e291227216a2
|
@@ -81,6 +81,12 @@ module HTTP
|
|
81
81
|
@state == :closed
|
82
82
|
end
|
83
83
|
|
84
|
+
def close
|
85
|
+
send_goaway
|
86
|
+
|
87
|
+
@framer.close
|
88
|
+
end
|
89
|
+
|
84
90
|
def encode_headers(headers, buffer = String.new.b)
|
85
91
|
HPACK::Compressor.new(buffer, @encoder).encode(headers)
|
86
92
|
|
@@ -103,8 +109,8 @@ module HTTP
|
|
103
109
|
attr :streams
|
104
110
|
|
105
111
|
def read_frame
|
106
|
-
frame = @framer.read_frame
|
107
|
-
# puts "#{self.class} #{@state} read_frame:
|
112
|
+
frame = @framer.read_frame(@local_settings.maximum_frame_size)
|
113
|
+
# puts "#{self.class} #{@state} read_frame: class=#{frame.class} flags=#{frame.flags} length=#{frame.length}"
|
108
114
|
|
109
115
|
yield frame if block_given?
|
110
116
|
|
@@ -113,6 +119,15 @@ module HTTP
|
|
113
119
|
return frame
|
114
120
|
rescue ProtocolError => error
|
115
121
|
send_goaway(error.code || PROTOCOL_ERROR, error.message)
|
122
|
+
|
123
|
+
raise
|
124
|
+
rescue HTTP::HPACK::CompressionError => error
|
125
|
+
send_goaway(COMPRESSION_ERROR, error.message)
|
126
|
+
|
127
|
+
raise
|
128
|
+
rescue
|
129
|
+
send_goaway(PROTOCOL_ERROR, $!.message)
|
130
|
+
|
116
131
|
raise
|
117
132
|
end
|
118
133
|
|
@@ -136,11 +151,10 @@ module HTTP
|
|
136
151
|
|
137
152
|
def receive_goaway(frame)
|
138
153
|
@state = :closed
|
139
|
-
@framer.close
|
140
154
|
end
|
141
155
|
|
142
156
|
def write_frame(frame)
|
143
|
-
# puts "#{self.class} #{@state} write_frame:
|
157
|
+
# puts "#{self.class} #{@state} write_frame: class=#{frame.class} flags=#{frame.flags} length=#{frame.length}"
|
144
158
|
@framer.write_frame(frame)
|
145
159
|
end
|
146
160
|
|
@@ -246,6 +260,10 @@ module HTTP
|
|
246
260
|
end
|
247
261
|
|
248
262
|
def receive_headers(frame)
|
263
|
+
if frame.stream_id == 0
|
264
|
+
raise ProtocolError, "Cannot receive headers for stream 0!"
|
265
|
+
end
|
266
|
+
|
249
267
|
if stream = @streams[frame.stream_id]
|
250
268
|
stream.receive_headers(frame)
|
251
269
|
|
@@ -34,13 +34,13 @@ module HTTP
|
|
34
34
|
flag_set?(END_HEADERS)
|
35
35
|
end
|
36
36
|
|
37
|
-
def read(io)
|
37
|
+
def read(io, maximum_frame_size)
|
38
38
|
super
|
39
39
|
|
40
40
|
unless end_headers?
|
41
41
|
@continuation = ContinuationFrame.new
|
42
42
|
|
43
|
-
@continuation.read(io)
|
43
|
+
@continuation.read(io, maximum_frame_size)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -29,6 +29,9 @@ module HTTP
|
|
29
29
|
PADDED = 0x8
|
30
30
|
PRIORITY = 0x20
|
31
31
|
|
32
|
+
MAXIMUM_ALLOWED_WINDOW_SIZE = 0x7FFFFFFF
|
33
|
+
MAXIMUM_ALLOWED_FRAME_SIZE = 0xFFFFFF
|
34
|
+
|
32
35
|
class Frame
|
33
36
|
include Comparable
|
34
37
|
|
@@ -156,8 +159,13 @@ module HTTP
|
|
156
159
|
@payload = io.read(@length)
|
157
160
|
end
|
158
161
|
|
159
|
-
def read(io)
|
162
|
+
def read(io, maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE)
|
160
163
|
read_header(io) unless @length
|
164
|
+
|
165
|
+
if @length > maximum_frame_size
|
166
|
+
raise FrameSizeError, "Frame length #{@length} exceeds maximum frame size #{maximum_frame_size}!"
|
167
|
+
end
|
168
|
+
|
161
169
|
read_payload(io)
|
162
170
|
end
|
163
171
|
|
@@ -78,7 +78,7 @@ module HTTP
|
|
78
78
|
return string
|
79
79
|
end
|
80
80
|
|
81
|
-
def read_frame
|
81
|
+
def read_frame(maximum_frame_size = MAXIMUM_ALLOWED_FRAME_SIZE)
|
82
82
|
# Read the header:
|
83
83
|
length, type, flags, stream_id = read_header
|
84
84
|
|
@@ -89,7 +89,7 @@ module HTTP
|
|
89
89
|
frame = klass.new(stream_id, flags, type, length)
|
90
90
|
|
91
91
|
# Read the payload:
|
92
|
-
frame.read(@io)
|
92
|
+
frame.read(@io, maximum_frame_size)
|
93
93
|
|
94
94
|
return frame
|
95
95
|
end
|
@@ -97,6 +97,7 @@ module HTTP
|
|
97
97
|
def write_frame(frame)
|
98
98
|
# puts "framer: write_frame #{frame.inspect}"
|
99
99
|
frame.write(@io)
|
100
|
+
|
100
101
|
@io.flush
|
101
102
|
end
|
102
103
|
|
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.3.
|
4
|
+
version: 0.3.2
|
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-08-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-hpack
|