protocol-http 0.22.7 → 0.22.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3941486c86fe210a4ba79c2c77c73bfa3de8cd7cfbfe892c4b6d0b48699260c2
4
- data.tar.gz: afd65fb56ed88d184249ab56d87271f6926d398e8460135315e571b1848416a5
3
+ metadata.gz: 4b1672fc86e8bbe321f648e200205314ee472f9b01c326882f089e149b584f11
4
+ data.tar.gz: acbe42e8d8af4b50d018325b0204cec345ed161fbb7eba0583a512ce65c0a713
5
5
  SHA512:
6
- metadata.gz: 10e885a3c13ec3a380c774b62e4e5fdd1a0a378766eca8650733909917ab964ccb85b39aa39105d522d8efd93b917a546029c1d70260fef4ba719c984f055926
7
- data.tar.gz: b67aa62dc2d4f5e5c3e6d97cd4f40044de8a7b02dac0343aa796dcdf936171f3ec097819d3e70ec4af76ec493496c3507b6ec62302571b76b5ac359e9d015641
6
+ metadata.gz: 1cda8cf0c22f5d9a01a308cc83f2b80209bc3ad98ec84c5082d0846e6835224bb6c2ef9f9cc25b12eaa542f77000fa13c7cc9d2aba2107ba362e737c13ef90a0
7
+ data.tar.gz: 4fcd1417896726bce8019ea8fc5ebdbd92f07484611855c4cc04b0ba1a59deb18a79dd1d0c4b8978b7ec48c3c27376b09f3d75cd33728d4d5474093a08699694
checksums.yaml.gz.sig ADDED
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
-
2
+ #
3
3
  # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -20,15 +20,19 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  # THE SOFTWARE.
22
22
 
23
+ require_relative 'buffered'
24
+
23
25
  module Protocol
24
26
  module HTTP
25
27
  module Body
26
28
  # The input stream is an IO-like object which contains the raw HTTP POST data. When applicable, its external encoding must be “ASCII-8BIT” and it must be opened in binary mode, for Ruby 1.9 compatibility. The input stream must respond to gets, each, read and rewind.
27
29
  class Stream
28
- def initialize(input, output)
30
+ def initialize(input, output = Buffered.new)
29
31
  @input = input
30
32
  @output = output
31
33
 
34
+ raise ArgumentError, "Non-writable output!" unless output.respond_to?(:write)
35
+
32
36
  # Will hold remaining data in `#read`.
33
37
  @buffer = nil
34
38
  @closed = false
@@ -45,29 +49,62 @@ module Protocol
45
49
  # @param buffer [String] the buffer which will receive the data
46
50
  # @return a buffer containing the data
47
51
  def read(length = nil, buffer = nil)
52
+ return '' if length == 0
53
+
48
54
  buffer ||= Async::IO::Buffer.new
49
- buffer.clear
55
+
56
+ # Take any previously buffered data and replace it into the given buffer.
57
+ if @buffer
58
+ buffer.replace(@buffer)
59
+ @buffer = nil
60
+ end
50
61
 
51
- until buffer.bytesize == length
52
- @buffer = read_next if @buffer.nil?
53
- break if @buffer.nil?
62
+ if length
63
+ while buffer.bytesize < length and chunk = read_next
64
+ buffer << chunk
65
+ end
66
+
67
+ # This ensures the subsequent `slice!` works correctly.
68
+ buffer.force_encoding(Encoding::BINARY)
69
+
70
+ # This will be at least one copy:
71
+ @buffer = buffer.byteslice(length, buffer.bytesize)
54
72
 
55
- remaining_length = length - buffer.bytesize if length
73
+ # This should be zero-copy:
74
+ buffer.slice!(length)
56
75
 
57
- if remaining_length && remaining_length < @buffer.bytesize
58
- # We know that we are not going to reuse the original buffer.
59
- # But byteslice will generate a hidden copy. So let's freeze it first:
60
- @buffer.freeze
61
-
62
- buffer << @buffer.byteslice(0, remaining_length)
63
- @buffer = @buffer.byteslice(remaining_length, @buffer.bytesize)
76
+ if buffer.empty?
77
+ return nil
64
78
  else
65
- buffer << @buffer
66
- @buffer = nil
79
+ return buffer
67
80
  end
81
+ else
82
+ while chunk = read_next
83
+ buffer << chunk
84
+ end
85
+
86
+ return buffer
87
+ end
88
+ end
89
+
90
+ # Read at most `length` bytes from the stream. Will avoid reading from the underlying stream if possible.
91
+ def read_partial(length = nil)
92
+ if @buffer
93
+ buffer = @buffer
94
+ @buffer = nil
95
+ else
96
+ buffer = read_next
68
97
  end
69
98
 
70
- return nil if buffer.empty? && length && length > 0
99
+ if buffer and length
100
+ if buffer.bytesize > length
101
+ # This ensures the subsequent `slice!` works correctly.
102
+ buffer.force_encoding(Encoding::BINARY)
103
+
104
+ @buffer = buffer.byteslice(length, buffer.bytesize)
105
+ buffer.slice!(length)
106
+ end
107
+ end
71
108
 
72
109
  return buffer
73
110
  end
@@ -80,7 +117,7 @@ module Protocol
80
117
  buffer&.clear
81
118
  return
82
119
  end
83
-
120
+
84
121
  if @buffer.bytesize > length
85
122
  chunk = @buffer.byteslice(0, length)
86
123
  @buffer = @buffer.byteslice(length, @buffer.bytesize)
@@ -124,10 +161,10 @@ module Protocol
124
161
  end
125
162
 
126
163
  # Close the input and output bodies.
127
- def close
164
+ def close(error = nil)
128
165
  self.close_read
129
166
  self.close_write
130
-
167
+
131
168
  return nil
132
169
  ensure
133
170
  @closed = true
@@ -22,6 +22,6 @@
22
22
 
23
23
  module Protocol
24
24
  module HTTP
25
- VERSION = "0.22.7"
25
+ VERSION = "0.22.9"
26
26
  end
27
27
  end
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.7
4
+ version: 0.22.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
+ - Bruno Sutic
9
+ - Bryan Powell
10
+ - Olle Jonsson
11
+ - Yuta Iwama
8
12
  autorequire:
9
13
  bindir: bin
10
- cert_chain: []
11
- date: 2022-08-06 00:00:00.000000000 Z
14
+ cert_chain:
15
+ - |
16
+ -----BEGIN CERTIFICATE-----
17
+ MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
18
+ ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
19
+ CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
20
+ MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
21
+ MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
22
+ bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
23
+ igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
24
+ 9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
25
+ sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
26
+ e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
27
+ XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
28
+ RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
29
+ tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
30
+ zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
31
+ xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
32
+ BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
33
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
34
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
35
+ cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
36
+ xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
37
+ c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
38
+ 8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
39
+ JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
40
+ eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
41
+ Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
42
+ voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
43
+ -----END CERTIFICATE-----
44
+ date: 2022-08-07 00:00:00.000000000 Z
12
45
  dependencies:
13
46
  - !ruby/object:Gem::Dependency
14
47
  name: bundler
metadata.gz.sig ADDED
Binary file