aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2016-05-08 21:31:17 +0900
committerKazuki Yamaguchi <k@rhe.jp>2016-05-08 22:02:50 +0900
commit0afb9eadcbb5e631757a777124281f663d8f6974 (patch)
tree53a02042e57eb390021221f95ec1637c47b1099e
parent57a2e245f6021c5e41610353c3c47c108a43d908 (diff)
downloadplum-0afb9eadcbb5e631757a777124281f663d8f6974.tar.gz
avoid Frame#type if possible
For typo-safety.
-rw-r--r--lib/plum/connection.rb24
-rw-r--r--lib/plum/flow_control.rb4
-rw-r--r--lib/plum/stream.rb28
3 files changed, 23 insertions, 33 deletions
diff --git a/lib/plum/connection.rb b/lib/plum/connection.rb
index 36faedd..d5c507b 100644
--- a/lib/plum/connection.rb
+++ b/lib/plum/connection.rb
@@ -134,12 +134,12 @@ module Plum
end
def validate_received_frame(frame)
- if @state == :waiting_settings && frame.type != :settings
+ if @state == :waiting_settings && !(Frame::Settings === frame)
raise RemoteConnectionError.new(:protocol_error)
end
if @state == :waiting_continuation
- if frame.type != :continuation || frame.stream_id != @continuation_id
+ if !(Frame::Continuation === frame) || frame.stream_id != @continuation_id
raise RemoteConnectionError.new(:protocol_error)
end
if frame.end_headers?
@@ -147,7 +147,7 @@ module Plum
end
end
- if frame.type == :headers || frame.type == :push_promise
+ if Frame::Headers === frame || Frame::PushPromise === frame
if !frame.end_headers?
@state = :waiting_continuation
@continuation_id = frame.stream_id
@@ -162,7 +162,7 @@ module Plum
if frame.stream_id == 0
receive_control_frame(frame)
else
- stream(frame.stream_id, frame.type == :headers).receive_frame(frame)
+ stream(frame.stream_id, Frame::Headers === frame).receive_frame(frame)
end
end
@@ -171,16 +171,12 @@ module Plum
raise RemoteConnectionError.new(:frame_size_error)
end
- case frame.type
- when :settings
- receive_settings(frame)
- when :window_update
- receive_window_update(frame)
- when :ping
- receive_ping(frame)
- when :goaway
- receive_goaway(frame)
- when :data, :headers, :priority, :rst_stream, :push_promise, :continuation
+ case frame
+ when Frame::Settings then receive_settings(frame)
+ when Frame::WindowUpdate then receive_window_update(frame)
+ when Frame::Ping then receive_ping(frame)
+ when Frame::Goaway then receive_goaway(frame)
+ when Frame::Data, Frame::Headers, Frame::Priority, Frame::RstStream, Frame::PushPromise, Frame::Continuation
raise Plum::RemoteConnectionError.new(:protocol_error)
else
# MUST ignore unknown frame type.
diff --git a/lib/plum/flow_control.rb b/lib/plum/flow_control.rb
index f28fa3a..4b7ef79 100644
--- a/lib/plum/flow_control.rb
+++ b/lib/plum/flow_control.rb
@@ -9,7 +9,7 @@ module Plum
# Sends frame respecting inner-stream flow control.
# @param frame [Frame] The frame to be sent.
def send(frame)
- if frame.type == :data
+ if Frame::Data === frame
@send_buffer << frame
if @send_remaining_window < frame.length
if Stream === self
@@ -62,7 +62,7 @@ module Plum
end
def consume_recv_window(frame)
- if frame.type == :data
+ if Frame::Data === frame
@recv_remaining_window -= frame.length
if @recv_remaining_window < 0
local_error = (Connection === self) ? RemoteConnectionError : RemoteStreamError
diff --git a/lib/plum/stream.rb b/lib/plum/stream.rb
index 420ee23..6e6724e 100644
--- a/lib/plum/stream.rb
+++ b/lib/plum/stream.rb
@@ -31,22 +31,15 @@ module Plum
validate_received_frame(frame)
consume_recv_window(frame)
- case frame.type
- when :data
- receive_data(frame)
- when :headers
- receive_headers(frame)
- when :priority
- receive_priority(frame)
- when :rst_stream
- receive_rst_stream(frame)
- when :window_update
- receive_window_update(frame)
- when :continuation
- receive_continuation(frame)
- when :push_promise
- receive_push_promise(frame)
- when :ping, :goaway, :settings
+ case frame
+ when Frame::Data then receive_data(frame)
+ when Frame::Headers then receive_headers(frame)
+ when Frame::Priority then receive_priority(frame)
+ when Frame::RstStream then receive_rst_stream(frame)
+ when Frame::WindowUpdate then receive_window_update(frame)
+ when Frame::Continuation then receive_continuation(frame)
+ when Frame::PushPromise then receive_push_promise(frame)
+ when Frame::Ping, Frame::Goaway, Frame::Settings
raise RemoteConnectionError.new(:protocol_error) # stream_id MUST be 0x00
else
# MUST ignore unknown frame
@@ -135,7 +128,8 @@ module Plum
def validate_received_frame(frame)
if frame.length > @connection.local_settings[:max_frame_size]
- if [:headers, :push_promise, :continuation].include?(frame.type)
+ case frame
+ when Frame::Headers, Frame::PushPromise, Frame::Continuation
raise RemoteConnectionError.new(:frame_size_error)
else
raise RemoteStreamError.new(:frame_size_error)