protocol-hpack 1.4.2 → 1.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/protocol/hpack/compressor.rb +11 -24
- data/lib/protocol/hpack/context.rb +24 -30
- data/lib/protocol/hpack/decompressor.rb +66 -31
- data/lib/protocol/hpack/error.rb +2 -20
- data/lib/protocol/hpack/huffman/machine.rb +2 -20
- data/lib/protocol/hpack/huffman.rb +6 -20
- data/lib/protocol/hpack/version.rb +3 -20
- data/lib/protocol/hpack.rb +2 -19
- data/license.md +35 -0
- data/readme.md +34 -0
- data/tasks/huffman.rb +11 -20
- data.tar.gz.sig +0 -0
- metadata +58 -78
- metadata.gz.sig +0 -0
- data/.editorconfig +0 -6
- data/.gitignore +0 -12
- data/.gitmodules +0 -3
- data/.rspec +0 -3
- data/.travis.yml +0 -20
- data/Gemfile +0 -6
- data/README.md +0 -84
- data/Rakefile +0 -10
- data/http-hpack.gemspec +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3192190834a35550921cbff8e50482499716791371f521a77c3f7c4b5a0efcff
|
4
|
+
data.tar.gz: 40d443b19eaac26aaaaae63da3baab5ae384246804643fdc7fb01f5455595dc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c19a7524c1a544016e0feb7d88099a67fbccf3fe200214f7bc21639512da55e72a9e3442c8917f69fec1568a3027487e701a2f1e99deb652942ebae54c4752a7
|
7
|
+
data.tar.gz: 3f105d7bba7111585325db6bc8f414c34366bfb189f2263fa497e8ec53ed1502c3694c0dcd6749151fb10456c52a5a333daa9b7f5f8b362026d8be745c568375
|
checksums.yaml.gz.sig
ADDED
Binary file
|
@@ -1,25 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2013-2015, by Ilya Grigorik.
|
5
|
+
# Copyright, 2014-2015, by Kaoru Maeda.
|
6
|
+
# Copyright, 2015, by Tamir Duberstein.
|
7
|
+
# Copyright, 2016, by George Ulmer.
|
8
|
+
# Copyright, 2018, by Tiago Cardoso.
|
9
|
+
# Copyright, 2018, by Byron Formwalt.
|
10
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
11
|
+
# Copyright, 2018, by Kenichi Nakamura.
|
12
|
+
# Copyright, 2019, by Jingyi Chen.
|
13
|
+
# Copyright, 2020, by Justin Mazzocchi.
|
23
14
|
|
24
15
|
require_relative 'context'
|
25
16
|
require_relative 'huffman'
|
@@ -63,10 +54,6 @@ module Protocol
|
|
63
54
|
attr :context
|
64
55
|
attr :offset
|
65
56
|
|
66
|
-
def write_byte(byte)
|
67
|
-
@buffer << byte.chr
|
68
|
-
end
|
69
|
-
|
70
57
|
def write_bytes(bytes)
|
71
58
|
@buffer << bytes
|
72
59
|
end
|
@@ -1,25 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
23
5
|
|
24
6
|
require_relative 'huffman'
|
25
7
|
|
@@ -30,12 +12,17 @@ module Protocol
|
|
30
12
|
# - http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-10
|
31
13
|
module HPACK
|
32
14
|
# Header representation as defined by the spec.
|
15
|
+
NO_INDEX_TYPE = {prefix: 4, pattern: 0x00}.freeze
|
16
|
+
NEVER_INDEXED_TYPE = {prefix: 4, pattern: 0x10}.freeze
|
17
|
+
CHANGE_TABLE_SIZE_TYPE = {prefix: 5, pattern: 0x20}.freeze
|
18
|
+
INCREMENTAL_TYPE = {prefix: 6, pattern: 0x40}.freeze
|
19
|
+
INDEXED_TYPE = {prefix: 7, pattern: 0x80}.freeze
|
33
20
|
HEADER_REPRESENTATION = {
|
34
|
-
indexed:
|
35
|
-
incremental:
|
36
|
-
no_index:
|
37
|
-
never_indexed:
|
38
|
-
change_table_size:
|
21
|
+
indexed: INDEXED_TYPE,
|
22
|
+
incremental: INCREMENTAL_TYPE,
|
23
|
+
no_index: NO_INDEX_TYPE,
|
24
|
+
never_indexed: NEVER_INDEXED_TYPE,
|
25
|
+
change_table_size: CHANGE_TABLE_SIZE_TYPE
|
39
26
|
}
|
40
27
|
|
41
28
|
# To decompress header blocks, a decoder only needs to maintain a
|
@@ -298,8 +285,8 @@ module Protocol
|
|
298
285
|
|
299
286
|
# Returns current table size in octets
|
300
287
|
# @return [Integer]
|
301
|
-
def
|
302
|
-
@table.
|
288
|
+
def compute_current_table_size
|
289
|
+
@table.sum { |k, v| k.bytesize + v.bytesize + 32 }
|
303
290
|
end
|
304
291
|
|
305
292
|
private
|
@@ -314,6 +301,11 @@ module Protocol
|
|
314
301
|
command.freeze
|
315
302
|
|
316
303
|
@table.unshift(command)
|
304
|
+
@current_table_size += entry_size(command)
|
305
|
+
end
|
306
|
+
|
307
|
+
def entry_size(e)
|
308
|
+
e[0].bytesize + e[1].bytesize + 32
|
317
309
|
end
|
318
310
|
|
319
311
|
# To keep the dynamic table size lower than or equal to @table_size,
|
@@ -322,14 +314,16 @@ module Protocol
|
|
322
314
|
# @param command [Hash]
|
323
315
|
# @return [Boolean] whether +command+ fits in the dynamic table.
|
324
316
|
def size_check(command)
|
325
|
-
|
317
|
+
|
318
|
+
@current_table_size ||= compute_current_table_size
|
319
|
+
|
326
320
|
cmdsize = command.nil? ? 0 : command[0].bytesize + command[1].bytesize + 32
|
327
321
|
|
328
|
-
while
|
322
|
+
while @current_table_size + cmdsize > @table_size
|
329
323
|
break if @table.empty?
|
330
324
|
|
331
325
|
e = @table.pop
|
332
|
-
|
326
|
+
@current_table_size -= e[0].bytesize + e[1].bytesize + 32
|
333
327
|
end
|
334
328
|
|
335
329
|
cmdsize <= @table_size
|
@@ -1,25 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
23
5
|
|
24
6
|
require_relative 'context'
|
25
7
|
require_relative 'huffman'
|
@@ -30,6 +12,9 @@ module Protocol
|
|
30
12
|
# context of the opposing peer. Decompressor must be initialized with
|
31
13
|
# appropriate starting context based on local role: client or server.
|
32
14
|
class Decompressor
|
15
|
+
|
16
|
+
MASK_SHIFT_4 = (~0x0 >> 4) << 4
|
17
|
+
|
33
18
|
def initialize(buffer, context = Context.new, table_size_limit: nil)
|
34
19
|
@buffer = buffer
|
35
20
|
@context = context
|
@@ -116,30 +101,80 @@ module Protocol
|
|
116
101
|
pattern = peek_byte
|
117
102
|
|
118
103
|
header = {}
|
119
|
-
header[:type], type = HEADER_REPRESENTATION.find do |_t, desc|
|
120
|
-
mask = (pattern >> desc[:prefix]) << desc[:prefix]
|
121
|
-
mask == desc[:pattern]
|
122
|
-
end
|
123
104
|
|
124
|
-
|
105
|
+
type = nil
|
106
|
+
|
107
|
+
# (pattern & MASK_SHIFT_4) clears bottom 4 bits,
|
108
|
+
# equivalent to (pattern >> 4) << 4. For the
|
109
|
+
# no-index and never-indexed type we only need to clear
|
110
|
+
# the bottom 4 bits (as specified by NO_INDEX_TYPE[:prefix])
|
111
|
+
# so we directly check against NO_INDEX_TYPE[:pattern].
|
112
|
+
# But for change-table-size, incremental, and indexed
|
113
|
+
# we must clear 5,6, and 7 bits respectively.
|
114
|
+
# Consider indexed where we need to clear 7 bits.
|
115
|
+
# Since (pattern & MASK_SHIFT_4)'s bottom 4 bits are cleared
|
116
|
+
# you can visualize it as
|
117
|
+
#
|
118
|
+
# INDEXED_TYPE[:pattern] = <some bits> 0 0 0 0 0 0 0
|
119
|
+
# ^^^^^^^^^^^^^^^^ 7 bits
|
120
|
+
# (pattern & MASK_SHIFT_4) = <pattern bits> b1 b2 b3 0 0 0 0
|
121
|
+
#
|
122
|
+
# Computing equality after masking bottom 7 bits (i.e., set b1 = b2 = b3 = 0)
|
123
|
+
# is the same as checking equality against
|
124
|
+
# <some bits> x1 x2 x3 0 0 0 0
|
125
|
+
# For *every* possible value of x1, x2, x3 (that is, 2^3 = 8 values).
|
126
|
+
# INDEXED_TYPE[:pattern] = 0x80, so we check against 0x80, 0x90 = 0x80 + (0b001 << 4)
|
127
|
+
# 0xa0 = 0x80 + (0b001 << 5), ..., 0xf0 = 0x80 + (0b111 << 4).
|
128
|
+
# While not the most readable, we have written out everything as constant literals
|
129
|
+
# so Ruby can optimize this case-when to a hash lookup.
|
130
|
+
#
|
131
|
+
# There's no else case as this list is exhaustive.
|
132
|
+
# (0..255).map { |x| (x & -16).to_s(16) }.uniq will show this
|
133
|
+
|
134
|
+
case (pattern & MASK_SHIFT_4)
|
135
|
+
when 0x00
|
136
|
+
header[:type] = :no_index
|
137
|
+
type = NO_INDEX_TYPE
|
138
|
+
when 0x10
|
139
|
+
header[:type] = :never_indexed
|
140
|
+
type = NEVER_INDEXED_TYPE
|
141
|
+
# checking if (pattern >> 5) << 5 == 0x20
|
142
|
+
# Since we cleared bottom 4 bits, the 5th
|
143
|
+
# bit can be either 0 or 1, so check both
|
144
|
+
# cases.
|
145
|
+
when 0x20, 0x30
|
146
|
+
header[:type] = :change_table_size
|
147
|
+
type = CHANGE_TABLE_SIZE_TYPE
|
148
|
+
# checking if (pattern >> 6) << 6 == 0x40
|
149
|
+
# Same logic as above, but now over the 4
|
150
|
+
# possible combinations of 2 bits (5th, 6th)
|
151
|
+
when 0x40, 0x50, 0x60, 0x70
|
152
|
+
header[:type] = :incremental
|
153
|
+
type = INCREMENTAL_TYPE
|
154
|
+
# checking if (pattern >> 7) << 7 == 0x80
|
155
|
+
when 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0
|
156
|
+
header[:type] = :indexed
|
157
|
+
type = INDEXED_TYPE
|
158
|
+
end
|
125
159
|
|
126
|
-
|
160
|
+
header_name = read_integer(type[:prefix])
|
127
161
|
|
128
162
|
case header[:type]
|
129
163
|
when :indexed
|
130
|
-
raise CompressionError if
|
131
|
-
header[:name]
|
164
|
+
raise CompressionError if header_name.zero?
|
165
|
+
header[:name] = header_name - 1
|
132
166
|
when :change_table_size
|
133
|
-
header[:
|
167
|
+
header[:name] = header_name
|
168
|
+
header[:value] = header_name
|
134
169
|
|
135
170
|
if @table_size_limit and header[:value] > @table_size_limit
|
136
171
|
raise CompressionError, "Table size #{header[:value]} exceeds limit #{@table_size_limit}!"
|
137
172
|
end
|
138
173
|
else
|
139
|
-
if
|
174
|
+
if header_name.zero?
|
140
175
|
header[:name] = read_string
|
141
176
|
else
|
142
|
-
header[:name]
|
177
|
+
header[:name] = header_name - 1
|
143
178
|
end
|
144
179
|
|
145
180
|
header[:value] = read_string
|
data/lib/protocol/hpack/error.rb
CHANGED
@@ -1,25 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2019-2024, by Samuel Williams.
|
23
5
|
|
24
6
|
module Protocol
|
25
7
|
module HPACK
|
@@ -1,25 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
-
# of this software and associated documentation files (the "Software"), to deal
|
8
|
-
# in the Software without restriction, including without limitation the rights
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
23
5
|
|
24
6
|
# Machine generated Huffman decoder state machine.
|
25
7
|
# DO NOT EDIT THIS FILE.
|
@@ -1,25 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
-
# copies of the Software, and to permit persons to whom the Software is
|
11
|
-
# furnished to do so, subject to the following conditions:
|
12
|
-
#
|
13
|
-
# The above copyright notice and this permission notice shall be included in
|
14
|
-
# all copies or substantial portions of the Software.
|
15
|
-
#
|
16
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2014-2015, by Kaoru Maeda.
|
5
|
+
# Copyright, 2015, by Ilya Grigorik.
|
6
|
+
# Copyright, 2015, by Tamir Duberstein.
|
7
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
8
|
+
# Copyright, 2022, by Daniel Morrison.
|
23
9
|
|
24
10
|
require_relative 'huffman/machine'
|
25
11
|
require_relative 'error'
|
@@ -1,27 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
22
5
|
|
23
6
|
module Protocol
|
24
7
|
module HPACK
|
25
|
-
VERSION = "1.4.
|
8
|
+
VERSION = "1.4.3"
|
26
9
|
end
|
27
10
|
end
|
data/lib/protocol/hpack.rb
CHANGED
@@ -1,24 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
# of this software and associated documentation files (the "Software"), to deal
|
7
|
-
# in the Software without restriction, including without limitation the rights
|
8
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
# copies of the Software, and to permit persons to whom the Software is
|
10
|
-
# furnished to do so, subject to the following conditions:
|
11
|
-
#
|
12
|
-
# The above copyright notice and this permission notice shall be included in
|
13
|
-
# all copies or substantial portions of the Software.
|
14
|
-
#
|
15
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
# THE SOFTWARE.
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
22
5
|
|
23
6
|
require_relative "hpack/version"
|
24
7
|
|
data/license.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# MIT License
|
2
|
+
|
3
|
+
Copyright, 2013-2016, by Ilya Grigorik.
|
4
|
+
Copyright, 2014-2015, by Kaoru Maeda.
|
5
|
+
Copyright, 2015, by Tamir Duberstein.
|
6
|
+
Copyright, 2016, by Kien Nguyen Trung.
|
7
|
+
Copyright, 2016, by George Ulmer.
|
8
|
+
Copyright, 2018, by Tiago Cardoso.
|
9
|
+
Copyright, 2018, by Byron Formwalt.
|
10
|
+
Copyright, 2018-2024, by Samuel Williams.
|
11
|
+
Copyright, 2018, by Kenichi Nakamura.
|
12
|
+
Copyright, 2019, by Jingyi Chen.
|
13
|
+
Copyright, 2019, by Cyril Roelandt.
|
14
|
+
Copyright, 2020, by Olle Jonsson.
|
15
|
+
Copyright, 2020, by Justin Mazzocchi.
|
16
|
+
Copyright, 2022, by Daniel Morrison.
|
17
|
+
Copyright, 2022, by Felix Yan.
|
18
|
+
|
19
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
20
|
+
of this software and associated documentation files (the "Software"), to deal
|
21
|
+
in the Software without restriction, including without limitation the rights
|
22
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
23
|
+
copies of the Software, and to permit persons to whom the Software is
|
24
|
+
furnished to do so, subject to the following conditions:
|
25
|
+
|
26
|
+
The above copyright notice and this permission notice shall be included in all
|
27
|
+
copies or substantial portions of the Software.
|
28
|
+
|
29
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
30
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
31
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
32
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
33
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
34
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
35
|
+
SOFTWARE.
|
data/readme.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Protocol::HPACK
|
2
|
+
|
3
|
+
Provides a compressor and decompressor for HTTP 2.0 headers, HPACK, as defined by [RFC7541](https://tools.ietf.org/html/rfc7541).
|
4
|
+
|
5
|
+
[![Development Status](https://github.com/socketry/protocol-hpack/workflows/Test/badge.svg)](https://github.com/socketry/protocol-hpack/actions?workflow=Test)
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
Please see the [project documentation](https://socketry.github.io/protocol-hpack/) for more details.
|
10
|
+
|
11
|
+
- [Getting Started](https://socketry.github.io/protocol-hpack/guides/getting-started/index) - This guide explains how to use the `protocol-hpack` gem to compress and decompress HTTP/2 headers using HPACK.
|
12
|
+
|
13
|
+
## Contributing
|
14
|
+
|
15
|
+
We welcome contributions to this project.
|
16
|
+
|
17
|
+
1. Fork it.
|
18
|
+
2. Create your feature branch (`git checkout -b my-new-feature`).
|
19
|
+
3. Commit your changes (`git commit -am 'Add some feature'`).
|
20
|
+
4. Push to the branch (`git push origin my-new-feature`).
|
21
|
+
5. Create new Pull Request.
|
22
|
+
|
23
|
+
### Developer Certificate of Origin
|
24
|
+
|
25
|
+
This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
|
26
|
+
|
27
|
+
### Contributor Covenant
|
28
|
+
|
29
|
+
This project is governed by the [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
|
30
|
+
|
31
|
+
## See Also
|
32
|
+
|
33
|
+
- [protocol-http2](https://github.com/socketry/protocol-http2) - Provides an HTTP/2 client and server implementation.
|
34
|
+
- [async-http](https://github.com/socketry/async-http) - Provides a complete HTTP client and server implementation on top of Async.
|
data/tasks/huffman.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2014, by Kaoru Maeda.
|
5
|
+
# Copyright, 2015, by Tamir Duberstein.
|
6
|
+
# Copyright, 2015, by Ilya Grigorik.
|
7
|
+
# Copyright, 2016, by George Ulmer.
|
8
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
9
|
+
|
3
10
|
require_relative '../lib/http/hpack/huffman'
|
4
11
|
|
5
12
|
require 'set'
|
@@ -102,26 +109,10 @@ module Huffman
|
|
102
109
|
|
103
110
|
File.open(File.expand_path('../lib/http/hpack/huffman/machine.rb', File.dirname(__FILE__)), 'w') do |f|
|
104
111
|
f.print <<HEADER
|
105
|
-
#
|
106
|
-
|
107
|
-
#
|
108
|
-
#
|
109
|
-
# of this software and associated documentation files (the "Software"), to deal
|
110
|
-
# in the Software without restriction, including without limitation the rights
|
111
|
-
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
112
|
-
# copies of the Software, and to permit persons to whom the Software is
|
113
|
-
# furnished to do so, subject to the following conditions:
|
114
|
-
#
|
115
|
-
# The above copyright notice and this permission notice shall be included in
|
116
|
-
# all copies or substantial portions of the Software.
|
117
|
-
#
|
118
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
119
|
-
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
120
|
-
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
121
|
-
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
122
|
-
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
123
|
-
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
124
|
-
# THE SOFTWARE.
|
112
|
+
# frozen_string_literal: true
|
113
|
+
|
114
|
+
# Released under the MIT License.
|
115
|
+
# Copyright, 2018-2024, by Samuel Williams.
|
125
116
|
|
126
117
|
# Machine generated Huffman decoder state machine.
|
127
118
|
# DO NOT EDIT THIS FILE.
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
CHANGED
@@ -1,87 +1,64 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protocol-hpack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
|
-
|
8
|
+
- Ilya Grigorik
|
9
|
+
- Tamir Duberstein
|
10
|
+
- Kaoru Maeda
|
11
|
+
- Tiago Cardoso
|
12
|
+
- Byron Formwalt
|
13
|
+
- Cyril Roelandt
|
14
|
+
- Daniel Morrison
|
15
|
+
- Felix Yan
|
16
|
+
- George Ulmer
|
17
|
+
- Jingyi Chen
|
18
|
+
- Justin Mazzocchi
|
19
|
+
- Kenichi Nakamura
|
20
|
+
- Kien Nguyen Trung
|
21
|
+
- Olle Jonsson
|
22
|
+
autorequire:
|
9
23
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '10.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '10.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.0'
|
69
|
-
description:
|
24
|
+
cert_chain:
|
25
|
+
- |
|
26
|
+
-----BEGIN CERTIFICATE-----
|
27
|
+
MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
|
28
|
+
ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
|
29
|
+
CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
|
30
|
+
MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
|
31
|
+
MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
|
32
|
+
bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
|
33
|
+
igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
|
34
|
+
9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
|
35
|
+
sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
|
36
|
+
e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
|
37
|
+
XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
|
38
|
+
RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
|
39
|
+
tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
|
40
|
+
zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
|
41
|
+
xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
|
42
|
+
BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
|
43
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
|
44
|
+
aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
|
45
|
+
cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
|
46
|
+
xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
|
47
|
+
c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
|
48
|
+
8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
|
49
|
+
JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
|
50
|
+
eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
|
51
|
+
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
52
|
+
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
53
|
+
-----END CERTIFICATE-----
|
54
|
+
date: 2024-03-12 00:00:00.000000000 Z
|
55
|
+
dependencies: []
|
56
|
+
description:
|
70
57
|
email:
|
71
|
-
- samuel.williams@oriontransfer.co.nz
|
72
58
|
executables: []
|
73
59
|
extensions: []
|
74
60
|
extra_rdoc_files: []
|
75
61
|
files:
|
76
|
-
- ".editorconfig"
|
77
|
-
- ".gitignore"
|
78
|
-
- ".gitmodules"
|
79
|
-
- ".rspec"
|
80
|
-
- ".travis.yml"
|
81
|
-
- Gemfile
|
82
|
-
- README.md
|
83
|
-
- Rakefile
|
84
|
-
- http-hpack.gemspec
|
85
62
|
- lib/protocol/hpack.rb
|
86
63
|
- lib/protocol/hpack/compressor.rb
|
87
64
|
- lib/protocol/hpack/context.rb
|
@@ -90,13 +67,16 @@ files:
|
|
90
67
|
- lib/protocol/hpack/huffman.rb
|
91
68
|
- lib/protocol/hpack/huffman/machine.rb
|
92
69
|
- lib/protocol/hpack/version.rb
|
70
|
+
- license.md
|
71
|
+
- readme.md
|
93
72
|
- tasks/huffman.rake
|
94
73
|
- tasks/huffman.rb
|
95
74
|
homepage: https://github.com/socketry/http-hpack
|
96
75
|
licenses:
|
97
76
|
- MIT
|
98
|
-
metadata:
|
99
|
-
|
77
|
+
metadata:
|
78
|
+
documentation_uri: https://socketry.github.io/protocol-hpack/
|
79
|
+
post_install_message:
|
100
80
|
rdoc_options: []
|
101
81
|
require_paths:
|
102
82
|
- lib
|
@@ -104,15 +84,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
104
84
|
requirements:
|
105
85
|
- - ">="
|
106
86
|
- !ruby/object:Gem::Version
|
107
|
-
version: '0'
|
87
|
+
version: '3.0'
|
108
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
89
|
requirements:
|
110
90
|
- - ">="
|
111
91
|
- !ruby/object:Gem::Version
|
112
92
|
version: '0'
|
113
93
|
requirements: []
|
114
|
-
rubygems_version: 3.
|
115
|
-
signing_key:
|
94
|
+
rubygems_version: 3.5.3
|
95
|
+
signing_key:
|
116
96
|
specification_version: 4
|
117
|
-
summary: A compresssor and decompressor for HTTP
|
97
|
+
summary: A compresssor and decompressor for HTTP/2's HPACK format.
|
118
98
|
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|
data/.editorconfig
DELETED
data/.gitignore
DELETED
data/.gitmodules
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
dist: xenial
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
matrix:
|
6
|
-
include:
|
7
|
-
- rvm: 2.4
|
8
|
-
- rvm: 2.5
|
9
|
-
- rvm: 2.6
|
10
|
-
- rvm: 2.7
|
11
|
-
- rvm: 2.6
|
12
|
-
env: COVERAGE=PartialSummary,Coveralls
|
13
|
-
- rvm: truffleruby
|
14
|
-
- rvm: jruby-head
|
15
|
-
env: JRUBY_OPTS="--debug -X+O"
|
16
|
-
- rvm: ruby-head
|
17
|
-
allow_failures:
|
18
|
-
- rvm: truffleruby
|
19
|
-
- rvm: ruby-head
|
20
|
-
- rvm: jruby-head
|
data/Gemfile
DELETED
data/README.md
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# Protocol::HPACK
|
2
|
-
|
3
|
-
Provides a compressor and decompressor for HTTP 2.0 headers, HPACK, as defined by [RFC7541](https://tools.ietf.org/html/rfc7541).
|
4
|
-
|
5
|
-
[![Build Status](https://secure.travis-ci.com/socketry/protocol-hpack.svg)](http://travis-ci.com/socketry/protocol-hpack)
|
6
|
-
[![Coverage Status](https://coveralls.io/repos/github/socketry/protocol-hpack/badge.svg?branch=master)](https://coveralls.io/github/socketry/protocol-hpack?branch=master)
|
7
|
-
|
8
|
-
## Installation
|
9
|
-
|
10
|
-
Add this line to your application's Gemfile:
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
gem 'protocol-hpack'
|
14
|
-
```
|
15
|
-
|
16
|
-
And then execute:
|
17
|
-
|
18
|
-
$ bundle
|
19
|
-
|
20
|
-
Or install it yourself as:
|
21
|
-
|
22
|
-
$ gem install protocol-hpack
|
23
|
-
|
24
|
-
## Usage
|
25
|
-
|
26
|
-
### Compressing Headers
|
27
|
-
|
28
|
-
```ruby
|
29
|
-
require 'protocol/hpack'
|
30
|
-
|
31
|
-
buffer = String.new.b
|
32
|
-
compressor = Protocol::HPACK::Compressor.new(buffer)
|
33
|
-
|
34
|
-
compressor.encode([['content-length', '5']])
|
35
|
-
=> "\\\x015"
|
36
|
-
```
|
37
|
-
|
38
|
-
### Decompressing Headers
|
39
|
-
|
40
|
-
Reusing `buffer` from above:
|
41
|
-
|
42
|
-
```ruby
|
43
|
-
require 'protocol/hpack'
|
44
|
-
|
45
|
-
# Buffer from above...
|
46
|
-
buffer = "\\\x015"
|
47
|
-
decompressor = Protocol::HPACK::Decompressor.new(buffer)
|
48
|
-
|
49
|
-
decompressor.decode
|
50
|
-
=> [["content-length", "5"]]
|
51
|
-
```
|
52
|
-
|
53
|
-
## Contributing
|
54
|
-
|
55
|
-
1. Fork it
|
56
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
57
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
58
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
59
|
-
5. Create new Pull Request
|
60
|
-
|
61
|
-
## License
|
62
|
-
|
63
|
-
Released under the MIT license.
|
64
|
-
|
65
|
-
Copyright, 2019, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
|
66
|
-
Copyright, 2013, by Ilya Grigorik.
|
67
|
-
|
68
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
69
|
-
of this software and associated documentation files (the "Software"), to deal
|
70
|
-
in the Software without restriction, including without limitation the rights
|
71
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
72
|
-
copies of the Software, and to permit persons to whom the Software is
|
73
|
-
furnished to do so, subject to the following conditions:
|
74
|
-
|
75
|
-
The above copyright notice and this permission notice shall be included in
|
76
|
-
all copies or substantial portions of the Software.
|
77
|
-
|
78
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
79
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
80
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
81
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
82
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
83
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
84
|
-
THE SOFTWARE.
|
data/Rakefile
DELETED
data/http-hpack.gemspec
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
require_relative "lib/protocol/hpack/version"
|
3
|
-
|
4
|
-
Gem::Specification.new do |spec|
|
5
|
-
spec.name = "protocol-hpack"
|
6
|
-
spec.version = Protocol::HPACK::VERSION
|
7
|
-
spec.licenses = ["MIT"]
|
8
|
-
spec.authors = ["Samuel Williams"]
|
9
|
-
spec.email = ["samuel.williams@oriontransfer.co.nz"]
|
10
|
-
|
11
|
-
spec.summary = "A compresssor and decompressor for HTTP 2.0 HPACK."
|
12
|
-
spec.homepage = "https://github.com/socketry/http-hpack"
|
13
|
-
|
14
|
-
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
-
f.match(%r{^(test|spec|features)/})
|
16
|
-
end
|
17
|
-
|
18
|
-
spec.require_paths = ["lib"]
|
19
|
-
|
20
|
-
spec.add_development_dependency "covered"
|
21
|
-
spec.add_development_dependency "bundler"
|
22
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
-
end
|