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.
         |