http-2-next 0.2.6 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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.6
4
+ version: 0.4.3
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-15 00:00:00.000000000 Z
13
+ date: 2021-05-26 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