aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-05-08 21:58:19 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-05-08 21:58:19 +0900
commit1fd50f9bf6f342fd24b630e4be6a246bf7b6ec6f (patch)
tree71de51a144531ddd8b12d8b2b8e3f70c3b264b5d
parentd9d2690df6751364ec8082f9f42c9c6582933569 (diff)
downloadplum-topic/refactor-for-0.3.tar.gz
frame: settings: add Frame::Settings.acktopic/refactor-for-0.3
This is equivalent to Frame::Settings.new(:ack).
-rw-r--r--lib/plum/connection.rb2
-rw-r--r--lib/plum/frame/settings.rb12
-rw-r--r--test/plum/client/test_upgrade_client_session.rb2
-rw-r--r--test/plum/test_frame_factory.rb2
-rw-r--r--test/utils/client.rb2
5 files changed, 13 insertions, 7 deletions
diff --git a/lib/plum/connection.rb b/lib/plum/connection.rb
index d5c507b..2f177a6 100644
--- a/lib/plum/connection.rb
+++ b/lib/plum/connection.rb
@@ -198,7 +198,7 @@ module Plum
callback(:remote_settings, @remote_settings, old_remote_settings)
- send_immediately Frame::Settings.new(:ack) if send_ack
+ send_immediately Frame::Settings.ack if send_ack
if @state == :waiting_settings
@state = :open
diff --git a/lib/plum/frame/settings.rb b/lib/plum/frame/settings.rb
index 3bd13d4..7f7c2be 100644
--- a/lib/plum/frame/settings.rb
+++ b/lib/plum/frame/settings.rb
@@ -15,16 +15,22 @@ module Plum
}.freeze
# Creates a SETTINGS frame.
- # @param ack [Symbol] Pass :ack to create an ACK frame.
# @param args [Hash<Symbol, Integer>] The settings values to send.
- def initialize(ack = nil, **args)
+ def initialize(**args)
payload = String.new
args.each { |key, value|
id = SETTINGS_TYPE[key] or raise ArgumentError.new("invalid settings type: #{key}")
payload.push_uint16(id)
payload.push_uint32(value)
}
- initialize_base(type: :settings, stream_id: 0, flags: [ack], payload: payload)
+ initialize_base(type: :settings, stream_id: 0, payload: payload)
+ end
+
+ # Creates a SETTINGS frame with ACK flag.
+ def self.ack
+ frame = allocate
+ frame.send(:initialize_base, type: :settings, stream_id: 0, flags_value: 0x01)
+ frame
end
# Parses SETTINGS frame payload. Ignores unknown settings type (see RFC7540 6.5.2).
diff --git a/test/plum/client/test_upgrade_client_session.rb b/test/plum/client/test_upgrade_client_session.rb
index 446462c..4c20e3b 100644
--- a/test/plum/client/test_upgrade_client_session.rb
+++ b/test/plum/client/test_upgrade_client_session.rb
@@ -22,7 +22,7 @@ class UpgradeClientSessionTest < Minitest::Test
sock = StringSocket.new("HTTP/1.1 101\r\n\r\n")
session = UpgradeClientSession.new(sock, Client::DEFAULT_CONFIG)
sock.rio.string << Frame::Settings.new.assemble
- sock.rio.string << Frame::Settings.new(:ack).assemble
+ sock.rio.string << Frame::Settings.ack.assemble
res = session.request({ ":method" => "GET", ":path" => "/aa" }, "aa", {})
sock.rio.string << Frame::Headers.new(3, HPACK::Encoder.new(3).encode(":status" => "200", "content-length" => "3"), end_headers: true).assemble
sock.rio.string << Frame::Data.new(3, "aaa", end_stream: true).assemble
diff --git a/test/plum/test_frame_factory.rb b/test/plum/test_frame_factory.rb
index a4253ba..df3093e 100644
--- a/test/plum/test_frame_factory.rb
+++ b/test/plum/test_frame_factory.rb
@@ -28,7 +28,7 @@ class FrameFactoryTest < Minitest::Test
end
def test_settings_ack
- frame = Frame::Settings.new(:ack)
+ frame = Frame::Settings.ack
assert_frame(frame,
type: :settings,
stream_id: 0,
diff --git a/test/utils/client.rb b/test/utils/client.rb
index f8937e2..ae8ca16 100644
--- a/test/utils/client.rb
+++ b/test/utils/client.rb
@@ -4,7 +4,7 @@ module ServerUtils
def open_client_connection(scheme = :https)
io = StringIO.new
@_ccon = ClientConnection.new(io.method(:write))
- @_ccon << Frame::Settings.new(:ack).assemble
+ @_ccon << Frame::Settings.ack.assemble
@_ccon << Frame::Settings.new.assemble
if block_given?
yield @_ccon