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 293
293:     def initialize(filename = DefaultFileName)
294:       @filename = filename
295:       @mutex = Mutex.new
296:       @initialized = nil
297:     end

Public Instance methods

[Source]

     # File lib/resolv.rb, line 341
341:     def each_address(name, &proc)
342:       lazy_initialize
343:       if @name2addr.include?(name)
344:         @name2addr[name].each(&proc)
345:       end
346:     end

[Source]

     # File lib/resolv.rb, line 359
359:     def each_name(address, &proc)
360:       lazy_initialize
361:       if @addr2name.include?(address)
362:         @addr2name[address].each(&proc)
363:       end
364:     end

[Source]

     # File lib/resolv.rb, line 330
330:     def getaddress(name)
331:       each_address(name) {|address| return address}
332:       raise ResolvError.new("#{@filename} has no name: #{name}")
333:     end

[Source]

     # File lib/resolv.rb, line 335
335:     def getaddresses(name)
336:       ret = []
337:       each_address(name) {|address| ret << address}
338:       return ret
339:     end

[Source]

     # File lib/resolv.rb, line 348
348:     def getname(address)
349:       each_name(address) {|name| return name}
350:       raise ResolvError.new("#{@filename} has no address: #{address}")
351:     end

[Source]

     # File lib/resolv.rb, line 353
353:     def getnames(address)
354:       ret = []
355:       each_name(address) {|name| ret << name}
356:       return ret
357:     end

[Source]

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

[Validate]