dnsruby 1.1

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 (520) hide show
  1. data/EVENTMACHINE +64 -0
  2. data/README +63 -0
  3. data/doc/classes/Dnsruby.html +463 -0
  4. data/doc/classes/Dnsruby/Algorithms.html +171 -0
  5. data/doc/classes/Dnsruby/Classes.html +197 -0
  6. data/doc/classes/Dnsruby/Classes.src/M000209.html +23 -0
  7. data/doc/classes/Dnsruby/Classes.src/M000210.html +19 -0
  8. data/doc/classes/Dnsruby/CodeMapper.html +375 -0
  9. data/doc/classes/Dnsruby/CodeMapper.src/M000186.html +18 -0
  10. data/doc/classes/Dnsruby/CodeMapper.src/M000187.html +33 -0
  11. data/doc/classes/Dnsruby/CodeMapper.src/M000188.html +21 -0
  12. data/doc/classes/Dnsruby/CodeMapper.src/M000189.html +19 -0
  13. data/doc/classes/Dnsruby/CodeMapper.src/M000190.html +19 -0
  14. data/doc/classes/Dnsruby/CodeMapper.src/M000191.html +18 -0
  15. data/doc/classes/Dnsruby/CodeMapper.src/M000192.html +22 -0
  16. data/doc/classes/Dnsruby/CodeMapper.src/M000193.html +22 -0
  17. data/doc/classes/Dnsruby/CodeMapper.src/M000194.html +22 -0
  18. data/doc/classes/Dnsruby/CodeMapper.src/M000195.html +31 -0
  19. data/doc/classes/Dnsruby/CodeMapper.src/M000196.html +19 -0
  20. data/doc/classes/Dnsruby/Config.html +413 -0
  21. data/doc/classes/Dnsruby/Config.src/M000148.html +18 -0
  22. data/doc/classes/Dnsruby/Config.src/M000149.html +19 -0
  23. data/doc/classes/Dnsruby/Config.src/M000150.html +19 -0
  24. data/doc/classes/Dnsruby/Config.src/M000151.html +25 -0
  25. data/doc/classes/Dnsruby/Config.src/M000152.html +21 -0
  26. data/doc/classes/Dnsruby/Config.src/M000153.html +38 -0
  27. data/doc/classes/Dnsruby/Config.src/M000154.html +26 -0
  28. data/doc/classes/Dnsruby/Config.src/M000155.html +22 -0
  29. data/doc/classes/Dnsruby/Config.src/M000156.html +27 -0
  30. data/doc/classes/Dnsruby/Config.src/M000157.html +22 -0
  31. data/doc/classes/Dnsruby/Config.src/M000158.html +21 -0
  32. data/doc/classes/Dnsruby/DNS.html +571 -0
  33. data/doc/classes/Dnsruby/DNS.src/M000258.html +24 -0
  34. data/doc/classes/Dnsruby/DNS.src/M000259.html +18 -0
  35. data/doc/classes/Dnsruby/DNS.src/M000260.html +18 -0
  36. data/doc/classes/Dnsruby/DNS.src/M000261.html +20 -0
  37. data/doc/classes/Dnsruby/DNS.src/M000262.html +19 -0
  38. data/doc/classes/Dnsruby/DNS.src/M000263.html +20 -0
  39. data/doc/classes/Dnsruby/DNS.src/M000264.html +18 -0
  40. data/doc/classes/Dnsruby/DNS.src/M000265.html +19 -0
  41. data/doc/classes/Dnsruby/DNS.src/M000266.html +20 -0
  42. data/doc/classes/Dnsruby/DNS.src/M000267.html +28 -0
  43. data/doc/classes/Dnsruby/DNS.src/M000268.html +19 -0
  44. data/doc/classes/Dnsruby/DNS.src/M000269.html +20 -0
  45. data/doc/classes/Dnsruby/DNS.src/M000270.html +31 -0
  46. data/doc/classes/Dnsruby/DecodeError.html +120 -0
  47. data/doc/classes/Dnsruby/Dnssec.html +287 -0
  48. data/doc/classes/Dnsruby/Dnssec.src/M000249.html +23 -0
  49. data/doc/classes/Dnsruby/Dnssec.src/M000250.html +19 -0
  50. data/doc/classes/Dnsruby/Dnssec.src/M000251.html +90 -0
  51. data/doc/classes/Dnsruby/Dnssec.src/M000252.html +76 -0
  52. data/doc/classes/Dnsruby/EncodeError.html +120 -0
  53. data/doc/classes/Dnsruby/FormErr.html +119 -0
  54. data/doc/classes/Dnsruby/Header.html +501 -0
  55. data/doc/classes/Dnsruby/Header.src/M000231.html +35 -0
  56. data/doc/classes/Dnsruby/Header.src/M000232.html +18 -0
  57. data/doc/classes/Dnsruby/Header.src/M000233.html +18 -0
  58. data/doc/classes/Dnsruby/Header.src/M000234.html +21 -0
  59. data/doc/classes/Dnsruby/Header.src/M000235.html +20 -0
  60. data/doc/classes/Dnsruby/Header.src/M000236.html +32 -0
  61. data/doc/classes/Dnsruby/Header.src/M000237.html +27 -0
  62. data/doc/classes/Dnsruby/Header.src/M000238.html +26 -0
  63. data/doc/classes/Dnsruby/Header.src/M000239.html +47 -0
  64. data/doc/classes/Dnsruby/Header.src/M000240.html +28 -0
  65. data/doc/classes/Dnsruby/Header.src/M000241.html +30 -0
  66. data/doc/classes/Dnsruby/Hosts.html +316 -0
  67. data/doc/classes/Dnsruby/Hosts.src/M000197.html +20 -0
  68. data/doc/classes/Dnsruby/Hosts.src/M000198.html +19 -0
  69. data/doc/classes/Dnsruby/Hosts.src/M000199.html +20 -0
  70. data/doc/classes/Dnsruby/Hosts.src/M000200.html +21 -0
  71. data/doc/classes/Dnsruby/Hosts.src/M000201.html +19 -0
  72. data/doc/classes/Dnsruby/Hosts.src/M000202.html +20 -0
  73. data/doc/classes/Dnsruby/Hosts.src/M000203.html +21 -0
  74. data/doc/classes/Dnsruby/IPv4.html +233 -0
  75. data/doc/classes/Dnsruby/IPv4.src/M000204.html +32 -0
  76. data/doc/classes/Dnsruby/IPv4.src/M000205.html +19 -0
  77. data/doc/classes/Dnsruby/IPv4.src/M000206.html +18 -0
  78. data/doc/classes/Dnsruby/IPv4.src/M000207.html +18 -0
  79. data/doc/classes/Dnsruby/IPv4.src/M000208.html +18 -0
  80. data/doc/classes/Dnsruby/IPv6.html +281 -0
  81. data/doc/classes/Dnsruby/IPv6.src/M000242.html +60 -0
  82. data/doc/classes/Dnsruby/IPv6.src/M000243.html +22 -0
  83. data/doc/classes/Dnsruby/IPv6.src/M000244.html +20 -0
  84. data/doc/classes/Dnsruby/IPv6.src/M000245.html +18 -0
  85. data/doc/classes/Dnsruby/Message.html +803 -0
  86. data/doc/classes/Dnsruby/Message.src/M000119.html +38 -0
  87. data/doc/classes/Dnsruby/Message.src/M000120.html +26 -0
  88. data/doc/classes/Dnsruby/Message.src/M000121.html +22 -0
  89. data/doc/classes/Dnsruby/Message.src/M000122.html +22 -0
  90. data/doc/classes/Dnsruby/Message.src/M000123.html +20 -0
  91. data/doc/classes/Dnsruby/Message.src/M000124.html +20 -0
  92. data/doc/classes/Dnsruby/Message.src/M000125.html +20 -0
  93. data/doc/classes/Dnsruby/Message.src/M000126.html +20 -0
  94. data/doc/classes/Dnsruby/Message.src/M000127.html +18 -0
  95. data/doc/classes/Dnsruby/Message.src/M000128.html +20 -0
  96. data/doc/classes/Dnsruby/Message.src/M000129.html +23 -0
  97. data/doc/classes/Dnsruby/Message.src/M000130.html +30 -0
  98. data/doc/classes/Dnsruby/Message.src/M000131.html +20 -0
  99. data/doc/classes/Dnsruby/Message.src/M000132.html +18 -0
  100. data/doc/classes/Dnsruby/Message.src/M000133.html +56 -0
  101. data/doc/classes/Dnsruby/Message.src/M000134.html +35 -0
  102. data/doc/classes/Dnsruby/Message.src/M000135.html +46 -0
  103. data/doc/classes/Dnsruby/Message/Section.html +160 -0
  104. data/doc/classes/Dnsruby/Message/Section.src/M000141.html +29 -0
  105. data/doc/classes/Dnsruby/Message/Section.src/M000142.html +30 -0
  106. data/doc/classes/Dnsruby/MetaTypes.html +136 -0
  107. data/doc/classes/Dnsruby/Modes.html +171 -0
  108. data/doc/classes/Dnsruby/NXDomain.html +119 -0
  109. data/doc/classes/Dnsruby/Name.html +330 -0
  110. data/doc/classes/Dnsruby/Name.src/M000104.html +28 -0
  111. data/doc/classes/Dnsruby/Name.src/M000105.html +20 -0
  112. data/doc/classes/Dnsruby/Name.src/M000106.html +18 -0
  113. data/doc/classes/Dnsruby/Name.src/M000107.html +21 -0
  114. data/doc/classes/Dnsruby/Name.src/M000108.html +22 -0
  115. data/doc/classes/Dnsruby/Name.src/M000109.html +18 -0
  116. data/doc/classes/Dnsruby/Name/Label.html +300 -0
  117. data/doc/classes/Dnsruby/Name/Label.src/M000110.html +21 -0
  118. data/doc/classes/Dnsruby/Name/Label.src/M000111.html +18 -0
  119. data/doc/classes/Dnsruby/Name/Label.src/M000112.html +22 -0
  120. data/doc/classes/Dnsruby/Name/Label.src/M000113.html +18 -0
  121. data/doc/classes/Dnsruby/Name/Label.src/M000114.html +18 -0
  122. data/doc/classes/Dnsruby/Name/Label.src/M000115.html +18 -0
  123. data/doc/classes/Dnsruby/Name/Label.src/M000116.html +18 -0
  124. data/doc/classes/Dnsruby/Name/Label.src/M000117.html +18 -0
  125. data/doc/classes/Dnsruby/Name/Label.src/M000118.html +18 -0
  126. data/doc/classes/Dnsruby/NotImp.html +119 -0
  127. data/doc/classes/Dnsruby/OpCode.html +146 -0
  128. data/doc/classes/Dnsruby/OtherResolvError.html +119 -0
  129. data/doc/classes/Dnsruby/QTypes.html +146 -0
  130. data/doc/classes/Dnsruby/Question.html +301 -0
  131. data/doc/classes/Dnsruby/Question.src/M000226.html +47 -0
  132. data/doc/classes/Dnsruby/Question.src/M000227.html +18 -0
  133. data/doc/classes/Dnsruby/Question.src/M000228.html +18 -0
  134. data/doc/classes/Dnsruby/Question.src/M000229.html +32 -0
  135. data/doc/classes/Dnsruby/Question.src/M000230.html +18 -0
  136. data/doc/classes/Dnsruby/RCode.html +211 -0
  137. data/doc/classes/Dnsruby/RR.html +648 -0
  138. data/doc/classes/Dnsruby/RR.src/M000001.html +18 -0
  139. data/doc/classes/Dnsruby/RR.src/M000002.html +22 -0
  140. data/doc/classes/Dnsruby/RR.src/M000003.html +18 -0
  141. data/doc/classes/Dnsruby/RR.src/M000004.html +18 -0
  142. data/doc/classes/Dnsruby/RR.src/M000005.html +26 -0
  143. data/doc/classes/Dnsruby/RR.src/M000006.html +18 -0
  144. data/doc/classes/Dnsruby/RR.src/M000007.html +36 -0
  145. data/doc/classes/Dnsruby/RR.src/M000008.html +100 -0
  146. data/doc/classes/Dnsruby/RR.src/M000009.html +18 -0
  147. data/doc/classes/Dnsruby/RR.src/M000010.html +18 -0
  148. data/doc/classes/Dnsruby/RR.src/M000011.html +22 -0
  149. data/doc/classes/Dnsruby/RR.src/M000012.html +29 -0
  150. data/doc/classes/Dnsruby/RR.src/M000013.html +24 -0
  151. data/doc/classes/Dnsruby/RR/ANY.html +133 -0
  152. data/doc/classes/Dnsruby/RR/CERT.html +180 -0
  153. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +169 -0
  154. data/doc/classes/Dnsruby/RR/CNAME.html +151 -0
  155. data/doc/classes/Dnsruby/RR/DNAME.html +150 -0
  156. data/doc/classes/Dnsruby/RR/DNSKEY.html +422 -0
  157. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000044.html +20 -0
  158. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000045.html +21 -0
  159. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000046.html +28 -0
  160. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000047.html +22 -0
  161. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000048.html +18 -0
  162. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000049.html +22 -0
  163. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000050.html +18 -0
  164. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000051.html +26 -0
  165. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000052.html +38 -0
  166. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000053.html +45 -0
  167. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000054.html +21 -0
  168. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000055.html +24 -0
  169. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000056.html +32 -0
  170. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000057.html +24 -0
  171. data/doc/classes/Dnsruby/RR/DS.html +286 -0
  172. data/doc/classes/Dnsruby/RR/DS.src/M000039.html +22 -0
  173. data/doc/classes/Dnsruby/RR/DS.src/M000040.html +28 -0
  174. data/doc/classes/Dnsruby/RR/DS.src/M000041.html +24 -0
  175. data/doc/classes/Dnsruby/RR/DS.src/M000042.html +28 -0
  176. data/doc/classes/Dnsruby/RR/DS.src/M000043.html +36 -0
  177. data/doc/classes/Dnsruby/RR/DomainName.html +175 -0
  178. data/doc/classes/Dnsruby/RR/DomainName.src/M000083.html +18 -0
  179. data/doc/classes/Dnsruby/RR/Generic.html +133 -0
  180. data/doc/classes/Dnsruby/RR/HINFO.html +155 -0
  181. data/doc/classes/Dnsruby/RR/IN.html +155 -0
  182. data/doc/classes/Dnsruby/RR/IN/A.html +200 -0
  183. data/doc/classes/Dnsruby/RR/IN/A.src/M000017.html +18 -0
  184. data/doc/classes/Dnsruby/RR/IN/A.src/M000018.html +18 -0
  185. data/doc/classes/Dnsruby/RR/IN/A.src/M000019.html +18 -0
  186. data/doc/classes/Dnsruby/RR/IN/AAAA.html +139 -0
  187. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +145 -0
  188. data/doc/classes/Dnsruby/RR/IN/PX.html +143 -0
  189. data/doc/classes/Dnsruby/RR/IN/SRV.html +238 -0
  190. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000014.html +29 -0
  191. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000015.html +26 -0
  192. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000016.html +22 -0
  193. data/doc/classes/Dnsruby/RR/IN/WKS.html +166 -0
  194. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000020.html +20 -0
  195. data/doc/classes/Dnsruby/RR/ISDN.html +155 -0
  196. data/doc/classes/Dnsruby/RR/LOC.html +395 -0
  197. data/doc/classes/Dnsruby/RR/LOC.src/M000025.html +32 -0
  198. data/doc/classes/Dnsruby/RR/LOC.src/M000026.html +23 -0
  199. data/doc/classes/Dnsruby/RR/LOC.src/M000027.html +25 -0
  200. data/doc/classes/Dnsruby/RR/LOC.src/M000028.html +21 -0
  201. data/doc/classes/Dnsruby/RR/LOC.src/M000029.html +20 -0
  202. data/doc/classes/Dnsruby/RR/LOC.src/M000030.html +23 -0
  203. data/doc/classes/Dnsruby/RR/MB.html +150 -0
  204. data/doc/classes/Dnsruby/RR/MG.html +150 -0
  205. data/doc/classes/Dnsruby/RR/MINFO.html +156 -0
  206. data/doc/classes/Dnsruby/RR/MR.html +150 -0
  207. data/doc/classes/Dnsruby/RR/MX.html +155 -0
  208. data/doc/classes/Dnsruby/RR/NAPTR.html +190 -0
  209. data/doc/classes/Dnsruby/RR/NS.html +151 -0
  210. data/doc/classes/Dnsruby/RR/NSAP.html +293 -0
  211. data/doc/classes/Dnsruby/RR/NSAP.src/M000093.html +19 -0
  212. data/doc/classes/Dnsruby/RR/NSAP.src/M000094.html +19 -0
  213. data/doc/classes/Dnsruby/RR/NSAP.src/M000095.html +22 -0
  214. data/doc/classes/Dnsruby/RR/NSAP.src/M000096.html +31 -0
  215. data/doc/classes/Dnsruby/RR/NSEC.html +301 -0
  216. data/doc/classes/Dnsruby/RR/NSEC.src/M000031.html +19 -0
  217. data/doc/classes/Dnsruby/RR/NSEC.src/M000032.html +18 -0
  218. data/doc/classes/Dnsruby/RR/NSEC.src/M000033.html +34 -0
  219. data/doc/classes/Dnsruby/RR/NSEC.src/M000034.html +18 -0
  220. data/doc/classes/Dnsruby/RR/NSEC.src/M000035.html +71 -0
  221. data/doc/classes/Dnsruby/RR/NSEC.src/M000036.html +18 -0
  222. data/doc/classes/Dnsruby/RR/NSEC.src/M000037.html +80 -0
  223. data/doc/classes/Dnsruby/RR/NSEC.src/M000038.html +23 -0
  224. data/doc/classes/Dnsruby/RR/NSEC3.html +366 -0
  225. data/doc/classes/Dnsruby/RR/NSEC3.src/M000085.html +28 -0
  226. data/doc/classes/Dnsruby/RR/NSEC3.src/M000086.html +18 -0
  227. data/doc/classes/Dnsruby/RR/NSEC3.src/M000087.html +18 -0
  228. data/doc/classes/Dnsruby/RR/NSEC3.src/M000088.html +22 -0
  229. data/doc/classes/Dnsruby/RR/NSEC3.src/M000089.html +18 -0
  230. data/doc/classes/Dnsruby/RR/NSEC3.src/M000090.html +21 -0
  231. data/doc/classes/Dnsruby/RR/NSEC3.src/M000091.html +21 -0
  232. data/doc/classes/Dnsruby/RR/NSEC3.src/M000092.html +29 -0
  233. data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +279 -0
  234. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000077.html +28 -0
  235. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000078.html +18 -0
  236. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000079.html +22 -0
  237. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000080.html +21 -0
  238. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000081.html +25 -0
  239. data/doc/classes/Dnsruby/RR/PTR.html +132 -0
  240. data/doc/classes/Dnsruby/RR/RP.html +183 -0
  241. data/doc/classes/Dnsruby/RR/RP.src/M000082.html +19 -0
  242. data/doc/classes/Dnsruby/RR/RRSIG.html +357 -0
  243. data/doc/classes/Dnsruby/RR/RRSIG.src/M000097.html +26 -0
  244. data/doc/classes/Dnsruby/RR/RRSIG.src/M000098.html +28 -0
  245. data/doc/classes/Dnsruby/RR/RRSIG.src/M000099.html +23 -0
  246. data/doc/classes/Dnsruby/RR/RRSIG.src/M000100.html +23 -0
  247. data/doc/classes/Dnsruby/RR/RRSIG.src/M000101.html +46 -0
  248. data/doc/classes/Dnsruby/RR/RRSIG.src/M000102.html +50 -0
  249. data/doc/classes/Dnsruby/RR/RRSIG.src/M000103.html +27 -0
  250. data/doc/classes/Dnsruby/RR/RT.html +155 -0
  251. data/doc/classes/Dnsruby/RR/SOA.html +233 -0
  252. data/doc/classes/Dnsruby/RR/SOA.src/M000066.html +24 -0
  253. data/doc/classes/Dnsruby/RR/SOA.src/M000067.html +27 -0
  254. data/doc/classes/Dnsruby/RR/SPF.html +138 -0
  255. data/doc/classes/Dnsruby/RR/TKEY.html +313 -0
  256. data/doc/classes/Dnsruby/RR/TKEY.src/M000021.html +19 -0
  257. data/doc/classes/Dnsruby/RR/TKEY.src/M000022.html +29 -0
  258. data/doc/classes/Dnsruby/RR/TKEY.src/M000023.html +21 -0
  259. data/doc/classes/Dnsruby/RR/TKEY.src/M000024.html +29 -0
  260. data/doc/classes/Dnsruby/RR/TSIG.html +524 -0
  261. data/doc/classes/Dnsruby/RR/TSIG.src/M000068.html +24 -0
  262. data/doc/classes/Dnsruby/RR/TSIG.src/M000069.html +32 -0
  263. data/doc/classes/Dnsruby/RR/TSIG.src/M000070.html +54 -0
  264. data/doc/classes/Dnsruby/RR/TSIG.src/M000071.html +121 -0
  265. data/doc/classes/Dnsruby/RR/TSIG.src/M000072.html +33 -0
  266. data/doc/classes/Dnsruby/RR/TSIG.src/M000073.html +25 -0
  267. data/doc/classes/Dnsruby/RR/TSIG.src/M000074.html +36 -0
  268. data/doc/classes/Dnsruby/RR/TSIG.src/M000075.html +22 -0
  269. data/doc/classes/Dnsruby/RR/TSIG.src/M000076.html +29 -0
  270. data/doc/classes/Dnsruby/RR/TXT.html +233 -0
  271. data/doc/classes/Dnsruby/RR/TXT.src/M000061.html +18 -0
  272. data/doc/classes/Dnsruby/RR/TXT.src/M000062.html +18 -0
  273. data/doc/classes/Dnsruby/RR/TXT.src/M000063.html +20 -0
  274. data/doc/classes/Dnsruby/RR/TXT.src/M000064.html +27 -0
  275. data/doc/classes/Dnsruby/RR/TXT.src/M000065.html +25 -0
  276. data/doc/classes/Dnsruby/RR/X25.html +203 -0
  277. data/doc/classes/Dnsruby/RR/X25.src/M000058.html +18 -0
  278. data/doc/classes/Dnsruby/RR/X25.src/M000059.html +18 -0
  279. data/doc/classes/Dnsruby/RR/X25.src/M000060.html +22 -0
  280. data/doc/classes/Dnsruby/RRSet.html +404 -0
  281. data/doc/classes/Dnsruby/RRSet.src/M000211.html +23 -0
  282. data/doc/classes/Dnsruby/RRSet.src/M000212.html +18 -0
  283. data/doc/classes/Dnsruby/RRSet.src/M000213.html +18 -0
  284. data/doc/classes/Dnsruby/RRSet.src/M000214.html +47 -0
  285. data/doc/classes/Dnsruby/RRSet.src/M000215.html +42 -0
  286. data/doc/classes/Dnsruby/RRSet.src/M000216.html +18 -0
  287. data/doc/classes/Dnsruby/RRSet.src/M000217.html +20 -0
  288. data/doc/classes/Dnsruby/RRSet.src/M000218.html +18 -0
  289. data/doc/classes/Dnsruby/RRSet.src/M000219.html +18 -0
  290. data/doc/classes/Dnsruby/RRSet.src/M000220.html +18 -0
  291. data/doc/classes/Dnsruby/RRSet.src/M000221.html +18 -0
  292. data/doc/classes/Dnsruby/RRSet.src/M000222.html +22 -0
  293. data/doc/classes/Dnsruby/RRSet.src/M000223.html +18 -0
  294. data/doc/classes/Dnsruby/RRSet.src/M000224.html +22 -0
  295. data/doc/classes/Dnsruby/RRSet.src/M000225.html +18 -0
  296. data/doc/classes/Dnsruby/Refused.html +119 -0
  297. data/doc/classes/Dnsruby/Resolv.html +401 -0
  298. data/doc/classes/Dnsruby/Resolv.src/M000159.html +18 -0
  299. data/doc/classes/Dnsruby/Resolv.src/M000160.html +18 -0
  300. data/doc/classes/Dnsruby/Resolv.src/M000161.html +18 -0
  301. data/doc/classes/Dnsruby/Resolv.src/M000162.html +18 -0
  302. data/doc/classes/Dnsruby/Resolv.src/M000163.html +18 -0
  303. data/doc/classes/Dnsruby/Resolv.src/M000164.html +18 -0
  304. data/doc/classes/Dnsruby/Resolv.src/M000165.html +18 -0
  305. data/doc/classes/Dnsruby/Resolv.src/M000166.html +19 -0
  306. data/doc/classes/Dnsruby/Resolv.src/M000167.html +20 -0
  307. data/doc/classes/Dnsruby/Resolv.src/M000168.html +29 -0
  308. data/doc/classes/Dnsruby/Resolv.src/M000169.html +19 -0
  309. data/doc/classes/Dnsruby/Resolv.src/M000170.html +20 -0
  310. data/doc/classes/Dnsruby/Resolv.src/M000171.html +25 -0
  311. data/doc/classes/Dnsruby/ResolvError.html +117 -0
  312. data/doc/classes/Dnsruby/ResolvTimeout.html +117 -0
  313. data/doc/classes/Dnsruby/Resolver.html +1055 -0
  314. data/doc/classes/Dnsruby/Resolver.src/M000271.html +21 -0
  315. data/doc/classes/Dnsruby/Resolver.src/M000272.html +27 -0
  316. data/doc/classes/Dnsruby/Resolver.src/M000273.html +28 -0
  317. data/doc/classes/Dnsruby/Resolver.src/M000274.html +18 -0
  318. data/doc/classes/Dnsruby/Resolver.src/M000275.html +51 -0
  319. data/doc/classes/Dnsruby/Resolver.src/M000276.html +21 -0
  320. data/doc/classes/Dnsruby/Resolver.src/M000277.html +22 -0
  321. data/doc/classes/Dnsruby/Resolver.src/M000278.html +18 -0
  322. data/doc/classes/Dnsruby/Resolver.src/M000279.html +20 -0
  323. data/doc/classes/Dnsruby/Resolver.src/M000280.html +19 -0
  324. data/doc/classes/Dnsruby/Resolver.src/M000281.html +19 -0
  325. data/doc/classes/Dnsruby/Resolver.src/M000282.html +19 -0
  326. data/doc/classes/Dnsruby/Resolver.src/M000283.html +19 -0
  327. data/doc/classes/Dnsruby/Resolver.src/M000284.html +19 -0
  328. data/doc/classes/Dnsruby/Resolver.src/M000285.html +19 -0
  329. data/doc/classes/Dnsruby/Resolver.src/M000286.html +19 -0
  330. data/doc/classes/Dnsruby/Resolver.src/M000287.html +19 -0
  331. data/doc/classes/Dnsruby/Resolver.src/M000288.html +19 -0
  332. data/doc/classes/Dnsruby/Resolver.src/M000289.html +19 -0
  333. data/doc/classes/Dnsruby/Resolver.src/M000290.html +19 -0
  334. data/doc/classes/Dnsruby/Resolver.src/M000291.html +19 -0
  335. data/doc/classes/Dnsruby/Resolver.src/M000292.html +26 -0
  336. data/doc/classes/Dnsruby/Resolver.src/M000293.html +18 -0
  337. data/doc/classes/Dnsruby/Resolver.src/M000294.html +23 -0
  338. data/doc/classes/Dnsruby/Resolver.src/M000295.html +18 -0
  339. data/doc/classes/Dnsruby/ServFail.html +119 -0
  340. data/doc/classes/Dnsruby/SingleResolver.html +674 -0
  341. data/doc/classes/Dnsruby/SingleResolver.src/M000172.html +18 -0
  342. data/doc/classes/Dnsruby/SingleResolver.src/M000173.html +24 -0
  343. data/doc/classes/Dnsruby/SingleResolver.src/M000174.html +36 -0
  344. data/doc/classes/Dnsruby/SingleResolver.src/M000175.html +18 -0
  345. data/doc/classes/Dnsruby/SingleResolver.src/M000176.html +19 -0
  346. data/doc/classes/Dnsruby/SingleResolver.src/M000177.html +50 -0
  347. data/doc/classes/Dnsruby/SingleResolver.src/M000178.html +19 -0
  348. data/doc/classes/Dnsruby/SingleResolver.src/M000179.html +21 -0
  349. data/doc/classes/Dnsruby/SingleResolver.src/M000180.html +25 -0
  350. data/doc/classes/Dnsruby/SingleResolver.src/M000181.html +54 -0
  351. data/doc/classes/Dnsruby/SingleResolver.src/M000182.html +27 -0
  352. data/doc/classes/Dnsruby/SingleResolver.src/M000183.html +27 -0
  353. data/doc/classes/Dnsruby/SingleResolver.src/M000184.html +35 -0
  354. data/doc/classes/Dnsruby/SingleResolver.src/M000185.html +21 -0
  355. data/doc/classes/Dnsruby/TheLog.html +196 -0
  356. data/doc/classes/Dnsruby/TheLog.src/M000246.html +20 -0
  357. data/doc/classes/Dnsruby/TheLog.src/M000247.html +20 -0
  358. data/doc/classes/Dnsruby/TheLog.src/M000248.html +20 -0
  359. data/doc/classes/Dnsruby/Types.html +436 -0
  360. data/doc/classes/Dnsruby/Update.html +368 -0
  361. data/doc/classes/Dnsruby/Update.src/M000253.html +32 -0
  362. data/doc/classes/Dnsruby/Update.src/M000254.html +36 -0
  363. data/doc/classes/Dnsruby/Update.src/M000255.html +32 -0
  364. data/doc/classes/Dnsruby/Update.src/M000256.html +41 -0
  365. data/doc/classes/Dnsruby/Update.src/M000257.html +34 -0
  366. data/doc/classes/Dnsruby/VerifyError.html +119 -0
  367. data/doc/classes/Dnsruby/ZoneTransfer.html +300 -0
  368. data/doc/classes/Dnsruby/ZoneTransfer.src/M000143.html +18 -0
  369. data/doc/classes/Dnsruby/ZoneTransfer.src/M000144.html +24 -0
  370. data/doc/classes/Dnsruby/ZoneTransfer.src/M000145.html +35 -0
  371. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +200 -0
  372. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000146.html +19 -0
  373. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000147.html +19 -0
  374. data/doc/created.rid +1 -0
  375. data/doc/files/lib/Dnsruby/Config_rb.html +101 -0
  376. data/doc/files/lib/Dnsruby/DNS_rb.html +110 -0
  377. data/doc/files/lib/Dnsruby/Hosts_rb.html +108 -0
  378. data/doc/files/lib/Dnsruby/Resolver_rb.html +109 -0
  379. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +108 -0
  380. data/doc/files/lib/Dnsruby/TheLog_rb.html +110 -0
  381. data/doc/files/lib/Dnsruby/code_mapper_rb.html +101 -0
  382. data/doc/files/lib/Dnsruby/dnssec_rb.html +107 -0
  383. data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +108 -0
  384. data/doc/files/lib/Dnsruby/ipv4_rb.html +101 -0
  385. data/doc/files/lib/Dnsruby/ipv6_rb.html +101 -0
  386. data/doc/files/lib/Dnsruby/message_rb.html +109 -0
  387. data/doc/files/lib/Dnsruby/name_rb.html +101 -0
  388. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +101 -0
  389. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +101 -0
  390. data/doc/files/lib/Dnsruby/resource/A_rb.html +101 -0
  391. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +101 -0
  392. data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +101 -0
  393. data/doc/files/lib/Dnsruby/resource/DS_rb.html +101 -0
  394. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +101 -0
  395. data/doc/files/lib/Dnsruby/resource/IN_rb.html +112 -0
  396. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +101 -0
  397. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +101 -0
  398. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +101 -0
  399. data/doc/files/lib/Dnsruby/resource/MX_rb.html +101 -0
  400. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +101 -0
  401. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +101 -0
  402. data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +101 -0
  403. data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +101 -0
  404. data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +101 -0
  405. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +101 -0
  406. data/doc/files/lib/Dnsruby/resource/PX_rb.html +101 -0
  407. data/doc/files/lib/Dnsruby/resource/RP_rb.html +101 -0
  408. data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +101 -0
  409. data/doc/files/lib/Dnsruby/resource/RT_rb.html +101 -0
  410. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +101 -0
  411. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +101 -0
  412. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +101 -0
  413. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +101 -0
  414. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +114 -0
  415. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +108 -0
  416. data/doc/files/lib/Dnsruby/resource/X25_rb.html +101 -0
  417. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +101 -0
  418. data/doc/files/lib/Dnsruby/resource/generic_rb.html +131 -0
  419. data/doc/files/lib/Dnsruby/resource/resource_rb.html +110 -0
  420. data/doc/files/lib/Dnsruby/select_thread_rb.html +111 -0
  421. data/doc/files/lib/Dnsruby/update_rb.html +101 -0
  422. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +101 -0
  423. data/doc/files/lib/dnsruby_rb.html +118 -0
  424. data/doc/fr_class_index.html +108 -0
  425. data/doc/fr_file_index.html +75 -0
  426. data/doc/fr_method_index.html +321 -0
  427. data/doc/index.html +24 -0
  428. data/lib/Dnsruby/Config.rb +363 -0
  429. data/lib/Dnsruby/DNS.rb +293 -0
  430. data/lib/Dnsruby/Hosts.rb +126 -0
  431. data/lib/Dnsruby/Resolver.rb +999 -0
  432. data/lib/Dnsruby/SingleResolver.rb +493 -0
  433. data/lib/Dnsruby/TheLog.rb +60 -0
  434. data/lib/Dnsruby/code_mapper.rb +165 -0
  435. data/lib/Dnsruby/dnssec.rb +357 -0
  436. data/lib/Dnsruby/event_machine_interface.rb +264 -0
  437. data/lib/Dnsruby/ipv4.rb +74 -0
  438. data/lib/Dnsruby/ipv6.rb +144 -0
  439. data/lib/Dnsruby/message.rb +961 -0
  440. data/lib/Dnsruby/name.rb +332 -0
  441. data/lib/Dnsruby/resource/A.rb +56 -0
  442. data/lib/Dnsruby/resource/AAAA.rb +54 -0
  443. data/lib/Dnsruby/resource/AFSDB.rb +68 -0
  444. data/lib/Dnsruby/resource/CERT.rb +89 -0
  445. data/lib/Dnsruby/resource/DNSKEY.rb +242 -0
  446. data/lib/Dnsruby/resource/DS.rb +162 -0
  447. data/lib/Dnsruby/resource/HINFO.rb +52 -0
  448. data/lib/Dnsruby/resource/IN.rb +70 -0
  449. data/lib/Dnsruby/resource/ISDN.rb +54 -0
  450. data/lib/Dnsruby/resource/LOC.rb +255 -0
  451. data/lib/Dnsruby/resource/MINFO.rb +70 -0
  452. data/lib/Dnsruby/resource/MX.rb +66 -0
  453. data/lib/Dnsruby/resource/NAPTR.rb +90 -0
  454. data/lib/Dnsruby/resource/NSAP.rb +172 -0
  455. data/lib/Dnsruby/resource/NSEC.rb +243 -0
  456. data/lib/Dnsruby/resource/NSEC3.rb +173 -0
  457. data/lib/Dnsruby/resource/NSEC3PARAM.rb +120 -0
  458. data/lib/Dnsruby/resource/OPT.rb +210 -0
  459. data/lib/Dnsruby/resource/PX.rb +71 -0
  460. data/lib/Dnsruby/resource/RP.rb +67 -0
  461. data/lib/Dnsruby/resource/RRSIG.rb +256 -0
  462. data/lib/Dnsruby/resource/RT.rb +67 -0
  463. data/lib/Dnsruby/resource/SOA.rb +95 -0
  464. data/lib/Dnsruby/resource/SPF.rb +29 -0
  465. data/lib/Dnsruby/resource/SRV.rb +112 -0
  466. data/lib/Dnsruby/resource/TKEY.rb +163 -0
  467. data/lib/Dnsruby/resource/TSIG.rb +584 -0
  468. data/lib/Dnsruby/resource/TXT.rb +76 -0
  469. data/lib/Dnsruby/resource/X25.rb +53 -0
  470. data/lib/Dnsruby/resource/domain_name.rb +54 -0
  471. data/lib/Dnsruby/resource/generic.rb +151 -0
  472. data/lib/Dnsruby/resource/resource.rb +561 -0
  473. data/lib/Dnsruby/select_thread.rb +449 -0
  474. data/lib/Dnsruby/update.rb +262 -0
  475. data/lib/Dnsruby/zone_transfer.rb +332 -0
  476. data/lib/dnsruby.rb +512 -0
  477. data/test/custom.txt +4 -0
  478. data/test/resolv.conf +4 -0
  479. data/test/tc_axfr.rb +32 -0
  480. data/test/tc_dns.rb +230 -0
  481. data/test/tc_dnskey.rb +52 -0
  482. data/test/tc_dnsruby.rb +42 -0
  483. data/test/tc_dnssec.rb +88 -0
  484. data/test/tc_ds.rb +38 -0
  485. data/test/tc_escapedchars.rb +484 -0
  486. data/test/tc_event_machine_deferrable.rb +85 -0
  487. data/test/tc_event_machine_res.rb +174 -0
  488. data/test/tc_event_machine_single_res.rb +101 -0
  489. data/test/tc_event_machine_soak.rb +98 -0
  490. data/test/tc_header.rb +104 -0
  491. data/test/tc_misc.rb +139 -0
  492. data/test/tc_name.rb +53 -0
  493. data/test/tc_nsec.rb +36 -0
  494. data/test/tc_nsec3.rb +63 -0
  495. data/test/tc_nsec3param.rb +30 -0
  496. data/test/tc_packet.rb +179 -0
  497. data/test/tc_packet_unique_push.rb +102 -0
  498. data/test/tc_question.rb +51 -0
  499. data/test/tc_res_config.rb +92 -0
  500. data/test/tc_res_env.rb +51 -0
  501. data/test/tc_res_file.rb +42 -0
  502. data/test/tc_res_opt.rb +187 -0
  503. data/test/tc_resolver.rb +184 -0
  504. data/test/tc_rr-opt.rb +82 -0
  505. data/test/tc_rr-txt.rb +137 -0
  506. data/test/tc_rr-unknown.rb +99 -0
  507. data/test/tc_rr.rb +258 -0
  508. data/test/tc_rrset.rb +58 -0
  509. data/test/tc_rrsig.rb +32 -0
  510. data/test/tc_single_resolver.rb +169 -0
  511. data/test/tc_soak.rb +200 -0
  512. data/test/tc_soak_base.rb +136 -0
  513. data/test/tc_tcp.rb +35 -0
  514. data/test/tc_tkey.rb +75 -0
  515. data/test/tc_tsig.rb +237 -0
  516. data/test/tc_update.rb +215 -0
  517. data/test/ts_dnsruby.rb +17 -0
  518. data/test/ts_offline.rb +42 -0
  519. data/test/ts_online.rb +107 -0
  520. metadata +627 -0
@@ -0,0 +1,76 @@
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 'shellwords'
17
+ module Dnsruby
18
+ class RR
19
+ #Class for DNS Text (TXT) resource records.
20
+ #RFC 1035 Section 3.3.14
21
+ class TXT < RR
22
+ ClassValue = nil #:nodoc: all
23
+ TypeValue = Types::TXT #:nodoc: all
24
+
25
+ #List of the individual elements
26
+ attr_accessor :strings
27
+
28
+ def data
29
+ @strings[0]
30
+ end
31
+
32
+ def from_data(data)
33
+ @strings = data
34
+ end
35
+
36
+ def from_hash(hash)
37
+ if (hash.has_key?:strings)
38
+ from_string(hash[:strings])
39
+ end
40
+ end
41
+
42
+ def from_string(input)
43
+ words = Shellwords.shellwords(input)
44
+
45
+ @strings=[]
46
+
47
+ if (words != nil)
48
+ words.each { |string|
49
+ string .gsub!(/\\"/, '"')
50
+ @strings.push(string)
51
+ }
52
+ end
53
+ end
54
+
55
+ def rdata_to_string
56
+ if (defined?@strings)
57
+ temp = @strings.map {|str|
58
+ str.gsub(/"/, '\\"')
59
+ %<"#{str}">
60
+ }
61
+ return temp.join(' ')
62
+ end
63
+ return ''
64
+ end
65
+
66
+ def encode_rdata(msg, canonical=false) #:nodoc: all
67
+ msg.put_string_list(@strings)
68
+ end
69
+
70
+ def self.decode_rdata(msg) #:nodoc: all
71
+ strings = msg.get_string_list
72
+ return self.new(strings)
73
+ end
74
+ end
75
+ end
76
+ end
@@ -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, canonical=false) #: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,54 @@
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
+ # Abstract superclass for RR's which have a 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
+ @domainname=Name.create(newname)
25
+ end
26
+
27
+ alias domainname= set_domain_name
28
+
29
+ def from_hash(hash) #:nodoc: all
30
+ set_domain_name(hash[:domainname])
31
+ end
32
+
33
+ def from_data(data) #:nodoc: all
34
+ @domainname = data
35
+ end
36
+
37
+ def from_string(input) #:nodoc: all
38
+ set_domain_name(input)
39
+ end
40
+
41
+ def rdata_to_string #:nodoc: all
42
+ return @domainname.to_s
43
+ end
44
+
45
+ def encode_rdata(msg, canonical=false) #:nodoc: all
46
+ msg.put_name(@domainname, canonical)
47
+ end
48
+
49
+ def self.decode_rdata(msg) #:nodoc: all
50
+ return self.new(msg.get_name)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,151 @@
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
+ #data for the generic resource record
21
+ attr_reader :data
22
+
23
+ def from_data(data) #:nodoc: all
24
+ @data = data[0]
25
+ end
26
+
27
+ def rdata_to_string #:nodoc: all
28
+ if (@data!=nil)
29
+ return "\\# " + @data.length.to_s + " " + @data.unpack("H*")[0]
30
+ end
31
+ return "#NO DATA"
32
+ end
33
+
34
+ def from_string(data) #:nodoc: all
35
+ @data = data
36
+ end
37
+
38
+ def encode_rdata(msg, canonical=false) #:nodoc: all
39
+ msg.put_bytes(data)
40
+ end
41
+
42
+ def self.decode_rdata(msg) #:nodoc: all
43
+ return self.new(msg.get_bytes)
44
+ end
45
+
46
+ def self.create(type_value, class_value) #:nodoc:
47
+ c = Class.new(Generic)
48
+ # c.type = type_value
49
+ # c.klass = class_value
50
+ c.const_set(:TypeValue, type_value)
51
+ c.const_set(:ClassValue, class_value)
52
+ Generic.const_set("Type#{type_value}_Class#{class_value}", c)
53
+ ClassHash[[type_value, class_value]] = c
54
+ return c
55
+ end
56
+ end
57
+
58
+ #--
59
+ # Standard (class generic) RRs
60
+ #++
61
+ #NS RR
62
+ #Nameserver resource record
63
+ class NS < DomainName
64
+ ClassValue = nil #:nodoc: all
65
+ TypeValue = Types::NS #:nodoc: all
66
+
67
+ alias nsdname domainname
68
+ alias nsdname= domainname=
69
+ end
70
+
71
+ #CNAME RR
72
+ #The canonical name for an alias
73
+ class CNAME < DomainName
74
+ ClassValue = nil #:nodoc: all
75
+ TypeValue = Types::CNAME #:nodoc: all
76
+
77
+ alias cname domainname
78
+ alias cname= domainname=
79
+ end
80
+
81
+ #DNAME RR
82
+ class DNAME < DomainName
83
+ ClassValue = nil #:nodoc: all
84
+ TypeValue = Types::DNAME #:nodoc: all
85
+
86
+ alias dname domainname
87
+ alias dname= domainname=
88
+ end
89
+
90
+ #MB RR
91
+ class MB < DomainName
92
+ ClassValue = nil #:nodoc: all
93
+ TypeValue = Types::MB #:nodoc: all
94
+ alias madname domainname
95
+ alias madname= domainname=
96
+ end
97
+
98
+ #MG RR
99
+ class MG < DomainName
100
+ ClassValue = nil #:nodoc: all
101
+ TypeValue = Types::MG #:nodoc: all
102
+ alias mgmname domainname
103
+ alias mgmname= domainname=
104
+ end
105
+
106
+ #MR RR
107
+ class MR < DomainName
108
+ ClassValue = nil #:nodoc: all
109
+ TypeValue = Types::MR #:nodoc: all
110
+ alias newname domainname
111
+ alias newname= domainname=
112
+ end
113
+
114
+ #PTR RR
115
+ class PTR < DomainName
116
+ ClassValue = nil #:nodoc: all
117
+ TypeValue = Types::PTR #:nodoc: all
118
+ end
119
+
120
+ #ANY RR
121
+ # A Query type requesting any RR
122
+ class ANY < RR
123
+ ClassValue = nil #:nodoc: all
124
+ TypeValue = Types::ANY #:nodoc: all
125
+ end
126
+ end
127
+ end
128
+ require 'Dnsruby/resource/HINFO'
129
+ require 'Dnsruby/resource/MINFO'
130
+ require 'Dnsruby/resource/ISDN'
131
+ require 'Dnsruby/resource/MX'
132
+ require 'Dnsruby/resource/NAPTR'
133
+ require 'Dnsruby/resource/NSAP'
134
+ require 'Dnsruby/resource/PX'
135
+ require 'Dnsruby/resource/RP'
136
+ require 'Dnsruby/resource/RT'
137
+ require 'Dnsruby/resource/SOA'
138
+ require 'Dnsruby/resource/TXT'
139
+ require 'Dnsruby/resource/X25'
140
+ require 'Dnsruby/resource/SPF'
141
+ require 'Dnsruby/resource/CERT'
142
+ require 'Dnsruby/resource/LOC'
143
+ require 'Dnsruby/resource/OPT'
144
+ require 'Dnsruby/resource/TSIG'
145
+ require 'Dnsruby/resource/TKEY'
146
+ require 'Dnsruby/resource/DNSKEY'
147
+ require 'Dnsruby/resource/RRSIG'
148
+ require 'Dnsruby/resource/NSEC'
149
+ require 'Dnsruby/resource/DS'
150
+ require 'Dnsruby/resource/NSEC3'
151
+ require 'Dnsruby/resource/NSEC3PARAM'
@@ -0,0 +1,561 @@
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
+ # This class also stores the RRSIG records which cover the RRSet
25
+ class RRSet
26
+ # The number of RRSIGs stored in this RRSet
27
+ attr_reader :num_sigs
28
+ def initialize(rrs = [])
29
+ if (!rrs.instance_of?Array)
30
+ rrs = [rrs]
31
+ end
32
+ @rrs = []
33
+ @num_sigs = 0
34
+ rrs.each {|rr| add(rr)}
35
+ end
36
+ # The RRSIGs stored with this RRSet
37
+ def sigs
38
+ return @rrs[@rrs.length-@num_sigs, @num_sigs]
39
+ end
40
+ # The RRs (not RRSIGs) stored in this RRSet
41
+ def rrs
42
+ return @rrs[0, @rrs.length-@num_sigs]
43
+ end
44
+ def privateAdd(r) #:nodoc:
45
+ if @rrs.include?r
46
+ return true
47
+ end
48
+ new_pos = @rrs.length - @num_sigs
49
+ if ((@num_sigs == @rrs.length) && @num_sigs > 0) # if we added RRSIG first
50
+ if (r.type != @rrs.last.type_covered)
51
+ return false
52
+ end
53
+ end
54
+ if (r.type == Types.RRSIG)
55
+ new_pos = @rrs.length
56
+ @num_sigs += 1
57
+ end
58
+ @rrs.insert(new_pos, r)
59
+ return true
60
+ end
61
+
62
+ #Add the RR to this RRSet
63
+ def add(r)
64
+ if (r.instance_of?RRSet)
65
+ ret = false
66
+ [r.rrs, r.sigs].each {|rr| ret = add(rr)}
67
+ return ret
68
+ end
69
+ r = RR.create(r.to_s) # clone the record
70
+ if (@rrs.size() == 0) # && !(r.type == Types.RRSIG))
71
+ return privateAdd(r)
72
+ end
73
+ # Check the type, klass and ttl are correct
74
+ first = @rrs[0]
75
+ if (!r.sameRRset(first))
76
+ return false
77
+ # raise ArgumentError.new("record does not match rrset")
78
+ end
79
+
80
+ if (!(r.type == Types.RRSIG) && (!(first.type == Types.RRSIG)))
81
+ if (r.ttl != first.ttl) # RFC2181, section 5.2
82
+ if (r.ttl > first.ttl)
83
+ r.ttl=(first.ttl)
84
+ else
85
+ @rrs.each do |rr|
86
+ rr.ttl = r.ttl
87
+ end
88
+ end
89
+ end
90
+ end
91
+
92
+ return privateAdd(r)
93
+ return true
94
+ end
95
+
96
+ #Return a new RRset which contains the RRs from this
97
+ #RRset into canonical order (RFC 4034 section 6)
98
+ def sort_canonical
99
+ #Make a list, for all the RRs, where each RR contributes
100
+ #the canonical RDATA encoding
101
+ canonical_rrs = []
102
+ self.rrs.each do |rr|
103
+ data = MessageEncoder.new {|msg|
104
+ msg.put_rr(rr, true)
105
+ }.to_s
106
+ canonical_rrs.push(data)
107
+ end
108
+
109
+ # Check there are no identical records - if there are duplicated entries
110
+ # then remove them
111
+ canonical_rrs.uniq!
112
+
113
+ #Sort it (the absence of an octet sorts before a zero octet.)
114
+ canonical_rrs.sort!
115
+
116
+ return_rrs = RRSet.new
117
+ canonical_rrs.each {|rr|
118
+ MessageDecoder.new(rr) {|msg|
119
+ new_rr = msg.get_rr
120
+ return_rrs.add(new_rr)
121
+ }
122
+ }
123
+ return return_rrs
124
+ end
125
+
126
+ #Delete the RR from this RRSet
127
+ def delete(rr)
128
+ @rrs.delete(rr)
129
+ end
130
+ def each
131
+ @rrs.each do |rr|
132
+ yield rr
133
+ end
134
+ end
135
+ def [](index)
136
+ return @rrs[index]
137
+ end
138
+ #Return the type of this RRSet
139
+ def type
140
+ return @rrs[0].type
141
+ end
142
+ #Return the klass of this RRSet
143
+ def klass
144
+ return @rrs[0].klass
145
+ end
146
+ #Return the ttl of this RRSet
147
+ def ttl
148
+ return @rrs[0].ttl
149
+ end
150
+ def ttl=(ttl)
151
+ [rrs, sigs].each {|rrs|
152
+ rrs.each {|rr|
153
+ rr.ttl = ttl
154
+ }
155
+ }
156
+ end
157
+ def name
158
+ return @rrs[0].name
159
+ end
160
+ def to_s
161
+ ret = ""
162
+ each {|rec|
163
+ ret += rec.to_s + "\n"
164
+ }
165
+ return ret
166
+ end
167
+ def length
168
+ return @rrs.length
169
+ end
170
+ end
171
+
172
+ #Superclass for all Dnsruby resource records.
173
+ #
174
+ #Represents a DNS RR (resource record) [RFC1035, section 3.2]
175
+ #
176
+ #Use Dnsruby::RR::create(...) to create a new RR record.
177
+ #
178
+ # mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
179
+ #
180
+ # rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 7200,
181
+ # :preference => 10, :exchange => "mailhost.example.com"})
182
+ #
183
+ # s = rr.to_s # Get a String representation of the RR (in zone file format)
184
+ # rr_again = Dnsruby::RR.create(s)
185
+ #
186
+ class RR
187
+
188
+ # A regular expression which catches any valid resource record.
189
+ @@RR_REGEX = Regexp.new("^\\s*(\\S+)\\s*(\\d+)?\\s*(#{Classes.regexp +
190
+ "|CLASS\\d+"})?\\s*(#{Types.regexp + '|TYPE\\d+'})?\\s*([\\s\\S]*)\$") #:nodoc: all
191
+
192
+ #The Resource's domain name
193
+ attr_reader :name
194
+ #The Resource type
195
+ attr_reader :type
196
+ #The Resource class
197
+ attr_reader :klass
198
+ #The Resource Time-To-Live
199
+ attr_accessor :ttl
200
+ #The Resource data section
201
+ attr_accessor :rdata
202
+
203
+ def rdlength
204
+ return rdata.length
205
+ end
206
+
207
+ def name=(newname)
208
+ if (!(newname.kind_of?Name))
209
+ @name=Name.create(newname)
210
+ else
211
+ @name = newname
212
+ end
213
+ end
214
+
215
+ def type=(type)
216
+ @type = Types.new(type)
217
+ end
218
+ alias :rr_type :type
219
+
220
+ def klass=(klass)
221
+ @klass= Classes.new(klass)
222
+ end
223
+
224
+ # Determines if two Records could be part of the same RRset.
225
+ # This compares the name, type, and class of the Records; the ttl and
226
+ # rdata are not compared.
227
+ def sameRRset(rec)
228
+ if (@klass != rec.klass || @name != rec.name)
229
+ return false
230
+ end
231
+ [rec, self].each { |rr|
232
+ if (rr.type == Types.RRSIG)
233
+ return ((@type == rr.type_covered) || (rec.type == rr.type_covered))
234
+ end
235
+ }
236
+ return (@type == rec.type)
237
+ end
238
+
239
+ def init_defaults
240
+ # Default to do nothing
241
+ end
242
+
243
+ private
244
+ def initialize(*args) #:nodoc: all
245
+ init_defaults
246
+ if (args.length > 0)
247
+ if (args[0].class == Hash)
248
+ from_hash(args[0])
249
+ return
250
+ else
251
+ @rdata = args[0]
252
+ if (args[0].class == String)
253
+ from_string(args[0])
254
+ return
255
+ else
256
+ from_data(args[0])
257
+ return
258
+ end
259
+ end
260
+ end
261
+ # raise ArgumentError.new("Don't call new! Use Dnsruby::RR::create() instead")
262
+ end
263
+ public
264
+
265
+ def from_hash(hash) #:nodoc: all
266
+ hash.keys.each do |param|
267
+ send(param.to_s+"=", hash[param])
268
+ end
269
+ end
270
+
271
+ #Create a new RR from the hash. The name is required; all other fields are optional.
272
+ #Type defaults to ANY and the Class defaults to IN. The TTL defaults to 0.
273
+ #
274
+ #If the type is specified, then it is necessary to provide ALL of the resource record fields which
275
+ #are specific to that record; i.e. for
276
+ #an MX record, you would need to specify the exchange and the preference
277
+ #
278
+ # require 'Dnsruby'
279
+ # rr = Dnsruby::RR.new_from_hash({:name => "example.com"})
280
+ # rr = Dnsruby::RR.new_from_hash({:name => "example.com", :type => Types.MX, :ttl => 10, :preference => 5, :exchange => "mx1.example.com"})
281
+ def RR.new_from_hash(inhash)
282
+ hash = inhash.clone
283
+ type = hash[:type] || Types::ANY
284
+ klass = hash[:klass] || Classes::IN
285
+ ttl = hash[:ttl] || 0
286
+ recordclass = get_class(type, klass)
287
+ record = recordclass.new
288
+ record.name=hash[:name]
289
+ if !(record.name.kind_of?Name)
290
+ record.name = Name.create(record.name)
291
+ end
292
+ record.ttl=ttl
293
+ record.type = type
294
+ record.klass = klass
295
+ hash.delete(:name)
296
+ hash.delete(:type)
297
+ hash.delete(:ttl)
298
+ hash.delete(:klass)
299
+ record.from_hash(hash)
300
+ return record
301
+ end
302
+
303
+ #Returns a Dnsruby::RR object of the appropriate type and
304
+ #initialized from the string passed by the user. The format of the
305
+ #string is that used in zone files, and is compatible with the string
306
+ #returned by Net::DNS::RR.inspect
307
+ #
308
+ #The name and RR type are required; all other information is optional.
309
+ #If omitted, the TTL defaults to 0 and the RR class defaults to IN.
310
+ #
311
+ #All names must be fully qualified. The trailing dot (.) is optional.
312
+ #
313
+ #
314
+ # a = Dnsruby::RR.new_from_string("foo.example.com. 86400 A 10.1.2.3")
315
+ # mx = Dnsruby::RR.new_from_string("example.com. 7200 MX 10 mailhost.example.com.")
316
+ # cname = Dnsruby::RR.new_from_string("www.example.com 300 IN CNAME www1.example.com")
317
+ # txt = Dnsruby::RR.new_from_string('baz.example.com 3600 HS TXT "text record"')
318
+ #
319
+ #
320
+ def RR.new_from_string(rrstring)
321
+ # strip out comments
322
+ # Test for non escaped ";" by means of the look-behind assertion
323
+ # (the backslash is escaped)
324
+ rrstring.gsub!(/(\?<!\\);.*/o, "");
325
+
326
+ if ((rrstring =~/#{@@RR_REGEX}/xo) == nil)
327
+ raise Exception, "#{rrstring} did not match RR pat.\nPlease report this to the author!\n"
328
+ end
329
+
330
+ name = $1;
331
+ ttl = $2.to_i || 0;
332
+ rrclass = $3 || '';
333
+
334
+
335
+ rrtype = $4 || '';
336
+ rdata = $5 || '';
337
+
338
+ if rdata
339
+ rdata.gsub!(/\s+$/o, "")
340
+ end
341
+ if name
342
+ name.gsub!(/\.$/o, "");
343
+ end
344
+
345
+
346
+ # RFC3597 tweaks
347
+ # This converts to known class and type if specified as TYPE###
348
+ if rrtype =~/^TYPE\d+/o
349
+ rrtype = Dnsruby::Types.typesbyval(Dnsruby::Types::typesbyname(rrtype))
350
+ end
351
+ if rrclass =~/^CLASS\d+/o
352
+ rrclass = Dnsruby::Classes.classesbyval(Dnsruby::Classes::classesbyname(rrclass))
353
+ end
354
+
355
+
356
+ if (rrtype=='' && rrclass && rrclass == 'ANY')
357
+ rrtype = 'ANY';
358
+ rrclass = 'IN';
359
+ elsif (rrclass=='')
360
+ rrclass = 'IN';
361
+ end
362
+
363
+ if (rrtype == '')
364
+ rrtype = 'ANY';
365
+ end
366
+
367
+ if (implemented_rrs.include?(rrtype) && rdata !~/^\s*\\#/o )
368
+ subclass = _get_subclass(name, rrtype, rrclass, ttl, rdata)
369
+ return subclass
370
+ elsif (implemented_rrs.include?(rrtype)) # A known RR type starting with \#
371
+ rdata =~ /\\\#\s+(\d+)\s+(.*)$/o;
372
+
373
+ rdlength = $1.to_i;
374
+ hexdump = $2;
375
+ hexdump.gsub!(/\s*/, "");
376
+
377
+ if hexdump.length() != rdlength*2
378
+ raise Exception, "#{rdata} is inconsistent; length does not match content"
379
+ end
380
+
381
+ rdata = [hexdump].pack('H*');
382
+
383
+ return new_from_data(name, rrtype, rrclass, ttl, rdlength, rdata, 0) # rdata.length() - rdlength);
384
+ elsif (rdata=~/\s*\\\#\s+\d+\s+/o)
385
+ #We are now dealing with the truly unknown.
386
+ raise Exception, 'Expected RFC3597 representation of RDATA' unless rdata =~/\\\#\s+(\d+)\s+(.*)$/o;
387
+
388
+ rdlength = $1.to_i;
389
+ hexdump = $2;
390
+ hexdump.gsub!(/\s*/o, "");
391
+
392
+ if hexdump.length() != rdlength*2
393
+ raise Exception, "#{rdata} is inconsistent; length does not match content" ;
394
+ end
395
+
396
+ rdata = [hexdump].pack('H*');
397
+
398
+ return new_from_data(name,rrtype,rrclass,ttl,rdlength,rdata,0) # rdata.length() - rdlength);
399
+ else
400
+ #God knows how to handle these...
401
+ subclass = _get_subclass(name, rrtype, rrclass, ttl, "")
402
+ return subclass
403
+ end
404
+ end
405
+
406
+ def RR.new_from_data(*args) #:nodoc: all
407
+ name = args[0]
408
+ rrtype = args[1]
409
+ rrclass = args[2]
410
+ ttl = args[3]
411
+ rdlength = args[4]
412
+ data = args[5]
413
+ offset = args[6]
414
+ rdata = data[offset, rdlength]
415
+
416
+ record = nil
417
+ MessageDecoder.new(rdata) {|msg|
418
+ record = get_class(rrtype, rrclass).decode_rdata(msg)
419
+ }
420
+ record.name = name
421
+ record.ttl = ttl
422
+ record.type = rrtype
423
+ record.klass = rrclass
424
+
425
+ return record
426
+ end
427
+
428
+ #Return an array of all the currently implemented RR types
429
+ def RR.implemented_rrs
430
+ return ClassHash.keys.map {|k| Dnsruby::Types.to_string(k[0])}
431
+ end
432
+
433
+ private
434
+ def RR._get_subclass(name, rrtype, rrclass, ttl, rdata) #:nodoc: all
435
+ return unless (rrtype!=nil)
436
+ record = get_class(rrtype, rrclass).new(rdata)
437
+ record.name = name
438
+ record.ttl = ttl
439
+ record.type = rrtype
440
+ record.klass = rrclass
441
+ return record
442
+ end
443
+ public
444
+
445
+ #Returns a string representation of the RR in zone file format
446
+ def to_s
447
+ return (@name ? @name.to_s():"") + ".\t" +(@ttl ? @ttl.to_s():"") + "\t" + (klass() ? klass.to_s():"") + "\t" + (type() ? type.to_s():"") + "\t" + rdata_to_string
448
+ end
449
+
450
+ #Get a string representation of the data section of the RR (in zone file format)
451
+ def rdata_to_string
452
+ if (@rdata && @rdata.length > 0)
453
+ return @rdata
454
+ else
455
+ return "no rdata"
456
+ end
457
+ end
458
+
459
+ def from_data(data) #:nodoc: all
460
+ # to be implemented by subclasses
461
+ raise NotImplementedError.new
462
+ end
463
+
464
+ def from_string(input) #:nodoc: all
465
+ # to be implemented by subclasses
466
+ # raise NotImplementedError.new
467
+ end
468
+
469
+ def encode_rdata(msg, canonical=false) #:nodoc: all
470
+ # to be implemented by subclasses
471
+ raise EncodeError.new("#{self.class} is RR.")
472
+ end
473
+
474
+ def self.decode_rdata(msg) #:nodoc: all
475
+ # to be implemented by subclasses
476
+ raise DecodeError.new("#{self.class} is RR.")
477
+ end
478
+
479
+ def ==(other)
480
+ return false unless self.class == other.class
481
+ s_ivars = self.instance_variables
482
+ s_ivars.sort!
483
+ s_ivars.delete "@ttl" # RFC 2136 section 1.1
484
+
485
+ o_ivars = other.instance_variables
486
+ o_ivars.sort!
487
+ o_ivars.delete "@ttl" # RFC 2136 section 1.1
488
+
489
+ return s_ivars == o_ivars &&
490
+ s_ivars.collect {|name| self.instance_variable_get name} ==
491
+ o_ivars.collect {|name| other.instance_variable_get name}
492
+ end
493
+
494
+ def eql?(other) #:nodoc:
495
+ return self == other
496
+ end
497
+
498
+ def hash # :nodoc:
499
+ h = 0
500
+ vars = self.instance_variables
501
+ vars.delete "@ttl"
502
+ vars.each {|name|
503
+ h ^= self.instance_variable_get(name).hash
504
+ }
505
+ return h
506
+ end
507
+
508
+ #Get an RR of the specified type and class
509
+ def self.get_class(type_value, class_value) #:nodoc: all
510
+ # if (type_value == Types.OPT)
511
+ # return Class.new(OPT)
512
+ # end
513
+ if (type_value.class == Class)
514
+ type_value = type_value.const_get(:TypeValue)
515
+ return ClassHash[[type_value, Classes.to_code(class_value)]] ||
516
+ Generic.create(type_value, Classes.to_code(class_value))
517
+ else
518
+ if (type_value.class == Types)
519
+ type_value = type_value.code
520
+ else
521
+ type_value = Types.new(type_value).code
522
+ end
523
+ if (class_value.class == Classes)
524
+ class_value = class_value.code
525
+ else
526
+ class_value = Classes.new(class_value).code
527
+ end
528
+ return ClassHash[[type_value, class_value]] ||
529
+ Generic.create(type_value, class_value)
530
+ end
531
+ return ret
532
+ end
533
+
534
+
535
+ #Create a new RR from the arguments, which can be either a String or a Hash.
536
+ #See new_from_string and new_from_hash for details
537
+ #
538
+ # a = Dnsruby::RR.create("foo.example.com. 86400 A 10.1.2.3")
539
+ # mx = Dnsruby::RR.create("example.com. 7200 MX 10 mailhost.example.com.")
540
+ # cname = Dnsruby::RR.create("www.example.com 300 IN CNAME www1.example.com")
541
+ # txt = Dnsruby::RR.create('baz.example.com 3600 HS TXT "text record"')
542
+ #
543
+ # rr = Dnsruby::RR.create({:name => "example.com"})
544
+ # rr = Dnsruby::RR.create({:name => "example.com", :type => "MX", :ttl => 10,
545
+ # :preference => 5, :exchange => "mx1.example.com"})
546
+ #
547
+ def RR.create(*args)
548
+ if (args.length == 1) && (args[0].class == String)
549
+ return new_from_string(args[0])
550
+ elsif (args.length == 1) && (args[0].class == Hash)
551
+ return new_from_hash(args[0])
552
+ else
553
+ return new_from_data(args)
554
+ end
555
+ end
556
+
557
+ end
558
+ end
559
+ require 'Dnsruby/resource/domain_name'
560
+ require 'Dnsruby/resource/generic'
561
+ require 'Dnsruby/resource/IN'