From ff069ecd2e9f2658a8c01a368dc8c9a09c549d0b Mon Sep 17 00:00:00 2001 From: "jiangzhi.xie" Date: Mon, 18 Mar 2019 22:06:29 +0800 Subject: [PATCH 1/3] Fix example code, remove rails method --- example/upgrade_client.rb | 16 ++++++++-------- example/upgrade_server.rb | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/example/upgrade_client.rb b/example/upgrade_client.rb index e2ba8a99..1cb367bf 100644 --- a/example/upgrade_client.rb +++ b/example/upgrade_client.rb @@ -34,14 +34,14 @@ def request_header_hash # upgrader module class UpgradeHandler - UPGRADE_REQUEST = <<-RESP.strip_heredoc.freeze - GET %s HTTP/1.1 - Connection: Upgrade, HTTP2-Settings - HTTP2-Settings: #{HTTP2::Client.settings_header(settings_max_concurrent_streams: 100)} - Upgrade: h2c - Host: %s - User-Agent: http-2 upgrade - Accept: */* + UPGRADE_REQUEST = <<-RESP.freeze +GET %s HTTP/1.1 +Connection: Upgrade, HTTP2-Settings +HTTP2-Settings: #{HTTP2::Client.settings_header(settings_max_concurrent_streams: 100)} +Upgrade: h2c +Host: %s +User-Agent: http-2 upgrade +Accept: */* RESP diff --git a/example/upgrade_server.rb b/example/upgrade_server.rb index 45b30ecd..345dfe6a 100644 --- a/example/upgrade_server.rb +++ b/example/upgrade_server.rb @@ -39,10 +39,10 @@ def request_header_hash class UpgradeHandler VALID_UPGRADE_METHODS = %w(GET OPTIONS).freeze - UPGRADE_RESPONSE = <<-RESP.strip_heredoc.freeze - HTTP/1.1 101 Switching Protocols - Connection: Upgrade - Upgrade: h2c + UPGRADE_RESPONSE = <<-RESP.freeze +HTTP/1.1 101 Switching Protocols +Connection: Upgrade +Upgrade: h2c RESP From aaa71f62497f4872ab3eef9be621c54d192dff5a Mon Sep 17 00:00:00 2001 From: "Jon.Xie" Date: Tue, 19 Mar 2019 10:06:10 +0800 Subject: [PATCH 2/3] Fix style of example code --- .rubocop.yml | 1 + example/upgrade_client.rb | 4 ++-- example/upgrade_server.rb | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index eb32e86e..2c534a31 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -11,6 +11,7 @@ AllCops: Layout/IndentHeredoc: Exclude: - 'lib/tasks/generate_huffman_table.rb' + - 'example/*' Metrics/LineLength: Max: 120 diff --git a/example/upgrade_client.rb b/example/upgrade_client.rb index 1cb367bf..001ed7d0 100644 --- a/example/upgrade_client.rb +++ b/example/upgrade_client.rb @@ -34,7 +34,7 @@ def request_header_hash # upgrader module class UpgradeHandler - UPGRADE_REQUEST = <<-RESP.freeze + UPGRADE_REQUEST = < Date: Sat, 30 Mar 2019 18:47:29 +0800 Subject: [PATCH 3/3] FEATURE - Add flags to event(headers/data) --- .rubocop.yml | 2 ++ lib/http/2/stream.rb | 6 +++--- spec/stream_spec.rb | 27 +++++++++++++++++++-------- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 2c534a31..58f19157 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -18,6 +18,8 @@ Metrics/LineLength: Metrics/BlockLength: Max: 700 + Exclude: + - spec/**/* Layout/EndAlignment: EnforcedStyleAlignWith: variable diff --git a/lib/http/2/stream.rb b/lib/http/2/stream.rb index f4082589..a1f15c2d 100644 --- a/lib/http/2/stream.rb +++ b/lib/http/2/stream.rb @@ -105,12 +105,12 @@ def receive(frame) when :data update_local_window(frame) # Emit DATA frame - emit(:data, frame[:payload]) unless frame[:ignore] + emit(:data, frame[:payload], frame[:flags]) unless frame[:ignore] calculate_window_update(@local_window_max_size) when :headers - emit(:headers, frame[:payload]) unless frame[:ignore] + emit(:headers, frame[:payload], frame[:flags]) unless frame[:ignore] when :push_promise - emit(:promise_headers, frame[:payload]) unless frame[:ignore] + emit(:promise_headers, frame[:payload], frame[:flags]) unless frame[:ignore] when :priority process_priority(frame) when :window_update diff --git a/spec/stream_spec.rb b/spec/stream_spec.rb index 78373961..f6a242e4 100644 --- a/spec/stream_spec.rb +++ b/spec/stream_spec.rb @@ -751,20 +751,25 @@ end it 'should emit received headers via on(:headers)' do - headers, recv = REQUEST_HEADERS, nil + headers, recv, flags = REQUEST_HEADERS, nil, [] @srv.on(:stream) do |stream| - stream.on(:headers) { |h| recv = h } + stream.on(:headers) do |h, f| + recv = h + flags << f + end end @client_stream.headers(headers) expect(recv).to eq headers + expect(flags).to eq [[:end_headers]] end - it 'should emit received payload via on(:data)' do + it 'should emit received payload & flags via on(:data)' do payload = 'some-payload' @srv.on(:stream) do |stream| - stream.on(:data) do |recv| + stream.on(:data) do |recv, flags| expect(recv).to eq payload + expect(flags).to eq [:end_stream] end end @@ -834,22 +839,27 @@ end it 'client: promise_headers > active > headers > .. > data > close' do - order, headers, promise_headers = [], [], [] + order, headers, promise_headers, flags = [], [], [], [] @client.on(:promise) do |push| order << :reserved push.on(:active) { order << :active } - push.on(:data) { order << :data } push.on(:half_close) { order << :half_close } push.on(:close) { order << :close } - push.on(:promise_headers) do |h| + push.on(:promise_headers) do |h, f| order << :promise_headers promise_headers += h + flags << f end - push.on(:headers) do |h| + push.on(:headers) do |h, f| order << :headers headers += h + flags << f + end + push.on(:data) do |_d, f| + order << :data + flags << f end expect(push.id).to be_even @@ -871,6 +881,7 @@ :data, :close, ] + expect(flags).to eql([[:end_headers], [:end_headers], [:end_stream]]) end end end