http-2 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/http/2/client.rb +1 -0
- data/lib/http/2/connection.rb +116 -96
- data/lib/http/2/emitter.rb +2 -9
- data/lib/http/2/extensions.rb +21 -1
- data/lib/http/2/flow_buffer.rb +45 -35
- data/lib/http/2/framer.rb +113 -85
- data/lib/http/2/header/compressor.rb +47 -31
- data/lib/http/2/header/decompressor.rb +27 -20
- data/lib/http/2/header/encoding_context.rb +77 -80
- data/lib/http/2/header/huffman.rb +14 -10
- data/lib/http/2/header/huffman_statemachine.rb +1 -1
- data/lib/http/2/server.rb +7 -1
- data/lib/http/2/stream.rb +9 -4
- data/lib/http/2/version.rb +1 -1
- data/lib/http/2.rb +5 -0
- data/sig/{next.rbs → 2.rbs} +29 -18
- data/sig/client.rbs +2 -0
- data/sig/connection.rbs +20 -8
- data/sig/emitter.rbs +2 -4
- data/sig/extensions.rbs +3 -1
- data/sig/flow_buffer.rbs +7 -5
- data/sig/frame_buffer.rbs +1 -1
- data/sig/framer.rbs +5 -0
- data/sig/header/compressor.rbs +6 -4
- data/sig/header/decompressor.rbs +3 -2
- data/sig/header/encoding_context.rbs +24 -6
- data/sig/header/huffman.rbs +19 -3
- data/sig/header.rbs +11 -8
- data/sig/stream.rbs +8 -5
- metadata +4 -7
data/sig/connection.rbs
CHANGED
@@ -5,8 +5,15 @@ module HTTP2
|
|
5
5
|
include BufferUtils
|
6
6
|
|
7
7
|
REQUEST_MANDATORY_HEADERS: Array[String]
|
8
|
+
|
8
9
|
RESPONSE_MANDATORY_HEADERS: Array[String]
|
9
10
|
|
11
|
+
CONNECTION_FRAME_TYPES: Array[Symbol]
|
12
|
+
|
13
|
+
HEADERS_FRAME_TYPES: Array[Symbol]
|
14
|
+
|
15
|
+
STREAM_OPEN_STATES: Array[Symbol]
|
16
|
+
|
10
17
|
attr_reader state: Symbol
|
11
18
|
|
12
19
|
attr_reader local_window: Integer
|
@@ -22,14 +29,18 @@ module HTTP2
|
|
22
29
|
|
23
30
|
@stream_id: Integer
|
24
31
|
@active_stream_count: Integer
|
25
|
-
@last_activated_stream: Integer
|
26
32
|
@last_stream_id: Integer
|
27
33
|
|
28
34
|
@streams: Hash[Integer, Stream]
|
29
|
-
@streams_recently_closed: Hash[Integer,
|
35
|
+
@streams_recently_closed: Hash[Integer, Numeric]
|
30
36
|
|
31
37
|
@framer: Framer
|
32
38
|
|
39
|
+
type role_type = :client | :server
|
40
|
+
|
41
|
+
@local_role: role_type
|
42
|
+
@remote_role: role_type
|
43
|
+
|
33
44
|
@local_window_limit: Integer
|
34
45
|
@remote_window_limit: Integer
|
35
46
|
|
@@ -40,6 +51,7 @@ module HTTP2
|
|
40
51
|
@recv_buffer: String
|
41
52
|
@continuation: Array[frame]
|
42
53
|
|
54
|
+
@h2c_upgrade: Symbol?
|
43
55
|
@closed_since: Float?
|
44
56
|
@received_frame: bool
|
45
57
|
|
@@ -54,18 +66,18 @@ module HTTP2
|
|
54
66
|
|
55
67
|
def window_update: (Integer increment) -> void
|
56
68
|
|
57
|
-
def settings: (settings_enum) -> void
|
69
|
+
def settings: (settings_enum payload) -> void
|
58
70
|
|
59
71
|
def receive: (string data) -> void
|
60
72
|
alias << receive
|
61
73
|
|
62
|
-
def initialize: (?
|
74
|
+
def initialize: (?connection_opts) -> void
|
63
75
|
|
64
76
|
private
|
65
77
|
|
66
|
-
def send: (frame) -> void
|
78
|
+
def send: (frame frame) -> void
|
67
79
|
|
68
|
-
def encode: (frame) ->
|
80
|
+
def encode: (frame frame) -> void
|
69
81
|
|
70
82
|
def connection_frame?: (frame) -> bool
|
71
83
|
|
@@ -73,13 +85,13 @@ module HTTP2
|
|
73
85
|
|
74
86
|
def ping_management: (frame) -> void
|
75
87
|
|
76
|
-
def validate_settings: (
|
88
|
+
def validate_settings: (role_type, settings_enum) -> void
|
77
89
|
|
78
90
|
def connection_settings: (frame) -> void
|
79
91
|
|
80
92
|
def decode_headers: (frame) -> void
|
81
93
|
|
82
|
-
def encode_headers: (frame) ->
|
94
|
+
def encode_headers: (frame headers_frame) -> void
|
83
95
|
|
84
96
|
def activate_stream: (id: Integer, **untyped) -> Stream
|
85
97
|
|
data/sig/emitter.rbs
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
module HTTP2
|
2
2
|
module Emitter
|
3
|
+
@listeners: Hash[Symbol, Array[^(*untyped) -> void]]
|
4
|
+
|
3
5
|
def on: (Symbol event) { (*untyped) -> void } -> void
|
4
6
|
|
5
7
|
def once: (Symbol event) { (*untyped) -> void } -> void
|
6
8
|
|
7
9
|
def emit: (Symbol event, *untyped args) ?{ (*untyped) -> void } -> void
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
def listeners: (Symbol event) -> Array[Proc]
|
12
10
|
end
|
13
11
|
end
|
data/sig/extensions.rbs
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module HTTP2
|
2
2
|
module BufferUtils
|
3
|
+
def append_str: (String str, String data) -> void
|
4
|
+
|
3
5
|
def read_str: (String str, Integer n) -> String
|
4
6
|
|
5
7
|
def read_uint32: (String str) -> Integer
|
@@ -8,6 +10,6 @@ module HTTP2
|
|
8
10
|
end
|
9
11
|
|
10
12
|
module PackingExtensions
|
11
|
-
def pack: (Array[Integer] array_to_pack, String template, buffer: String, ?offset: Integer) -> String
|
13
|
+
def pack: (Array[Integer | String] array_to_pack, String template, buffer: String, ?offset: Integer) -> String
|
12
14
|
end
|
13
15
|
end
|
data/sig/flow_buffer.rbs
CHANGED
@@ -2,20 +2,22 @@ module HTTP2
|
|
2
2
|
module FlowBuffer
|
3
3
|
MAX_WINDOW_SIZE: Integer
|
4
4
|
|
5
|
+
attr_reader send_buffer: FrameBuffer
|
6
|
+
|
5
7
|
def buffered_amount: () -> Integer
|
6
8
|
|
7
9
|
def flush: () -> void
|
8
10
|
|
9
11
|
private
|
10
12
|
|
11
|
-
def
|
12
|
-
|
13
|
-
def update_local_window: (frame) -> void
|
13
|
+
def update_local_window: (data_frame frame) -> void
|
14
14
|
|
15
15
|
def calculate_window_update: (Integer) -> void
|
16
16
|
|
17
|
-
def send_data: (?
|
17
|
+
def send_data: (?data_frame? frame, ?bool encode) -> void
|
18
|
+
|
19
|
+
def send_frame: (data_frame frame, bool encode) -> void
|
18
20
|
|
19
|
-
def process_window_update: (frame:
|
21
|
+
def process_window_update: (frame: window_update_frame, ?encode: bool) -> void
|
20
22
|
end
|
21
23
|
end
|
data/sig/frame_buffer.rbs
CHANGED
data/sig/framer.rbs
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
module HTTP2
|
2
2
|
class Framer
|
3
|
+
include Error
|
3
4
|
include PackingExtensions
|
4
5
|
include BufferUtils
|
5
6
|
|
@@ -11,6 +12,8 @@ module HTTP2
|
|
11
12
|
|
12
13
|
FRAME_TYPES: Hash[Symbol, Integer]
|
13
14
|
|
15
|
+
FRAME_TYPES_BY_NAME: Array[Symbol]
|
16
|
+
|
14
17
|
FRAME_TYPES_WITH_PADDING: Array[Symbol]
|
15
18
|
|
16
19
|
FRAME_FLAGS: Hash[Symbol, Hash[Symbol, Integer]]
|
@@ -38,6 +41,8 @@ module HTTP2
|
|
38
41
|
|
39
42
|
def common_header: (frame, buffer: String) -> String
|
40
43
|
|
44
|
+
def read_common_header: (String buf) -> frame
|
45
|
+
|
41
46
|
def read_common_frame: (String) -> frame
|
42
47
|
|
43
48
|
def generate: (frame) -> String
|
data/sig/header/compressor.rbs
CHANGED
@@ -9,7 +9,7 @@ module HTTP2
|
|
9
9
|
|
10
10
|
def integer: (Integer, Integer, buffer: String, ?offset: Integer) -> String
|
11
11
|
|
12
|
-
def string: (String) -> String
|
12
|
+
def string: (String, ?String buffer) -> String
|
13
13
|
|
14
14
|
def header: (header_command, ?String) -> String
|
15
15
|
|
@@ -17,11 +17,13 @@ module HTTP2
|
|
17
17
|
|
18
18
|
private
|
19
19
|
|
20
|
-
def initialize: (?
|
20
|
+
def initialize: (?connection_opts options) -> void
|
21
21
|
|
22
|
-
def huffman_string: (String str) -> String
|
22
|
+
def huffman_string: (String str, ?String buffer) -> String
|
23
23
|
|
24
|
-
def plain_string: (String str) -> String
|
24
|
+
def plain_string: (String str, ?String buffer) -> String
|
25
|
+
|
26
|
+
def set_huffman_size: (String str, Integer huffman_offset) -> String
|
25
27
|
end
|
26
28
|
end
|
27
29
|
end
|
data/sig/header/decompressor.rbs
CHANGED
@@ -3,6 +3,8 @@ module HTTP2
|
|
3
3
|
class Decompressor
|
4
4
|
include BufferUtils
|
5
5
|
|
6
|
+
FORBIDDEN_HEADERS: Array[String]
|
7
|
+
|
6
8
|
@cc: EncodingContext
|
7
9
|
|
8
10
|
def table_size=: (Integer) -> void
|
@@ -17,8 +19,7 @@ module HTTP2
|
|
17
19
|
| (String) -> Array[header_pair]
|
18
20
|
private
|
19
21
|
|
20
|
-
def initialize: (
|
21
|
-
| () -> untyped
|
22
|
+
def initialize: (?connection_opts options) -> void
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -3,32 +3,50 @@ module HTTP2
|
|
3
3
|
class EncodingContext
|
4
4
|
STATIC_TABLE: Array[header_pair]
|
5
5
|
|
6
|
+
STATIC_TABLE_BY_FIELD: Hash[String, Array[[Integer, String]]]
|
7
|
+
|
8
|
+
STATIC_TABLE_SIZE: Integer
|
9
|
+
|
10
|
+
STATIC_ALL: Array[Symbol]
|
11
|
+
|
12
|
+
STATIC_NEVER: Array[Symbol]
|
13
|
+
|
14
|
+
DEFAULT_OPTIONS: context_hash
|
15
|
+
|
16
|
+
UPPER: Regexp
|
17
|
+
|
18
|
+
|
6
19
|
attr_reader table: Array[header_pair]
|
7
20
|
|
8
21
|
attr_reader options: context_hash
|
9
22
|
|
23
|
+
attr_reader current_table_size: Integer
|
24
|
+
|
25
|
+
@limit: Integer
|
26
|
+
|
27
|
+
@_table_updated: bool
|
28
|
+
|
10
29
|
def dup: () -> EncodingContext
|
11
30
|
|
12
31
|
def dereference: (Integer) -> header_pair
|
13
32
|
|
14
33
|
def process: (header_command cmd) -> header_pair?
|
15
34
|
|
16
|
-
def encode: (_Each[header_pair]) ->
|
35
|
+
def encode: (_Each[header_pair]) { (header_command) -> void } -> void
|
17
36
|
|
18
37
|
def addcmd: (String name, String value) -> header_command
|
19
38
|
|
20
39
|
def table_size=: (Integer) -> void
|
21
40
|
|
22
|
-
def
|
41
|
+
def listen_on_table: { () -> void } -> void
|
23
42
|
|
24
43
|
private
|
25
44
|
|
26
|
-
def initialize: (
|
27
|
-
| () -> untyped
|
45
|
+
def initialize: (?connection_opts options) -> void
|
28
46
|
|
29
|
-
def add_to_table: (
|
47
|
+
def add_to_table: (string name, string value) -> void
|
30
48
|
|
31
|
-
def size_check: (
|
49
|
+
def size_check: (Integer cmdsize) -> bool
|
32
50
|
end
|
33
51
|
end
|
34
52
|
end
|
data/sig/header/huffman.rbs
CHANGED
@@ -1,9 +1,25 @@
|
|
1
1
|
module HTTP2
|
2
2
|
module Header
|
3
|
-
|
4
|
-
|
3
|
+
module Huffman
|
4
|
+
include Error
|
5
|
+
extend PackingExtensions
|
6
|
+
extend BufferUtils
|
5
7
|
|
6
|
-
|
8
|
+
BITS_AT_ONCE: Integer
|
9
|
+
|
10
|
+
EOS: Integer
|
11
|
+
|
12
|
+
CODES: Array[[Integer, Integer]]
|
13
|
+
|
14
|
+
ENCODE_TABLE: Array[String]
|
15
|
+
|
16
|
+
MAX_FINAL_STATE: Integer
|
17
|
+
|
18
|
+
MACHINE: Array[Array[[Integer?, Integer]]]
|
19
|
+
|
20
|
+
def self?.encode: (String str, ?String buffer) -> String
|
21
|
+
|
22
|
+
def self?.decode: (String str) -> String
|
7
23
|
end
|
8
24
|
end
|
9
25
|
end
|
data/sig/header.rbs
CHANGED
@@ -3,16 +3,19 @@ module HTTP2
|
|
3
3
|
type header_key = :type | :name | :value | :index
|
4
4
|
type header_value = Integer | String | :indexed | :changetablesize | :incremental | :noindex | :neverindexed
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
type context_hash = Hash[Symbol, Symbol | Integer]
|
6
|
+
type context_hash = {
|
7
|
+
huffman: (:always | :never | :shorter),
|
8
|
+
index: (:all | :static | :never),
|
9
|
+
table_size: Integer
|
10
|
+
}
|
12
11
|
|
13
|
-
type
|
12
|
+
type header_type = :indexed | :incremental | :noindex | :neverindexed | :changetablesize
|
14
13
|
|
15
|
-
|
14
|
+
type header_command = { type: :indexed , name: Integer } |
|
15
|
+
{ type: (:incremental | :noindex | :neverindexed), name: Integer | String, value: String } |
|
16
|
+
{ type: :changetablesize, ?name: Integer, value: Integer }
|
17
|
+
|
18
|
+
HEADREP: Hash[header_type, { prefix: Integer, pattern: Integer }]
|
16
19
|
|
17
20
|
NAIVE: Hash[Symbol, Symbol]
|
18
21
|
LINEAR: Hash[Symbol, Symbol]
|
data/sig/stream.rbs
CHANGED
@@ -3,6 +3,8 @@ module HTTP2
|
|
3
3
|
include FlowBuffer
|
4
4
|
include Emitter
|
5
5
|
|
6
|
+
STREAM_OPEN_STATES: Array[Symbol]
|
7
|
+
|
6
8
|
attr_reader id: Integer
|
7
9
|
attr_reader state: Symbol
|
8
10
|
attr_reader parent: Stream?
|
@@ -19,6 +21,7 @@ module HTTP2
|
|
19
21
|
@_content_length: Integer?
|
20
22
|
@_status_code: Integer?
|
21
23
|
@_waiting_on_trailers: bool
|
24
|
+
@_trailers: Array[String]?
|
22
25
|
@received_data: bool
|
23
26
|
@activated: bool
|
24
27
|
|
@@ -26,15 +29,15 @@ module HTTP2
|
|
26
29
|
|
27
30
|
def closed?: () -> bool
|
28
31
|
|
29
|
-
def receive: (frame) -> void
|
32
|
+
def receive: (frame frame) -> void
|
30
33
|
|
31
34
|
alias << receive
|
32
35
|
|
33
|
-
def verify_trailers: (frame) -> void
|
36
|
+
def verify_trailers: (headers_frame frame) -> void
|
34
37
|
|
35
38
|
def calculate_content_length: (Integer?) -> void
|
36
39
|
|
37
|
-
def send: (frame) -> void
|
40
|
+
def send: (frame frame) -> void
|
38
41
|
|
39
42
|
def headers: (Enumerable[header_pair] headers, ?end_headers: bool, ?end_stream: bool) -> void
|
40
43
|
|
@@ -77,9 +80,9 @@ module HTTP2
|
|
77
80
|
|
78
81
|
def complete_transition: (frame) -> void
|
79
82
|
|
80
|
-
def process_priority: (
|
83
|
+
def process_priority: (priority_frame frame) -> void
|
81
84
|
|
82
|
-
def
|
85
|
+
def end_stream?: (frame frame) -> boolish
|
83
86
|
|
84
87
|
def stream_error: (Symbol error, ?msg: String?) -> void
|
85
88
|
| () -> void
|
metadata
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http-2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tiago Cardoso
|
8
8
|
- Ilya Grigorik
|
9
9
|
- Kaoru Maeda
|
10
|
-
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2025-04-10 00:00:00.000000000 Z
|
14
13
|
dependencies: []
|
15
14
|
description: Pure-ruby HTTP 2.0 protocol implementation
|
16
15
|
email:
|
@@ -39,6 +38,7 @@ files:
|
|
39
38
|
- lib/http/2/server.rb
|
40
39
|
- lib/http/2/stream.rb
|
41
40
|
- lib/http/2/version.rb
|
41
|
+
- sig/2.rbs
|
42
42
|
- sig/client.rbs
|
43
43
|
- sig/connection.rbs
|
44
44
|
- sig/emitter.rbs
|
@@ -52,7 +52,6 @@ files:
|
|
52
52
|
- sig/header/decompressor.rbs
|
53
53
|
- sig/header/encoding_context.rbs
|
54
54
|
- sig/header/huffman.rbs
|
55
|
-
- sig/next.rbs
|
56
55
|
- sig/server.rbs
|
57
56
|
- sig/stream.rbs
|
58
57
|
homepage: https://github.com/igrigorik/http-2
|
@@ -64,7 +63,6 @@ metadata:
|
|
64
63
|
source_code_uri: https://github.com/igrigorik/http-2
|
65
64
|
homepage_uri: https://github.com/igrigorik/http-2
|
66
65
|
rubygems_mfa_required: 'true'
|
67
|
-
post_install_message:
|
68
66
|
rdoc_options: []
|
69
67
|
require_paths:
|
70
68
|
- lib
|
@@ -79,8 +77,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
77
|
- !ruby/object:Gem::Version
|
80
78
|
version: '0'
|
81
79
|
requirements: []
|
82
|
-
rubygems_version: 3.
|
83
|
-
signing_key:
|
80
|
+
rubygems_version: 3.6.2
|
84
81
|
specification_version: 4
|
85
82
|
summary: Pure-ruby HTTP 2.0 protocol implementation
|
86
83
|
test_files: []
|