Dnsruby 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +34 -0
- data/doc/classes/Dnsruby/Classes.html +197 -0
- data/doc/classes/Dnsruby/Classes.src/M000157.html +23 -0
- data/doc/classes/Dnsruby/Classes.src/M000158.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.html +370 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +33 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +21 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +18 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +22 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +31 -0
- data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +19 -0
- data/doc/classes/Dnsruby/Config.html +410 -0
- data/doc/classes/Dnsruby/Config.src/M000098.html +18 -0
- data/doc/classes/Dnsruby/Config.src/M000099.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000100.html +19 -0
- data/doc/classes/Dnsruby/Config.src/M000101.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000102.html +21 -0
- data/doc/classes/Dnsruby/Config.src/M000103.html +38 -0
- data/doc/classes/Dnsruby/Config.src/M000104.html +26 -0
- data/doc/classes/Dnsruby/Config.src/M000105.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000106.html +23 -0
- data/doc/classes/Dnsruby/Config.src/M000107.html +22 -0
- data/doc/classes/Dnsruby/Config.src/M000108.html +18 -0
- data/doc/classes/Dnsruby/DNS/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/DNS.html +469 -0
- data/doc/classes/Dnsruby/DNS.src/M000196.html +24 -0
- data/doc/classes/Dnsruby/DNS.src/M000197.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000198.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000199.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000200.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000201.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000202.html +18 -0
- data/doc/classes/Dnsruby/DNS.src/M000203.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000204.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000205.html +28 -0
- data/doc/classes/Dnsruby/DNS.src/M000206.html +19 -0
- data/doc/classes/Dnsruby/DNS.src/M000207.html +20 -0
- data/doc/classes/Dnsruby/DNS.src/M000208.html +41 -0
- data/doc/classes/Dnsruby/DNS.src/M000209.html +32 -0
- data/doc/classes/Dnsruby/DNS.src/M000210.html +50 -0
- data/doc/classes/Dnsruby/DNSSEC/Algorithms.html +154 -0
- data/doc/classes/Dnsruby/DNSSEC.html +111 -0
- data/doc/classes/Dnsruby/DecodeError.html +111 -0
- data/doc/classes/Dnsruby/EncodeError.html +111 -0
- data/doc/classes/Dnsruby/FormErr.html +113 -0
- data/doc/classes/Dnsruby/Header.html +516 -0
- data/doc/classes/Dnsruby/Header.src/M000168.html +35 -0
- data/doc/classes/Dnsruby/Header.src/M000169.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000170.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000171.html +21 -0
- data/doc/classes/Dnsruby/Header.src/M000172.html +20 -0
- data/doc/classes/Dnsruby/Header.src/M000173.html +32 -0
- data/doc/classes/Dnsruby/Header.src/M000174.html +26 -0
- data/doc/classes/Dnsruby/Header.src/M000175.html +47 -0
- data/doc/classes/Dnsruby/Header.src/M000176.html +28 -0
- data/doc/classes/Dnsruby/Header.src/M000177.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000178.html +18 -0
- data/doc/classes/Dnsruby/Header.src/M000179.html +30 -0
- data/doc/classes/Dnsruby/Hosts.html +305 -0
- data/doc/classes/Dnsruby/Hosts.src/M000141.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000142.html +49 -0
- data/doc/classes/Dnsruby/Hosts.src/M000143.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000144.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000145.html +21 -0
- data/doc/classes/Dnsruby/Hosts.src/M000146.html +19 -0
- data/doc/classes/Dnsruby/Hosts.src/M000147.html +20 -0
- data/doc/classes/Dnsruby/Hosts.src/M000148.html +21 -0
- data/doc/classes/Dnsruby/IPv4.html +298 -0
- data/doc/classes/Dnsruby/IPv4.src/M000149.html +32 -0
- data/doc/classes/Dnsruby/IPv4.src/M000150.html +21 -0
- data/doc/classes/Dnsruby/IPv4.src/M000151.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000152.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000153.html +19 -0
- data/doc/classes/Dnsruby/IPv4.src/M000154.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000155.html +18 -0
- data/doc/classes/Dnsruby/IPv4.src/M000156.html +18 -0
- data/doc/classes/Dnsruby/IPv6.html +318 -0
- data/doc/classes/Dnsruby/IPv6.src/M000180.html +60 -0
- data/doc/classes/Dnsruby/IPv6.src/M000181.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000182.html +22 -0
- data/doc/classes/Dnsruby/IPv6.src/M000183.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000184.html +21 -0
- data/doc/classes/Dnsruby/IPv6.src/M000185.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000186.html +18 -0
- data/doc/classes/Dnsruby/IPv6.src/M000187.html +18 -0
- data/doc/classes/Dnsruby/Message.html +689 -0
- data/doc/classes/Dnsruby/Message.src/M000076.html +34 -0
- data/doc/classes/Dnsruby/Message.src/M000077.html +26 -0
- data/doc/classes/Dnsruby/Message.src/M000078.html +22 -0
- data/doc/classes/Dnsruby/Message.src/M000079.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000080.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000081.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000082.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000083.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000084.html +21 -0
- data/doc/classes/Dnsruby/Message.src/M000085.html +20 -0
- data/doc/classes/Dnsruby/Message.src/M000086.html +18 -0
- data/doc/classes/Dnsruby/Message.src/M000087.html +54 -0
- data/doc/classes/Dnsruby/Message.src/M000088.html +42 -0
- data/doc/classes/Dnsruby/Message.src/M000089.html +45 -0
- data/doc/classes/Dnsruby/MetaTypes.html +136 -0
- data/doc/classes/Dnsruby/Modes.html +171 -0
- data/doc/classes/Dnsruby/NXDomain.html +113 -0
- data/doc/classes/Dnsruby/Name/Label.html +300 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000067.html +21 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000068.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000069.html +22 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000070.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000071.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000072.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000073.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000074.html +18 -0
- data/doc/classes/Dnsruby/Name/Label.src/M000075.html +18 -0
- data/doc/classes/Dnsruby/Name.html +357 -0
- data/doc/classes/Dnsruby/Name.src/M000057.html +28 -0
- data/doc/classes/Dnsruby/Name.src/M000058.html +20 -0
- data/doc/classes/Dnsruby/Name.src/M000059.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000060.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000061.html +21 -0
- data/doc/classes/Dnsruby/Name.src/M000062.html +19 -0
- data/doc/classes/Dnsruby/Name.src/M000064.html +22 -0
- data/doc/classes/Dnsruby/Name.src/M000065.html +18 -0
- data/doc/classes/Dnsruby/Name.src/M000066.html +20 -0
- data/doc/classes/Dnsruby/NotImp.html +113 -0
- data/doc/classes/Dnsruby/OpCode.html +146 -0
- data/doc/classes/Dnsruby/OtherResolvError.html +113 -0
- data/doc/classes/Dnsruby/QTypes.html +146 -0
- data/doc/classes/Dnsruby/Question.html +256 -0
- data/doc/classes/Dnsruby/Question.src/M000166.html +47 -0
- data/doc/classes/Dnsruby/Question.src/M000167.html +18 -0
- data/doc/classes/Dnsruby/RCode.html +211 -0
- data/doc/classes/Dnsruby/RR/ANY.html +133 -0
- data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
- data/doc/classes/Dnsruby/RR/CERT.html +180 -0
- data/doc/classes/Dnsruby/RR/CNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
- data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
- data/doc/classes/Dnsruby/RR/DomainName.src/M000051.html +22 -0
- data/doc/classes/Dnsruby/RR/Generic.html +156 -0
- data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +25 -0
- data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
- data/doc/classes/Dnsruby/RR/IN/A.html +199 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +18 -0
- data/doc/classes/Dnsruby/RR/IN/AAAA.html +138 -0
- data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
- data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.html +243 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +29 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +26 -0
- data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +22 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
- data/doc/classes/Dnsruby/RR/IN/WKS.src/M000021.html +20 -0
- data/doc/classes/Dnsruby/RR/IN.html +155 -0
- data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
- data/doc/classes/Dnsruby/RR/LOC.html +395 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
- data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
- data/doc/classes/Dnsruby/RR/MB.html +150 -0
- data/doc/classes/Dnsruby/RR/MG.html +150 -0
- data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
- data/doc/classes/Dnsruby/RR/MR.html +150 -0
- data/doc/classes/Dnsruby/RR/MX.html +155 -0
- data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
- data/doc/classes/Dnsruby/RR/NS.html +150 -0
- data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +19 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +22 -0
- data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +31 -0
- data/doc/classes/Dnsruby/RR/PTR.html +132 -0
- data/doc/classes/Dnsruby/RR/RP.html +183 -0
- data/doc/classes/Dnsruby/RR/RP.src/M000050.html +19 -0
- data/doc/classes/Dnsruby/RR/RT.html +155 -0
- data/doc/classes/Dnsruby/RR/SOA.html +230 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +24 -0
- data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +27 -0
- data/doc/classes/Dnsruby/RR/SPF.html +138 -0
- data/doc/classes/Dnsruby/RR/TKEY.html +285 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +19 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +29 -0
- data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +30 -0
- data/doc/classes/Dnsruby/RR/TSIG.html +416 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +71 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +37 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +31 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +34 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +22 -0
- data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +29 -0
- data/doc/classes/Dnsruby/RR/TXT.html +233 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000034.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000035.html +18 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000036.html +20 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000037.html +27 -0
- data/doc/classes/Dnsruby/RR/TXT.src/M000038.html +25 -0
- data/doc/classes/Dnsruby/RR/X25.html +203 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000031.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000032.html +18 -0
- data/doc/classes/Dnsruby/RR/X25.src/M000033.html +22 -0
- data/doc/classes/Dnsruby/RR.html +620 -0
- data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000005.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000006.html +36 -0
- data/doc/classes/Dnsruby/RR.src/M000007.html +100 -0
- data/doc/classes/Dnsruby/RR.src/M000008.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000010.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000012.html +18 -0
- data/doc/classes/Dnsruby/RR.src/M000013.html +22 -0
- data/doc/classes/Dnsruby/RR.src/M000014.html +24 -0
- data/doc/classes/Dnsruby/RRSet.html +257 -0
- data/doc/classes/Dnsruby/RRSet.src/M000159.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000160.html +44 -0
- data/doc/classes/Dnsruby/RRSet.src/M000161.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000162.html +20 -0
- data/doc/classes/Dnsruby/RRSet.src/M000163.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000164.html +18 -0
- data/doc/classes/Dnsruby/RRSet.src/M000165.html +18 -0
- data/doc/classes/Dnsruby/Refused.html +113 -0
- data/doc/classes/Dnsruby/Resolv.html +400 -0
- data/doc/classes/Dnsruby/Resolv.src/M000109.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000110.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000111.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000112.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000113.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000114.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000115.html +18 -0
- data/doc/classes/Dnsruby/Resolv.src/M000116.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000117.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000118.html +29 -0
- data/doc/classes/Dnsruby/Resolv.src/M000119.html +19 -0
- data/doc/classes/Dnsruby/Resolv.src/M000120.html +20 -0
- data/doc/classes/Dnsruby/Resolv.src/M000121.html +25 -0
- data/doc/classes/Dnsruby/ResolvError.html +111 -0
- data/doc/classes/Dnsruby/ResolvTimeout.html +111 -0
- data/doc/classes/Dnsruby/Resolver.html +807 -0
- data/doc/classes/Dnsruby/Resolver.src/M000211.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000212.html +37 -0
- data/doc/classes/Dnsruby/Resolver.src/M000213.html +64 -0
- data/doc/classes/Dnsruby/Resolver.src/M000214.html +23 -0
- data/doc/classes/Dnsruby/Resolver.src/M000215.html +46 -0
- data/doc/classes/Dnsruby/Resolver.src/M000216.html +21 -0
- data/doc/classes/Dnsruby/Resolver.src/M000217.html +22 -0
- data/doc/classes/Dnsruby/Resolver.src/M000218.html +18 -0
- data/doc/classes/Dnsruby/Resolver.src/M000219.html +20 -0
- data/doc/classes/Dnsruby/Resolver.src/M000220.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000221.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000222.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000223.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000224.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000225.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000226.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000227.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000228.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000229.html +19 -0
- data/doc/classes/Dnsruby/Resolver.src/M000230.html +19 -0
- data/doc/classes/Dnsruby/ServFail.html +113 -0
- data/doc/classes/Dnsruby/SingleResolver.html +496 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +19 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +49 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +18 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +21 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +25 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +78 -0
- data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +21 -0
- data/doc/classes/Dnsruby/TheLog.html +196 -0
- data/doc/classes/Dnsruby/TheLog.src/M000188.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000189.html +20 -0
- data/doc/classes/Dnsruby/TheLog.src/M000190.html +20 -0
- data/doc/classes/Dnsruby/Types.html +426 -0
- data/doc/classes/Dnsruby/Update.html +368 -0
- data/doc/classes/Dnsruby/Update.src/M000191.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000192.html +37 -0
- data/doc/classes/Dnsruby/Update.src/M000193.html +32 -0
- data/doc/classes/Dnsruby/Update.src/M000194.html +41 -0
- data/doc/classes/Dnsruby/Update.src/M000195.html +34 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +183 -0
- data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +19 -0
- data/doc/classes/Dnsruby/ZoneTransfer.html +248 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000095.html +22 -0
- data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +35 -0
- data/doc/classes/Dnsruby.html +388 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNSSEC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
- data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
- data/doc/files/lib/Dnsruby/Resolver_rb.html +108 -0
- data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
- data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
- data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
- data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
- data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
- data/doc/files/lib/Dnsruby/message_rb.html +109 -0
- data/doc/files/lib/Dnsruby/name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
- data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +110 -0
- data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
- data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
- data/doc/files/lib/Dnsruby/resource/generic_rb.html +125 -0
- data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
- data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
- data/doc/files/lib/Dnsruby/update_rb.html +101 -0
- data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
- data/doc/files/lib/dnsruby_rb.html +118 -0
- data/doc/fr_class_index.html +102 -0
- data/doc/fr_file_index.html +68 -0
- data/doc/fr_method_index.html +256 -0
- data/doc/index.html +24 -0
- data/lib/Dnsruby/Config.rb +350 -0
- data/lib/Dnsruby/DNS.rb +253 -0
- data/lib/Dnsruby/DNSSEC.rb +29 -0
- data/lib/Dnsruby/Hosts.rb +119 -0
- data/lib/Dnsruby/Resolver.rb +618 -0
- data/lib/Dnsruby/SingleResolver.rb +312 -0
- data/lib/Dnsruby/TheLog.rb +61 -0
- data/lib/Dnsruby/code_mapper.rb +164 -0
- data/lib/Dnsruby/ipv4.rb +83 -0
- data/lib/Dnsruby/ipv6.rb +142 -0
- data/lib/Dnsruby/message.rb +819 -0
- data/lib/Dnsruby/name.rb +325 -0
- data/lib/Dnsruby/resource/A.rb +56 -0
- data/lib/Dnsruby/resource/AAAA.rb +54 -0
- data/lib/Dnsruby/resource/AFSDB.rb +68 -0
- data/lib/Dnsruby/resource/CERT.rb +89 -0
- data/lib/Dnsruby/resource/HINFO.rb +52 -0
- data/lib/Dnsruby/resource/IN.rb +69 -0
- data/lib/Dnsruby/resource/ISDN.rb +54 -0
- data/lib/Dnsruby/resource/LOC.rb +255 -0
- data/lib/Dnsruby/resource/MINFO.rb +66 -0
- data/lib/Dnsruby/resource/MX.rb +66 -0
- data/lib/Dnsruby/resource/NAPTR.rb +90 -0
- data/lib/Dnsruby/resource/NSAP.rb +172 -0
- data/lib/Dnsruby/resource/OPT.rb +153 -0
- data/lib/Dnsruby/resource/PX.rb +71 -0
- data/lib/Dnsruby/resource/RP.rb +67 -0
- data/lib/Dnsruby/resource/RT.rb +67 -0
- data/lib/Dnsruby/resource/SOA.rb +89 -0
- data/lib/Dnsruby/resource/SPF.rb +29 -0
- data/lib/Dnsruby/resource/SRV.rb +108 -0
- data/lib/Dnsruby/resource/TKEY.rb +160 -0
- data/lib/Dnsruby/resource/TSIG.rb +328 -0
- data/lib/Dnsruby/resource/TXT.rb +76 -0
- data/lib/Dnsruby/resource/X25.rb +53 -0
- data/lib/Dnsruby/resource/domain_name.rb +58 -0
- data/lib/Dnsruby/resource/generic.rb +142 -0
- data/lib/Dnsruby/resource/resource.rb +444 -0
- data/lib/Dnsruby/select_thread.rb +474 -0
- data/lib/Dnsruby/update.rb +263 -0
- data/lib/Dnsruby/zone_transfer.rb +296 -0
- data/lib/dnsruby.rb +468 -0
- data/test/custom.txt +4 -0
- data/test/resolv.conf +4 -0
- data/test/tc_axfr.rb +42 -0
- data/test/tc_dns.rb +231 -0
- data/test/tc_dnsruby.rb +42 -0
- data/test/tc_escapedchars.rb +510 -0
- data/test/tc_header.rb +104 -0
- data/test/tc_misc.rb +139 -0
- data/test/tc_name.rb +53 -0
- data/test/tc_packet.rb +158 -0
- data/test/tc_packet_unique_push.rb +102 -0
- data/test/tc_question.rb +52 -0
- data/test/tc_res_config.rb +92 -0
- data/test/tc_res_env.rb +62 -0
- data/test/tc_res_file.rb +42 -0
- data/test/tc_res_opt.rb +185 -0
- data/test/tc_resolver.rb +177 -0
- data/test/tc_rr-opt.rb +42 -0
- data/test/tc_rr-txt.rb +137 -0
- data/test/tc_rr-unknown.rb +99 -0
- data/test/tc_rr.rb +259 -0
- data/test/tc_single_resolver.rb +153 -0
- data/test/tc_soak.rb +310 -0
- data/test/tc_tcp.rb +35 -0
- data/test/tc_tkey.rb +106 -0
- data/test/tc_update.rb +215 -0
- data/test/ts_dnsruby.rb +17 -0
- data/test/ts_offline.rb +35 -0
- data/test/ts_online.rb +40 -0
- metadata +512 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
require 'Dnsruby/select_thread'
|
|
17
|
+
module Dnsruby
|
|
18
|
+
#== Dnsruby::SingleResolver
|
|
19
|
+
#
|
|
20
|
+
# The SingleResolver class targets a single resolver, and controls the sending of a single
|
|
21
|
+
# packet with a packet timeout. It performs no retries. Only two threads are used - the client
|
|
22
|
+
# thread and a select thread (which is reused across all queries).
|
|
23
|
+
#
|
|
24
|
+
#== Methods
|
|
25
|
+
#
|
|
26
|
+
#=== Synchronous
|
|
27
|
+
#These methods raise an exception or return a response message with rcode==NOERROR
|
|
28
|
+
#
|
|
29
|
+
#* Dnsruby::SingleResolver#send_message(msg [, use_tcp]))
|
|
30
|
+
#* Dnsruby::SingleResolver#query(name [, type [, klass]])
|
|
31
|
+
#
|
|
32
|
+
#=== Asynchronous
|
|
33
|
+
#These methods use a response queue to return the response and the error
|
|
34
|
+
#
|
|
35
|
+
#* Dnsruby::SingleResolver#send_async(msg, query_id, response_queue [, use_tcp])
|
|
36
|
+
#
|
|
37
|
+
class SingleResolver
|
|
38
|
+
attr_accessor :packet_timeout
|
|
39
|
+
|
|
40
|
+
# The port on the resolver to send queries to.
|
|
41
|
+
#
|
|
42
|
+
# Defaults to 53
|
|
43
|
+
attr_accessor :port
|
|
44
|
+
|
|
45
|
+
# Use TCP rather than UDP as the transport.
|
|
46
|
+
#
|
|
47
|
+
# Defaults to false
|
|
48
|
+
attr_accessor :use_tcp
|
|
49
|
+
|
|
50
|
+
attr_accessor :tsig_key
|
|
51
|
+
|
|
52
|
+
# Don't worry if the response is truncated - return it anyway.
|
|
53
|
+
#
|
|
54
|
+
# Defaults to false
|
|
55
|
+
attr_accessor :ignore_truncation
|
|
56
|
+
|
|
57
|
+
# The source address to send queries from
|
|
58
|
+
#
|
|
59
|
+
# Defaults to localhost
|
|
60
|
+
attr_accessor :src_address
|
|
61
|
+
# The source port to send queries from
|
|
62
|
+
#
|
|
63
|
+
# Defaults to 0 - random port
|
|
64
|
+
attr_accessor :src_port
|
|
65
|
+
|
|
66
|
+
# Should the TCP socket persist between queries?
|
|
67
|
+
#
|
|
68
|
+
# Defaults to false
|
|
69
|
+
attr_accessor :persistent_tcp
|
|
70
|
+
|
|
71
|
+
# Should the UDP socket persist between queries?
|
|
72
|
+
#
|
|
73
|
+
# Defaults to false
|
|
74
|
+
attr_accessor :persistent_udp
|
|
75
|
+
|
|
76
|
+
# should the Recursion Desired bit be set on queries?
|
|
77
|
+
#
|
|
78
|
+
# Defaults to true
|
|
79
|
+
attr_accessor :recurse
|
|
80
|
+
|
|
81
|
+
# The max UDP packet size
|
|
82
|
+
#
|
|
83
|
+
# Defaults to 512
|
|
84
|
+
attr_accessor :udp_size
|
|
85
|
+
|
|
86
|
+
# The address of the resolver to send queries to
|
|
87
|
+
attr_reader :server
|
|
88
|
+
|
|
89
|
+
def udp_size=(size)
|
|
90
|
+
@udp_size = size
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def server=(server)
|
|
94
|
+
TheLog.debug("SingleResolver setting server to #{server}")
|
|
95
|
+
@server=Config.resolve_server(server)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Can take a hash with the following optional keys :
|
|
99
|
+
#
|
|
100
|
+
# * :server
|
|
101
|
+
# * :port
|
|
102
|
+
# * :use_tcp
|
|
103
|
+
# * :ignore_truncation
|
|
104
|
+
# * :src_addr
|
|
105
|
+
# * :src_port
|
|
106
|
+
# * :udp_size
|
|
107
|
+
# * :persistent_tcp
|
|
108
|
+
# * :persistent_udp
|
|
109
|
+
# * :tsig_key
|
|
110
|
+
# * :packet_timeout
|
|
111
|
+
# * :recurse
|
|
112
|
+
def initialize(*args)
|
|
113
|
+
arg=args[0]
|
|
114
|
+
@packet_timeout = Resolver::DefaultPacketTimeout
|
|
115
|
+
@port = Resolver::DefaultPort
|
|
116
|
+
@udp_size = Resolver::DefaultUDPSize
|
|
117
|
+
@use_tcp = false
|
|
118
|
+
@tsig_key = nil
|
|
119
|
+
@ignore_truncation = false
|
|
120
|
+
@src_addr = '0.0.0.0'
|
|
121
|
+
@src_port = 0
|
|
122
|
+
@recurse = true
|
|
123
|
+
@persistent_udp = false
|
|
124
|
+
@persistent_tcp = false
|
|
125
|
+
|
|
126
|
+
if (arg==nil)
|
|
127
|
+
# Get default config
|
|
128
|
+
config = Config.new
|
|
129
|
+
@server = config.nameserver[0]
|
|
130
|
+
elsif (arg.kind_of?String)
|
|
131
|
+
@server=arg
|
|
132
|
+
elsif (arg.kind_of?Hash)
|
|
133
|
+
arg.keys.each do |attr|
|
|
134
|
+
begin
|
|
135
|
+
send(attr.to_s+"=", arg[attr])
|
|
136
|
+
rescue Exception
|
|
137
|
+
TheLog.error("Argument #{attr} not valid\n")
|
|
138
|
+
end
|
|
139
|
+
# end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
#Check server is IP
|
|
143
|
+
@server=Config.resolve_server(@server)
|
|
144
|
+
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def close
|
|
148
|
+
# @TODO@ What about closing?
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Synchronously send a query for the given name. The type will default to A,
|
|
152
|
+
# and the class to IN.
|
|
153
|
+
def query(name, type=Types.A, klass=Classes.IN)
|
|
154
|
+
msg = Message.new
|
|
155
|
+
msg.header.rd = 1
|
|
156
|
+
msg.add_question(name, type, klass)
|
|
157
|
+
return send_message(msg)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
# Synchronously send a Message to the server. If a valid response is returned,
|
|
162
|
+
# then that is returned to the client. Otherwise a ResolvError or ResolvTimeout
|
|
163
|
+
# will be thrown.
|
|
164
|
+
#
|
|
165
|
+
# Takes the message to send, and an optional use_tcp parameter which defaults to
|
|
166
|
+
# SingleResolver.use_tcp
|
|
167
|
+
def send_message(msg, use_tcp=@use_tcp)
|
|
168
|
+
q = Queue.new
|
|
169
|
+
send_async(msg, q, q, use_tcp)
|
|
170
|
+
id, msg, error = q.pop
|
|
171
|
+
if (error != nil)
|
|
172
|
+
raise error
|
|
173
|
+
else
|
|
174
|
+
return msg
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# Asynchronously send a Message to the server. A client_queue is supplied by the client,
|
|
180
|
+
# along with a client_query_id to identify the response. When the response is known, the tuple
|
|
181
|
+
# (query_id, response_message, response_exception) is put in the queue for the client to process.
|
|
182
|
+
#
|
|
183
|
+
# The query is sent synchronously in the caller's thread. The select thread is then used to
|
|
184
|
+
# listen for and process the response (up to pushing it to the client_queue). The client thread
|
|
185
|
+
# is then used to retrieve the response and deal with it.
|
|
186
|
+
#
|
|
187
|
+
# Takes :
|
|
188
|
+
#
|
|
189
|
+
# * msg - the message to send
|
|
190
|
+
# * client_query_id - an ID to identify the query to the client
|
|
191
|
+
# * client_queue - a Queue to push the response to, when it arrives
|
|
192
|
+
# * use_tcp - whether to use TCP (defaults to SingleResolver.use_tcp)
|
|
193
|
+
def send_async(msg, client_query_id, client_queue, use_tcp=@use_tcp)
|
|
194
|
+
st = SelectThread.instance
|
|
195
|
+
if (msg.kind_of?String)
|
|
196
|
+
msg = Message.new(msg)
|
|
197
|
+
end
|
|
198
|
+
query_packet = make_query_packet(msg)
|
|
199
|
+
if (udp_packet_size < query_packet.length)
|
|
200
|
+
use_tcp = true
|
|
201
|
+
end
|
|
202
|
+
# First send the query (synchronously)
|
|
203
|
+
# @TODO@ persisent sockets
|
|
204
|
+
endtime = Time.now + @packet_timeout
|
|
205
|
+
socket = nil
|
|
206
|
+
begin
|
|
207
|
+
#@TODO@ Different OSes have different interpretations of "random port" here.
|
|
208
|
+
#Apparently, Linux will just give you the same port as last time, unless it is still
|
|
209
|
+
#open, in which case you get n+1.
|
|
210
|
+
#We need to determine an actual (random) number here, then ask the OS for it, and
|
|
211
|
+
#continue until we get one.
|
|
212
|
+
if (use_tcp)
|
|
213
|
+
print "Setting src_port to #{@src_port}"
|
|
214
|
+
socket = TCPSocket.new(@server, @port, @src_addr, @src_port)
|
|
215
|
+
else
|
|
216
|
+
socket = UDPSocket.new()
|
|
217
|
+
socket.bind(@src_addr, @src_port)
|
|
218
|
+
socket.connect(@server, @port)
|
|
219
|
+
end
|
|
220
|
+
rescue Exception => e
|
|
221
|
+
if (socket!=nil)
|
|
222
|
+
socket.close
|
|
223
|
+
end
|
|
224
|
+
err=IOError.new("dnsruby can't connect to #{@server}:#{@port} from #{@src_addr}:#{@src_port}, use_tcp=#{use_tcp}, exception = #{e.class}, #{e}")
|
|
225
|
+
TheLog.error("#{err}")
|
|
226
|
+
st.push_exception_to_select(client_query_id, client_queue, err, nil)
|
|
227
|
+
return
|
|
228
|
+
end
|
|
229
|
+
if (socket==nil)
|
|
230
|
+
err=IOError.new("dnsruby can't connect to #{@server}:#{port} from #{@src_addr}:#{@src_port}, use_tcp=#{use_tcp}")
|
|
231
|
+
TheLog.error("#{err}")
|
|
232
|
+
st.push_exception_to_select(client_query_id, client_queue, err, nil)
|
|
233
|
+
return
|
|
234
|
+
end
|
|
235
|
+
TheLog.debug("Sending packet to #{@server}:#{@port} from #{@src_addr}:#{@src_port}, use_tcp=#{use_tcp}")
|
|
236
|
+
begin
|
|
237
|
+
if (use_tcp)
|
|
238
|
+
lenmsg = [query_packet.length].pack('n')
|
|
239
|
+
socket.send(lenmsg, 0)
|
|
240
|
+
end
|
|
241
|
+
socket.send(query_packet, 0)
|
|
242
|
+
rescue Exception => e
|
|
243
|
+
socket.close
|
|
244
|
+
err=IOError.new("Send failed to #{@server}:#{@port} from #{@src_addr}:#{@src_port}, use_tcp=#{use_tcp}, exception : #{e}")
|
|
245
|
+
TheLog.error("#{err}")
|
|
246
|
+
st.push_exception_to_select(client_query_id, client_queue, err, nil)
|
|
247
|
+
return
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Then listen for the response
|
|
251
|
+
query_settings = SelectThread::QuerySettings.new(query_packet, msg.header.id, @tsig_key, @ignore_truncation, client_queue, client_query_id, socket, @server, @port, endtime)
|
|
252
|
+
# The select thread will now wait for the response and send that or a timeout
|
|
253
|
+
# back to the client_queue
|
|
254
|
+
st.add_to_select(query_settings)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Prepare the packet for sending
|
|
258
|
+
def make_query_packet(packet) #:nodoc: all
|
|
259
|
+
if (packet.header.opcode == OpCode.QUERY || @recurse)
|
|
260
|
+
packet.header.rd=true
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
if (@dnssec)
|
|
264
|
+
# RFC 3225
|
|
265
|
+
TheLog.debug(";; Adding EDNS extention with UDP packetsize #{udp_packet_size} and DNS OK bit set\n")
|
|
266
|
+
|
|
267
|
+
optrr = Resource.create({
|
|
268
|
+
:type => 'OPT',
|
|
269
|
+
:name => '',
|
|
270
|
+
:rrclass => udp_packet_size, # Decimal UDPpayload
|
|
271
|
+
:ednsflags => 0x8000, # first bit set see RFC 3225
|
|
272
|
+
})
|
|
273
|
+
|
|
274
|
+
packet.add_additional(optrr)
|
|
275
|
+
|
|
276
|
+
elsif (udp_packet_size > Resolver::DefaultUDPSize)
|
|
277
|
+
TheLog.debug(";; Adding EDNS extention with UDP packetsize #{udp_packet_size}.\n")
|
|
278
|
+
# RFC 3225
|
|
279
|
+
optrr = Resource.create( {
|
|
280
|
+
:type => 'OPT',
|
|
281
|
+
:name => '',
|
|
282
|
+
:rrclass => udp_packet_size, # Decimal UDPpayload
|
|
283
|
+
:ttl => 0x0000 # RCODE 32bit Hex
|
|
284
|
+
})
|
|
285
|
+
|
|
286
|
+
packet.add_additional(optrr)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
if (@tsig_key)
|
|
290
|
+
@tsig_key.apply(packet)
|
|
291
|
+
end
|
|
292
|
+
# @TODO@ TSIG!!!
|
|
293
|
+
# if (@tsig_rr != nil && @tsig_rr.length > 0)
|
|
294
|
+
# # if (!grep { $_.type == 'TSIG' } packet.additional)
|
|
295
|
+
# if (packet.additional.select { |i| i.type == 'TSIG' }.length > 0)
|
|
296
|
+
# packet.push('additional', @tsig_rr)
|
|
297
|
+
# end
|
|
298
|
+
# end
|
|
299
|
+
|
|
300
|
+
# TheLog.debug("#{packet}")
|
|
301
|
+
return packet.encode
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Return the packet size to use for UDP
|
|
305
|
+
def udp_packet_size
|
|
306
|
+
# if @udp_size > DefaultUDPSize then we use EDNS and
|
|
307
|
+
# @udp_size should be taken as the maximum packet_data length
|
|
308
|
+
ret = (@udp_size > Resolver::DefaultUDPSize ? @udp_size : Resolver::DefaultUDPSize)
|
|
309
|
+
return ret
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
require 'logger'
|
|
17
|
+
require 'singleton'
|
|
18
|
+
require 'thread'
|
|
19
|
+
module Dnsruby
|
|
20
|
+
#This singleton class holds a reference to the Logger object used by the whole of the Dnsruby project.
|
|
21
|
+
#
|
|
22
|
+
#It's Logger (which defaults to STDOUT, level FATAL) can be configured, or a new Logger can be supplied.
|
|
23
|
+
#
|
|
24
|
+
# Dnsruby::TheLog.level=Logger::DEBUG
|
|
25
|
+
# Dnsruby::TheLog.debug("Debug message")
|
|
26
|
+
#
|
|
27
|
+
class TheLog
|
|
28
|
+
include Singleton
|
|
29
|
+
def initialize() #:nodoc: all
|
|
30
|
+
@@mutex=Mutex.new
|
|
31
|
+
@@logger = Logger.new(STDOUT)
|
|
32
|
+
@@logger.level = Logger::FATAL
|
|
33
|
+
end
|
|
34
|
+
# Set a new Logger for use by Dnsruby
|
|
35
|
+
def set_logger(logger)
|
|
36
|
+
@@mutex.synchronize{
|
|
37
|
+
@@logger = logger
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
# Change the Logger level.
|
|
41
|
+
def level=(level)
|
|
42
|
+
@@mutex.synchronize{
|
|
43
|
+
@@logger.level = level
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
def level
|
|
47
|
+
@@mutex.synchronize{
|
|
48
|
+
return @@logger.level
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def self.method_missing(symbol, *args) #:nodoc: all
|
|
53
|
+
@@mutex.synchronize{
|
|
54
|
+
now = Time.now
|
|
55
|
+
# p "#{now.hour}:#{now.min}:#{now.sec} - #{args}"
|
|
56
|
+
@@logger.send(symbol, *args)
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
log = TheLog.instance # initialise @@logger
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
# CodeMapper superclass looks after String to code mappings (e.g. OpCode, RCode, etc.)
|
|
18
|
+
#
|
|
19
|
+
# Subclasses simply define a mapping of codes to variable names, and CodeMapper provides utility methods.
|
|
20
|
+
#
|
|
21
|
+
# All strings will come out as upper case
|
|
22
|
+
#
|
|
23
|
+
# Example :
|
|
24
|
+
# Types::AAAA or Types.AAAA
|
|
25
|
+
# rcode.string or rcode.code
|
|
26
|
+
class CodeMapper
|
|
27
|
+
include Comparable
|
|
28
|
+
|
|
29
|
+
@@strings = {}
|
|
30
|
+
@@stringsdown = {}
|
|
31
|
+
@@values = {}
|
|
32
|
+
@@maxcode = {}
|
|
33
|
+
|
|
34
|
+
attr_accessor :string, :code
|
|
35
|
+
alias to_code code
|
|
36
|
+
alias to_string string
|
|
37
|
+
alias to_s string
|
|
38
|
+
|
|
39
|
+
def CodeMapper.maxcode
|
|
40
|
+
return @maxcode
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Creates the CodeMapper from the defined constants
|
|
44
|
+
def CodeMapper.update
|
|
45
|
+
|
|
46
|
+
@@strings[self] = {}
|
|
47
|
+
@@stringsdown[self] = {}
|
|
48
|
+
@@values[self] = {}
|
|
49
|
+
@@maxcode[self] = 0
|
|
50
|
+
|
|
51
|
+
constants = self.constants - CodeMapper.constants
|
|
52
|
+
constants.each do |i|
|
|
53
|
+
@@strings[self].store(i, const_get(i))
|
|
54
|
+
end
|
|
55
|
+
@@maxcode[self] = constants.length
|
|
56
|
+
@@values[self] = @@strings[self].invert
|
|
57
|
+
@@stringsdown[self] = Hash.new
|
|
58
|
+
@@strings[self].keys.each do |s|
|
|
59
|
+
@@stringsdown[self].store(s.downcase, @@strings[self][s])
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Add new a code to the CodeMapper
|
|
64
|
+
def CodeMapper.add_pair(string, code)
|
|
65
|
+
@@strings[self].store(string, code)
|
|
66
|
+
@@values[self]=@@strings[self].invert
|
|
67
|
+
@@stringsdown[self].store(string.downcase, code)
|
|
68
|
+
@@maxcode[self]+=1
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def unknown_string(arg) #:nodoc: all
|
|
72
|
+
raise ArgumentError.new("String #{arg} not a member of #{self.class}")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def unknown_code(arg) #:nodoc: all
|
|
76
|
+
raise ArgumentError.new("Code #{arg} not a member of #{self.class}")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def self.method_missing(methId) #:nodoc: all
|
|
80
|
+
str = methId.id2name
|
|
81
|
+
return self.new(str)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def initialize(arg) #:nodoc: all
|
|
85
|
+
if (arg.kind_of?String)
|
|
86
|
+
if (@@stringsdown[self.class][arg.downcase] != nil)
|
|
87
|
+
set_string(arg)
|
|
88
|
+
else unknown_string(arg)
|
|
89
|
+
end
|
|
90
|
+
elsif (arg.kind_of?Fixnum)
|
|
91
|
+
if (@@values[self.class][arg] != nil)
|
|
92
|
+
set_code(arg)
|
|
93
|
+
else unknown_code(arg)
|
|
94
|
+
end
|
|
95
|
+
elsif (arg.kind_of?self.class)
|
|
96
|
+
set_code(arg.code)
|
|
97
|
+
else
|
|
98
|
+
raise ArgumentError.new("Unknown argument #{arg} for #{self.class}")
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def set_code(arg)
|
|
103
|
+
@code = arg
|
|
104
|
+
@string = @@values[self.class][@code]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def set_string(arg)
|
|
108
|
+
@code = @@stringsdown[self.class][arg.downcase]
|
|
109
|
+
@string = @@strings[self.class].invert[@code]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def inspect
|
|
113
|
+
return @string
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def CodeMapper.to_string(arg)
|
|
117
|
+
if (arg.kind_of?String)
|
|
118
|
+
return arg
|
|
119
|
+
else
|
|
120
|
+
return @@values[self][arg]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def CodeMapper.to_code(arg)
|
|
125
|
+
if (arg.kind_of?Fixnum)
|
|
126
|
+
return arg
|
|
127
|
+
else
|
|
128
|
+
return @@stringsdown[self][arg.downcase]
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def <=>(other)
|
|
133
|
+
if (other.class == Fixnum)
|
|
134
|
+
self.code <=> other
|
|
135
|
+
else
|
|
136
|
+
self.code <=> other.code
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def ==(other)
|
|
141
|
+
if other.kind_of?CodeMapper
|
|
142
|
+
if other.string == @string && other.code == @code
|
|
143
|
+
return true
|
|
144
|
+
end
|
|
145
|
+
elsif other.kind_of?String
|
|
146
|
+
if other == @string
|
|
147
|
+
return true
|
|
148
|
+
end
|
|
149
|
+
elsif other.kind_of?Fixnum
|
|
150
|
+
if other == @code
|
|
151
|
+
return true
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
return false
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Return a regular expression which matches any codes or strings from the CodeMapper.
|
|
158
|
+
def self.regexp
|
|
159
|
+
# Longest ones go first, so the regex engine will match AAAA before A, etc.
|
|
160
|
+
return @@strings[self].keys.sort { |a, b| b.length <=> a.length }.join('|')
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
end
|
|
164
|
+
end
|
data/lib/Dnsruby/ipv4.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#--
|
|
2
|
+
#Copyright 2007 Nominet UK
|
|
3
|
+
#
|
|
4
|
+
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
#you may not use this file except in compliance with the License.
|
|
6
|
+
#You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
#Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
#distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
#See the License for the specific language governing permissions and
|
|
14
|
+
#limitations under the License.
|
|
15
|
+
#++
|
|
16
|
+
module Dnsruby
|
|
17
|
+
#== Dnsruby::IPv4 class
|
|
18
|
+
#=== class methods
|
|
19
|
+
#* Dnsruby::IPv4.create(address)
|
|
20
|
+
#
|
|
21
|
+
#=== methods
|
|
22
|
+
#* Dnsruby::IPv4#to_s
|
|
23
|
+
#* Dnsruby::IPv4#to_name
|
|
24
|
+
#
|
|
25
|
+
#=== constants
|
|
26
|
+
#* Dnsruby::IPv4::Regex
|
|
27
|
+
# regular expression for IPv4 address.
|
|
28
|
+
#
|
|
29
|
+
class IPv4
|
|
30
|
+
Regex = /\A(\d+)\.(\d+)\.(\d+)\.(\d+)\z/
|
|
31
|
+
|
|
32
|
+
def self.create(arg)
|
|
33
|
+
case arg
|
|
34
|
+
when IPv4
|
|
35
|
+
return arg
|
|
36
|
+
when Regex
|
|
37
|
+
if (0..255) === (a = $1.to_i) &&
|
|
38
|
+
(0..255) === (b = $2.to_i) &&
|
|
39
|
+
(0..255) === (c = $3.to_i) &&
|
|
40
|
+
(0..255) === (d = $4.to_i)
|
|
41
|
+
return self.new([a, b, c, d].pack("CCCC"))
|
|
42
|
+
else
|
|
43
|
+
raise ArgumentError.new("IPv4 address with invalid value: " + arg)
|
|
44
|
+
end
|
|
45
|
+
else
|
|
46
|
+
raise ArgumentError.new("cannot interpret as IPv4 address: #{arg.inspect}")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def initialize(address)
|
|
51
|
+
unless address.kind_of?(String) && address.length == 4
|
|
52
|
+
raise ArgumentError.new('IPv4 address must be 4 bytes')
|
|
53
|
+
end
|
|
54
|
+
@address = address
|
|
55
|
+
end
|
|
56
|
+
attr_reader :address
|
|
57
|
+
|
|
58
|
+
def to_s
|
|
59
|
+
return sprintf("%d.%d.%d.%d", *@address.unpack("CCCC"))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def inspect
|
|
63
|
+
return "#<#{self.class} #{self.to_s}>"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def to_name
|
|
67
|
+
return Name.create(
|
|
68
|
+
'%d.%d.%d.%d.in-addr.arpa.' % @address.unpack('CCCC').reverse)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ==(other)
|
|
72
|
+
return @address == other.address
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def eql?(other)
|
|
76
|
+
return self == other
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def hash
|
|
80
|
+
return @address.hash
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|