Resolv::Hosts (Class)

In: resolv.rb
Parent: Object

Constants

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

Public Class methods

[Source]

# File resolv.rb, line 288
    def initialize(filename = DefaultFileName)
      @filename = filename
      @mutex = Mutex.new
      @initialized = nil
    end

Public Instance methods

[Source]

# File resolv.rb, line 335
    def each_address(name, &proc)
      lazy_initialize
      if @name2addr.include?(name)
        @name2addr[name].each(&proc)
      end
    end

[Source]

# File resolv.rb, line 353
    def each_name(address, &proc)
      lazy_initialize
      if @addr2name.include?(address)
        @addr2name[address].each(&proc)
      end
    end

[Source]

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

[Source]

# File resolv.rb, line 329
    def getaddresses(name)
      ret = []
      each_address(name) {|address| ret << address}
      return ret
    end

[Source]

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

[Source]

# File resolv.rb, line 347
    def getnames(address)
      ret = []
      each_name(address) {|name| ret << name}
      return ret
    end

[Source]

# File resolv.rb, line 294
    def lazy_initialize
      @mutex.synchronize {
        unless @initialized
          @name2addr = {}
          @addr2name = {}
          open(@filename) {|f|
            f.each {|line|
              line.sub!(/#.*/, '')
              addr, hostname, *aliases = line.split(/\s+/)
              next unless addr
              addr.untaint
              hostname.untaint
              @addr2name[addr] = [] unless @addr2name.include? addr
              @addr2name[addr] << hostname
              @addr2name[addr] += aliases
              @name2addr[hostname] = [] unless @name2addr.include? hostname
              @name2addr[hostname] << addr
              aliases.each {|n|
                n.untaint
                @name2addr[n] = [] unless @name2addr.include? n
                @name2addr[n] << addr
              }
            }
          }
          @name2addr.each {|name, arr| arr.reverse!}
          @initialized = true
        end
      }
    end

[Validate]