Method: Dnsruby::ZoneTransfer#transfer

Defined in:
lib/dnsruby/zone_transfer.rb

#transfer(zone) ⇒ Object

Perform a zone transfer (RFC1995)

If an IXFR query is unsuccessful, then AXFR is tried (and @transfer_type is set
to AXFR)
TCP is used as the only transport

If AXFR is performed, then the zone will be returned as a set of records :

      zt = Dnsruby::ZoneTransfer.new
      zt.transfer_type = Dnsruby::Types.AXFR
      zt.server = "ns0.validation-test-servers.nominet.org.uk"
      zone = zt.transfer("validation-test-servers.nominet.org.uk")
      soa = zone[0]
      rec1 = zone[1]
      print zone.to_s

If IXFR is performed, then the incrementals will be returned as a set of Deltas.
Each Delta contains the start and end SOA serial number, as well as an array of
adds and deletes that occurred between the start and end.

       zt = Dnsruby::ZoneTransfer.new
       zt.transfer_type = Dnsruby::Types.IXFR
       zt.server = "ns0.validation-test-servers.nominet.org.uk"
       zt.serial = 2007090401
       deltas = zt.transfer("validation-test-servers.nominet.org.uk")
       assert_equal("Should show up in transfer", deltas[0].adds[1].data)


82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/dnsruby/zone_transfer.rb', line 82

def transfer(zone)
  servers = @server
  if (servers.class == String)
    servers=[servers]
  end
  xfr = nil
  exception = nil
  servers.each do |server|
    begin
      server=Config.resolve_server(server)
      xfr = do_transfer(zone, server)
      break
    rescue Exception => e
      exception = e
    end
  end
  if (xfr == nil && exception != nil)
    raise exception
  end
  return xfr
end