http-2-next 0.2.3 → 0.4.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/README.md +2 -2
- data/lib/http/2/next.rb +1 -4
- data/lib/http/2/next/connection.rb +49 -31
- data/lib/http/2/next/emitter.rb +2 -3
- data/lib/http/2/next/error.rb +1 -0
- data/lib/http/2/next/extensions.rb +26 -1
- data/lib/http/2/next/flow_buffer.rb +8 -4
- data/lib/http/2/next/framer.rb +25 -17
- data/lib/http/2/next/header.rb +35 -0
- data/lib/http/2/next/header/compressor.rb +137 -0
- data/lib/http/2/next/header/decompressor.rb +142 -0
- data/lib/http/2/next/{compressor.rb → header/encoding_context.rb} +7 -298
- data/lib/http/2/next/{huffman.rb → header/huffman.rb} +5 -2
- data/lib/http/2/next/{huffman_statemachine.rb → header/huffman_statemachine.rb} +0 -0
- data/lib/http/2/next/server.rb +8 -5
- data/lib/http/2/next/stream.rb +4 -5
- data/lib/http/2/next/version.rb +1 -1
- data/lib/tasks/generate_huffman_table.rb +4 -4
- data/sig/client.rbs +9 -0
- data/sig/connection.rbs +73 -0
- data/sig/emitter.rbs +13 -0
- data/sig/flow_buffer.rbs +23 -0
- data/sig/frame_buffer.rbs +13 -0
- data/sig/framer.rbs +25 -0
- data/sig/header.rbs +15 -0
- data/sig/header/compressor.rbs +23 -0
- data/sig/header/decompressor.rbs +22 -0
- data/sig/header/encoding_context.rbs +34 -0
- data/sig/header/huffman.rbs +9 -0
- data/sig/next.rbs +95 -0
- data/sig/server.rbs +12 -0
- data/sig/stream.rbs +77 -0
- metadata +26 -10
- data/lib/http/2/next/buffer.rb +0 -80
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.
|
4
|
+
version: 0.4.0
|
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:
|
13
|
+
date: 2021-02-21 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/
|
34
|
-
- lib/http/2/next/
|
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.
|
59
|
-
signing_key:
|
74
|
+
rubygems_version: 3.2.3
|
75
|
+
signing_key:
|
60
76
|
specification_version: 4
|
61
77
|
summary: Pure-ruby HTTP 2.0 protocol implementation
|
62
78
|
test_files: []
|
data/lib/http/2/next/buffer.rb
DELETED
@@ -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
|