http-2-next 0.2.4 → 0.4.1

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/next.rbs ADDED
@@ -0,0 +1,95 @@
1
+ module HTTP2Next
2
+ DEFAULT_FLOW_WINDOW: Integer
3
+
4
+ DEFAULT_HEADER_SIZE: Integer
5
+
6
+ DEFAULT_MAX_CONCURRENT_STREAMS: Integer
7
+
8
+ type settings_hash = Hash[Symbol, Integer]
9
+
10
+ type settings_enum = Enumerable[Symbol, Integer]
11
+
12
+ SPEC_DEFAULT_CONNECTION_SETTINGS: settings_hash
13
+
14
+ DEFAULT_CONNECTION_SETTINGS: settings_hash
15
+
16
+ DEFAULT_WEIGHT: Integer
17
+
18
+ CONNECTION_PREFACE_MAGIC: String
19
+
20
+ REQUEST_MANDATORY_HEADERS: Array[Symbol]
21
+
22
+ RESPONSE_MANDATORY_HEADERS: Array[Symbol]
23
+
24
+ type header_pair = [String, String]
25
+
26
+ # # FRAMES
27
+ # type frame_control_flags = Array[:end_headers | :end_stream]
28
+
29
+ # # HEADERS
30
+ # type headers_frame = {
31
+ # type: :headers, flags: frame_control_flags, stream: Integer, payload: Enumerable[header_pair],
32
+ # ?method: Symbol, ?trailer: Array[String], ?content_length: Integer, ?padding: Integer
33
+ # }
34
+
35
+ # # DATA
36
+ # type data_frame = { type: :data, flags: frame_control_flags, stream: Integer, length: Integer, payload: String, ?padding: Integer }
37
+
38
+ # # PUSH_PROMISE
39
+ # type push_promise_frame = { type: :push_promise, promise_stream: Integer, flags: frame_control_flags, stream: Integer, ?method: Symbol, ?trailer: Array[String], ?content_length: Integer, payload: Enumerable[header_pair], ?padding: Integer }
40
+
41
+ # # SETTINGS
42
+ # type settings_frame = { type: :settings, stream: 0, payload: Array[[Symbol | Integer, Integer]] }
43
+
44
+ # # WINDOW_UPDATE
45
+ # type window_update_frame = { type: :window_update, stream: Integer, increment: Integer }
46
+
47
+ # # PRIORITY
48
+ # type priority_frame = { type: :priority, stream: Integer, dependency: Integer, exclusive: bool, weight: Integer }
49
+
50
+ # # ALTSVC
51
+ # type altsvc_frame = { type: :altsvc, stream: 0, max_age: Integer, port: Integer, proto: "String", host: String }
52
+
53
+ # # ORIGIN
54
+ # type origin_frame = { type: :origin, stream: 0, origin: Array[String] }
55
+
56
+ # # PING
57
+ # type ping_frame = { type: :ping, payload: String, length: Integer }
58
+
59
+ # # GOAWAY
60
+ # type goaway_frame = { type: :goaway, stream: 0, last_stream: Integer, error: Symbol? }
61
+
62
+ # type frame = headers_frame | data_frame | push_promise_frame |
63
+ # settings_frame | window_update_frame | priority_frame | altsvc_frame |
64
+ # origin_frame | ping_frame | goaway_frame
65
+
66
+ type frame_key = :type | :flags | :stream | :padding | :ignore |
67
+ # headers
68
+ :method | :trailer | :content_length | :status |
69
+ # data, settings, ping
70
+ :payload | :length |
71
+ # promise
72
+ :promise_stream |
73
+ # window_update
74
+ :increment |
75
+ # priority
76
+ :dependency | :exclusive | :weight |
77
+ # altsvc
78
+ :max_age | :port | :proto | :host |
79
+ # origin
80
+ :origin |
81
+ # goaway
82
+ :last_stream | :error
83
+
84
+ type frame_value = Integer |
85
+ Symbol | # type (:data, :headers)
86
+ Array[Symbol] |
87
+ String |
88
+ bool |
89
+ Array[String] |
90
+ Array[[Symbol | Integer, Integer]] |
91
+ Enumerable[header_pair] |
92
+ nil
93
+
94
+ type frame = Hash[frame_key, frame_value]
95
+ end
data/sig/server.rbs ADDED
@@ -0,0 +1,12 @@
1
+ module HTTP2Next
2
+ class Server < Connection
3
+
4
+ def upgrade: (String settings, Enumerable[header_pair] headers, String body) -> void
5
+
6
+ def origin_set=: (Array[_ToS]) -> void
7
+
8
+ private
9
+
10
+ def promise: (Stream parent, Enumerable[header_pair] headers, Array[Symbol] flags) { (Stream) -> void } -> void
11
+ end
12
+ end
data/sig/stream.rbs ADDED
@@ -0,0 +1,77 @@
1
+ module HTTP2Next
2
+ class Stream
3
+ include FlowBuffer
4
+ include Emitter
5
+
6
+ attr_reader id: Integer
7
+ attr_reader state: Symbol
8
+ attr_reader parent: Stream?
9
+ attr_reader weight: Integer
10
+ attr_reader dependency: Integer
11
+ attr_reader remote_window: Integer
12
+ attr_reader local_window: Integer
13
+ attr_reader closed: Symbol?
14
+
15
+ alias window local_window
16
+
17
+ def closed?: () -> bool
18
+
19
+ def receive: (frame) -> void
20
+
21
+ alias << receive
22
+
23
+ def verify_trailers: (frame) -> void
24
+
25
+ def calculate_content_length: (Integer?) -> void
26
+
27
+ def send: (frame) -> void
28
+
29
+ def headers: (Enumerable[header_pair] headers, ?end_headers: bool, ?end_stream: bool) -> void
30
+
31
+ def promise: (Enumerable[header_pair] headers, ?end_headers: bool) { (Stream) -> void } -> void
32
+
33
+ def reprioritize: (?weight: Integer, ?dependency: Integer, ?exclusive: bool) -> void
34
+
35
+ def data: (String payload, ?end_stream: bool) -> void
36
+
37
+ def chunk_data: (String payload, Integer max_size) { (String) -> void } -> String
38
+
39
+ def close: (Symbol error) -> void
40
+ | () -> void
41
+
42
+ def cancel: () -> void
43
+
44
+ def refuse: () -> void
45
+
46
+ def window_update: (Integer increment) -> void
47
+
48
+ private
49
+
50
+ def initialize: (
51
+ connection: Connection,
52
+ id: Integer,
53
+ ?weight: Integer,
54
+ ?dependency: Integer,
55
+ ?exclusive: bool,
56
+ ?parent: Stream?,
57
+ ?state: Symbol
58
+ ) -> untyped
59
+
60
+ def transition: (frame, bool sending) -> void
61
+
62
+ def event: (Symbol newstate) -> void
63
+
64
+ def complete_transition: (frame) -> void
65
+
66
+ def process_priority: (frame) -> void
67
+
68
+ def end_frame?: () -> bool
69
+
70
+ def stream_error: (Symbol error, ?msg: String?) -> void
71
+ | () -> void
72
+
73
+ alias error stream_error
74
+
75
+ def manage_state: (frame) { () -> void } -> void
76
+ end
77
+ end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http-2-next
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
8
  - Ilya Grigorik
9
9
  - Kaoru Maeda
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-03-06 00:00:00.000000000 Z
13
+ date: 2021-04-20 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: Pure-ruby HTTP 2.0 protocol implementation
16
16
  email:
@@ -21,26 +21,42 @@ extra_rdoc_files: []
21
21
  files:
22
22
  - README.md
23
23
  - lib/http/2/next.rb
24
- - lib/http/2/next/buffer.rb
25
24
  - lib/http/2/next/client.rb
26
- - lib/http/2/next/compressor.rb
27
25
  - lib/http/2/next/connection.rb
28
26
  - lib/http/2/next/emitter.rb
29
27
  - lib/http/2/next/error.rb
30
28
  - lib/http/2/next/extensions.rb
31
29
  - lib/http/2/next/flow_buffer.rb
32
30
  - lib/http/2/next/framer.rb
33
- - lib/http/2/next/huffman.rb
34
- - lib/http/2/next/huffman_statemachine.rb
31
+ - lib/http/2/next/header.rb
32
+ - lib/http/2/next/header/compressor.rb
33
+ - lib/http/2/next/header/decompressor.rb
34
+ - lib/http/2/next/header/encoding_context.rb
35
+ - lib/http/2/next/header/huffman.rb
36
+ - lib/http/2/next/header/huffman_statemachine.rb
35
37
  - lib/http/2/next/server.rb
36
38
  - lib/http/2/next/stream.rb
37
39
  - lib/http/2/next/version.rb
38
40
  - lib/tasks/generate_huffman_table.rb
41
+ - sig/client.rbs
42
+ - sig/connection.rbs
43
+ - sig/emitter.rbs
44
+ - sig/flow_buffer.rbs
45
+ - sig/frame_buffer.rbs
46
+ - sig/framer.rbs
47
+ - sig/header.rbs
48
+ - sig/header/compressor.rbs
49
+ - sig/header/decompressor.rbs
50
+ - sig/header/encoding_context.rbs
51
+ - sig/header/huffman.rbs
52
+ - sig/next.rbs
53
+ - sig/server.rbs
54
+ - sig/stream.rbs
39
55
  homepage: https://gitlab.com/honeyryderchuck/http-2-next
40
56
  licenses:
41
57
  - MIT
42
58
  metadata: {}
43
- post_install_message:
59
+ post_install_message:
44
60
  rdoc_options: []
45
61
  require_paths:
46
62
  - lib
@@ -55,8 +71,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
71
  - !ruby/object:Gem::Version
56
72
  version: '0'
57
73
  requirements: []
58
- rubygems_version: 3.1.2
59
- signing_key:
74
+ rubygems_version: 3.2.15
75
+ signing_key:
60
76
  specification_version: 4
61
77
  summary: Pure-ruby HTTP 2.0 protocol implementation
62
78
  test_files: []
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "forwardable"
4
-
5
- module HTTP2Next
6
- # Binary buffer wraps String.
7
- #
8
- class Buffer
9
- extend Forwardable
10
-
11
- def_delegators :@buffer, :ord, :encoding, :setbyte, :unpack,
12
- :size, :each_byte, :to_str, :to_s, :length, :inspect,
13
- :[], :[]=, :empty?, :bytesize, :include?
14
-
15
- UINT32 = "N"
16
- private_constant :UINT32
17
-
18
- # Forces binary encoding on the string
19
- def initialize(str = "".b)
20
- str = str.dup if str.frozen?
21
- @buffer = str.force_encoding(Encoding::BINARY)
22
- end
23
-
24
- # Emulate StringIO#read: slice first n bytes from the buffer.
25
- #
26
- # @param n [Integer] number of bytes to slice from the buffer
27
- def read(n)
28
- Buffer.new(@buffer.slice!(0, n))
29
- end
30
-
31
- # Emulate StringIO#getbyte: slice first byte from buffer.
32
- def getbyte
33
- read(1).ord
34
- end
35
-
36
- def slice!(*args)
37
- Buffer.new(@buffer.slice!(*args))
38
- end
39
-
40
- def slice(*args)
41
- Buffer.new(@buffer.slice(*args))
42
- end
43
-
44
- def force_encoding(*args)
45
- @buffer = @buffer.force_encoding(*args)
46
- end
47
-
48
- def ==(other)
49
- @buffer == other
50
- end
51
-
52
- def +(other)
53
- @buffer += other
54
- end
55
-
56
- # Emulate String#getbyte: return nth byte from buffer.
57
- def readbyte(n)
58
- @buffer[n].ord
59
- end
60
-
61
- # Slice unsigned 32-bit integer from buffer.
62
- # @return [Integer]
63
- def read_uint32
64
- read(4).unpack(UINT32).first
65
- end
66
-
67
- # Ensures that data that is added is binary encoded as well,
68
- # otherwise this could lead to the Buffer instance changing its encoding.
69
- %i[<< prepend].each do |mutating_method|
70
- class_eval(<<-METH, __FILE__, __LINE__ + 1)
71
- def #{mutating_method}(string)
72
- string = string.dup if string.frozen?
73
- @buffer.send __method__, string.force_encoding(Encoding::BINARY)
74
-
75
- self
76
- end
77
- METH
78
- end
79
- end
80
- end