From 0afb9eadcbb5e631757a777124281f663d8f6974 Mon Sep 17 00:00:00 2001 From: Kazuki Yamaguchi Date: Sun, 8 May 2016 21:31:17 +0900 Subject: avoid Frame#type if possible For typo-safety. --- lib/plum/connection.rb | 24 ++++++++++-------------- lib/plum/flow_control.rb | 4 ++-- lib/plum/stream.rb | 28 +++++++++++----------------- 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) -- cgit v1.2.3