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.
Files changed (419) hide show
  1. data/README +34 -0
  2. data/doc/classes/Dnsruby/Classes.html +197 -0
  3. data/doc/classes/Dnsruby/Classes.src/M000157.html +23 -0
  4. data/doc/classes/Dnsruby/Classes.src/M000158.html +19 -0
  5. data/doc/classes/Dnsruby/CodeMapper.html +370 -0
  6. data/doc/classes/Dnsruby/CodeMapper.src/M000130.html +18 -0
  7. data/doc/classes/Dnsruby/CodeMapper.src/M000131.html +33 -0
  8. data/doc/classes/Dnsruby/CodeMapper.src/M000132.html +21 -0
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000133.html +19 -0
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000134.html +19 -0
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000135.html +18 -0
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000136.html +22 -0
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000137.html +22 -0
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000138.html +22 -0
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000139.html +31 -0
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000140.html +19 -0
  17. data/doc/classes/Dnsruby/Config.html +410 -0
  18. data/doc/classes/Dnsruby/Config.src/M000098.html +18 -0
  19. data/doc/classes/Dnsruby/Config.src/M000099.html +19 -0
  20. data/doc/classes/Dnsruby/Config.src/M000100.html +19 -0
  21. data/doc/classes/Dnsruby/Config.src/M000101.html +21 -0
  22. data/doc/classes/Dnsruby/Config.src/M000102.html +21 -0
  23. data/doc/classes/Dnsruby/Config.src/M000103.html +38 -0
  24. data/doc/classes/Dnsruby/Config.src/M000104.html +26 -0
  25. data/doc/classes/Dnsruby/Config.src/M000105.html +22 -0
  26. data/doc/classes/Dnsruby/Config.src/M000106.html +23 -0
  27. data/doc/classes/Dnsruby/Config.src/M000107.html +22 -0
  28. data/doc/classes/Dnsruby/Config.src/M000108.html +18 -0
  29. data/doc/classes/Dnsruby/DNS/DecodeError.html +111 -0
  30. data/doc/classes/Dnsruby/DNS/EncodeError.html +111 -0
  31. data/doc/classes/Dnsruby/DNS.html +469 -0
  32. data/doc/classes/Dnsruby/DNS.src/M000196.html +24 -0
  33. data/doc/classes/Dnsruby/DNS.src/M000197.html +18 -0
  34. data/doc/classes/Dnsruby/DNS.src/M000198.html +18 -0
  35. data/doc/classes/Dnsruby/DNS.src/M000199.html +20 -0
  36. data/doc/classes/Dnsruby/DNS.src/M000200.html +19 -0
  37. data/doc/classes/Dnsruby/DNS.src/M000201.html +20 -0
  38. data/doc/classes/Dnsruby/DNS.src/M000202.html +18 -0
  39. data/doc/classes/Dnsruby/DNS.src/M000203.html +19 -0
  40. data/doc/classes/Dnsruby/DNS.src/M000204.html +20 -0
  41. data/doc/classes/Dnsruby/DNS.src/M000205.html +28 -0
  42. data/doc/classes/Dnsruby/DNS.src/M000206.html +19 -0
  43. data/doc/classes/Dnsruby/DNS.src/M000207.html +20 -0
  44. data/doc/classes/Dnsruby/DNS.src/M000208.html +41 -0
  45. data/doc/classes/Dnsruby/DNS.src/M000209.html +32 -0
  46. data/doc/classes/Dnsruby/DNS.src/M000210.html +50 -0
  47. data/doc/classes/Dnsruby/DNSSEC/Algorithms.html +154 -0
  48. data/doc/classes/Dnsruby/DNSSEC.html +111 -0
  49. data/doc/classes/Dnsruby/DecodeError.html +111 -0
  50. data/doc/classes/Dnsruby/EncodeError.html +111 -0
  51. data/doc/classes/Dnsruby/FormErr.html +113 -0
  52. data/doc/classes/Dnsruby/Header.html +516 -0
  53. data/doc/classes/Dnsruby/Header.src/M000168.html +35 -0
  54. data/doc/classes/Dnsruby/Header.src/M000169.html +18 -0
  55. data/doc/classes/Dnsruby/Header.src/M000170.html +18 -0
  56. data/doc/classes/Dnsruby/Header.src/M000171.html +21 -0
  57. data/doc/classes/Dnsruby/Header.src/M000172.html +20 -0
  58. data/doc/classes/Dnsruby/Header.src/M000173.html +32 -0
  59. data/doc/classes/Dnsruby/Header.src/M000174.html +26 -0
  60. data/doc/classes/Dnsruby/Header.src/M000175.html +47 -0
  61. data/doc/classes/Dnsruby/Header.src/M000176.html +28 -0
  62. data/doc/classes/Dnsruby/Header.src/M000177.html +18 -0
  63. data/doc/classes/Dnsruby/Header.src/M000178.html +18 -0
  64. data/doc/classes/Dnsruby/Header.src/M000179.html +30 -0
  65. data/doc/classes/Dnsruby/Hosts.html +305 -0
  66. data/doc/classes/Dnsruby/Hosts.src/M000141.html +20 -0
  67. data/doc/classes/Dnsruby/Hosts.src/M000142.html +49 -0
  68. data/doc/classes/Dnsruby/Hosts.src/M000143.html +19 -0
  69. data/doc/classes/Dnsruby/Hosts.src/M000144.html +20 -0
  70. data/doc/classes/Dnsruby/Hosts.src/M000145.html +21 -0
  71. data/doc/classes/Dnsruby/Hosts.src/M000146.html +19 -0
  72. data/doc/classes/Dnsruby/Hosts.src/M000147.html +20 -0
  73. data/doc/classes/Dnsruby/Hosts.src/M000148.html +21 -0
  74. data/doc/classes/Dnsruby/IPv4.html +298 -0
  75. data/doc/classes/Dnsruby/IPv4.src/M000149.html +32 -0
  76. data/doc/classes/Dnsruby/IPv4.src/M000150.html +21 -0
  77. data/doc/classes/Dnsruby/IPv4.src/M000151.html +18 -0
  78. data/doc/classes/Dnsruby/IPv4.src/M000152.html +18 -0
  79. data/doc/classes/Dnsruby/IPv4.src/M000153.html +19 -0
  80. data/doc/classes/Dnsruby/IPv4.src/M000154.html +18 -0
  81. data/doc/classes/Dnsruby/IPv4.src/M000155.html +18 -0
  82. data/doc/classes/Dnsruby/IPv4.src/M000156.html +18 -0
  83. data/doc/classes/Dnsruby/IPv6.html +318 -0
  84. data/doc/classes/Dnsruby/IPv6.src/M000180.html +60 -0
  85. data/doc/classes/Dnsruby/IPv6.src/M000181.html +21 -0
  86. data/doc/classes/Dnsruby/IPv6.src/M000182.html +22 -0
  87. data/doc/classes/Dnsruby/IPv6.src/M000183.html +18 -0
  88. data/doc/classes/Dnsruby/IPv6.src/M000184.html +21 -0
  89. data/doc/classes/Dnsruby/IPv6.src/M000185.html +18 -0
  90. data/doc/classes/Dnsruby/IPv6.src/M000186.html +18 -0
  91. data/doc/classes/Dnsruby/IPv6.src/M000187.html +18 -0
  92. data/doc/classes/Dnsruby/Message.html +689 -0
  93. data/doc/classes/Dnsruby/Message.src/M000076.html +34 -0
  94. data/doc/classes/Dnsruby/Message.src/M000077.html +26 -0
  95. data/doc/classes/Dnsruby/Message.src/M000078.html +22 -0
  96. data/doc/classes/Dnsruby/Message.src/M000079.html +20 -0
  97. data/doc/classes/Dnsruby/Message.src/M000080.html +20 -0
  98. data/doc/classes/Dnsruby/Message.src/M000081.html +20 -0
  99. data/doc/classes/Dnsruby/Message.src/M000082.html +20 -0
  100. data/doc/classes/Dnsruby/Message.src/M000083.html +20 -0
  101. data/doc/classes/Dnsruby/Message.src/M000084.html +21 -0
  102. data/doc/classes/Dnsruby/Message.src/M000085.html +20 -0
  103. data/doc/classes/Dnsruby/Message.src/M000086.html +18 -0
  104. data/doc/classes/Dnsruby/Message.src/M000087.html +54 -0
  105. data/doc/classes/Dnsruby/Message.src/M000088.html +42 -0
  106. data/doc/classes/Dnsruby/Message.src/M000089.html +45 -0
  107. data/doc/classes/Dnsruby/MetaTypes.html +136 -0
  108. data/doc/classes/Dnsruby/Modes.html +171 -0
  109. data/doc/classes/Dnsruby/NXDomain.html +113 -0
  110. data/doc/classes/Dnsruby/Name/Label.html +300 -0
  111. data/doc/classes/Dnsruby/Name/Label.src/M000067.html +21 -0
  112. data/doc/classes/Dnsruby/Name/Label.src/M000068.html +18 -0
  113. data/doc/classes/Dnsruby/Name/Label.src/M000069.html +22 -0
  114. data/doc/classes/Dnsruby/Name/Label.src/M000070.html +18 -0
  115. data/doc/classes/Dnsruby/Name/Label.src/M000071.html +18 -0
  116. data/doc/classes/Dnsruby/Name/Label.src/M000072.html +18 -0
  117. data/doc/classes/Dnsruby/Name/Label.src/M000073.html +18 -0
  118. data/doc/classes/Dnsruby/Name/Label.src/M000074.html +18 -0
  119. data/doc/classes/Dnsruby/Name/Label.src/M000075.html +18 -0
  120. data/doc/classes/Dnsruby/Name.html +357 -0
  121. data/doc/classes/Dnsruby/Name.src/M000057.html +28 -0
  122. data/doc/classes/Dnsruby/Name.src/M000058.html +20 -0
  123. data/doc/classes/Dnsruby/Name.src/M000059.html +18 -0
  124. data/doc/classes/Dnsruby/Name.src/M000060.html +18 -0
  125. data/doc/classes/Dnsruby/Name.src/M000061.html +21 -0
  126. data/doc/classes/Dnsruby/Name.src/M000062.html +19 -0
  127. data/doc/classes/Dnsruby/Name.src/M000064.html +22 -0
  128. data/doc/classes/Dnsruby/Name.src/M000065.html +18 -0
  129. data/doc/classes/Dnsruby/Name.src/M000066.html +20 -0
  130. data/doc/classes/Dnsruby/NotImp.html +113 -0
  131. data/doc/classes/Dnsruby/OpCode.html +146 -0
  132. data/doc/classes/Dnsruby/OtherResolvError.html +113 -0
  133. data/doc/classes/Dnsruby/QTypes.html +146 -0
  134. data/doc/classes/Dnsruby/Question.html +256 -0
  135. data/doc/classes/Dnsruby/Question.src/M000166.html +47 -0
  136. data/doc/classes/Dnsruby/Question.src/M000167.html +18 -0
  137. data/doc/classes/Dnsruby/RCode.html +211 -0
  138. data/doc/classes/Dnsruby/RR/ANY.html +133 -0
  139. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
  140. data/doc/classes/Dnsruby/RR/CERT.html +180 -0
  141. data/doc/classes/Dnsruby/RR/CNAME.html +150 -0
  142. data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
  143. data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
  144. data/doc/classes/Dnsruby/RR/DomainName.src/M000051.html +22 -0
  145. data/doc/classes/Dnsruby/RR/Generic.html +156 -0
  146. data/doc/classes/Dnsruby/RR/Generic.src/M000041.html +25 -0
  147. data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
  148. data/doc/classes/Dnsruby/RR/IN/A.html +199 -0
  149. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
  150. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
  151. data/doc/classes/Dnsruby/RR/IN/A.src/M000020.html +18 -0
  152. data/doc/classes/Dnsruby/RR/IN/AAAA.html +138 -0
  153. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
  154. data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
  155. data/doc/classes/Dnsruby/RR/IN/SRV.html +243 -0
  156. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +29 -0
  157. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +26 -0
  158. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000017.html +22 -0
  159. data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
  160. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000021.html +20 -0
  161. data/doc/classes/Dnsruby/RR/IN.html +155 -0
  162. data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
  163. data/doc/classes/Dnsruby/RR/LOC.html +395 -0
  164. data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
  165. data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
  166. data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
  167. data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
  168. data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
  169. data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
  170. data/doc/classes/Dnsruby/RR/MB.html +150 -0
  171. data/doc/classes/Dnsruby/RR/MG.html +150 -0
  172. data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
  173. data/doc/classes/Dnsruby/RR/MR.html +150 -0
  174. data/doc/classes/Dnsruby/RR/MX.html +155 -0
  175. data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
  176. data/doc/classes/Dnsruby/RR/NS.html +150 -0
  177. data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
  178. data/doc/classes/Dnsruby/RR/NSAP.src/M000053.html +19 -0
  179. data/doc/classes/Dnsruby/RR/NSAP.src/M000054.html +19 -0
  180. data/doc/classes/Dnsruby/RR/NSAP.src/M000055.html +22 -0
  181. data/doc/classes/Dnsruby/RR/NSAP.src/M000056.html +31 -0
  182. data/doc/classes/Dnsruby/RR/PTR.html +132 -0
  183. data/doc/classes/Dnsruby/RR/RP.html +183 -0
  184. data/doc/classes/Dnsruby/RR/RP.src/M000050.html +19 -0
  185. data/doc/classes/Dnsruby/RR/RT.html +155 -0
  186. data/doc/classes/Dnsruby/RR/SOA.html +230 -0
  187. data/doc/classes/Dnsruby/RR/SOA.src/M000039.html +24 -0
  188. data/doc/classes/Dnsruby/RR/SOA.src/M000040.html +27 -0
  189. data/doc/classes/Dnsruby/RR/SPF.html +138 -0
  190. data/doc/classes/Dnsruby/RR/TKEY.html +285 -0
  191. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +19 -0
  192. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +29 -0
  193. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +30 -0
  194. data/doc/classes/Dnsruby/RR/TSIG.html +416 -0
  195. data/doc/classes/Dnsruby/RR/TSIG.src/M000042.html +22 -0
  196. data/doc/classes/Dnsruby/RR/TSIG.src/M000043.html +71 -0
  197. data/doc/classes/Dnsruby/RR/TSIG.src/M000044.html +34 -0
  198. data/doc/classes/Dnsruby/RR/TSIG.src/M000045.html +37 -0
  199. data/doc/classes/Dnsruby/RR/TSIG.src/M000046.html +31 -0
  200. data/doc/classes/Dnsruby/RR/TSIG.src/M000047.html +34 -0
  201. data/doc/classes/Dnsruby/RR/TSIG.src/M000048.html +22 -0
  202. data/doc/classes/Dnsruby/RR/TSIG.src/M000049.html +29 -0
  203. data/doc/classes/Dnsruby/RR/TXT.html +233 -0
  204. data/doc/classes/Dnsruby/RR/TXT.src/M000034.html +18 -0
  205. data/doc/classes/Dnsruby/RR/TXT.src/M000035.html +18 -0
  206. data/doc/classes/Dnsruby/RR/TXT.src/M000036.html +20 -0
  207. data/doc/classes/Dnsruby/RR/TXT.src/M000037.html +27 -0
  208. data/doc/classes/Dnsruby/RR/TXT.src/M000038.html +25 -0
  209. data/doc/classes/Dnsruby/RR/X25.html +203 -0
  210. data/doc/classes/Dnsruby/RR/X25.src/M000031.html +18 -0
  211. data/doc/classes/Dnsruby/RR/X25.src/M000032.html +18 -0
  212. data/doc/classes/Dnsruby/RR/X25.src/M000033.html +22 -0
  213. data/doc/classes/Dnsruby/RR.html +620 -0
  214. data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
  215. data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
  216. data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
  217. data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
  218. data/doc/classes/Dnsruby/RR.src/M000005.html +18 -0
  219. data/doc/classes/Dnsruby/RR.src/M000006.html +36 -0
  220. data/doc/classes/Dnsruby/RR.src/M000007.html +100 -0
  221. data/doc/classes/Dnsruby/RR.src/M000008.html +18 -0
  222. data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
  223. data/doc/classes/Dnsruby/RR.src/M000010.html +22 -0
  224. data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
  225. data/doc/classes/Dnsruby/RR.src/M000012.html +18 -0
  226. data/doc/classes/Dnsruby/RR.src/M000013.html +22 -0
  227. data/doc/classes/Dnsruby/RR.src/M000014.html +24 -0
  228. data/doc/classes/Dnsruby/RRSet.html +257 -0
  229. data/doc/classes/Dnsruby/RRSet.src/M000159.html +18 -0
  230. data/doc/classes/Dnsruby/RRSet.src/M000160.html +44 -0
  231. data/doc/classes/Dnsruby/RRSet.src/M000161.html +18 -0
  232. data/doc/classes/Dnsruby/RRSet.src/M000162.html +20 -0
  233. data/doc/classes/Dnsruby/RRSet.src/M000163.html +18 -0
  234. data/doc/classes/Dnsruby/RRSet.src/M000164.html +18 -0
  235. data/doc/classes/Dnsruby/RRSet.src/M000165.html +18 -0
  236. data/doc/classes/Dnsruby/Refused.html +113 -0
  237. data/doc/classes/Dnsruby/Resolv.html +400 -0
  238. data/doc/classes/Dnsruby/Resolv.src/M000109.html +18 -0
  239. data/doc/classes/Dnsruby/Resolv.src/M000110.html +18 -0
  240. data/doc/classes/Dnsruby/Resolv.src/M000111.html +18 -0
  241. data/doc/classes/Dnsruby/Resolv.src/M000112.html +18 -0
  242. data/doc/classes/Dnsruby/Resolv.src/M000113.html +18 -0
  243. data/doc/classes/Dnsruby/Resolv.src/M000114.html +18 -0
  244. data/doc/classes/Dnsruby/Resolv.src/M000115.html +18 -0
  245. data/doc/classes/Dnsruby/Resolv.src/M000116.html +19 -0
  246. data/doc/classes/Dnsruby/Resolv.src/M000117.html +20 -0
  247. data/doc/classes/Dnsruby/Resolv.src/M000118.html +29 -0
  248. data/doc/classes/Dnsruby/Resolv.src/M000119.html +19 -0
  249. data/doc/classes/Dnsruby/Resolv.src/M000120.html +20 -0
  250. data/doc/classes/Dnsruby/Resolv.src/M000121.html +25 -0
  251. data/doc/classes/Dnsruby/ResolvError.html +111 -0
  252. data/doc/classes/Dnsruby/ResolvTimeout.html +111 -0
  253. data/doc/classes/Dnsruby/Resolver.html +807 -0
  254. data/doc/classes/Dnsruby/Resolver.src/M000211.html +21 -0
  255. data/doc/classes/Dnsruby/Resolver.src/M000212.html +37 -0
  256. data/doc/classes/Dnsruby/Resolver.src/M000213.html +64 -0
  257. data/doc/classes/Dnsruby/Resolver.src/M000214.html +23 -0
  258. data/doc/classes/Dnsruby/Resolver.src/M000215.html +46 -0
  259. data/doc/classes/Dnsruby/Resolver.src/M000216.html +21 -0
  260. data/doc/classes/Dnsruby/Resolver.src/M000217.html +22 -0
  261. data/doc/classes/Dnsruby/Resolver.src/M000218.html +18 -0
  262. data/doc/classes/Dnsruby/Resolver.src/M000219.html +20 -0
  263. data/doc/classes/Dnsruby/Resolver.src/M000220.html +19 -0
  264. data/doc/classes/Dnsruby/Resolver.src/M000221.html +19 -0
  265. data/doc/classes/Dnsruby/Resolver.src/M000222.html +19 -0
  266. data/doc/classes/Dnsruby/Resolver.src/M000223.html +19 -0
  267. data/doc/classes/Dnsruby/Resolver.src/M000224.html +19 -0
  268. data/doc/classes/Dnsruby/Resolver.src/M000225.html +19 -0
  269. data/doc/classes/Dnsruby/Resolver.src/M000226.html +19 -0
  270. data/doc/classes/Dnsruby/Resolver.src/M000227.html +19 -0
  271. data/doc/classes/Dnsruby/Resolver.src/M000228.html +19 -0
  272. data/doc/classes/Dnsruby/Resolver.src/M000229.html +19 -0
  273. data/doc/classes/Dnsruby/Resolver.src/M000230.html +19 -0
  274. data/doc/classes/Dnsruby/ServFail.html +113 -0
  275. data/doc/classes/Dnsruby/SingleResolver.html +496 -0
  276. data/doc/classes/Dnsruby/SingleResolver.src/M000122.html +18 -0
  277. data/doc/classes/Dnsruby/SingleResolver.src/M000123.html +19 -0
  278. data/doc/classes/Dnsruby/SingleResolver.src/M000124.html +49 -0
  279. data/doc/classes/Dnsruby/SingleResolver.src/M000125.html +18 -0
  280. data/doc/classes/Dnsruby/SingleResolver.src/M000126.html +21 -0
  281. data/doc/classes/Dnsruby/SingleResolver.src/M000127.html +25 -0
  282. data/doc/classes/Dnsruby/SingleResolver.src/M000128.html +78 -0
  283. data/doc/classes/Dnsruby/SingleResolver.src/M000129.html +21 -0
  284. data/doc/classes/Dnsruby/TheLog.html +196 -0
  285. data/doc/classes/Dnsruby/TheLog.src/M000188.html +20 -0
  286. data/doc/classes/Dnsruby/TheLog.src/M000189.html +20 -0
  287. data/doc/classes/Dnsruby/TheLog.src/M000190.html +20 -0
  288. data/doc/classes/Dnsruby/Types.html +426 -0
  289. data/doc/classes/Dnsruby/Update.html +368 -0
  290. data/doc/classes/Dnsruby/Update.src/M000191.html +32 -0
  291. data/doc/classes/Dnsruby/Update.src/M000192.html +37 -0
  292. data/doc/classes/Dnsruby/Update.src/M000193.html +32 -0
  293. data/doc/classes/Dnsruby/Update.src/M000194.html +41 -0
  294. data/doc/classes/Dnsruby/Update.src/M000195.html +34 -0
  295. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +183 -0
  296. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000097.html +19 -0
  297. data/doc/classes/Dnsruby/ZoneTransfer.html +248 -0
  298. data/doc/classes/Dnsruby/ZoneTransfer.src/M000095.html +22 -0
  299. data/doc/classes/Dnsruby/ZoneTransfer.src/M000096.html +35 -0
  300. data/doc/classes/Dnsruby.html +388 -0
  301. data/doc/created.rid +1 -0
  302. data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
  303. data/doc/files/lib/Dnsruby/DNSSEC_rb.html +101 -0
  304. data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
  305. data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
  306. data/doc/files/lib/Dnsruby/Resolver_rb.html +108 -0
  307. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
  308. data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
  309. data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
  310. data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
  311. data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
  312. data/doc/files/lib/Dnsruby/message_rb.html +109 -0
  313. data/doc/files/lib/Dnsruby/name_rb.html +101 -0
  314. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
  315. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
  316. data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
  317. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
  318. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
  319. data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
  320. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
  321. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
  322. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
  323. data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
  324. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
  325. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
  326. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
  327. data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
  328. data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
  329. data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
  330. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
  331. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
  332. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
  333. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
  334. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +110 -0
  335. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
  336. data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
  337. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
  338. data/doc/files/lib/Dnsruby/resource/generic_rb.html +125 -0
  339. data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
  340. data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
  341. data/doc/files/lib/Dnsruby/update_rb.html +101 -0
  342. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
  343. data/doc/files/lib/dnsruby_rb.html +118 -0
  344. data/doc/fr_class_index.html +102 -0
  345. data/doc/fr_file_index.html +68 -0
  346. data/doc/fr_method_index.html +256 -0
  347. data/doc/index.html +24 -0
  348. data/lib/Dnsruby/Config.rb +350 -0
  349. data/lib/Dnsruby/DNS.rb +253 -0
  350. data/lib/Dnsruby/DNSSEC.rb +29 -0
  351. data/lib/Dnsruby/Hosts.rb +119 -0
  352. data/lib/Dnsruby/Resolver.rb +618 -0
  353. data/lib/Dnsruby/SingleResolver.rb +312 -0
  354. data/lib/Dnsruby/TheLog.rb +61 -0
  355. data/lib/Dnsruby/code_mapper.rb +164 -0
  356. data/lib/Dnsruby/ipv4.rb +83 -0
  357. data/lib/Dnsruby/ipv6.rb +142 -0
  358. data/lib/Dnsruby/message.rb +819 -0
  359. data/lib/Dnsruby/name.rb +325 -0
  360. data/lib/Dnsruby/resource/A.rb +56 -0
  361. data/lib/Dnsruby/resource/AAAA.rb +54 -0
  362. data/lib/Dnsruby/resource/AFSDB.rb +68 -0
  363. data/lib/Dnsruby/resource/CERT.rb +89 -0
  364. data/lib/Dnsruby/resource/HINFO.rb +52 -0
  365. data/lib/Dnsruby/resource/IN.rb +69 -0
  366. data/lib/Dnsruby/resource/ISDN.rb +54 -0
  367. data/lib/Dnsruby/resource/LOC.rb +255 -0
  368. data/lib/Dnsruby/resource/MINFO.rb +66 -0
  369. data/lib/Dnsruby/resource/MX.rb +66 -0
  370. data/lib/Dnsruby/resource/NAPTR.rb +90 -0
  371. data/lib/Dnsruby/resource/NSAP.rb +172 -0
  372. data/lib/Dnsruby/resource/OPT.rb +153 -0
  373. data/lib/Dnsruby/resource/PX.rb +71 -0
  374. data/lib/Dnsruby/resource/RP.rb +67 -0
  375. data/lib/Dnsruby/resource/RT.rb +67 -0
  376. data/lib/Dnsruby/resource/SOA.rb +89 -0
  377. data/lib/Dnsruby/resource/SPF.rb +29 -0
  378. data/lib/Dnsruby/resource/SRV.rb +108 -0
  379. data/lib/Dnsruby/resource/TKEY.rb +160 -0
  380. data/lib/Dnsruby/resource/TSIG.rb +328 -0
  381. data/lib/Dnsruby/resource/TXT.rb +76 -0
  382. data/lib/Dnsruby/resource/X25.rb +53 -0
  383. data/lib/Dnsruby/resource/domain_name.rb +58 -0
  384. data/lib/Dnsruby/resource/generic.rb +142 -0
  385. data/lib/Dnsruby/resource/resource.rb +444 -0
  386. data/lib/Dnsruby/select_thread.rb +474 -0
  387. data/lib/Dnsruby/update.rb +263 -0
  388. data/lib/Dnsruby/zone_transfer.rb +296 -0
  389. data/lib/dnsruby.rb +468 -0
  390. data/test/custom.txt +4 -0
  391. data/test/resolv.conf +4 -0
  392. data/test/tc_axfr.rb +42 -0
  393. data/test/tc_dns.rb +231 -0
  394. data/test/tc_dnsruby.rb +42 -0
  395. data/test/tc_escapedchars.rb +510 -0
  396. data/test/tc_header.rb +104 -0
  397. data/test/tc_misc.rb +139 -0
  398. data/test/tc_name.rb +53 -0
  399. data/test/tc_packet.rb +158 -0
  400. data/test/tc_packet_unique_push.rb +102 -0
  401. data/test/tc_question.rb +52 -0
  402. data/test/tc_res_config.rb +92 -0
  403. data/test/tc_res_env.rb +62 -0
  404. data/test/tc_res_file.rb +42 -0
  405. data/test/tc_res_opt.rb +185 -0
  406. data/test/tc_resolver.rb +177 -0
  407. data/test/tc_rr-opt.rb +42 -0
  408. data/test/tc_rr-txt.rb +137 -0
  409. data/test/tc_rr-unknown.rb +99 -0
  410. data/test/tc_rr.rb +259 -0
  411. data/test/tc_single_resolver.rb +153 -0
  412. data/test/tc_soak.rb +310 -0
  413. data/test/tc_tcp.rb +35 -0
  414. data/test/tc_tkey.rb +106 -0
  415. data/test/tc_update.rb +215 -0
  416. data/test/ts_dnsruby.rb +17 -0
  417. data/test/ts_offline.rb +35 -0
  418. data/test/ts_online.rb +40 -0
  419. metadata +512 -0
@@ -0,0 +1,53 @@
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
+ class RR
18
+ #Class for DNS X25 resource records.
19
+ #RFC 1183 Section 3.1
20
+ class X25 < RR
21
+ ClassValue = nil #:nodoc: all
22
+ TypeValue = Types::X25 #:nodoc: all
23
+
24
+ #The PSDN address
25
+ attr_accessor :address
26
+
27
+ def from_data(data)
28
+ @address = data
29
+ end
30
+
31
+ def from_string(input)
32
+ @address = input
33
+ end
34
+
35
+ def rdata_to_string
36
+ if (@address!=nil)
37
+ return @address
38
+ else
39
+ return ""
40
+ end
41
+ end
42
+
43
+ def encode_rdata(msg) #:nodoc: all
44
+ msg.put_string(@address)
45
+ end
46
+
47
+ def self.decode_rdata(msg) #:nodoc: all
48
+ address = msg.get_string
49
+ return self.new(*address)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,58 @@
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
+ class RR
18
+ # Superclass for RR's which have an additional domain name in the data section.
19
+ class DomainName < RR
20
+ # The domain name in the RR data section.
21
+ attr_reader :domainname
22
+
23
+ def set_domain_name(newname)
24
+ # if (!(newname.kind_of?Name))
25
+ @domainname=Name.create(newname)
26
+ # else
27
+ # @domainname = newname
28
+ # end
29
+ end
30
+
31
+ alias domainname= set_domain_name
32
+
33
+ def from_hash(hash) #:nodoc: all
34
+ set_domain_name(hash[:domainname])
35
+ end
36
+
37
+ def from_data(data) #:nodoc: all
38
+ @domainname = data
39
+ end
40
+
41
+ def from_string(input) #:nodoc: all
42
+ set_domain_name(input)
43
+ end
44
+
45
+ def rdata_to_string #:nodoc: all
46
+ return @domainname.to_s
47
+ end
48
+
49
+ def encode_rdata(msg, canonical=false) #:nodoc: all
50
+ msg.put_name(@domainname, canonical)
51
+ end
52
+
53
+ def self.decode_rdata(msg) #:nodoc: all
54
+ return self.new(msg.get_name)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,142 @@
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
+ class RR
18
+ #Class to store generic RRs (RFC 3597)
19
+ class Generic < RR # RFC 3597
20
+ attr_reader :data
21
+
22
+ def from_data(data) #:nodoc: all
23
+ @data = data[0]
24
+ end
25
+
26
+ def rdata_to_string #:nodoc: all
27
+ if (@data!=nil)
28
+ return "\\# " + @data.length.to_s + " " + @data.unpack("H*")[0]
29
+ end
30
+ return "#NO DATA"
31
+ end
32
+
33
+ def from_string(data) #:nodoc: all
34
+ @data = data
35
+ end
36
+
37
+ def encode_rdata(msg) #:nodoc: all
38
+ msg.put_bytes(data)
39
+ end
40
+
41
+ def self.decode_rdata(msg) #:nodoc: all
42
+ return self.new(msg.get_bytes)
43
+ end
44
+
45
+ def self.create(type_value, class_value)
46
+ c = Class.new(Generic)
47
+ # c.type = type_value
48
+ # c.klass = class_value
49
+ c.const_set(:TypeValue, type_value)
50
+ c.const_set(:ClassValue, class_value)
51
+ Generic.const_set("Type#{type_value}_Class#{class_value}", c)
52
+ ClassHash[[type_value, class_value]] = c
53
+ return c
54
+ end
55
+ end
56
+
57
+ #--
58
+ # Standard (class generic) RRs
59
+ #++
60
+ #NS RR
61
+ class NS < DomainName
62
+ ClassValue = nil #:nodoc: all
63
+ TypeValue = Types::NS #:nodoc: all
64
+
65
+ alias nsdname domainname
66
+ alias nsdname= domainname=
67
+ end
68
+
69
+ #CNAME RR
70
+ class CNAME < DomainName
71
+ ClassValue = nil #:nodoc: all
72
+ TypeValue = Types::CNAME #:nodoc: all
73
+
74
+ alias cname domainname
75
+ alias cname= domainname=
76
+ end
77
+
78
+ #DNAME RR
79
+ class DNAME < DomainName
80
+ ClassValue = nil #:nodoc: all
81
+ TypeValue = Types::DNAME #:nodoc: all
82
+
83
+ alias dname domainname
84
+ alias dname= domainname=
85
+ end
86
+
87
+ #MB RR
88
+ class MB < DomainName
89
+ ClassValue = nil #:nodoc: all
90
+ TypeValue = Types::MB #:nodoc: all
91
+ alias madname domainname
92
+ alias madname= domainname=
93
+ end
94
+
95
+ #MG RR
96
+ class MG < DomainName
97
+ ClassValue = nil #:nodoc: all
98
+ TypeValue = Types::MG #:nodoc: all
99
+ alias mgmname domainname
100
+ alias mgmname= domainname=
101
+ end
102
+
103
+ #MR RR
104
+ class MR < DomainName
105
+ ClassValue = nil #:nodoc: all
106
+ TypeValue = Types::MR #:nodoc: all
107
+ alias newname domainname
108
+ alias newname= domainname=
109
+ end
110
+
111
+ #PTR RR
112
+ class PTR < DomainName
113
+ ClassValue = nil #:nodoc: all
114
+ TypeValue = Types::PTR #:nodoc: all
115
+ end
116
+
117
+ #ANY RR
118
+ # class ANY < Query
119
+ class ANY < RR
120
+ ClassValue = nil #:nodoc: all
121
+ TypeValue = Types::ANY #:nodoc: all
122
+ end
123
+ end
124
+ end
125
+ require 'Dnsruby/resource/HINFO'
126
+ require 'Dnsruby/resource/MINFO'
127
+ require 'Dnsruby/resource/ISDN'
128
+ require 'Dnsruby/resource/MX'
129
+ require 'Dnsruby/resource/NAPTR'
130
+ require 'Dnsruby/resource/NSAP'
131
+ require 'Dnsruby/resource/PX'
132
+ require 'Dnsruby/resource/RP'
133
+ require 'Dnsruby/resource/RT'
134
+ require 'Dnsruby/resource/SOA'
135
+ require 'Dnsruby/resource/TXT'
136
+ require 'Dnsruby/resource/X25'
137
+ require 'Dnsruby/resource/SPF'
138
+ require 'Dnsruby/resource/CERT'
139
+ require 'Dnsruby/resource/LOC'
140
+ require 'Dnsruby/resource/OPT'
141
+ require 'Dnsruby/resource/TSIG'
142
+ require 'Dnsruby/resource/TKEY'
@@ -0,0 +1,444 @@
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
+ ClassHash = {} #:nodoc: all
18
+
19
+ # RFC2181, section 5
20
+ # "It is however possible for most record types to exist
21
+ # with the same label, class and type, but with different data. Such a
22
+ # group of records is hereby defined to be a Resource Record Set
23
+ # (RRSet)."
24
+ class RRSet
25
+ def initialize()
26
+ @rrs = []
27
+ end
28
+ #Add the RR to this RRSet
29
+ def add(r)
30
+ if @rrs.include?r
31
+ return false
32
+ end
33
+ if (rrs.size() == 0)
34
+ @rrs.push(r)
35
+ return;
36
+ end
37
+ # Check the type, klass and ttl are correct
38
+ first = @rrs[0]
39
+ if (!r.sameRRset(first))
40
+ raise ArgumentError.new("record does not match rrset")
41
+ end
42
+
43
+ if (r.ttl != first.ttl) # RFC2181, section 5.2
44
+ if (r.ttl > first.ttl)
45
+ # r = r.cloneRecord();
46
+ r.ttl=(first.ttl);
47
+ else
48
+ @rrs.each do |rr|
49
+ rr.ttl = r.ttl
50
+ end
51
+ end
52
+ end
53
+
54
+ if (!rrs.contains(r))
55
+ @rrs.push(r)
56
+ end
57
+ end
58
+
59
+ #Delete the RR from this RRSet
60
+ def delete(rr)
61
+ @rrs.delete(rr)
62
+ end
63
+ def each
64
+ @rrs.each do |rr|
65
+ yield rr
66
+ end
67
+ end
68
+ #Return the type of this RRSet
69
+ def type
70
+ return @rrs[0].type
71
+ end
72
+ #Return the klass of this RRSet
73
+ def klass
74
+ return @rrs[0].klass
75
+ end
76
+ #Return the ttl of this RRSet
77
+ def ttl
78
+ return @rrs[0].ttl
79
+ end
80
+ end
81
+
82
+ #Superclass for all Dnsruby resource records.
83
+ #
84
+ #Represents a DNS RR (resource record) [RFC1035, section 3.2]
85
+ #
86
+ #Use Dnsruby::RR::create(...) to create a new RR record.
87
+ #
88
+ # mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
89
+ #
90
+ # rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 7200,
91
+ # :preference => 10, :exchange => "mailhost.example.com"})
92
+ #
93
+ # s = rr.to_s # Get a String representation of the RR (in zone file format)
94
+ # rr_again = Dnsruby::RR.create(s)
95
+ #
96
+ class RR
97
+
98
+ # A regular expression which catches any valid resource record.
99
+ @@RR_REGEX = Regexp.new("^\\s*(\\S+)\\s*(\\d+)?\\s*(#{Classes.regexp + "|CLASS\\d+"})?\\s*(#{Types.regexp + '|TYPE\\d+'})?\\s*([\\s\\S]*)\$") #:nodoc: all
100
+
101
+ #The Resource's domain name
102
+ attr_accessor :name
103
+ #The Resource type
104
+ attr_accessor :type
105
+ #The Resource class
106
+ attr_accessor :klass
107
+ #The Resource Time-To-Live
108
+ attr_accessor :ttl
109
+ #The Resource data section
110
+ attr_accessor :rdata
111
+
112
+ def rdlength
113
+ return rdata.length
114
+ end
115
+
116
+ def name=(newname)
117
+ if (!(newname.kind_of?Name))
118
+ @name=Name.create(newname)
119
+ else
120
+ @name = newname
121
+ end
122
+ end
123
+
124
+ def type=(type)
125
+ @type = Types.new(type)
126
+ end
127
+
128
+ def klass=(klass)
129
+ @klass= Classes.new(klass)
130
+ end
131
+
132
+ # Determines if two Records could be part of the same RRset.
133
+ # This compares the name, type, and class of the Records; the ttl and
134
+ # rdata are not compared.
135
+ def sameRRset(rec)
136
+ return (@type == rec.type && @klass == rec.klass && @name== rec.name)
137
+ end
138
+
139
+ private
140
+ def initialize(*args) #:nodoc: all
141
+ if (args.length > 0)
142
+ if (args[0].class == Hash)
143
+ from_hash(args[0])
144
+ return
145
+ else
146
+ @rdata = args[0]
147
+ if (args[0].class == String)
148
+ from_string(args[0])
149
+ return
150
+ else
151
+ from_data(args[0])
152
+ return
153
+ end
154
+ end
155
+ end
156
+ # raise ArgumentError.new("Don't call new! Use Dnsruby::RR::create() instead")
157
+ end
158
+ public
159
+
160
+ def from_hash(hash) #:nodoc: all
161
+ hash.keys.each do |param|
162
+ send(param.to_s+"=", hash[param])
163
+ end
164
+ end
165
+
166
+ #Create a new RR from the hash. The name is required; all other fields are optional.
167
+ #Type defaults to ANY and the Class defaults to IN. The TTL defaults to 0.
168
+ #
169
+ #If the type is specified, then it is necessary to provide ALL of the resource record fields which
170
+ #are specific to that record; i.e. for
171
+ #an MX record, you would need to specify the exchange and the preference
172
+ #
173
+ # require 'Dnsruby'
174
+ # rr = Dnsruby::RR.new_from_hash({:name => "example.com"})
175
+ # rr = Dnsruby::RR.new_from_hash({:name => "example.com", :type => Types.MX, :ttl => 10, :preference => 5, :exchange => "mx1.example.com"})
176
+ def RR.new_from_hash(inhash)
177
+ hash = inhash.clone
178
+ type = hash[:type] || Types::ANY
179
+ klass = hash[:class] || Classes::IN
180
+ ttl = hash[:ttl] || 0
181
+ recordclass = get_class(type, klass)
182
+ record = recordclass.new
183
+ record.name=hash[:name]
184
+ if !(record.name.kind_of?Name)
185
+ record.name = Name.create(record.name)
186
+ end
187
+ record.ttl=ttl
188
+ record.type = type
189
+ record.klass = klass
190
+ hash.delete(:name)
191
+ hash.delete(:type)
192
+ hash.delete(:ttl)
193
+ hash.delete(:class)
194
+ record.from_hash(hash)
195
+ return record
196
+ end
197
+
198
+ #Returns a Dnsruby::RR object of the appropriate type and
199
+ #initialized from the string passed by the user. The format of the
200
+ #string is that used in zone files, and is compatible with the string
201
+ #returned by Net::DNS::RR.inspect
202
+ #
203
+ #The name and RR type are required; all other information is optional.
204
+ #If omitted, the TTL defaults to 0 and the RR class defaults to IN.
205
+ #
206
+ #All names must be fully qualified. The trailing dot (.) is optional.
207
+ #
208
+ #
209
+ # a = Dnsruby::RR.new_from_string("foo.example.com. 86400 A 10.1.2.3")
210
+ # mx = Dnsruby::RR.new_from_string("example.com. 7200 MX 10 mailhost.example.com.")
211
+ # cname = Dnsruby::RR.new_from_string("www.example.com 300 IN CNAME www1.example.com")
212
+ # txt = Dnsruby::RR.new_from_string('baz.example.com 3600 HS TXT "text record"')
213
+ #
214
+ #
215
+ def RR.new_from_string(rrstring)
216
+ # strip out comments
217
+ # Test for non escaped ";" by means of the look-behind assertion
218
+ # (the backslash is escaped)
219
+ rrstring.gsub!(/(\?<!\\);.*/o, "");
220
+
221
+ if ((rrstring =~/#{@@RR_REGEX}/xo) == nil)
222
+ raise Exception, "#{rrstring} did not match RR pat.\nPlease report this to the author!\n"
223
+ end
224
+
225
+ name = $1;
226
+ ttl = $2.to_i || 0;
227
+ rrclass = $3 || '';
228
+
229
+
230
+ rrtype = $4 || '';
231
+ rdata = $5 || '';
232
+
233
+ if rdata
234
+ rdata.gsub!(/\s+$/o, "")
235
+ end
236
+ if name
237
+ name.gsub!(/\.$/o, "");
238
+ end
239
+
240
+
241
+ # RFC3597 tweaks
242
+ # This converts to known class and type if specified as TYPE###
243
+ if rrtype =~/^TYPE\d+/o
244
+ rrtype = Dnsruby::Types.typesbyval(Dnsruby::Types::typesbyname(rrtype))
245
+ end
246
+ if rrclass =~/^CLASS\d+/o
247
+ rrclass = Dnsruby::Classes.classesbyval(Dnsruby::Classes::classesbyname(rrclass))
248
+ end
249
+
250
+
251
+ if (rrtype=='' && rrclass && rrclass == 'ANY')
252
+ rrtype = 'ANY';
253
+ rrclass = 'IN';
254
+ elsif (rrclass=='')
255
+ rrclass = 'IN';
256
+ end
257
+
258
+ if (rrtype == '')
259
+ rrtype = 'ANY';
260
+ end
261
+
262
+ if (implemented_rrs.include?(rrtype) && rdata !~/^\s*\\#/o )
263
+ subclass = _get_subclass(name, rrtype, rrclass, ttl, rdata)
264
+ return subclass
265
+ elsif (implemented_rrs.include?(rrtype)) # A known RR type starting with \#
266
+ rdata =~ /\\\#\s+(\d+)\s+(.*)$/o;
267
+
268
+ rdlength = $1.to_i;
269
+ hexdump = $2;
270
+ hexdump.gsub!(/\s*/, "");
271
+
272
+ if hexdump.length() != rdlength*2
273
+ raise Exception, "#{rdata} is inconsistent; length does not match content"
274
+ end
275
+
276
+ rdata = [hexdump].pack('H*');
277
+
278
+ return new_from_data(name, rrtype, rrclass, ttl, rdlength, rdata, 0) # rdata.length() - rdlength);
279
+ elsif (rdata=~/\s*\\\#\s+\d+\s+/o)
280
+ #We are now dealing with the truly unknown.
281
+ raise Exception, 'Expected RFC3597 representation of RDATA' unless rdata =~/\\\#\s+(\d+)\s+(.*)$/o;
282
+
283
+ rdlength = $1.to_i;
284
+ hexdump = $2;
285
+ hexdump.gsub!(/\s*/o, "");
286
+
287
+ if hexdump.length() != rdlength*2
288
+ raise Exception, "#{rdata} is inconsistent; length does not match content" ;
289
+ end
290
+
291
+ rdata = [hexdump].pack('H*');
292
+
293
+ return new_from_data(name,rrtype,rrclass,ttl,rdlength,rdata,0) # rdata.length() - rdlength);
294
+ else
295
+ #God knows how to handle these...
296
+ subclass = _get_subclass(name, rrtype, rrclass, ttl, "")
297
+ return subclass
298
+ end
299
+ end
300
+
301
+ def RR.new_from_data(*args) #:nodoc: all
302
+ name = args[0]
303
+ rrtype = args[1]
304
+ rrclass = args[2]
305
+ ttl = args[3]
306
+ rdlength = args[4]
307
+ data = args[5]
308
+ offset = args[6]
309
+ rdata = data[offset, rdlength]
310
+
311
+ record = nil
312
+ MessageDecoder.new(rdata) {|msg|
313
+ record = get_class(rrtype, rrclass).decode_rdata(msg)
314
+ }
315
+ record.name = name
316
+ record.ttl = ttl
317
+ record.type = rrtype
318
+ record.klass = rrclass
319
+
320
+ return record
321
+ end
322
+
323
+ #Return an array of all the currently implemented RR types
324
+ def RR.implemented_rrs
325
+ return ClassHash.keys.map {|k| Dnsruby::Types.to_string(k[0])}
326
+ end
327
+
328
+ private
329
+ def RR._get_subclass(name, rrtype, rrclass, ttl, rdata) #:nodoc: all
330
+ return unless (rrtype!=nil)
331
+ record = get_class(rrtype, rrclass).new(rdata)
332
+ record.name = name
333
+ record.ttl = ttl
334
+ record.type = rrtype
335
+ record.klass = rrclass
336
+ return record
337
+ end
338
+ public
339
+
340
+ #Returns a string representation of the RR in zone file format
341
+ def to_s
342
+ return (@name?@name.to_s():"") + ".\t" +(@ttl?@ttl.to_s():"") + "\t" + (klass()?klass.string():"") + "\t" + (type()?type.string():"") + "\t" + rdata_to_string
343
+ end
344
+
345
+ #Get a string representation of the data section of the RR (in zone file format)
346
+ def rdata_to_string
347
+ if (@rdata && @rdata.length > 0)
348
+ return @rdata
349
+ else
350
+ return "no rdata"
351
+ end
352
+ end
353
+
354
+ def from_data(data) #:nodoc: all
355
+ # to be implemented by subclasses
356
+ raise NotImplementedError.new
357
+ end
358
+
359
+ def from_string(input) #:nodoc: all
360
+ # to be implemented by subclasses
361
+ # raise NotImplementedError.new
362
+ end
363
+
364
+ def encode_rdata(msg) #:nodoc: all
365
+ # to be implemented by subclasses
366
+ raise EncodeError.new("#{self.class} is RR.")
367
+ end
368
+
369
+ def self.decode_rdata(msg) #:nodoc: all
370
+ # to be implemented by subclasses
371
+ raise DecodeError.new("#{self.class} is RR.")
372
+ end
373
+
374
+ def ==(other)
375
+ # @TODO@ TTL should not be compared for Updates! (RFC 2136, 1.1.1)
376
+ return self.class == other.class &&
377
+ self.instance_variables == other.instance_variables &&
378
+ self.instance_variables.collect {|name| self.instance_eval name} ==
379
+ other.instance_variables.collect {|name| other.instance_eval name}
380
+ end
381
+
382
+ def eql?(other)
383
+ return self == other
384
+ end
385
+
386
+ def hash
387
+ h = 0
388
+ self.instance_variables.each {|name|
389
+ h ^= self.instance_eval("#{name}.hash")
390
+ }
391
+ return h
392
+ end
393
+
394
+ #Get an RR of the specified type and class
395
+ def self.get_class(type_value, class_value) #:nodoc: all
396
+ if (type_value.class == Class)
397
+ type_value = type_value.const_get(:TypeValue)
398
+ return ClassHash[[type_value, Classes.to_code(class_value)]] ||
399
+ Generic.create(type_value, Classes.to_code(class_value))
400
+ else
401
+ if (type_value.class == Types)
402
+ type_value = type_value.code
403
+ else
404
+ type_value = Types.new(type_value).code
405
+ end
406
+ if (class_value.class == Classes)
407
+ class_value = class_value.code
408
+ else
409
+ class_value = Classes.new(class_value).code
410
+ end
411
+ return ClassHash[[type_value, class_value]] ||
412
+ Generic.create(type_value, class_value)
413
+ end
414
+ return ret
415
+ end
416
+
417
+
418
+ #Create a new RR from the arguments, which can be either a String or a Hash.
419
+ #See new_from_string and new_from_hash for details
420
+ #
421
+ # a = Dnsruby::RR.create("foo.example.com. 86400 A 10.1.2.3")
422
+ # mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
423
+ # cname = Dnsruby::RR.create("www.example.com 300 IN CNAME www1.example.com")
424
+ # txt = Dnsruby::RR.create('baz.example.com 3600 HS TXT "text record"')
425
+ #
426
+ # rr = Dnsruby::RR.create({:name => "example.com"})
427
+ # rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 10,
428
+ # :preference => 5, :exchange => "mx1.example.com"})
429
+ #
430
+ def RR.create(*args)
431
+ if (args.length == 1) && (args[0].class == String)
432
+ return new_from_string(args[0])
433
+ elsif (args.length == 1) && (args[0].class == Hash)
434
+ return new_from_hash(args[0])
435
+ else
436
+ return new_from_data(args)
437
+ end
438
+ end
439
+
440
+ end
441
+ end
442
+ require 'Dnsruby/resource/domain_name'
443
+ require 'Dnsruby/resource/generic'
444
+ require 'Dnsruby/resource/IN'