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,961 @@
1
+ #--
2
+ #Copyright 2007 Nominet UK
3
+ #
4
+ #Licensed under the Apache License, Version 2.0 (the "License");
5
+ #you may not use this file except in compliance with the License.
6
+ #You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ #Unless required by applicable law or agreed to in writing, software
11
+ #distributed under the License is distributed on an "AS IS" BASIS,
12
+ #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ #See the License for the specific language governing permissions and
14
+ #limitations under the License.
15
+ #++
16
+ require 'Dnsruby/name'
17
+ require 'Dnsruby/resource/resource'
18
+ module Dnsruby
19
+ #===Defines a DNS packet.
20
+ #
21
+ #RFC 1035 Section 4.1, RFC 2136 Section 2, RFC 2845
22
+ #
23
+ #===Sections
24
+ #Message objects have five sections:
25
+ #
26
+ #* The header section, a Dnsruby::Header object.
27
+ #
28
+ # msg.header=Header.new(...)
29
+ # header = msg.header
30
+ #
31
+ #* The question section, an array of Dnsruby::Question objects.
32
+ #
33
+ # msg.add_question(Question.new(domain, type, klass))
34
+ # msg.each_question do |question| .... end
35
+ #
36
+ #* The answer section, an array of Dnsruby::RR objects.
37
+ #
38
+ # msg.add_answer(RR.create({:name => "a2.example.com",
39
+ # :type => "A", :address => "10.0.0.2"}))
40
+ # msg.each_answer {|answer| ... }
41
+ #
42
+ #* The authority section, an array of Dnsruby::RR objects.
43
+ #
44
+ # msg.add_authority(rr)
45
+ # msg.each_authority {|rr| ... }
46
+ #
47
+ #* The additional section, an array of Dnsruby::RR objects.
48
+ #
49
+ # msg.add_additional(rr)
50
+ # msg.each_additional {|rr| ... }
51
+ #
52
+ #In addition, each_resource iterates the answer, additional
53
+ #and authority sections :
54
+ #
55
+ # msg.each_resource {|rr| ... }
56
+ #
57
+ #===Packet format encoding
58
+ #
59
+ # Dnsruby::Message#encode
60
+ # Dnsruby::Message::decode(data)
61
+ class Message
62
+ class Section < Array
63
+ # Return the rrset of the specified type in this section
64
+ def rrset(type, klass=Classes::IN)
65
+ rrs = select{|rr|
66
+ (type_ok = rr.type==type)
67
+ if (rr.type == Types.RRSIG)
68
+ type_ok = (rr.type_covered == type)
69
+ end
70
+ type_ok && rr.klass == klass
71
+ }
72
+ rrset = RRSet.new
73
+ rrs.each do |rr|
74
+ rrset.add(rr)
75
+ end
76
+ return rrset
77
+ end
78
+
79
+ # Return an array of all the rrsets in the section
80
+ def rrsets
81
+ ret = []
82
+ each do |rr|
83
+ next if (rr.type == Types.OPT)
84
+ found_rrset = false
85
+ ret.each do |rrset|
86
+ found_rrset = rrset.add(rr)
87
+ break if found_rrset
88
+ end
89
+ if (!found_rrset)
90
+ ret.push(RRSet.new(rr))
91
+ end
92
+ end
93
+ return ret
94
+ end
95
+ end
96
+ #Create a new Message. Takes optional name, type and class
97
+ #
98
+ #type defaults to A, and klass defaults to IN
99
+ #
100
+ #* Dnsruby::Message.new("example.com") # defaults to A, IN
101
+ #* Dnsruby::Message.new("example.com", 'AAAA')
102
+ #* Dnsruby::Message.new("example.com", Dnsruby::Types.PTR, "HS")
103
+ #
104
+ def initialize(*args)
105
+ @header = Header.new()
106
+ @question = Section.new
107
+ @answer = Section.new
108
+ @authority = Section.new
109
+ @additional = Section.new
110
+ @tsigstate = :Unsigned
111
+ @signing = false
112
+ @tsigkey = nil
113
+ @answerfrom = nil
114
+ type = Types.A
115
+ klass = Classes.IN
116
+ if (args.length > 0)
117
+ name = args[0]
118
+ if (args.length > 1)
119
+ type = Types.new(args[1])
120
+ if (args.length > 2)
121
+ klass = Classes.new(args[2])
122
+ end
123
+ end
124
+ add_question(name, type, klass)
125
+ end
126
+ end
127
+
128
+ #The question section, an array of Dnsruby::Question objects.
129
+ attr_reader :question
130
+
131
+ #The answer section, an array of Dnsruby::RR objects.
132
+ attr_reader :answer
133
+ #The authority section, an array of Dnsruby::RR objects.
134
+ attr_reader :authority
135
+ #The additional section, an array of Dnsruby::RR objects.
136
+ attr_reader :additional
137
+ #The header section, a Dnsruby::Header object.
138
+ attr_accessor :header
139
+
140
+ #If this Message is a response from a server, then answerfrom contains the address of the server
141
+ attr_accessor :answerfrom
142
+
143
+ #If this Message is a response from a server, then answersize contains the size of the response
144
+ attr_accessor :answersize
145
+
146
+ #If this message has been verified using a TSIG RR then tsigerror contains
147
+ #the error code returned by the TSIG verification. The error will be an RCode
148
+ attr_accessor :tsigerror
149
+
150
+ #Can be
151
+ #* :Unsigned - the default state
152
+ #* :Signed - the outgoing message has been signed
153
+ #* :Verified - the incoming message has been verified
154
+ #* :Intermediate - the incoming message is an intermediate envelope in a TCP session
155
+ #in which only every 100th envelope must be signed
156
+ #* :Failed - the incoming response failed verification
157
+ attr_accessor :tsigstate
158
+
159
+ #--
160
+ attr_accessor :tsigstart
161
+ #++
162
+
163
+ def ==(other)
164
+ ret = false
165
+ if (other.kind_of?Message)
166
+ ret = @header == other.header &&
167
+ @question == other.question &&
168
+ @answer == other.answer &&
169
+ @authority == other.authority &&
170
+ @additional == other.additional
171
+ end
172
+ return ret
173
+ end
174
+
175
+ # # Return the rrset of the specified type in the section
176
+ # def rrset(type, klass=Classes::IN)
177
+ # [@answer, @authority, @additional].each do |section|
178
+ # if ((rrset = section.rrset(type, klass)).length > 0)
179
+ # return rrset
180
+ # end
181
+ # end
182
+ # return nil
183
+ # end
184
+
185
+ # Return a hash, with the section as key, and the RRSets in that
186
+ # section as the data : {section => section_rrs}
187
+ def section_rrsets
188
+ ret = {}
189
+ ["answer", "authority", "additional"].each do |section|
190
+ ret[section] = self.send(section).rrsets
191
+ end
192
+ return ret
193
+ end
194
+
195
+ #Add a new Question to the Message. Takes either a Question,
196
+ #or a name, and an optional type and class.
197
+ #
198
+ #* msg.add_question(Question.new("example.com", 'MX'))
199
+ #* msg.add_question("example.com") # defaults to Types.A, Classes.IN
200
+ #* msg.add_question("example.com", Types.LOC)
201
+ def add_question(question, type=Types.A, klass=Classes.IN)
202
+ if (!question.kind_of?Question)
203
+ question = Question.new(question, type, klass)
204
+ end
205
+ @question << question
206
+ @header.qdcount = @question.length
207
+ end
208
+
209
+ def each_question
210
+ @question.each {|rec|
211
+ yield rec
212
+ }
213
+ end
214
+
215
+
216
+ def add_answer(rr) #:nodoc: all
217
+ if (!@answer.include?rr)
218
+ @answer << rr
219
+ @header.ancount = @answer.length
220
+ end
221
+ end
222
+
223
+ def each_answer
224
+ @answer.each {|rec|
225
+ yield rec
226
+ }
227
+ end
228
+
229
+ def add_authority(rr) #:nodoc: all
230
+ if (!@authority.include?rr)
231
+ @authority << rr
232
+ @header.nscount = @authority.length
233
+ end
234
+ end
235
+
236
+ def each_authority
237
+ @authority.each {|rec|
238
+ yield rec
239
+ }
240
+ end
241
+
242
+ def add_additional(rr) #:nodoc: all
243
+ if (!@additional.include?rr)
244
+ @additional << rr
245
+ @header.arcount = @additional.length
246
+ end
247
+ end
248
+
249
+ def each_additional
250
+ @additional.each {|rec|
251
+ yield rec
252
+ }
253
+ end
254
+
255
+ #Yields each section (question, answer, authority, additional)
256
+ def each_section
257
+ [@answer, @authority, @additional].each {|section| yield section}
258
+ end
259
+
260
+ #Calls each_answer, each_authority, each_additional
261
+ def each_resource
262
+ each_answer {|rec| yield rec}
263
+ each_authority {|rec| yield rec}
264
+ each_additional {|rec| yield rec}
265
+ end
266
+
267
+ # Returns the TSIG record from the ADDITIONAL section, if one is present.
268
+ def tsig
269
+ if (@additional.last)
270
+ if (@additional.last.rr_type == Types.TSIG)
271
+ return @additional.last
272
+ end
273
+ end
274
+ return nil
275
+ end
276
+
277
+ #Sets the TSIG to sign this message with. Can either be a Dnsruby::RR::TSIG
278
+ #object, or it can be a (name, key) tuple, or it can be a hash which takes
279
+ #Dnsruby::RR::TSIG attributes (e.g. name, key, fudge, etc.)
280
+ def set_tsig(*args)
281
+ if (args.length == 1)
282
+ if (args[0].instance_of?RR::TSIG)
283
+ @tsigkey = args[0]
284
+ elsif (args[0].instance_of?Hash)
285
+ @tsigkey = RR.create({:type=>'TSIG', :klass=>'ANY'}.merge(args[0]))
286
+ else
287
+ raise ArgumentError.new("Wrong type of argument to Dnsruby::Message#set_tsig - should be TSIG or Hash")
288
+ end
289
+ elsif (args.length == 2)
290
+ @tsigkey = RR.create({:type=>'TSIG', :klass=>'ANY', :name=>args[0], :key=>args[1]})
291
+ else
292
+ raise ArgumentError.new("Wrong number of arguments to Dnsruby::Message#set_tsig")
293
+ end
294
+ end
295
+
296
+ #Was this message signed by a TSIG?
297
+ def signed?
298
+ return (@tsigstate == :Signed ||
299
+ @tsigstate == :Verified ||
300
+ @tsigstate == :Failed)
301
+ end
302
+
303
+ #If this message was signed by a TSIG, was the TSIG verified?
304
+ def verified?
305
+ return (@tsigstate == :Verified)
306
+ end
307
+
308
+ def to_s
309
+ retval = "";
310
+
311
+ if (@answerfrom != nil && @answerfrom != "")
312
+ retval = retval + ";; Answer received from #{@answerfrom} (#{@answersize} bytes)\n;;\n";
313
+ end
314
+
315
+ retval = retval + ";; HEADER SECTION\n";
316
+ retval = retval + @header.to_s;
317
+ retval = retval + "\n";
318
+
319
+ # @TODO@ OPT pseudosection? EDNS flags, udpsize
320
+
321
+ section = (@header.opcode == OpCode.UPDATE) ? "ZONE" : "QUESTION";
322
+ retval = retval + ";; #{section} SECTION (#{@header.qdcount} record#{@header.qdcount == 1 ? '' : 's'})\n";
323
+ each_question { |qr|
324
+ retval = retval + ";; #{qr.to_s}\n";
325
+ }
326
+
327
+ retval = retval + "\n";
328
+ section = (@header.opcode == OpCode.UPDATE) ? "PREREQUISITE" : "ANSWER";
329
+ retval = retval + ";; #{section} SECTION (#{@header.ancount} record#{@header.ancount == 1 ? '' : 's'})\n";
330
+ each_answer { |rr|
331
+ retval = retval + rr.to_s + "\n";
332
+ }
333
+
334
+ retval = retval + "\n";
335
+ section = (@header.opcode == OpCode.UPDATE) ? "UPDATE" : "AUTHORITY";
336
+ retval = retval + ";; #{section} SECTION (#{@header.nscount} record#{@header.nscount == 1 ? '' : 's'})\n";
337
+ each_authority { |rr|
338
+ retval = retval + rr.to_s + "\n";
339
+ }
340
+
341
+ retval = retval + "\n";
342
+ retval = retval + ";; ADDITIONAL SECTION (#{@header.arcount} record#{@header.arcount == 1 ? '' : 's'})\n";
343
+ each_additional { |rr|
344
+ retval = retval + rr.to_s+ "\n";
345
+ }
346
+
347
+ return retval;
348
+ end
349
+
350
+ #Signs the message. If used with no arguments, then the message must have already
351
+ #been set (set_tsig). Otherwise, the arguments can either be a Dnsruby::RR::TSIG
352
+ #object, or a (name, key) tuple, or a hash which takes
353
+ #Dnsruby::RR::TSIG attributes (e.g. name, key, fudge, etc.)
354
+ #
355
+ #NOTE that this method should only be called by the resolver, rather than the
356
+ #client code. To use signing from the client, call Dnsruby::Resolver#tsig=
357
+ def sign!(*args) #:nodoc: all
358
+ if (args.length > 0)
359
+ set_tsig(*args)
360
+ sign!
361
+ else
362
+ if ((@tsigkey) && @tsigstate == :Unsigned)
363
+ @tsigkey.apply(self)
364
+ end
365
+ end
366
+ end
367
+
368
+ #Return the encoded form of the message
369
+ # If there is a TSIG record present and the record has not been signed
370
+ # then sign it
371
+ def encode
372
+ if ((@tsigkey) && @tsigstate == :Unsigned && !@signing)
373
+ @signing = true
374
+ sign!
375
+ @signing = false
376
+ end
377
+ return MessageEncoder.new {|msg|
378
+ header = @header
379
+ header.encode(msg)
380
+ @question.each {|q|
381
+ msg.put_name(q.qname)
382
+ msg.put_pack('nn', q.qtype.code, q.qclass.code)
383
+ }
384
+ [@answer, @authority, @additional].each {|rr|
385
+ rr.each { |r|
386
+ msg.put_rr(r)
387
+ }
388
+ }
389
+ }.to_s
390
+ end
391
+
392
+ #Decode the encoded message
393
+ def Message.decode(m)
394
+ o = Message.new()
395
+ MessageDecoder.new(m) {|msg|
396
+ o.header = Header.new(msg)
397
+ o.header.qdcount.times {
398
+ question = msg.get_question
399
+ o.question << question
400
+ }
401
+ o.header.ancount.times {
402
+ rr = msg.get_rr
403
+ o.answer << rr
404
+ }
405
+ o.header.nscount.times {
406
+ rr = msg.get_rr
407
+ o.authority << rr
408
+ }
409
+ o.header.arcount.times { |count|
410
+ start = msg.index
411
+ rr = msg.get_rr
412
+ if (rr.type == Types.TSIG)
413
+ if (count!=o.header.arcount-1)
414
+ TheLog.Error("Incoming message has TSIG record before last record")
415
+ raise DecodeError.new("TSIG record present before last record")
416
+ end
417
+ o.tsigstart = start # needed for TSIG verification
418
+ end
419
+ o.additional << rr
420
+ }
421
+ }
422
+ return o
423
+ end
424
+
425
+ #In dynamic update packets, the question section is known as zone and
426
+ #specifies the zone to be updated.
427
+ alias :zone :question
428
+ alias :add_zone :add_question
429
+ alias :each_zone :each_question
430
+ #In dynamic update packets, the answer section is known as pre or
431
+ #prerequisite and specifies the RRs or RRsets which must or
432
+ #must not preexist.
433
+ alias :pre :answer
434
+ alias :add_pre :add_answer
435
+ alias :each_pre :each_answer
436
+ #In dynamic update packets, the answer section is known as pre or
437
+ #prerequisite and specifies the RRs or RRsets which must or
438
+ #must not preexist.
439
+ alias :prerequisite :pre
440
+ alias :add_prerequisite :add_pre
441
+ alias :each_prerequisite :each_pre
442
+ #In dynamic update packets, the authority section is known as update and
443
+ #specifies the RRs or RRsets to be added or delted.
444
+ alias :update :authority
445
+ alias :add_update :add_authority
446
+ alias :each_update :each_authority
447
+
448
+ end
449
+
450
+ #The header portion of a DNS packet
451
+ #
452
+ #RFC 1035 Section 4.1.1
453
+ class Header
454
+ MAX_ID = 65535
455
+
456
+ # The header ID
457
+ attr_accessor :id
458
+
459
+ #The query response flag
460
+ attr_accessor :qr
461
+
462
+ #Authoritative answer flag
463
+ attr_accessor :aa
464
+
465
+ #Truncated flag
466
+ attr_accessor :tc
467
+
468
+ #Recursion Desired flag
469
+ attr_accessor :rd
470
+
471
+ #The Checking Disabled flag
472
+ attr_accessor :cd
473
+
474
+ #The Authenticated Data flag
475
+ attr_accessor :ad
476
+
477
+ #Relevant in DNSSEC context.
478
+ #
479
+ #(The AD bit is only set on answers where signatures have been
480
+ #cryptographically verified or the server is authoritative for the data
481
+ #and is allowed to set the bit by policy.)
482
+ attr_accessor :ad
483
+
484
+ #The query response flag
485
+ attr_accessor :qr
486
+
487
+ #Recursion available flag
488
+ attr_accessor :ra
489
+
490
+ #Query response code
491
+ attr_reader :rcode
492
+
493
+ # The header opcode
494
+ attr_reader :opcode
495
+
496
+ #The number of records in the question section of the message
497
+ attr_accessor :qdcount
498
+ #The number of records in the authoriy section of the message
499
+ attr_accessor :nscount
500
+ #The number of records in the answer section of the message
501
+ attr_accessor :ancount
502
+ #The number of records in the additional record section og the message
503
+ attr_accessor :arcount
504
+
505
+ def initialize(*args)
506
+ if (args.length == 0)
507
+ @id = rand(MAX_ID)
508
+ @qr = false
509
+ @opcode=OpCode.Query
510
+ @aa = false
511
+ @ad=false
512
+ @tc = false
513
+ @rd = false # recursion desired
514
+ @ra = false # recursion available
515
+ @cd=false
516
+ @rcode=RCode.NoError
517
+ @qdcount = 0
518
+ @nscount = 0
519
+ @ancount = 0
520
+ @arcount = 0
521
+ elsif (args.length == 1)
522
+ decode(args[0])
523
+ end
524
+ end
525
+
526
+ def opcode=(op)
527
+ @opcode = OpCode.new(op)
528
+ end
529
+
530
+ def rcode=(rcode)
531
+ @rcode = RCode.new(rcode)
532
+ end
533
+
534
+ def Header.new_from_data(data)
535
+ header = Header.new
536
+ MessageDecoder.new(data) {|msg|
537
+ header.decode(msg)}
538
+ return header
539
+ end
540
+
541
+ def data
542
+ return MessageEncoder.new {|msg|
543
+ self.encode(msg)
544
+ }.to_s
545
+ end
546
+
547
+ def encode(msg)
548
+ msg.put_pack('nnnnnn',
549
+ @id,
550
+ (@qr ? 1:0) << 15 |
551
+ (@opcode.code & 15) << 11 |
552
+ (@aa ? 1:0) << 10 |
553
+ (@tc ? 1:0) << 9 |
554
+ (@rd ? 1:0) << 8 |
555
+ (@ra ? 1:0) << 7 |
556
+ (@ad ? 1:0) << 5 |
557
+ (@cd ? 1:0) << 4 |
558
+ (@rcode.code & 15),
559
+ @qdcount,
560
+ @ancount,
561
+ @nscount,
562
+ @arcount)
563
+ end
564
+
565
+ def Header.decrement_arcount_encoded(bytes)
566
+ header = Header.new
567
+ header_end = 0
568
+ MessageDecoder.new(bytes) {|msg|
569
+ header.decode(msg)
570
+ header_end = msg.index
571
+ }
572
+ header.arcount = header.arcount - 1
573
+ bytes[0,header_end]=MessageEncoder.new {|msg|
574
+ header.encode(msg)}.to_s
575
+ return bytes
576
+ end
577
+
578
+ def ==(other)
579
+ return @qr == other.qr &&
580
+ @opcode == other.opcode &&
581
+ @aa == other.aa &&
582
+ @tc == other.tc &&
583
+ @rd == other.rd &&
584
+ @ra == other.ra &&
585
+ @cd == other.cd &&
586
+ @ad == other.ad &&
587
+ @rcode == other.rcode
588
+ end
589
+
590
+ def to_s
591
+ retval = ";; id = #{@id}\n";
592
+
593
+ if (@opcode == OpCode::Update)
594
+ retval += ";; qr = #{@qr} " +\
595
+ "opcode = #{@opcode.string} "+\
596
+ "rcode = #{@rcode.string}\n";
597
+
598
+ retval += ";; zocount = #{@qdcount} "+\
599
+ "prcount = #{@ancount} " +\
600
+ "upcount = #{@nscount} " +\
601
+ "adcount = #{@arcount}\n";
602
+ else
603
+ retval += ";; qr = #{@qr} " +\
604
+ "opcode = #{@opcode.string} " +\
605
+ "aa = #{@aa} " +\
606
+ "tc = #{@tc} " +\
607
+ "rd = #{@rd}\n";
608
+
609
+ retval += ";; ra = #{@ra} " +\
610
+ "ad = #{@ad} " +\
611
+ "cd = #{@cd} " +\
612
+ "rcode = #{@rcode.string}\n";
613
+
614
+ retval += ";; qdcount = #{@qdcount} " +\
615
+ "ancount = #{@ancount} " +\
616
+ "nscount = #{@nscount} " +\
617
+ "arcount = #{@arcount}\n";
618
+ end
619
+
620
+ return retval;
621
+ end
622
+
623
+ def decode(msg)
624
+ @id, flag, @qdcount, @ancount, @nscount, @arcount =
625
+ msg.get_unpack('nnnnnn')
626
+ @qr = (((flag >> 15)&1)==1)?true:false
627
+ @opcode = OpCode.new((flag >> 11) & 15)
628
+ @aa = (((flag >> 10)&1)==1)?true:false
629
+ @tc = (((flag >> 9)&1)==1)?true:false
630
+ @rd = (((flag >> 8)&1)==1)?true:false
631
+ @ra = (((flag >> 7)&1)==1)?true:false
632
+ @ad = (((flag >> 5)&1)==1)?true:false
633
+ @cd = (((flag >> 4)&1)==1)?true:false
634
+ @rcode = RCode.new(flag & 15)
635
+ end
636
+
637
+ def get_exception
638
+ exception = nil
639
+ if (@rcode==RCode.NXDOMAIN)
640
+ exception = NXDomain.new
641
+ elsif (@rcode==RCode.SERVFAIL)
642
+ exception = ServFail.new
643
+ elsif (@rcode==RCode.FORMERR)
644
+ exception = FormErr.new
645
+ elsif (@rcode==RCode.NOTIMP)
646
+ exception = NotImp.new
647
+ elsif (@rcode==RCode.REFUSED)
648
+ exception = Refused.new
649
+ end
650
+ return exception
651
+ end
652
+
653
+ alias zocount qdcount
654
+ alias zocount= qdcount=
655
+
656
+ alias prcount ancount
657
+ alias prcount= ancount=
658
+
659
+ alias upcount nscount
660
+ alias upcount= nscount=
661
+
662
+ alias adcount arcount
663
+ alias adcount= arcount=
664
+
665
+ end
666
+
667
+ class MessageDecoder #:nodoc: all
668
+ attr_reader :index
669
+ def initialize(data)
670
+ @data = data
671
+ @index = 0
672
+ @limit = data.length
673
+ yield self
674
+ end
675
+
676
+ def has_remaining
677
+ return @limit-@index > 0
678
+ end
679
+
680
+ def get_length16
681
+ len, = self.get_unpack('n')
682
+ save_limit = @limit
683
+ @limit = @index + len
684
+ d = yield(len)
685
+ if @index < @limit
686
+ raise DecodeError.new("junk exists")
687
+ elsif @limit < @index
688
+ raise DecodeError.new("limit exceeded")
689
+ end
690
+ @limit = save_limit
691
+ return d
692
+ end
693
+
694
+ def get_bytes(len = @limit - @index)
695
+ d = @data[@index, len]
696
+ @index += len
697
+ return d
698
+ end
699
+
700
+ def get_unpack(template)
701
+ len = 0
702
+ template.each_byte {|byte|
703
+ case byte
704
+ when ?c, ?C
705
+ len += 1
706
+ when ?h, ?H
707
+ len += 1
708
+ when ?n
709
+ len += 2
710
+ when ?N
711
+ len += 4
712
+ when ?*
713
+ len = @limit-@index
714
+ else
715
+ raise StandardError.new("unsupported template: '#{byte.chr}' in '#{template}'")
716
+ end
717
+ }
718
+ raise DecodeError.new("limit exceeded") if @limit < @index + len
719
+ arr = @data.unpack("@#{@index}#{template}")
720
+ @index += len
721
+ return arr
722
+ end
723
+
724
+ def get_string
725
+ len = @data[@index]
726
+ raise DecodeError.new("limit exceeded") if @limit < @index + 1 + len
727
+ d = @data[@index + 1, len]
728
+ @index += 1 + len
729
+ return d
730
+ end
731
+
732
+ def get_string_list
733
+ strings = []
734
+ while @index < @limit
735
+ strings << self.get_string
736
+ end
737
+ strings
738
+ end
739
+
740
+ def get_name
741
+ return Name.new(self.get_labels)
742
+ end
743
+
744
+ def get_labels(limit=nil)
745
+ limit = @index if !limit || @index < limit
746
+ d = []
747
+ while true
748
+ case @data[@index]
749
+ when 0
750
+ @index += 1
751
+ return d
752
+ when 192..255
753
+ idx = self.get_unpack('n')[0] & 0x3fff
754
+ if limit <= idx
755
+ raise DecodeError.new("non-backward name pointer")
756
+ end
757
+ save_index = @index
758
+ @index = idx
759
+ d += self.get_labels(limit)
760
+ @index = save_index
761
+ return d
762
+ else
763
+ d << self.get_label
764
+ end
765
+ end
766
+ return d
767
+ end
768
+
769
+ def get_label
770
+ return Name::Label.new(Name::decode(self.get_string))
771
+ end
772
+
773
+ def get_question
774
+ name = self.get_name
775
+ type, klass = self.get_unpack("nn")
776
+ q = Question.new(name, type, klass)
777
+ return q
778
+ end
779
+
780
+ def get_rr
781
+ name = self.get_name
782
+ type, klass, ttl = self.get_unpack('nnN')
783
+ klass = Classes.new(klass)
784
+ typeclass = RR.get_class(type, klass)
785
+ # @TODO@ Trap decode errors here, and somehow mark the record as bad.
786
+ # Need some way to represent raw data only
787
+ rec = self.get_length16 {typeclass.decode_rdata(self)}
788
+ rec.name=name
789
+ rec.ttl=ttl
790
+ rec.type = type
791
+ rec.klass = klass
792
+ return rec
793
+ end
794
+ end
795
+
796
+ class MessageEncoder #:nodoc: all
797
+ def initialize
798
+ @data = ''
799
+ @names = {}
800
+ yield self
801
+ end
802
+
803
+ def to_s
804
+ return @data
805
+ end
806
+
807
+ def put_bytes(d)
808
+ @data << d
809
+ end
810
+
811
+ def put_pack(template, *d)
812
+ @data << d.pack(template)
813
+ end
814
+
815
+ def put_length16
816
+ length_index = @data.length
817
+ @data << "\0\0"
818
+ data_start = @data.length
819
+ yield
820
+ data_end = @data.length
821
+ @data[length_index, 2] = [data_end - data_start].pack("n")
822
+ end
823
+
824
+ def put_string(d)
825
+ self.put_pack("C", d.length)
826
+ @data << d
827
+ end
828
+
829
+ def put_string_list(ds)
830
+ ds.each {|d|
831
+ self.put_string(d)
832
+ }
833
+ end
834
+
835
+ def put_rr(rr, canonical=false)
836
+ # RFC4034 Section 6.2
837
+ put_name(rr.name, canonical)
838
+ put_pack("nnN", rr.type.code, rr.klass.code, rr.ttl)
839
+ put_length16 {rr.encode_rdata(self, canonical)}
840
+ end
841
+
842
+ def put_name(d, canonical=false)
843
+ if (canonical)
844
+ d = d.downcase
845
+ end
846
+ put_labels(d.to_a, canonical)
847
+ end
848
+
849
+ def put_labels(d, do_canonical)
850
+ d.each_index {|i|
851
+ domain = d[i..-1].join(".")
852
+ if (!do_canonical && (idx = @names[domain]))
853
+ self.put_pack("n", 0xc000 | idx)
854
+ return
855
+ else
856
+ @names[domain] = @data.length
857
+ first = d[i]
858
+ self.put_label(first)
859
+ end
860
+ }
861
+ @data << "\0"
862
+ end
863
+
864
+
865
+ def put_label(d)
866
+ s, = Name.encode(d)
867
+ raise RuntimeError, "length of #{s} is #{s.string.length} (larger than 63 octets)" if s.string.length > 63
868
+ self.put_string(s.string)
869
+ end
870
+ end
871
+
872
+ #A Dnsruby::Question object represents a record in the
873
+ #question section of a DNS packet.
874
+ #
875
+ #RFC 1035 Section 4.1.2
876
+ class Question
877
+ # The Question name
878
+ attr_reader :qname
879
+ # The Question type
880
+ attr_reader :qtype
881
+ # The Question class
882
+ attr_reader :qclass
883
+
884
+ #Creates a question object from the domain, type, and class passed
885
+ #as arguments.
886
+ #
887
+ #If a String is passed in, a Name, IPv4 or IPv6 object is created.
888
+ #
889
+ #If an IPv4 or IPv6 object is used then the type is set to PTR.
890
+ def initialize(*args)
891
+ if (args.length > 0)
892
+ @qtype = Types.A
893
+ if (args.length > 1)
894
+ @qtype = Types.new(args[1])
895
+ @qclass = Classes.IN
896
+ if (args.length > 2)
897
+ @qclass = Classes.new(args[2])
898
+ end
899
+ end
900
+ else
901
+ raise ArgumentError.new("Must pass at least a name!")
902
+ end
903
+ # If the name looks like an IP address then do an appropriate
904
+ # PTR query.
905
+ @qname=args[0]
906
+ case @qname
907
+ when IPv4::Regex
908
+ @qname = IPv4.create(@qname).to_name
909
+ @qtype = Types.PTR
910
+ when IPv6::Regex
911
+ @qname = IPv6.create(@qname).to_name
912
+ @qtype = Types.PTR
913
+ when Name
914
+ when IPv6
915
+ @qtype = Types.PTR
916
+ when IPv4
917
+ @qtype = Types.PTR
918
+ else
919
+ @qname = Name.create(@qname)
920
+ end
921
+ end
922
+
923
+ def qtype=(qtype)
924
+ @qtype = Types.new(qtype)
925
+ end
926
+
927
+ def qclass=(qclass)
928
+ @qclass = Classes.new(qclass)
929
+ end
930
+
931
+ def qname=(qname)
932
+ case qname
933
+ when IPv4::Regex
934
+ @qname = IPv4.create(qname).to_name
935
+ @qtype = Types.PTR
936
+ when IPv6::Regex
937
+ @qname = IPv6.create(qname).to_name
938
+ @qtype = Types.PTR
939
+ when Name
940
+ when IPv6
941
+ @qtype = Types.PTR
942
+ when IPv4
943
+ @qtype = Types.PTR
944
+ else
945
+ @qname = Name.create(qname)
946
+ end
947
+ end
948
+
949
+ #Returns a string representation of the question record.
950
+ def to_s
951
+ return "#{@qname}.\t#{@qclass.string}\t#{@qtype.string}";
952
+ end
953
+
954
+ # For Updates, the qname field is redefined to zname (RFC2136, section 2.3)
955
+ alias zname qname
956
+ # For Updates, the qtype field is redefined to ztype (RFC2136, section 2.3)
957
+ alias ztype qtype
958
+ # For Updates, the qclass field is redefined to zclass (RFC2136, section 2.3)
959
+ alias zclass qclass
960
+ end
961
+ end