Class Resolv::Hosts
In: lib/resolv.rb
Parent: Object

Methods

Constants

DefaultFileName = Win32::Resolv.get_hosts_path
DefaultFileName = '/etc/hosts'

Public Class methods

[Source]

     # File lib/resolv.rb, line 288
288:     def initialize(filename = DefaultFileName)
289:       @filename = filename
290:       @mutex = Mutex.new
291:       @initialized = nil
292:     end

Public Instance methods

[Source]

     # File lib/resolv.rb, line 336
336:     def each_address(name, &proc)
337:       lazy_initialize
338:       if @name2addr.include?(name)
339:         @name2addr[name].each(&proc)
340:       end
341:     end

[Source]

     # File lib/resolv.rb, line 354
354:     def each_name(address, &proc)
355:       lazy_initialize
356:       if @addr2name.include?(address)
357:         @addr2name[address].each(&proc)
358:       end
359:     end

[Source]

     # File lib/resolv.rb, line 325
325:     def getaddress(name)
326:       each_address(name) {|address| return address}
327:       raise ResolvError.new("#{@filename} has no name: #{name}")
328:     end

[Source]

     # File lib/resolv.rb, line 330
330:     def getaddresses(name)
331:       ret = []
332:       each_address(name) {|address| ret << address}
333:       return ret
334:     end

[Source]

     # File lib/resolv.rb, line 343
343:     def getname(address)
344:       each_name(address) {|name| return name}
345:       raise ResolvError.new("#{@filename} has no address: #{address}")
346:     end

[Source]

     # File lib/resolv.rb, line 348
348:     def getnames(address)
349:       ret = []
350:       each_name(address) {|name| ret << name}
351:       return ret
352:     end

[Source]

     # File lib/resolv.rb, line 294
294:     def lazy_initialize
295:       @mutex.synchronize {
296:         unless @initialized
297:           @name2addr = {}
298:           @addr2name = {}
299:           open(@filename) {|f|
300:             f.each {|line|
301:               line.sub!(/#.*/, '')
302:               addr, hostname, *aliases = line.split(/\s+/)
303:               next unless addr
304:               addr.untaint
305:               hostname.untaint
306:               @addr2name[addr] = [] unless @addr2name.include? addr
307:               @addr2name[addr] << hostname
308:               @addr2name[addr] += aliases
309:               @name2addr[hostname] = [] unless @name2addr.include? hostname
310:               @name2addr[hostname] << addr
311:               aliases.each {|n|
312:                 n.untaint
313:                 @name2addr[n] = [] unless @name2addr.include? n
314:                 @name2addr[n] << addr
315:               }
316:             }
317:           }
318:           @name2addr.each {|name, arr| arr.reverse!}
319:           @initialized = true
320:         end
321:       }
322:       self
323:     end

[Validate]