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.
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, Stream]
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: (?settings_hash) -> void
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) -> Array[String]
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: (:client | :server, settings_enum) -> void
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) -> Array[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 send_buffer: () -> FrameBuffer
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: (?frame? frame, ?bool encode) -> void
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: frame, ?encode: bool) -> void
21
+ def process_window_update: (frame: window_update_frame, ?encode: bool) -> void
20
22
  end
21
23
  end
data/sig/frame_buffer.rbs CHANGED
@@ -4,7 +4,7 @@ module HTTP2
4
4
 
5
5
  @buffer: Array[data_frame]
6
6
 
7
- def <<: (data_frame) -> void
7
+ def <<: (data_frame frame) -> void
8
8
 
9
9
  def empty?: () -> bool
10
10
 
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
@@ -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: (?context_hash options) -> void
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
@@ -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: (context_hash options) -> untyped
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]) -> Array[header_command]
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 current_table_size: () -> Integer
41
+ def listen_on_table: { () -> void } -> void
23
42
 
24
43
  private
25
44
 
26
- def initialize: (context_hash options) -> untyped
27
- | () -> untyped
45
+ def initialize: (?connection_opts options) -> void
28
46
 
29
- def add_to_table: (header_pair) -> void
47
+ def add_to_table: (string name, string value) -> void
30
48
 
31
- def size_check: (header_pair?) -> bool
49
+ def size_check: (Integer cmdsize) -> bool
32
50
  end
33
51
  end
34
52
  end
@@ -1,9 +1,25 @@
1
1
  module HTTP2
2
2
  module Header
3
- class Huffman
4
- def encode: (String str) -> String
3
+ module Huffman
4
+ include Error
5
+ extend PackingExtensions
6
+ extend BufferUtils
5
7
 
6
- def decode: (String str) -> String
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
- #type context_hash = {
7
- # huffman?: (:always | :never | :shorter),
8
- # index?: (:all | :static | :never),
9
- # table_size?: Integer
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 header_command = Hash[header_key, header_value]
12
+ type header_type = :indexed | :incremental | :noindex | :neverindexed | :changetablesize
14
13
 
15
- HEADREP: Hash[Symbol, Hash[Symbol, Integer]]
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: ({weight: Integer, dependency: Integer, exclusive: bool}) -> void
83
+ def process_priority: (priority_frame frame) -> void
81
84
 
82
- def end_frame?: () -> bool
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.2
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: 2024-11-05 00:00:00.000000000 Z
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.5.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: []