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 +4 -4
- data/lib/async/dns/handler.rb +9 -6
- data/lib/async/dns/resolver.rb +4 -2
- data/lib/async/dns/transport.rb +27 -51
- data/lib/async/dns/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4ffb8685eb3a47dad14219a9ffd0fcd4193c2ab24bb04ae4b213d10513adafc
|
4
|
+
data.tar.gz: 6d644f3e0ffc4654dda0e08d077f0f3bd463a7c6d3de05b2c43405e5f2a008b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 638a807a5dc8f368bfba9e4ad720625aa037e9432b23faed36f3d31674eecfc6c29a68a6b28f95a728db2cc0dbe11223f6ea7e4bc24e9478aaf9ba590dbb71b4
|
7
|
+
data.tar.gz: e2fd429f878abe021d95b256d1717ea0d6a38204602e1181bf4b63d935c26d935f03936c73c9f7c89586217ca8c352783d07714c17d5eec386f010fb2d6bd831
|
data/lib/async/dns/handler.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
data/lib/async/dns/resolver.rb
CHANGED
@@ -220,9 +220,11 @@ module Async::DNS
|
|
220
220
|
end
|
221
221
|
|
222
222
|
def try_stream_server(request, socket)
|
223
|
-
|
223
|
+
transport = Transport.new(socket)
|
224
224
|
|
225
|
-
|
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
|
data/lib/async/dns/transport.rb
CHANGED
@@ -23,64 +23,40 @@ require 'ipaddr'
|
|
23
23
|
|
24
24
|
require_relative 'message'
|
25
25
|
|
26
|
-
module Async
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
-
|
55
|
-
|
37
|
+
def write_message(message)
|
38
|
+
write_chunk(message.encode)
|
39
|
+
end
|
56
40
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
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
|
data/lib/async/dns/version.rb
CHANGED
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.
|
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-
|
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.
|
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.
|