Class: Dnsruby::SingleResolver

Inherits:
Resolver
  • Object
show all
Defined in:
lib/Dnsruby/SingleResolver.rb

Overview

Dnsruby::SingleResolver

This class has been deprecated. This implementation exists for legacy clients. New code should use the Dnsruby::Resolver class. The SingleResolver class targets a single resolver, and controls the sending of a single packet with a packet timeout. It performs no retries. Only two threads are used - the client thread and a select thread (which is reused across all queries).

Methods

Synchronous

These methods raise an exception or return a response message with rcode==NOERROR

  • Dnsruby::SingleResolver#send_message(msg [, use_tcp]))

  • Dnsruby::SingleResolver#query(name [, type [, klass]])

Asynchronous

These methods use a response queue to return the response and the error to the client. Support for EventMachine has been deprecated

  • Dnsruby::SingleResolver#send_async(…)

Constant Summary

Constants inherited from Resolver

Resolver::AbsoluteMinDnssecUdpSize, Resolver::DefaultDnssec, Resolver::DefaultPacketTimeout, Resolver::DefaultPort, Resolver::DefaultQueryTimeout, Resolver::DefaultRetryDelay, Resolver::DefaultRetryTimes, Resolver::DefaultUDPSize, Resolver::MinDnssecUdpSize

Instance Attribute Summary

Attributes inherited from Resolver

#config, #dnssec, #do_validation, #ignore_truncation, #packet_timeout, #port, #recurse, #retry_delay, #retry_times, #src_address, #tsig, #udp_size, #use_tcp

Instance Method Summary collapse

Methods inherited from Resolver

#add_config_nameservers, #add_server, #add_src_port, check_port, #close, #generate_timeouts, get_ports_from, get_tsig, #nameserver=, #persistent_tcp=, #persistent_udp=, port_in_range, #query, #query_no_validation_or_recursion, #reset_attributes, #send_async, #send_message, #send_plain_message, #set_config_nameserver, #single_res_mutex, #single_resolvers, #single_resolvers=, #src_port, #src_port=, #update, #update_internal_res

Constructor Details

#initialize(*args) ⇒ SingleResolver

Can take a hash with the following optional keys :

  • :server

  • :port

  • :use_tcp

  • :ignore_truncation

  • :src_address

  • :src_port

  • :udp_size

  • :persistent_tcp

  • :persistent_udp

  • :tsig

  • :packet_timeout

  • :recurse



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/Dnsruby/SingleResolver.rb', line 55

def initialize(*args)
  arg=args[0]
  @single_res_mutex = Mutex.new
  @packet_timeout = Resolver::DefaultPacketTimeout
  @query_timeout = @packet_timeout
  @port = Resolver::DefaultPort
  @udp_size = Resolver::DefaultUDPSize
  @dnssec = Resolver::DefaultDnssec
  @use_tcp = false
  @tsig = nil
  @ignore_truncation = false
  @src_address        = '0.0.0.0'
  @src_port        = [0]
  @recurse = true
  @persistent_udp = false
  @persistent_tcp = false
  @retry_times = 1
  @retry_delay = 0
  @single_resolvers = []
  @configured = false
    @config = Config.new

  if (arg==nil)
    # Get default config
#        @config = Config.new
##        @server = config.nameserver[0]
  elsif (arg.kind_of?String)
    @config.get_ready
    @configured= true
    @server=arg
  elsif (arg.kind_of?Name)
    @config.get_ready
    @configured= true
    @server=arg
  elsif (arg.kind_of?Hash)
    arg.keys.each do |attr|
      begin
        send(attr.to_s+"=", arg[attr])
      rescue Exception
        Dnsruby.log.error{"Argument #{attr} not valid\n"}
      end
      #        end
    end
  end
        #Check server is IP
#            @server=Config.resolve_server(@server)
  isr = PacketSender.new(*args)
#      isr.server = @server
  @single_resolvers = [isr]

  #      ResolverRegister::register_single_resolver(self)
end

Instance Method Details

#add_opt_rr(m) ⇒ Object

Add the appropriate EDNS OPT RR for the specified packet. This is done automatically, unless you are using Resolver#send_plain_message



143
144
145
146
147
# File 'lib/Dnsruby/SingleResolver.rb', line 143

def add_opt_rr(m)
  @single_res_mutex.synchronize {
    @single_resolvers[0].add_opt_rr(m)
  }
end

#packet_timeout=(t) ⇒ Object Also known as: query_timeout=



136
137
138
139
# File 'lib/Dnsruby/SingleResolver.rb', line 136

def packet_timeout=(t)
  @packet_timeout = t
  @query_timeout = t
end

#retry_delay=(n) ⇒ Object

:nodoc:

Raises:

  • (NoMethodError)


132
133
134
# File 'lib/Dnsruby/SingleResolver.rb', line 132

def retry_delay=(n) # :nodoc:
  raise NoMethodError.new("SingleResolver does not have retry_delay")
end

#retry_times=(n) ⇒ Object

:nodoc:

Raises:

  • (NoMethodError)


129
130
131
# File 'lib/Dnsruby/SingleResolver.rb', line 129

def retry_times=(n) # :nodoc:
  raise NoMethodError.new("SingleResolver does not have retry_times")
end

#serverObject



119
120
121
122
123
124
125
126
127
# File 'lib/Dnsruby/SingleResolver.rb', line 119

def server
#      @single_res_mutex.synchronize {
  if (!@configured)
    @config.get_ready
    add_config_nameservers
  end
    return @single_resolvers[0].server
#      }
end

#server=(s) ⇒ Object



108
109
110
111
112
113
114
115
116
117
# File 'lib/Dnsruby/SingleResolver.rb', line 108

def server=(s)
  if (!@configured)
    @config.get_ready
    add_config_nameservers
  end
  isr = PacketSender.new(s)
        @single_res_mutex.synchronize {
  @single_resolvers = [isr]
        }
end