aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/plum/frame_utils.rb14
-rw-r--r--lib/plum/stream_helper.rb2
-rw-r--r--test/plum/test_frame_utils.rb8
3 files changed, 17 insertions, 7 deletions
diff --git a/lib/plum/frame_utils.rb b/lib/plum/frame_utils.rb
index c29b4a7..0093f89 100644
--- a/lib/plum/frame_utils.rb
+++ b/lib/plum/frame_utils.rb
@@ -49,12 +49,14 @@ module Plum
#
# @return [Hash<Symbol, Integer>] The parsed strings.
def parse_settings
- (self.length / 6).times.map {|i|
- id = self.payload.uint16(6 * i)
- val = self.payload.uint32(6 * i + 2)
- name = Frame::SETTINGS_TYPE.key(id) or next nil
- [name, val]
- }.compact.to_h
+ settings = {}
+ payload.each_byteslice(6) do |param|
+ id = param.uint16
+ name = Frame::SETTINGS_TYPE.key(id)
+ # ignore unknown settings type
+ settings[name] = param.uint32(2) if name
+ end
+ settings
end
end
end
diff --git a/lib/plum/stream_helper.rb b/lib/plum/stream_helper.rb
index 5be440e..4ba7a14 100644
--- a/lib/plum/stream_helper.rb
+++ b/lib/plum/stream_helper.rb
@@ -33,7 +33,7 @@ module Plum
def send_headers(headers, end_stream:)
max = @connection.remote_settings[:max_frame_size]
encoded = @connection.hpack_encoder.encode(headers)
- original_frame = Frame.headers(id, encoded, :end_headers, (end_stream && :end_stream))
+ original_frame = Frame.headers(id, encoded, :end_headers, (end_stream && :end_stream || nil))
original_frame.split_headers(max).each do |frame|
send frame
end
diff --git a/test/plum/test_frame_utils.rb b/test/plum/test_frame_utils.rb
index 65cc9d0..110fa5d 100644
--- a/test/plum/test_frame_utils.rb
+++ b/test/plum/test_frame_utils.rb
@@ -35,4 +35,12 @@ class FrameUtilsTest < Minitest::Test
assert_equal("7", ret[2].payload)
assert_equal([:end_headers], ret[2].flags)
end
+
+ def test_frame_parse_settings
+ # :header_table_size => 0x1010, :enable_push => 0x00, :header_table_size => 0x1011 (overwrite)
+ frame = Frame.new(type: :settings, flags: [], stream_id: 0, payload: "\x00\x01\x00\x00\x10\x10\x00\x02\x00\x00\x00\x00\x00\x01\x00\x00\x10\x11")
+ ret = frame.parse_settings
+ assert_equal(0x1011, ret[:header_table_size])
+ assert_equal(0x0000, ret[:enable_push])
+ end
end