async-dns 1.2.1 → 1.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe06cb348414e96cabc7ad81a08d8c030d36d4f95cec538a2a1ca457123d6b58
4
- data.tar.gz: 76e5664c2582c7ebac250e7ae2c0680864ea85f4896eaca76b1f5050f517c934
3
+ metadata.gz: d4ffb8685eb3a47dad14219a9ffd0fcd4193c2ab24bb04ae4b213d10513adafc
4
+ data.tar.gz: 6d644f3e0ffc4654dda0e08d077f0f3bd463a7c6d3de05b2c43405e5f2a008b4
5
5
  SHA512:
6
- metadata.gz: d5770a6b12241696f5930240913a15740a6950b94d8be0e0b64a83bc8f86da75c6c26d044e754590a1b8915e5f997c134d07653eaa64ee2177147edefa5f33ef
7
- data.tar.gz: 34916a1a687ecf6fac55bf52a860529e29642043c5e8a35b44a9931ce37c6fc26edab43b6edc664eae5052649bbf133f92a24597f9b757a14feb81deb493c010
6
+ metadata.gz: 638a807a5dc8f368bfba9e4ad720625aa037e9432b23faed36f3d31674eecfc6c29a68a6b28f95a728db2cc0dbe11223f6ea7e4bc24e9478aaf9ba590dbb71b4
7
+ data.tar.gz: e2fd429f878abe021d95b256d1717ea0d6a38204602e1181bf4b63d935c26d935f03936c73c9f7c89586217ca8c352783d07714c17d5eec386f010fb2d6bd831
@@ -18,6 +18,8 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
+ require 'async/io/stream'
22
+
21
23
  require_relative 'transport'
22
24
 
23
25
  module Async::DNS
@@ -114,13 +116,14 @@ module Async::DNS
114
116
  end
115
117
 
116
118
  def handle_connection(socket)
117
- input_data = StreamTransport.read_chunk(socket)
118
-
119
- response = process_query(input_data, remote_address: socket.remote_address)
120
-
121
- length = StreamTransport.write_message(socket, response)
119
+ transport = Transport.new(socket)
122
120
 
123
- @logger.debug "<#{response.id}> Wrote #{length} bytes via TCP..."
121
+ while input_data = transport.read_chunk
122
+ response = process_query(input_data, remote_address: socket.remote_address)
123
+ length = transport.write_message(response)
124
+
125
+ @logger.debug "<#{response.id}> Wrote #{length} bytes via TCP..."
126
+ end
124
127
  rescue EOFError => error
125
128
  @logger.warn "<> Error: TCP session ended prematurely!"
126
129
  rescue Errno::ECONNRESET => error
@@ -220,9 +220,11 @@ module Async::DNS
220
220
  end
221
221
 
222
222
  def try_stream_server(request, socket)
223
- StreamTransport.write_chunk(socket, request.packet)
223
+ transport = Transport.new(socket)
224
224
 
225
- input_data = StreamTransport.read_chunk(socket)
225
+ transport.write_chunk(request.packet)
226
+
227
+ input_data = transport.read_chunk
226
228
 
227
229
  return Async::DNS::decode_message(input_data)
228
230
  end
@@ -23,64 +23,40 @@ require 'ipaddr'
23
23
 
24
24
  require_relative 'message'
25
25
 
26
- module Async::DNS
27
- def self.address_family(host)
28
- return IPAddr.new(host).family
29
- end
30
-
31
- # A helper class for processing incoming network data.
32
- class BinaryStringIO < StringIO
33
- def initialize
34
- super
35
-
36
- set_encoding("BINARY")
26
+ module Async
27
+ module DNS
28
+ def self.address_family(host)
29
+ return IPAddr.new(host).family
37
30
  end
38
- end
39
-
40
- module StreamTransport
41
- def self.read_chunk(socket)
42
- # The data buffer:
43
- buffer = BinaryStringIO.new
44
-
45
- # First we need to read in the length of the packet
46
- while buffer.size < 2
47
- if data = socket.read(1)
48
- buffer.write data
49
- else
50
- raise EOFError, "Could not read message size!"
51
- end
31
+
32
+ class Transport
33
+ def initialize(socket)
34
+ @stream = IO::Stream.new(socket)
52
35
  end
53
36
 
54
- # Read in the length, the first two bytes:
55
- length = buffer.string.byteslice(0, 2).unpack('n')[0]
37
+ def write_message(message)
38
+ write_chunk(message.encode)
39
+ end
56
40
 
57
- # Read data until we have the amount specified:
58
- while (buffer.size - 2) < length
59
- required = (2 + length) - buffer.size
60
-
61
- # Read precisely the required amount:
62
- if data = socket.read(required)
63
- buffer.write data
64
- else
65
- raise EOFError, "Could not read message data!"
41
+ def read_chunk
42
+ if size_data = @stream.read(2)
43
+ # Read in the length, the first two bytes:
44
+ size = size_data.unpack('n')[0]
45
+
46
+ return @stream.read(size)
66
47
  end
67
48
  end
68
49
 
69
- return buffer.string.byteslice(2, length)
70
- end
71
-
72
- def self.write_message(socket, message)
73
- write_chunk(socket, message.encode)
74
- end
75
-
76
- def self.write_chunk(socket, output_data)
77
- size_data = [output_data.bytesize].pack('n')
78
-
79
- # TODO: Validate/check for data written correctly
80
- count = socket.write(size_data)
81
- count = socket.write(output_data)
82
-
83
- return output_data.bytesize
50
+ def write_chunk(output_data)
51
+ size_data = [output_data.bytesize].pack('n')
52
+
53
+ @stream.write(size_data)
54
+ @stream.write(output_data)
55
+
56
+ @stream.flush
57
+
58
+ return output_data.bytesize
59
+ end
84
60
  end
85
61
  end
86
62
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module DNS
23
- VERSION = '1.2.1'
23
+ VERSION = '1.2.2'
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-dns
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
11
+ date: 2019-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async-io
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
166
  requirements: []
167
- rubygems_version: 3.0.1
167
+ rubygems_version: 3.0.2
168
168
  signing_key:
169
169
  specification_version: 4
170
170
  summary: An easy to use DNS client resolver and server for Ruby.