dnsruby 1.26 → 1.30

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 (996) hide show
  1. data/DNSSEC +19 -0
  2. data/EVENTMACHINE +1 -64
  3. data/EXAMPLES +124 -0
  4. data/README +2 -6
  5. data/demo/axfr.rb +2 -2
  6. data/demo/check_soa.rb +1 -1
  7. data/demo/check_zone.rb +2 -2
  8. data/demo/digdlv.rb +65 -0
  9. data/demo/digitar.rb +62 -0
  10. data/demo/mresolv.rb +1 -1
  11. data/demo/mx.rb +1 -1
  12. data/demo/rubydig.rb +8 -1
  13. data/demo/trace_dns.rb +28 -14
  14. data/html/created.rid +1 -0
  15. data/{doc → html}/fr_class_index.html +118 -172
  16. data/{doc → html}/fr_file_index.html +81 -130
  17. data/html/fr_method_index.html +371 -0
  18. data/{doc → html}/index.html +23 -23
  19. data/lib/Dnsruby/Cache.rb +129 -22
  20. data/lib/Dnsruby/Config.rb +72 -11
  21. data/lib/Dnsruby/DNS.rb +3 -0
  22. data/lib/Dnsruby/PacketSender.rb +565 -0
  23. data/lib/Dnsruby/Recursor.rb +337 -156
  24. data/lib/Dnsruby/Resolver.rb +508 -447
  25. data/lib/Dnsruby/SingleResolver.rb +151 -629
  26. data/lib/Dnsruby/code_mapper.rb +4 -2
  27. data/lib/Dnsruby/dnssec.rb +212 -518
  28. data/lib/Dnsruby/event_machine_interface.rb +266 -265
  29. data/lib/Dnsruby/iana_ports.rb +5206 -5196
  30. data/lib/Dnsruby/key_cache.rb +85 -0
  31. data/lib/Dnsruby/message.rb +207 -72
  32. data/lib/Dnsruby/name.rb +42 -4
  33. data/lib/Dnsruby/resource/CERT.rb +1 -1
  34. data/lib/Dnsruby/resource/DNSKEY.rb +66 -25
  35. data/lib/Dnsruby/resource/DS.rb +7 -2
  36. data/lib/Dnsruby/resource/NAPTR.rb +2 -2
  37. data/lib/Dnsruby/resource/NSEC.rb +31 -2
  38. data/lib/Dnsruby/resource/NSEC3.rb +86 -8
  39. data/lib/Dnsruby/resource/OPT.rb +9 -6
  40. data/lib/Dnsruby/resource/PX.rb +1 -1
  41. data/lib/Dnsruby/resource/RT.rb +1 -1
  42. data/lib/Dnsruby/resource/SRV.rb +3 -3
  43. data/lib/Dnsruby/resource/resource.rb +30 -36
  44. data/lib/Dnsruby/select_thread.rb +160 -23
  45. data/lib/Dnsruby/single_verifier.rb +1289 -0
  46. data/lib/Dnsruby/validator_thread.rb +108 -0
  47. data/lib/Dnsruby/zone_transfer.rb +5 -2
  48. data/lib/dnsruby.rb +33 -18
  49. data/test/tc_cache.rb +88 -0
  50. data/test/tc_dlv.rb +55 -0
  51. data/test/tc_dns.rb +3 -1
  52. data/test/tc_dnskey.rb +21 -5
  53. data/test/tc_ds.rb +1 -7
  54. data/test/tc_itar.rb +76 -0
  55. data/test/tc_name.rb +21 -0
  56. data/test/tc_nsec.rb +169 -0
  57. data/test/tc_nsec3.rb +18 -1
  58. data/test/tc_packet.rb +97 -6
  59. data/test/tc_queue.rb +7 -5
  60. data/test/tc_recur.rb +6 -1
  61. data/test/tc_res_config.rb +1 -3
  62. data/test/tc_res_opt.rb +1 -5
  63. data/test/tc_resolver.rb +27 -8
  64. data/test/tc_rr-opt.rb +1 -0
  65. data/test/tc_rr.rb +6 -0
  66. data/test/tc_rrset.rb +60 -0
  67. data/test/tc_single_resolver.rb +55 -2
  68. data/test/tc_tsig.rb +29 -13
  69. data/test/tc_update.rb +6 -0
  70. data/test/tc_validator.rb +56 -0
  71. data/test/{tc_dnssec.rb → tc_verifier.rb} +106 -92
  72. data/test/ts_online.rb +19 -16
  73. metadata +27 -1053
  74. data/doc/classes/Cache.html +0 -179
  75. data/doc/classes/Cache.src/M000212.html +0 -19
  76. data/doc/classes/Cache.src/M000213.html +0 -18
  77. data/doc/classes/Cache.src/M000214.html +0 -23
  78. data/doc/classes/ConfigTable.html +0 -500
  79. data/doc/classes/ConfigTable.src/M000019.html +0 -25
  80. data/doc/classes/ConfigTable.src/M000020.html +0 -18
  81. data/doc/classes/ConfigTable.src/M000021.html +0 -18
  82. data/doc/classes/ConfigTable.src/M000022.html +0 -18
  83. data/doc/classes/ConfigTable.src/M000023.html +0 -18
  84. data/doc/classes/ConfigTable.src/M000024.html +0 -18
  85. data/doc/classes/ConfigTable.src/M000025.html +0 -18
  86. data/doc/classes/ConfigTable.src/M000026.html +0 -18
  87. data/doc/classes/ConfigTable.src/M000027.html +0 -18
  88. data/doc/classes/ConfigTable.src/M000028.html +0 -19
  89. data/doc/classes/ConfigTable.src/M000029.html +0 -21
  90. data/doc/classes/ConfigTable.src/M000030.html +0 -20
  91. data/doc/classes/ConfigTable.src/M000031.html +0 -18
  92. data/doc/classes/ConfigTable.src/M000032.html +0 -25
  93. data/doc/classes/ConfigTable.src/M000033.html +0 -23
  94. data/doc/classes/ConfigTable.src/M000034.html +0 -20
  95. data/doc/classes/ConfigTable.src/M000035.html +0 -20
  96. data/doc/classes/ConfigTable.src/M000036.html +0 -23
  97. data/doc/classes/ConfigTable.src/M000037.html +0 -19
  98. data/doc/classes/ConfigTable.src/M000038.html +0 -18
  99. data/doc/classes/ConfigTable.src/M000039.html +0 -18
  100. data/doc/classes/ConfigTable/BoolItem.html +0 -154
  101. data/doc/classes/ConfigTable/BoolItem.src/M000040.html +0 -18
  102. data/doc/classes/ConfigTable/BoolItem.src/M000041.html +0 -18
  103. data/doc/classes/ConfigTable/ExecItem.html +0 -201
  104. data/doc/classes/ConfigTable/ExecItem.src/M000059.html +0 -20
  105. data/doc/classes/ConfigTable/ExecItem.src/M000060.html +0 -18
  106. data/doc/classes/ConfigTable/ExecItem.src/M000061.html +0 -18
  107. data/doc/classes/ConfigTable/ExecItem.src/M000062.html +0 -18
  108. data/doc/classes/ConfigTable/ExecItem.src/M000063.html +0 -22
  109. data/doc/classes/ConfigTable/Item.html +0 -250
  110. data/doc/classes/ConfigTable/Item.src/M000066.html +0 -22
  111. data/doc/classes/ConfigTable/Item.src/M000067.html +0 -18
  112. data/doc/classes/ConfigTable/Item.src/M000068.html +0 -18
  113. data/doc/classes/ConfigTable/Item.src/M000069.html +0 -18
  114. data/doc/classes/ConfigTable/Item.src/M000070.html +0 -18
  115. data/doc/classes/ConfigTable/Item.src/M000071.html +0 -18
  116. data/doc/classes/ConfigTable/MetaConfigEnvironment.html +0 -325
  117. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000046.html +0 -19
  118. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000047.html +0 -18
  119. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000048.html +0 -18
  120. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000049.html +0 -18
  121. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000050.html +0 -18
  122. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000051.html +0 -18
  123. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000052.html +0 -18
  124. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000053.html +0 -18
  125. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000054.html +0 -18
  126. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000055.html +0 -18
  127. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000056.html +0 -18
  128. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000057.html +0 -19
  129. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000058.html +0 -19
  130. data/doc/classes/ConfigTable/PackageSelectionItem.html +0 -169
  131. data/doc/classes/ConfigTable/PackageSelectionItem.src/M000044.html +0 -19
  132. data/doc/classes/ConfigTable/PackageSelectionItem.src/M000045.html +0 -18
  133. data/doc/classes/ConfigTable/PathItem.html +0 -139
  134. data/doc/classes/ConfigTable/PathItem.src/M000043.html +0 -18
  135. data/doc/classes/ConfigTable/ProgramItem.html +0 -139
  136. data/doc/classes/ConfigTable/ProgramItem.src/M000042.html +0 -18
  137. data/doc/classes/ConfigTable/SelectItem.html +0 -156
  138. data/doc/classes/ConfigTable/SelectItem.src/M000064.html +0 -19
  139. data/doc/classes/ConfigTable/SelectItem.src/M000065.html +0 -18
  140. data/doc/classes/DnskeyTest.html +0 -180
  141. data/doc/classes/DnskeyTest.src/M000016.html +0 -26
  142. data/doc/classes/DnskeyTest.src/M000017.html +0 -24
  143. data/doc/classes/DnskeyTest.src/M000018.html +0 -33
  144. data/doc/classes/Dnsruby.html +0 -504
  145. data/doc/classes/Dnsruby.src/M000351.html +0 -18
  146. data/doc/classes/Dnsruby/Algorithms.html +0 -173
  147. data/doc/classes/Dnsruby/Classes.html +0 -197
  148. data/doc/classes/Dnsruby/Classes.src/M000573.html +0 -23
  149. data/doc/classes/Dnsruby/Classes.src/M000574.html +0 -19
  150. data/doc/classes/Dnsruby/CodeMapper.html +0 -375
  151. data/doc/classes/Dnsruby/CodeMapper.src/M000550.html +0 -18
  152. data/doc/classes/Dnsruby/CodeMapper.src/M000551.html +0 -33
  153. data/doc/classes/Dnsruby/CodeMapper.src/M000552.html +0 -21
  154. data/doc/classes/Dnsruby/CodeMapper.src/M000553.html +0 -19
  155. data/doc/classes/Dnsruby/CodeMapper.src/M000554.html +0 -19
  156. data/doc/classes/Dnsruby/CodeMapper.src/M000555.html +0 -18
  157. data/doc/classes/Dnsruby/CodeMapper.src/M000556.html +0 -22
  158. data/doc/classes/Dnsruby/CodeMapper.src/M000557.html +0 -22
  159. data/doc/classes/Dnsruby/CodeMapper.src/M000558.html +0 -22
  160. data/doc/classes/Dnsruby/CodeMapper.src/M000559.html +0 -31
  161. data/doc/classes/Dnsruby/CodeMapper.src/M000560.html +0 -19
  162. data/doc/classes/Dnsruby/Config.html +0 -413
  163. data/doc/classes/Dnsruby/Config.src/M000505.html +0 -18
  164. data/doc/classes/Dnsruby/Config.src/M000506.html +0 -19
  165. data/doc/classes/Dnsruby/Config.src/M000507.html +0 -19
  166. data/doc/classes/Dnsruby/Config.src/M000508.html +0 -25
  167. data/doc/classes/Dnsruby/Config.src/M000509.html +0 -21
  168. data/doc/classes/Dnsruby/Config.src/M000510.html +0 -38
  169. data/doc/classes/Dnsruby/Config.src/M000511.html +0 -26
  170. data/doc/classes/Dnsruby/Config.src/M000512.html +0 -22
  171. data/doc/classes/Dnsruby/Config.src/M000513.html +0 -27
  172. data/doc/classes/Dnsruby/Config.src/M000514.html +0 -22
  173. data/doc/classes/Dnsruby/Config.src/M000515.html +0 -21
  174. data/doc/classes/Dnsruby/DNS.html +0 -571
  175. data/doc/classes/Dnsruby/DNS.src/M000645.html +0 -24
  176. data/doc/classes/Dnsruby/DNS.src/M000646.html +0 -18
  177. data/doc/classes/Dnsruby/DNS.src/M000647.html +0 -18
  178. data/doc/classes/Dnsruby/DNS.src/M000648.html +0 -20
  179. data/doc/classes/Dnsruby/DNS.src/M000649.html +0 -19
  180. data/doc/classes/Dnsruby/DNS.src/M000650.html +0 -20
  181. data/doc/classes/Dnsruby/DNS.src/M000651.html +0 -18
  182. data/doc/classes/Dnsruby/DNS.src/M000652.html +0 -19
  183. data/doc/classes/Dnsruby/DNS.src/M000653.html +0 -20
  184. data/doc/classes/Dnsruby/DNS.src/M000654.html +0 -30
  185. data/doc/classes/Dnsruby/DNS.src/M000655.html +0 -19
  186. data/doc/classes/Dnsruby/DNS.src/M000656.html +0 -20
  187. data/doc/classes/Dnsruby/DNS.src/M000657.html +0 -31
  188. data/doc/classes/Dnsruby/DecodeError.html +0 -120
  189. data/doc/classes/Dnsruby/Dnssec.html +0 -536
  190. data/doc/classes/Dnsruby/Dnssec.src/M000615.html +0 -21
  191. data/doc/classes/Dnsruby/Dnssec.src/M000616.html +0 -18
  192. data/doc/classes/Dnsruby/Dnssec.src/M000617.html +0 -18
  193. data/doc/classes/Dnsruby/Dnssec.src/M000618.html +0 -19
  194. data/doc/classes/Dnsruby/Dnssec.src/M000619.html +0 -18
  195. data/doc/classes/Dnsruby/Dnssec.src/M000620.html +0 -18
  196. data/doc/classes/Dnsruby/Dnssec.src/M000621.html +0 -18
  197. data/doc/classes/Dnsruby/Dnssec.src/M000622.html +0 -18
  198. data/doc/classes/Dnsruby/Dnssec.src/M000623.html +0 -19
  199. data/doc/classes/Dnsruby/Dnssec.src/M000624.html +0 -18
  200. data/doc/classes/Dnsruby/Dnssec.src/M000625.html +0 -20
  201. data/doc/classes/Dnsruby/Dnssec.src/M000626.html +0 -46
  202. data/doc/classes/Dnsruby/Dnssec.src/M000627.html +0 -23
  203. data/doc/classes/Dnsruby/Dnssec.src/M000628.html +0 -22
  204. data/doc/classes/Dnsruby/Dnssec.src/M000629.html +0 -19
  205. data/doc/classes/Dnsruby/Dnssec.src/M000630.html +0 -116
  206. data/doc/classes/Dnsruby/Dnssec.src/M000631.html +0 -33
  207. data/doc/classes/Dnsruby/Dnssec.src/M000632.html +0 -28
  208. data/doc/classes/Dnsruby/Dnssec.src/M000633.html +0 -92
  209. data/doc/classes/Dnsruby/Dnssec/ValidationPolicy.html +0 -167
  210. data/doc/classes/Dnsruby/EncodeError.html +0 -120
  211. data/doc/classes/Dnsruby/FormErr.html +0 -119
  212. data/doc/classes/Dnsruby/Header.html +0 -531
  213. data/doc/classes/Dnsruby/Header.src/M000595.html +0 -18
  214. data/doc/classes/Dnsruby/Header.src/M000596.html +0 -35
  215. data/doc/classes/Dnsruby/Header.src/M000597.html +0 -18
  216. data/doc/classes/Dnsruby/Header.src/M000598.html +0 -18
  217. data/doc/classes/Dnsruby/Header.src/M000599.html +0 -21
  218. data/doc/classes/Dnsruby/Header.src/M000600.html +0 -20
  219. data/doc/classes/Dnsruby/Header.src/M000601.html +0 -32
  220. data/doc/classes/Dnsruby/Header.src/M000602.html +0 -27
  221. data/doc/classes/Dnsruby/Header.src/M000603.html +0 -26
  222. data/doc/classes/Dnsruby/Header.src/M000604.html +0 -18
  223. data/doc/classes/Dnsruby/Header.src/M000605.html +0 -47
  224. data/doc/classes/Dnsruby/Header.src/M000606.html +0 -28
  225. data/doc/classes/Dnsruby/Header.src/M000607.html +0 -30
  226. data/doc/classes/Dnsruby/Hosts.html +0 -316
  227. data/doc/classes/Dnsruby/Hosts.src/M000561.html +0 -20
  228. data/doc/classes/Dnsruby/Hosts.src/M000562.html +0 -19
  229. data/doc/classes/Dnsruby/Hosts.src/M000563.html +0 -20
  230. data/doc/classes/Dnsruby/Hosts.src/M000564.html +0 -21
  231. data/doc/classes/Dnsruby/Hosts.src/M000565.html +0 -19
  232. data/doc/classes/Dnsruby/Hosts.src/M000566.html +0 -20
  233. data/doc/classes/Dnsruby/Hosts.src/M000567.html +0 -21
  234. data/doc/classes/Dnsruby/IPv4.html +0 -233
  235. data/doc/classes/Dnsruby/IPv4.src/M000568.html +0 -32
  236. data/doc/classes/Dnsruby/IPv4.src/M000569.html +0 -19
  237. data/doc/classes/Dnsruby/IPv4.src/M000570.html +0 -18
  238. data/doc/classes/Dnsruby/IPv4.src/M000571.html +0 -18
  239. data/doc/classes/Dnsruby/IPv4.src/M000572.html +0 -18
  240. data/doc/classes/Dnsruby/IPv6.html +0 -281
  241. data/doc/classes/Dnsruby/IPv6.src/M000608.html +0 -60
  242. data/doc/classes/Dnsruby/IPv6.src/M000609.html +0 -22
  243. data/doc/classes/Dnsruby/IPv6.src/M000610.html +0 -20
  244. data/doc/classes/Dnsruby/IPv6.src/M000611.html +0 -18
  245. data/doc/classes/Dnsruby/Message.html +0 -861
  246. data/doc/classes/Dnsruby/Message.src/M000473.html +0 -39
  247. data/doc/classes/Dnsruby/Message.src/M000474.html +0 -26
  248. data/doc/classes/Dnsruby/Message.src/M000475.html +0 -23
  249. data/doc/classes/Dnsruby/Message.src/M000476.html +0 -22
  250. data/doc/classes/Dnsruby/Message.src/M000477.html +0 -22
  251. data/doc/classes/Dnsruby/Message.src/M000478.html +0 -20
  252. data/doc/classes/Dnsruby/Message.src/M000479.html +0 -20
  253. data/doc/classes/Dnsruby/Message.src/M000480.html +0 -20
  254. data/doc/classes/Dnsruby/Message.src/M000481.html +0 -20
  255. data/doc/classes/Dnsruby/Message.src/M000482.html +0 -18
  256. data/doc/classes/Dnsruby/Message.src/M000483.html +0 -20
  257. data/doc/classes/Dnsruby/Message.src/M000484.html +0 -23
  258. data/doc/classes/Dnsruby/Message.src/M000485.html +0 -30
  259. data/doc/classes/Dnsruby/Message.src/M000486.html +0 -20
  260. data/doc/classes/Dnsruby/Message.src/M000487.html +0 -18
  261. data/doc/classes/Dnsruby/Message.src/M000488.html +0 -23
  262. data/doc/classes/Dnsruby/Message.src/M000489.html +0 -24
  263. data/doc/classes/Dnsruby/Message.src/M000490.html +0 -73
  264. data/doc/classes/Dnsruby/Message.src/M000491.html +0 -35
  265. data/doc/classes/Dnsruby/Message.src/M000492.html +0 -46
  266. data/doc/classes/Dnsruby/Message/Section.html +0 -160
  267. data/doc/classes/Dnsruby/Message/Section.src/M000498.html +0 -29
  268. data/doc/classes/Dnsruby/Message/Section.src/M000499.html +0 -30
  269. data/doc/classes/Dnsruby/MetaTypes.html +0 -136
  270. data/doc/classes/Dnsruby/Modes.html +0 -171
  271. data/doc/classes/Dnsruby/NXDomain.html +0 -119
  272. data/doc/classes/Dnsruby/Name.html +0 -330
  273. data/doc/classes/Dnsruby/Name.src/M000458.html +0 -35
  274. data/doc/classes/Dnsruby/Name.src/M000459.html +0 -20
  275. data/doc/classes/Dnsruby/Name.src/M000460.html +0 -18
  276. data/doc/classes/Dnsruby/Name.src/M000461.html +0 -21
  277. data/doc/classes/Dnsruby/Name.src/M000462.html +0 -22
  278. data/doc/classes/Dnsruby/Name.src/M000463.html +0 -18
  279. data/doc/classes/Dnsruby/Name/Label.html +0 -300
  280. data/doc/classes/Dnsruby/Name/Label.src/M000464.html +0 -21
  281. data/doc/classes/Dnsruby/Name/Label.src/M000465.html +0 -18
  282. data/doc/classes/Dnsruby/Name/Label.src/M000466.html +0 -22
  283. data/doc/classes/Dnsruby/Name/Label.src/M000467.html +0 -18
  284. data/doc/classes/Dnsruby/Name/Label.src/M000468.html +0 -18
  285. data/doc/classes/Dnsruby/Name/Label.src/M000469.html +0 -18
  286. data/doc/classes/Dnsruby/Name/Label.src/M000470.html +0 -18
  287. data/doc/classes/Dnsruby/Name/Label.src/M000471.html +0 -18
  288. data/doc/classes/Dnsruby/Name/Label.src/M000472.html +0 -18
  289. data/doc/classes/Dnsruby/NotImp.html +0 -119
  290. data/doc/classes/Dnsruby/OpCode.html +0 -146
  291. data/doc/classes/Dnsruby/OtherResolvError.html +0 -119
  292. data/doc/classes/Dnsruby/QTypes.html +0 -146
  293. data/doc/classes/Dnsruby/Question.html +0 -306
  294. data/doc/classes/Dnsruby/Question.src/M000590.html +0 -47
  295. data/doc/classes/Dnsruby/Question.src/M000591.html +0 -18
  296. data/doc/classes/Dnsruby/Question.src/M000592.html +0 -18
  297. data/doc/classes/Dnsruby/Question.src/M000593.html +0 -32
  298. data/doc/classes/Dnsruby/Question.src/M000594.html +0 -18
  299. data/doc/classes/Dnsruby/RCode.html +0 -211
  300. data/doc/classes/Dnsruby/RR.html +0 -653
  301. data/doc/classes/Dnsruby/RR.src/M000352.html +0 -18
  302. data/doc/classes/Dnsruby/RR.src/M000353.html +0 -22
  303. data/doc/classes/Dnsruby/RR.src/M000354.html +0 -18
  304. data/doc/classes/Dnsruby/RR.src/M000355.html +0 -26
  305. data/doc/classes/Dnsruby/RR.src/M000356.html +0 -26
  306. data/doc/classes/Dnsruby/RR.src/M000357.html +0 -18
  307. data/doc/classes/Dnsruby/RR.src/M000358.html +0 -36
  308. data/doc/classes/Dnsruby/RR.src/M000359.html +0 -100
  309. data/doc/classes/Dnsruby/RR.src/M000360.html +0 -18
  310. data/doc/classes/Dnsruby/RR.src/M000361.html +0 -18
  311. data/doc/classes/Dnsruby/RR.src/M000362.html +0 -22
  312. data/doc/classes/Dnsruby/RR.src/M000363.html +0 -33
  313. data/doc/classes/Dnsruby/RR.src/M000364.html +0 -24
  314. data/doc/classes/Dnsruby/RR/ANY.html +0 -133
  315. data/doc/classes/Dnsruby/RR/CERT.html +0 -180
  316. data/doc/classes/Dnsruby/RR/CERT/CertificateTypes.html +0 -169
  317. data/doc/classes/Dnsruby/RR/CNAME.html +0 -151
  318. data/doc/classes/Dnsruby/RR/DLV.html +0 -134
  319. data/doc/classes/Dnsruby/RR/DNAME.html +0 -150
  320. data/doc/classes/Dnsruby/RR/DNSKEY.html +0 -422
  321. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000397.html +0 -20
  322. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000398.html +0 -21
  323. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000399.html +0 -28
  324. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000400.html +0 -22
  325. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000401.html +0 -18
  326. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000402.html +0 -22
  327. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000403.html +0 -18
  328. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000404.html +0 -26
  329. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000405.html +0 -38
  330. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000406.html +0 -58
  331. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000407.html +0 -21
  332. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000408.html +0 -24
  333. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000409.html +0 -39
  334. data/doc/classes/Dnsruby/RR/DNSKEY.src/M000410.html +0 -24
  335. data/doc/classes/Dnsruby/RR/DS.html +0 -329
  336. data/doc/classes/Dnsruby/RR/DS.src/M000390.html +0 -19
  337. data/doc/classes/Dnsruby/RR/DS.src/M000391.html +0 -28
  338. data/doc/classes/Dnsruby/RR/DS.src/M000392.html +0 -28
  339. data/doc/classes/Dnsruby/RR/DS.src/M000393.html +0 -38
  340. data/doc/classes/Dnsruby/RR/DS.src/M000394.html +0 -29
  341. data/doc/classes/Dnsruby/RR/DS.src/M000395.html +0 -53
  342. data/doc/classes/Dnsruby/RR/DS.src/M000396.html +0 -40
  343. data/doc/classes/Dnsruby/RR/DS/DigestTypes.html +0 -111
  344. data/doc/classes/Dnsruby/RR/DomainName.html +0 -175
  345. data/doc/classes/Dnsruby/RR/DomainName.src/M000436.html +0 -18
  346. data/doc/classes/Dnsruby/RR/Generic.html +0 -133
  347. data/doc/classes/Dnsruby/RR/HINFO.html +0 -155
  348. data/doc/classes/Dnsruby/RR/IN.html +0 -155
  349. data/doc/classes/Dnsruby/RR/IN/A.html +0 -200
  350. data/doc/classes/Dnsruby/RR/IN/A.src/M000368.html +0 -18
  351. data/doc/classes/Dnsruby/RR/IN/A.src/M000369.html +0 -18
  352. data/doc/classes/Dnsruby/RR/IN/A.src/M000370.html +0 -18
  353. data/doc/classes/Dnsruby/RR/IN/AAAA.html +0 -139
  354. data/doc/classes/Dnsruby/RR/IN/AFSDB.html +0 -145
  355. data/doc/classes/Dnsruby/RR/IN/PX.html +0 -143
  356. data/doc/classes/Dnsruby/RR/IN/SRV.html +0 -238
  357. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000365.html +0 -29
  358. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000366.html +0 -26
  359. data/doc/classes/Dnsruby/RR/IN/SRV.src/M000367.html +0 -22
  360. data/doc/classes/Dnsruby/RR/IN/WKS.html +0 -166
  361. data/doc/classes/Dnsruby/RR/IN/WKS.src/M000371.html +0 -20
  362. data/doc/classes/Dnsruby/RR/ISDN.html +0 -155
  363. data/doc/classes/Dnsruby/RR/LOC.html +0 -395
  364. data/doc/classes/Dnsruby/RR/LOC.src/M000376.html +0 -32
  365. data/doc/classes/Dnsruby/RR/LOC.src/M000377.html +0 -23
  366. data/doc/classes/Dnsruby/RR/LOC.src/M000378.html +0 -25
  367. data/doc/classes/Dnsruby/RR/LOC.src/M000379.html +0 -21
  368. data/doc/classes/Dnsruby/RR/LOC.src/M000380.html +0 -20
  369. data/doc/classes/Dnsruby/RR/LOC.src/M000381.html +0 -23
  370. data/doc/classes/Dnsruby/RR/MB.html +0 -150
  371. data/doc/classes/Dnsruby/RR/MG.html +0 -150
  372. data/doc/classes/Dnsruby/RR/MINFO.html +0 -156
  373. data/doc/classes/Dnsruby/RR/MR.html +0 -150
  374. data/doc/classes/Dnsruby/RR/MX.html +0 -155
  375. data/doc/classes/Dnsruby/RR/NAPTR.html +0 -190
  376. data/doc/classes/Dnsruby/RR/NS.html +0 -151
  377. data/doc/classes/Dnsruby/RR/NSAP.html +0 -293
  378. data/doc/classes/Dnsruby/RR/NSAP.src/M000446.html +0 -19
  379. data/doc/classes/Dnsruby/RR/NSAP.src/M000447.html +0 -19
  380. data/doc/classes/Dnsruby/RR/NSAP.src/M000448.html +0 -22
  381. data/doc/classes/Dnsruby/RR/NSAP.src/M000449.html +0 -31
  382. data/doc/classes/Dnsruby/RR/NSEC.html +0 -301
  383. data/doc/classes/Dnsruby/RR/NSEC.src/M000382.html +0 -19
  384. data/doc/classes/Dnsruby/RR/NSEC.src/M000383.html +0 -18
  385. data/doc/classes/Dnsruby/RR/NSEC.src/M000384.html +0 -34
  386. data/doc/classes/Dnsruby/RR/NSEC.src/M000385.html +0 -18
  387. data/doc/classes/Dnsruby/RR/NSEC.src/M000386.html +0 -75
  388. data/doc/classes/Dnsruby/RR/NSEC.src/M000387.html +0 -18
  389. data/doc/classes/Dnsruby/RR/NSEC.src/M000388.html +0 -92
  390. data/doc/classes/Dnsruby/RR/NSEC.src/M000389.html +0 -23
  391. data/doc/classes/Dnsruby/RR/NSEC3.html +0 -366
  392. data/doc/classes/Dnsruby/RR/NSEC3.src/M000438.html +0 -28
  393. data/doc/classes/Dnsruby/RR/NSEC3.src/M000439.html +0 -18
  394. data/doc/classes/Dnsruby/RR/NSEC3.src/M000440.html +0 -18
  395. data/doc/classes/Dnsruby/RR/NSEC3.src/M000441.html +0 -22
  396. data/doc/classes/Dnsruby/RR/NSEC3.src/M000442.html +0 -18
  397. data/doc/classes/Dnsruby/RR/NSEC3.src/M000443.html +0 -21
  398. data/doc/classes/Dnsruby/RR/NSEC3.src/M000444.html +0 -21
  399. data/doc/classes/Dnsruby/RR/NSEC3.src/M000445.html +0 -29
  400. data/doc/classes/Dnsruby/RR/NSEC3PARAM.html +0 -279
  401. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000430.html +0 -28
  402. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000431.html +0 -18
  403. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000432.html +0 -22
  404. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000433.html +0 -21
  405. data/doc/classes/Dnsruby/RR/NSEC3PARAM.src/M000434.html +0 -25
  406. data/doc/classes/Dnsruby/RR/PTR.html +0 -132
  407. data/doc/classes/Dnsruby/RR/RP.html +0 -183
  408. data/doc/classes/Dnsruby/RR/RP.src/M000435.html +0 -19
  409. data/doc/classes/Dnsruby/RR/RRSIG.html +0 -372
  410. data/doc/classes/Dnsruby/RR/RRSIG.src/M000450.html +0 -26
  411. data/doc/classes/Dnsruby/RR/RRSIG.src/M000451.html +0 -28
  412. data/doc/classes/Dnsruby/RR/RRSIG.src/M000452.html +0 -23
  413. data/doc/classes/Dnsruby/RR/RRSIG.src/M000453.html +0 -23
  414. data/doc/classes/Dnsruby/RR/RRSIG.src/M000454.html +0 -46
  415. data/doc/classes/Dnsruby/RR/RRSIG.src/M000455.html +0 -50
  416. data/doc/classes/Dnsruby/RR/RRSIG.src/M000456.html +0 -18
  417. data/doc/classes/Dnsruby/RR/RRSIG.src/M000457.html +0 -27
  418. data/doc/classes/Dnsruby/RR/RT.html +0 -155
  419. data/doc/classes/Dnsruby/RR/SOA.html +0 -233
  420. data/doc/classes/Dnsruby/RR/SOA.src/M000419.html +0 -24
  421. data/doc/classes/Dnsruby/RR/SOA.src/M000420.html +0 -27
  422. data/doc/classes/Dnsruby/RR/SPF.html +0 -138
  423. data/doc/classes/Dnsruby/RR/TKEY.html +0 -313
  424. data/doc/classes/Dnsruby/RR/TKEY.src/M000372.html +0 -19
  425. data/doc/classes/Dnsruby/RR/TKEY.src/M000373.html +0 -29
  426. data/doc/classes/Dnsruby/RR/TKEY.src/M000374.html +0 -21
  427. data/doc/classes/Dnsruby/RR/TKEY.src/M000375.html +0 -29
  428. data/doc/classes/Dnsruby/RR/TSIG.html +0 -524
  429. data/doc/classes/Dnsruby/RR/TSIG.src/M000421.html +0 -24
  430. data/doc/classes/Dnsruby/RR/TSIG.src/M000422.html +0 -32
  431. data/doc/classes/Dnsruby/RR/TSIG.src/M000423.html +0 -54
  432. data/doc/classes/Dnsruby/RR/TSIG.src/M000424.html +0 -121
  433. data/doc/classes/Dnsruby/RR/TSIG.src/M000425.html +0 -33
  434. data/doc/classes/Dnsruby/RR/TSIG.src/M000426.html +0 -25
  435. data/doc/classes/Dnsruby/RR/TSIG.src/M000427.html +0 -36
  436. data/doc/classes/Dnsruby/RR/TSIG.src/M000428.html +0 -22
  437. data/doc/classes/Dnsruby/RR/TSIG.src/M000429.html +0 -29
  438. data/doc/classes/Dnsruby/RR/TXT.html +0 -233
  439. data/doc/classes/Dnsruby/RR/TXT.src/M000414.html +0 -18
  440. data/doc/classes/Dnsruby/RR/TXT.src/M000415.html +0 -18
  441. data/doc/classes/Dnsruby/RR/TXT.src/M000416.html +0 -20
  442. data/doc/classes/Dnsruby/RR/TXT.src/M000417.html +0 -27
  443. data/doc/classes/Dnsruby/RR/TXT.src/M000418.html +0 -25
  444. data/doc/classes/Dnsruby/RR/X25.html +0 -203
  445. data/doc/classes/Dnsruby/RR/X25.src/M000411.html +0 -18
  446. data/doc/classes/Dnsruby/RR/X25.src/M000412.html +0 -18
  447. data/doc/classes/Dnsruby/RR/X25.src/M000413.html +0 -22
  448. data/doc/classes/Dnsruby/RRSet.html +0 -400
  449. data/doc/classes/Dnsruby/RRSet.src/M000575.html +0 -23
  450. data/doc/classes/Dnsruby/RRSet.src/M000576.html +0 -18
  451. data/doc/classes/Dnsruby/RRSet.src/M000577.html +0 -18
  452. data/doc/classes/Dnsruby/RRSet.src/M000578.html +0 -47
  453. data/doc/classes/Dnsruby/RRSet.src/M000579.html +0 -32
  454. data/doc/classes/Dnsruby/RRSet.src/M000580.html +0 -18
  455. data/doc/classes/Dnsruby/RRSet.src/M000581.html +0 -20
  456. data/doc/classes/Dnsruby/RRSet.src/M000582.html +0 -18
  457. data/doc/classes/Dnsruby/RRSet.src/M000583.html +0 -18
  458. data/doc/classes/Dnsruby/RRSet.src/M000584.html +0 -18
  459. data/doc/classes/Dnsruby/RRSet.src/M000585.html +0 -18
  460. data/doc/classes/Dnsruby/RRSet.src/M000586.html +0 -22
  461. data/doc/classes/Dnsruby/RRSet.src/M000587.html +0 -18
  462. data/doc/classes/Dnsruby/RRSet.src/M000588.html +0 -22
  463. data/doc/classes/Dnsruby/RRSet.src/M000589.html +0 -18
  464. data/doc/classes/Dnsruby/Recursor.html +0 -744
  465. data/doc/classes/Dnsruby/Recursor.src/M000639.html +0 -19
  466. data/doc/classes/Dnsruby/Recursor.src/M000640.html +0 -97
  467. data/doc/classes/Dnsruby/Recursor.src/M000641.html +0 -20
  468. data/doc/classes/Dnsruby/Recursor.src/M000642.html +0 -18
  469. data/doc/classes/Dnsruby/Recursor.src/M000643.html +0 -31
  470. data/doc/classes/Dnsruby/Recursor.src/M000644.html +0 -231
  471. data/doc/classes/Dnsruby/Refused.html +0 -119
  472. data/doc/classes/Dnsruby/Resolv.html +0 -401
  473. data/doc/classes/Dnsruby/Resolv.src/M000516.html +0 -18
  474. data/doc/classes/Dnsruby/Resolv.src/M000517.html +0 -18
  475. data/doc/classes/Dnsruby/Resolv.src/M000518.html +0 -18
  476. data/doc/classes/Dnsruby/Resolv.src/M000519.html +0 -18
  477. data/doc/classes/Dnsruby/Resolv.src/M000520.html +0 -18
  478. data/doc/classes/Dnsruby/Resolv.src/M000521.html +0 -18
  479. data/doc/classes/Dnsruby/Resolv.src/M000522.html +0 -18
  480. data/doc/classes/Dnsruby/Resolv.src/M000523.html +0 -19
  481. data/doc/classes/Dnsruby/Resolv.src/M000524.html +0 -20
  482. data/doc/classes/Dnsruby/Resolv.src/M000525.html +0 -29
  483. data/doc/classes/Dnsruby/Resolv.src/M000526.html +0 -19
  484. data/doc/classes/Dnsruby/Resolv.src/M000527.html +0 -20
  485. data/doc/classes/Dnsruby/Resolv.src/M000528.html +0 -25
  486. data/doc/classes/Dnsruby/ResolvError.html +0 -117
  487. data/doc/classes/Dnsruby/ResolvTimeout.html +0 -117
  488. data/doc/classes/Dnsruby/Resolver.html +0 -1114
  489. data/doc/classes/Dnsruby/Resolver.src/M000658.html +0 -24
  490. data/doc/classes/Dnsruby/Resolver.src/M000659.html +0 -27
  491. data/doc/classes/Dnsruby/Resolver.src/M000660.html +0 -28
  492. data/doc/classes/Dnsruby/Resolver.src/M000661.html +0 -18
  493. data/doc/classes/Dnsruby/Resolver.src/M000662.html +0 -51
  494. data/doc/classes/Dnsruby/Resolver.src/M000663.html +0 -25
  495. data/doc/classes/Dnsruby/Resolver.src/M000664.html +0 -22
  496. data/doc/classes/Dnsruby/Resolver.src/M000665.html +0 -18
  497. data/doc/classes/Dnsruby/Resolver.src/M000666.html +0 -20
  498. data/doc/classes/Dnsruby/Resolver.src/M000667.html +0 -19
  499. data/doc/classes/Dnsruby/Resolver.src/M000668.html +0 -21
  500. data/doc/classes/Dnsruby/Resolver.src/M000669.html +0 -21
  501. data/doc/classes/Dnsruby/Resolver.src/M000670.html +0 -27
  502. data/doc/classes/Dnsruby/Resolver.src/M000671.html +0 -19
  503. data/doc/classes/Dnsruby/Resolver.src/M000672.html +0 -19
  504. data/doc/classes/Dnsruby/Resolver.src/M000673.html +0 -19
  505. data/doc/classes/Dnsruby/Resolver.src/M000674.html +0 -19
  506. data/doc/classes/Dnsruby/Resolver.src/M000675.html +0 -19
  507. data/doc/classes/Dnsruby/Resolver.src/M000676.html +0 -19
  508. data/doc/classes/Dnsruby/Resolver.src/M000677.html +0 -19
  509. data/doc/classes/Dnsruby/Resolver.src/M000678.html +0 -19
  510. data/doc/classes/Dnsruby/Resolver.src/M000679.html +0 -19
  511. data/doc/classes/Dnsruby/Resolver.src/M000680.html +0 -19
  512. data/doc/classes/Dnsruby/Resolver.src/M000681.html +0 -26
  513. data/doc/classes/Dnsruby/Resolver.src/M000682.html +0 -18
  514. data/doc/classes/Dnsruby/Resolver.src/M000683.html +0 -23
  515. data/doc/classes/Dnsruby/Resolver.src/M000684.html +0 -18
  516. data/doc/classes/Dnsruby/ServFail.html +0 -119
  517. data/doc/classes/Dnsruby/SingleResolver.html +0 -801
  518. data/doc/classes/Dnsruby/SingleResolver.src/M000529.html +0 -18
  519. data/doc/classes/Dnsruby/SingleResolver.src/M000530.html +0 -24
  520. data/doc/classes/Dnsruby/SingleResolver.src/M000531.html +0 -36
  521. data/doc/classes/Dnsruby/SingleResolver.src/M000532.html +0 -18
  522. data/doc/classes/Dnsruby/SingleResolver.src/M000533.html +0 -19
  523. data/doc/classes/Dnsruby/SingleResolver.src/M000534.html +0 -58
  524. data/doc/classes/Dnsruby/SingleResolver.src/M000535.html +0 -19
  525. data/doc/classes/Dnsruby/SingleResolver.src/M000536.html +0 -19
  526. data/doc/classes/Dnsruby/SingleResolver.src/M000537.html +0 -25
  527. data/doc/classes/Dnsruby/SingleResolver.src/M000538.html +0 -57
  528. data/doc/classes/Dnsruby/SingleResolver.src/M000539.html +0 -21
  529. data/doc/classes/Dnsruby/SingleResolver.src/M000540.html +0 -19
  530. data/doc/classes/Dnsruby/SingleResolver.src/M000541.html +0 -26
  531. data/doc/classes/Dnsruby/SingleResolver.src/M000542.html +0 -26
  532. data/doc/classes/Dnsruby/SingleResolver.src/M000543.html +0 -36
  533. data/doc/classes/Dnsruby/SingleResolver.src/M000544.html +0 -21
  534. data/doc/classes/Dnsruby/SingleResolver.src/M000545.html +0 -31
  535. data/doc/classes/Dnsruby/SingleResolver.src/M000546.html +0 -47
  536. data/doc/classes/Dnsruby/SingleResolver.src/M000547.html +0 -35
  537. data/doc/classes/Dnsruby/SingleResolver.src/M000548.html +0 -24
  538. data/doc/classes/Dnsruby/SingleResolver.src/M000549.html +0 -21
  539. data/doc/classes/Dnsruby/TheLog.html +0 -188
  540. data/doc/classes/Dnsruby/TheLog.src/M000612.html +0 -18
  541. data/doc/classes/Dnsruby/TheLog.src/M000613.html +0 -18
  542. data/doc/classes/Dnsruby/TheLog.src/M000614.html +0 -18
  543. data/doc/classes/Dnsruby/Types.html +0 -441
  544. data/doc/classes/Dnsruby/Update.html +0 -368
  545. data/doc/classes/Dnsruby/Update.src/M000634.html +0 -32
  546. data/doc/classes/Dnsruby/Update.src/M000635.html +0 -36
  547. data/doc/classes/Dnsruby/Update.src/M000636.html +0 -32
  548. data/doc/classes/Dnsruby/Update.src/M000637.html +0 -41
  549. data/doc/classes/Dnsruby/Update.src/M000638.html +0 -34
  550. data/doc/classes/Dnsruby/VerifyError.html +0 -119
  551. data/doc/classes/Dnsruby/ZoneTransfer.html +0 -300
  552. data/doc/classes/Dnsruby/ZoneTransfer.src/M000500.html +0 -18
  553. data/doc/classes/Dnsruby/ZoneTransfer.src/M000501.html +0 -24
  554. data/doc/classes/Dnsruby/ZoneTransfer.src/M000502.html +0 -35
  555. data/doc/classes/Dnsruby/ZoneTransfer/Delta.html +0 -200
  556. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000503.html +0 -19
  557. data/doc/classes/Dnsruby/ZoneTransfer/Delta.src/M000504.html +0 -19
  558. data/doc/classes/DnssecTest.html +0 -242
  559. data/doc/classes/DnssecTest.src/M000235.html +0 -58
  560. data/doc/classes/DnssecTest.src/M000236.html +0 -28
  561. data/doc/classes/DnssecTest.src/M000237.html +0 -28
  562. data/doc/classes/DnssecTest.src/M000238.html +0 -28
  563. data/doc/classes/DnssecTest.src/M000239.html +0 -33
  564. data/doc/classes/DnssecTest.src/M000240.html +0 -24
  565. data/doc/classes/DnssecTest.src/M000241.html +0 -47
  566. data/doc/classes/DnssecTest.src/M000242.html +0 -30
  567. data/doc/classes/DsTest.html +0 -252
  568. data/doc/classes/DsTest.src/M000190.html +0 -25
  569. data/doc/classes/DsTest.src/M000191.html +0 -24
  570. data/doc/classes/DsTest.src/M000192.html +0 -26
  571. data/doc/classes/DsTest.src/M000193.html +0 -23
  572. data/doc/classes/DsTest.src/M000194.html +0 -31
  573. data/doc/classes/DsTest.src/M000195.html +0 -25
  574. data/doc/classes/Enumerable.html +0 -118
  575. data/doc/classes/Errno.html +0 -111
  576. data/doc/classes/Errno/ENOTEMPTY.html +0 -111
  577. data/doc/classes/EventMachineTestDeferrable.html +0 -212
  578. data/doc/classes/EventMachineTestDeferrable.src/M000100.html +0 -20
  579. data/doc/classes/EventMachineTestDeferrable.src/M000101.html +0 -19
  580. data/doc/classes/EventMachineTestDeferrable.src/M000102.html +0 -28
  581. data/doc/classes/EventMachineTestDeferrable.src/M000103.html +0 -29
  582. data/doc/classes/EventMachineTestDeferrable.src/M000104.html +0 -33
  583. data/doc/classes/EventMachineTestDeferrable.src/M000105.html +0 -32
  584. data/doc/classes/EventMachineTestResolver.html +0 -324
  585. data/doc/classes/EventMachineTestResolver.src/M000177.html +0 -21
  586. data/doc/classes/EventMachineTestResolver.src/M000178.html +0 -19
  587. data/doc/classes/EventMachineTestResolver.src/M000179.html +0 -20
  588. data/doc/classes/EventMachineTestResolver.src/M000180.html +0 -20
  589. data/doc/classes/EventMachineTestResolver.src/M000181.html +0 -24
  590. data/doc/classes/EventMachineTestResolver.src/M000182.html +0 -25
  591. data/doc/classes/EventMachineTestResolver.src/M000183.html +0 -31
  592. data/doc/classes/EventMachineTestResolver.src/M000184.html +0 -24
  593. data/doc/classes/EventMachineTestResolver.src/M000185.html +0 -39
  594. data/doc/classes/EventMachineTestResolver.src/M000186.html +0 -36
  595. data/doc/classes/EventMachineTestResolver.src/M000187.html +0 -32
  596. data/doc/classes/EventMachineTestResolver.src/M000188.html +0 -30
  597. data/doc/classes/EventMachineTestResolver.src/M000189.html +0 -22
  598. data/doc/classes/EventMachineTestSingleResolver.html +0 -227
  599. data/doc/classes/EventMachineTestSingleResolver.src/M000092.html +0 -21
  600. data/doc/classes/EventMachineTestSingleResolver.src/M000093.html +0 -19
  601. data/doc/classes/EventMachineTestSingleResolver.src/M000094.html +0 -31
  602. data/doc/classes/EventMachineTestSingleResolver.src/M000095.html +0 -33
  603. data/doc/classes/EventMachineTestSingleResolver.src/M000096.html +0 -33
  604. data/doc/classes/EventMachineTestSingleResolver.src/M000097.html +0 -32
  605. data/doc/classes/EventMachineTestSingleResolver.src/M000098.html +0 -23
  606. data/doc/classes/File.html +0 -166
  607. data/doc/classes/File.src/M000336.html +0 -20
  608. data/doc/classes/File.src/M000337.html +0 -20
  609. data/doc/classes/File.src/M000338.html +0 -18
  610. data/doc/classes/FileOperations.html +0 -375
  611. data/doc/classes/FileOperations.src/M000685.html +0 -31
  612. data/doc/classes/FileOperations.src/M000686.html +0 -20
  613. data/doc/classes/FileOperations.src/M000687.html +0 -20
  614. data/doc/classes/FileOperations.src/M000688.html +0 -24
  615. data/doc/classes/FileOperations.src/M000689.html +0 -34
  616. data/doc/classes/FileOperations.src/M000690.html +0 -27
  617. data/doc/classes/FileOperations.src/M000691.html +0 -21
  618. data/doc/classes/FileOperations.src/M000692.html +0 -19
  619. data/doc/classes/FileOperations.src/M000693.html +0 -40
  620. data/doc/classes/FileOperations.src/M000694.html +0 -19
  621. data/doc/classes/FileOperations.src/M000695.html +0 -20
  622. data/doc/classes/FileOperations.src/M000696.html +0 -18
  623. data/doc/classes/FileOperations.src/M000697.html +0 -18
  624. data/doc/classes/FileOperations.src/M000698.html +0 -18
  625. data/doc/classes/FileOperations.src/M000699.html +0 -20
  626. data/doc/classes/FileOperations.src/M000700.html +0 -20
  627. data/doc/classes/HookScriptAPI.html +0 -308
  628. data/doc/classes/HookScriptAPI.src/M000339.html +0 -18
  629. data/doc/classes/HookScriptAPI.src/M000341.html +0 -18
  630. data/doc/classes/HookScriptAPI.src/M000342.html +0 -18
  631. data/doc/classes/HookScriptAPI.src/M000343.html +0 -18
  632. data/doc/classes/HookScriptAPI.src/M000344.html +0 -18
  633. data/doc/classes/HookScriptAPI.src/M000345.html +0 -18
  634. data/doc/classes/HookScriptAPI.src/M000346.html +0 -18
  635. data/doc/classes/HookScriptAPI.src/M000347.html +0 -18
  636. data/doc/classes/HookScriptAPI.src/M000348.html +0 -20
  637. data/doc/classes/HookScriptAPI.src/M000349.html +0 -20
  638. data/doc/classes/HookScriptAPI.src/M000350.html +0 -20
  639. data/doc/classes/Installer.html +0 -1148
  640. data/doc/classes/Installer.src/M000243.html +0 -21
  641. data/doc/classes/Installer.src/M000244.html +0 -18
  642. data/doc/classes/Installer.src/M000245.html +0 -17
  643. data/doc/classes/Installer.src/M000246.html +0 -18
  644. data/doc/classes/Installer.src/M000247.html +0 -18
  645. data/doc/classes/Installer.src/M000248.html +0 -18
  646. data/doc/classes/Installer.src/M000249.html +0 -18
  647. data/doc/classes/Installer.src/M000250.html +0 -18
  648. data/doc/classes/Installer.src/M000251.html +0 -23
  649. data/doc/classes/Installer.src/M000252.html +0 -18
  650. data/doc/classes/Installer.src/M000255.html +0 -18
  651. data/doc/classes/Installer.src/M000259.html +0 -18
  652. data/doc/classes/Installer.src/M000260.html +0 -18
  653. data/doc/classes/Installer.src/M000261.html +0 -20
  654. data/doc/classes/Installer.src/M000263.html +0 -18
  655. data/doc/classes/Installer.src/M000267.html +0 -36
  656. data/doc/classes/Installer.src/M000268.html +0 -25
  657. data/doc/classes/Installer.src/M000269.html +0 -24
  658. data/doc/classes/Installer.src/M000270.html +0 -19
  659. data/doc/classes/Installer.src/M000271.html +0 -18
  660. data/doc/classes/Installer.src/M000272.html +0 -18
  661. data/doc/classes/Installer.src/M000273.html +0 -21
  662. data/doc/classes/Installer.src/M000274.html +0 -18
  663. data/doc/classes/Installer.src/M000275.html +0 -20
  664. data/doc/classes/Installer.src/M000276.html +0 -18
  665. data/doc/classes/Installer.src/M000277.html +0 -21
  666. data/doc/classes/Installer.src/M000278.html +0 -18
  667. data/doc/classes/Installer.src/M000279.html +0 -22
  668. data/doc/classes/Installer.src/M000280.html +0 -18
  669. data/doc/classes/Installer.src/M000281.html +0 -23
  670. data/doc/classes/Installer.src/M000282.html +0 -18
  671. data/doc/classes/Installer.src/M000283.html +0 -20
  672. data/doc/classes/Installer.src/M000284.html +0 -19
  673. data/doc/classes/Installer.src/M000285.html +0 -19
  674. data/doc/classes/Installer.src/M000286.html +0 -20
  675. data/doc/classes/Installer.src/M000287.html +0 -30
  676. data/doc/classes/Installer.src/M000288.html +0 -20
  677. data/doc/classes/Installer.src/M000294.html +0 -19
  678. data/doc/classes/Installer.src/M000295.html +0 -20
  679. data/doc/classes/Installer.src/M000298.html +0 -19
  680. data/doc/classes/Installer.src/M000302.html +0 -26
  681. data/doc/classes/Installer.src/M000303.html +0 -25
  682. data/doc/classes/Installer.src/M000304.html +0 -29
  683. data/doc/classes/Installer.src/M000305.html +0 -26
  684. data/doc/classes/Installer/Shebang.html +0 -202
  685. data/doc/classes/Installer/Shebang.src/M000306.html +0 -23
  686. data/doc/classes/Installer/Shebang.src/M000307.html +0 -19
  687. data/doc/classes/Installer/Shebang.src/M000308.html +0 -19
  688. data/doc/classes/Installer/Shebang.src/M000309.html +0 -18
  689. data/doc/classes/Nsec3ParamTest.html +0 -172
  690. data/doc/classes/Nsec3ParamTest.src/M000233.html +0 -26
  691. data/doc/classes/Nsec3ParamTest.src/M000234.html +0 -24
  692. data/doc/classes/Nsec3Test.html +0 -202
  693. data/doc/classes/Nsec3Test.src/M000207.html +0 -27
  694. data/doc/classes/Nsec3Test.src/M000208.html +0 -24
  695. data/doc/classes/Nsec3Test.src/M000209.html +0 -39
  696. data/doc/classes/Nsec3Test.src/M000210.html +0 -23
  697. data/doc/classes/NsecTest.html +0 -187
  698. data/doc/classes/NsecTest.src/M000333.html +0 -23
  699. data/doc/classes/NsecTest.src/M000334.html +0 -24
  700. data/doc/classes/NsecTest.src/M000335.html +0 -23
  701. data/doc/classes/RrsetTest.html +0 -137
  702. data/doc/classes/RrsetTest.src/M000310.html +0 -68
  703. data/doc/classes/RrsigTest.html +0 -150
  704. data/doc/classes/RrsigTest.src/M000099.html +0 -35
  705. data/doc/classes/SetupError.html +0 -111
  706. data/doc/classes/TestAResolverFile.html +0 -152
  707. data/doc/classes/TestAResolverFile.src/M000205.html +0 -18
  708. data/doc/classes/TestAResolverFile.src/M000206.html +0 -33
  709. data/doc/classes/TestAxfr.html +0 -137
  710. data/doc/classes/TestAxfr.src/M000106.html +0 -23
  711. data/doc/classes/TestDNS.html +0 -257
  712. data/doc/classes/TestDNS.src/M000196.html +0 -18
  713. data/doc/classes/TestDNS.src/M000197.html +0 -18
  714. data/doc/classes/TestDNS.src/M000198.html +0 -53
  715. data/doc/classes/TestDNS.src/M000199.html +0 -19
  716. data/doc/classes/TestDNS.src/M000200.html +0 -18
  717. data/doc/classes/TestDNS.src/M000201.html +0 -32
  718. data/doc/classes/TestDNS.src/M000202.html +0 -74
  719. data/doc/classes/TestDNS.src/M000203.html +0 -41
  720. data/doc/classes/TestDNS.src/M000204.html +0 -67
  721. data/doc/classes/TestDnsruby.html +0 -137
  722. data/doc/classes/TestDnsruby.src/M000211.html +0 -36
  723. data/doc/classes/TestEscapedChars.html +0 -152
  724. data/doc/classes/TestEscapedChars.src/M000014.html +0 -243
  725. data/doc/classes/TestEscapedChars.src/M000015.html +0 -248
  726. data/doc/classes/TestEventMachineSoak.html +0 -227
  727. data/doc/classes/TestEventMachineSoak.src/M000319.html +0 -19
  728. data/doc/classes/TestEventMachineSoak.src/M000320.html +0 -18
  729. data/doc/classes/TestEventMachineSoak.src/M000321.html +0 -18
  730. data/doc/classes/TestEventMachineSoak.src/M000322.html +0 -33
  731. data/doc/classes/TestEventMachineSoak.src/M000323.html +0 -34
  732. data/doc/classes/TestEventMachineSoak.src/M000324.html +0 -33
  733. data/doc/classes/TestEventMachineSoak.src/M000325.html +0 -33
  734. data/doc/classes/TestHeader.html +0 -137
  735. data/doc/classes/TestHeader.src/M000091.html +0 -98
  736. data/doc/classes/TestMisc.html +0 -167
  737. data/doc/classes/TestMisc.src/M000011.html +0 -28
  738. data/doc/classes/TestMisc.src/M000012.html +0 -50
  739. data/doc/classes/TestMisc.src/M000013.html +0 -84
  740. data/doc/classes/TestName.html +0 -182
  741. data/doc/classes/TestName.src/M000218.html +0 -24
  742. data/doc/classes/TestName.src/M000219.html +0 -23
  743. data/doc/classes/TestName.src/M000220.html +0 -21
  744. data/doc/classes/TestName.src/M000221.html +0 -21
  745. data/doc/classes/TestPacket.html +0 -182
  746. data/doc/classes/TestPacket.src/M000229.html +0 -154
  747. data/doc/classes/TestPacket.src/M000230.html +0 -25
  748. data/doc/classes/TestPacket.src/M000231.html +0 -23
  749. data/doc/classes/TestPacket.src/M000232.html +0 -32
  750. data/doc/classes/TestPacketUniquePush.html +0 -140
  751. data/doc/classes/TestPacketUniquePush.src/M000318.html +0 -81
  752. data/doc/classes/TestQuestion.html +0 -137
  753. data/doc/classes/TestQuestion.src/M000090.html +0 -45
  754. data/doc/classes/TestQueue.html +0 -137
  755. data/doc/classes/TestQueue.src/M000089.html +0 -27
  756. data/doc/classes/TestRR.html +0 -137
  757. data/doc/classes/TestRR.src/M000217.html +0 -256
  758. data/doc/classes/TestRecur.html +0 -137
  759. data/doc/classes/TestRecur.src/M000176.html +0 -20
  760. data/doc/classes/TestResOpt.html +0 -227
  761. data/doc/classes/TestResOpt.src/M000311.html +0 -37
  762. data/doc/classes/TestResOpt.src/M000312.html +0 -19
  763. data/doc/classes/TestResOpt.src/M000313.html +0 -30
  764. data/doc/classes/TestResOpt.src/M000314.html +0 -37
  765. data/doc/classes/TestResOpt.src/M000315.html +0 -45
  766. data/doc/classes/TestResOpt.src/M000316.html +0 -36
  767. data/doc/classes/TestResOpt.src/M000317.html +0 -60
  768. data/doc/classes/TestResolver.html +0 -357
  769. data/doc/classes/TestResolver.src/M000077.html +0 -18
  770. data/doc/classes/TestResolver.src/M000078.html +0 -20
  771. data/doc/classes/TestResolver.src/M000079.html +0 -20
  772. data/doc/classes/TestResolver.src/M000080.html +0 -24
  773. data/doc/classes/TestResolver.src/M000081.html +0 -25
  774. data/doc/classes/TestResolver.src/M000082.html +0 -31
  775. data/doc/classes/TestResolver.src/M000083.html +0 -24
  776. data/doc/classes/TestResolver.src/M000084.html +0 -42
  777. data/doc/classes/TestResolver.src/M000085.html +0 -38
  778. data/doc/classes/TestResolver.src/M000086.html +0 -34
  779. data/doc/classes/TestResolver.src/M000087.html +0 -30
  780. data/doc/classes/TestResolver.src/M000088.html +0 -41
  781. data/doc/classes/TestResolverConfig.html +0 -205
  782. data/doc/classes/TestResolverConfig.src/M000225.html +0 -18
  783. data/doc/classes/TestResolverConfig.src/M000226.html +0 -37
  784. data/doc/classes/TestResolverConfig.src/M000227.html +0 -23
  785. data/doc/classes/TestResolverConfig.src/M000228.html +0 -22
  786. data/doc/classes/TestResolverEnv.html +0 -141
  787. data/doc/classes/TestResolverEnv.src/M000332.html +0 -44
  788. data/doc/classes/TestRrOpt.html +0 -182
  789. data/doc/classes/TestRrOpt.src/M000007.html +0 -33
  790. data/doc/classes/TestRrOpt.src/M000008.html +0 -46
  791. data/doc/classes/TestRrOpt.src/M000009.html +0 -23
  792. data/doc/classes/TestRrOpt.src/M000010.html +0 -34
  793. data/doc/classes/TestRrTest.html +0 -155
  794. data/doc/classes/TestRrTest.src/M000224.html +0 -77
  795. data/doc/classes/TestRrUnknown.html +0 -167
  796. data/doc/classes/TestRrUnknown.src/M000074.html +0 -41
  797. data/doc/classes/TestRrUnknown.src/M000075.html +0 -39
  798. data/doc/classes/TestRrUnknown.src/M000076.html +0 -42
  799. data/doc/classes/TestSingleResolver.html +0 -293
  800. data/doc/classes/TestSingleResolver.src/M000149.html +0 -18
  801. data/doc/classes/TestSingleResolver.src/M000150.html +0 -19
  802. data/doc/classes/TestSingleResolver.src/M000151.html +0 -28
  803. data/doc/classes/TestSingleResolver.src/M000152.html +0 -30
  804. data/doc/classes/TestSingleResolver.src/M000153.html +0 -55
  805. data/doc/classes/TestSingleResolver.src/M000154.html +0 -26
  806. data/doc/classes/TestSingleResolver.src/M000155.html +0 -23
  807. data/doc/classes/TestSingleResolver.src/M000156.html +0 -27
  808. data/doc/classes/TestSingleResolver.src/M000157.html +0 -39
  809. data/doc/classes/TestSingleResolverSoak.html +0 -223
  810. data/doc/classes/TestSingleResolverSoak.src/M000326.html +0 -18
  811. data/doc/classes/TestSingleResolverSoak.src/M000327.html +0 -18
  812. data/doc/classes/TestSingleResolverSoak.src/M000328.html +0 -57
  813. data/doc/classes/TestSingleResolverSoak.src/M000329.html +0 -64
  814. data/doc/classes/TestSingleResolverSoak.src/M000330.html +0 -25
  815. data/doc/classes/TestSingleResolverSoak.src/M000331.html +0 -63
  816. data/doc/classes/TestSoakBase.html +0 -172
  817. data/doc/classes/TestSoakBase.src/M000072.html +0 -68
  818. data/doc/classes/TestSoakBase.src/M000073.html +0 -66
  819. data/doc/classes/TestTKey.html +0 -152
  820. data/doc/classes/TestTKey.src/M000215.html +0 -18
  821. data/doc/classes/TestTKey.src/M000216.html +0 -65
  822. data/doc/classes/TestTSig.html +0 -309
  823. data/doc/classes/TestTSig.src/M000138.html +0 -18
  824. data/doc/classes/TestTSig.src/M000139.html +0 -20
  825. data/doc/classes/TestTSig.src/M000140.html +0 -26
  826. data/doc/classes/TestTSig.src/M000141.html +0 -69
  827. data/doc/classes/TestTSig.src/M000142.html +0 -21
  828. data/doc/classes/TestTSig.src/M000143.html +0 -60
  829. data/doc/classes/TestTSig.src/M000144.html +0 -33
  830. data/doc/classes/TestTSig.src/M000145.html +0 -20
  831. data/doc/classes/TestTSig.src/M000146.html +0 -24
  832. data/doc/classes/TestTSig.src/M000147.html +0 -54
  833. data/doc/classes/TestTSig.src/M000148.html +0 -23
  834. data/doc/classes/TestTcp.html +0 -152
  835. data/doc/classes/TestTcp.src/M000222.html +0 -21
  836. data/doc/classes/TestTcp.src/M000223.html +0 -23
  837. data/doc/classes/TestUpdate.html +0 -152
  838. data/doc/classes/TestUpdate.src/M000174.html +0 -20
  839. data/doc/classes/TestUpdate.src/M000175.html +0 -203
  840. data/doc/classes/ToplevelInstaller.html +0 -621
  841. data/doc/classes/ToplevelInstaller.src/M000107.html +0 -23
  842. data/doc/classes/ToplevelInstaller.src/M000108.html +0 -18
  843. data/doc/classes/ToplevelInstaller.src/M000109.html +0 -25
  844. data/doc/classes/ToplevelInstaller.src/M000110.html +0 -21
  845. data/doc/classes/ToplevelInstaller.src/M000111.html +0 -18
  846. data/doc/classes/ToplevelInstaller.src/M000112.html +0 -18
  847. data/doc/classes/ToplevelInstaller.src/M000113.html +0 -38
  848. data/doc/classes/ToplevelInstaller.src/M000114.html +0 -18
  849. data/doc/classes/ToplevelInstaller.src/M000115.html +0 -18
  850. data/doc/classes/ToplevelInstaller.src/M000116.html +0 -18
  851. data/doc/classes/ToplevelInstaller.src/M000117.html +0 -18
  852. data/doc/classes/ToplevelInstaller.src/M000118.html +0 -18
  853. data/doc/classes/ToplevelInstaller.src/M000119.html +0 -40
  854. data/doc/classes/ToplevelInstaller.src/M000120.html +0 -18
  855. data/doc/classes/ToplevelInstaller.src/M000121.html +0 -18
  856. data/doc/classes/ToplevelInstaller.src/M000122.html +0 -21
  857. data/doc/classes/ToplevelInstaller.src/M000128.html +0 -40
  858. data/doc/classes/ToplevelInstaller.src/M000129.html +0 -31
  859. data/doc/classes/ToplevelInstaller.src/M000130.html +0 -52
  860. data/doc/classes/ToplevelInstaller.src/M000131.html +0 -19
  861. data/doc/classes/ToplevelInstaller.src/M000132.html +0 -18
  862. data/doc/classes/ToplevelInstaller.src/M000133.html +0 -18
  863. data/doc/classes/ToplevelInstaller.src/M000134.html +0 -18
  864. data/doc/classes/ToplevelInstaller.src/M000135.html +0 -20
  865. data/doc/classes/ToplevelInstaller.src/M000136.html +0 -18
  866. data/doc/classes/ToplevelInstaller.src/M000137.html +0 -18
  867. data/doc/classes/ToplevelInstallerMulti.html +0 -398
  868. data/doc/classes/ToplevelInstallerMulti.src/M000158.html +0 -21
  869. data/doc/classes/ToplevelInstallerMulti.src/M000159.html +0 -21
  870. data/doc/classes/ToplevelInstallerMulti.src/M000160.html +0 -23
  871. data/doc/classes/ToplevelInstallerMulti.src/M000161.html +0 -29
  872. data/doc/classes/ToplevelInstallerMulti.src/M000162.html +0 -22
  873. data/doc/classes/ToplevelInstallerMulti.src/M000163.html +0 -21
  874. data/doc/classes/ToplevelInstallerMulti.src/M000164.html +0 -21
  875. data/doc/classes/ToplevelInstallerMulti.src/M000165.html +0 -20
  876. data/doc/classes/ToplevelInstallerMulti.src/M000166.html +0 -20
  877. data/doc/classes/ToplevelInstallerMulti.src/M000167.html +0 -20
  878. data/doc/classes/ToplevelInstallerMulti.src/M000168.html +0 -21
  879. data/doc/classes/ToplevelInstallerMulti.src/M000169.html +0 -21
  880. data/doc/classes/ToplevelInstallerMulti.src/M000170.html +0 -25
  881. data/doc/classes/ToplevelInstallerMulti.src/M000171.html +0 -18
  882. data/doc/classes/ToplevelInstallerMulti.src/M000172.html +0 -18
  883. data/doc/classes/ToplevelInstallerMulti.src/M000173.html +0 -18
  884. data/doc/created.rid +0 -1
  885. data/doc/files/demo/axfr_rb.html +0 -158
  886. data/doc/files/demo/check_soa_rb.html +0 -138
  887. data/doc/files/demo/check_zone_rb.html +0 -231
  888. data/doc/files/demo/check_zone_rb.src/M000001.html +0 -81
  889. data/doc/files/demo/check_zone_rb.src/M000002.html +0 -30
  890. data/doc/files/demo/check_zone_rb.src/M000003.html +0 -23
  891. data/doc/files/demo/check_zone_rb.src/M000004.html +0 -23
  892. data/doc/files/demo/check_zone_rb.src/M000005.html +0 -23
  893. data/doc/files/demo/example_recurse_rb.html +0 -115
  894. data/doc/files/demo/mresolv_rb.html +0 -130
  895. data/doc/files/demo/mx_rb.html +0 -108
  896. data/doc/files/demo/rubydig_rb.html +0 -128
  897. data/doc/files/demo/trace_dns_rb.html +0 -108
  898. data/doc/files/lib/Dnsruby/Cache_rb.html +0 -109
  899. data/doc/files/lib/Dnsruby/Config_rb.html +0 -101
  900. data/doc/files/lib/Dnsruby/DNS_rb.html +0 -110
  901. data/doc/files/lib/Dnsruby/Hosts_rb.html +0 -108
  902. data/doc/files/lib/Dnsruby/Recursor_rb.html +0 -101
  903. data/doc/files/lib/Dnsruby/Resolver_rb.html +0 -110
  904. data/doc/files/lib/Dnsruby/SingleResolver_rb.html +0 -109
  905. data/doc/files/lib/Dnsruby/TheLog_rb.html +0 -110
  906. data/doc/files/lib/Dnsruby/code_mapper_rb.html +0 -101
  907. data/doc/files/lib/Dnsruby/dnssec_rb.html +0 -107
  908. data/doc/files/lib/Dnsruby/event_machine_interface_rb.html +0 -108
  909. data/doc/files/lib/Dnsruby/iana_ports_rb.html +0 -127
  910. data/doc/files/lib/Dnsruby/ipv4_rb.html +0 -101
  911. data/doc/files/lib/Dnsruby/ipv6_rb.html +0 -101
  912. data/doc/files/lib/Dnsruby/message_rb.html +0 -109
  913. data/doc/files/lib/Dnsruby/name_rb.html +0 -101
  914. data/doc/files/lib/Dnsruby/resource/AAAA_rb.html +0 -101
  915. data/doc/files/lib/Dnsruby/resource/AFSDB_rb.html +0 -101
  916. data/doc/files/lib/Dnsruby/resource/A_rb.html +0 -101
  917. data/doc/files/lib/Dnsruby/resource/CERT_rb.html +0 -101
  918. data/doc/files/lib/Dnsruby/resource/DLV_rb.html +0 -101
  919. data/doc/files/lib/Dnsruby/resource/DNSKEY_rb.html +0 -101
  920. data/doc/files/lib/Dnsruby/resource/DS_rb.html +0 -108
  921. data/doc/files/lib/Dnsruby/resource/HINFO_rb.html +0 -101
  922. data/doc/files/lib/Dnsruby/resource/IN_rb.html +0 -112
  923. data/doc/files/lib/Dnsruby/resource/ISDN_rb.html +0 -101
  924. data/doc/files/lib/Dnsruby/resource/LOC_rb.html +0 -101
  925. data/doc/files/lib/Dnsruby/resource/MINFO_rb.html +0 -101
  926. data/doc/files/lib/Dnsruby/resource/MX_rb.html +0 -101
  927. data/doc/files/lib/Dnsruby/resource/NAPTR_rb.html +0 -101
  928. data/doc/files/lib/Dnsruby/resource/NSAP_rb.html +0 -101
  929. data/doc/files/lib/Dnsruby/resource/NSEC3PARAM_rb.html +0 -101
  930. data/doc/files/lib/Dnsruby/resource/NSEC3_rb.html +0 -101
  931. data/doc/files/lib/Dnsruby/resource/NSEC_rb.html +0 -101
  932. data/doc/files/lib/Dnsruby/resource/OPT_rb.html +0 -101
  933. data/doc/files/lib/Dnsruby/resource/PX_rb.html +0 -101
  934. data/doc/files/lib/Dnsruby/resource/RP_rb.html +0 -101
  935. data/doc/files/lib/Dnsruby/resource/RRSIG_rb.html +0 -101
  936. data/doc/files/lib/Dnsruby/resource/RT_rb.html +0 -101
  937. data/doc/files/lib/Dnsruby/resource/SOA_rb.html +0 -101
  938. data/doc/files/lib/Dnsruby/resource/SPF_rb.html +0 -101
  939. data/doc/files/lib/Dnsruby/resource/SRV_rb.html +0 -101
  940. data/doc/files/lib/Dnsruby/resource/TKEY_rb.html +0 -101
  941. data/doc/files/lib/Dnsruby/resource/TSIG_rb.html +0 -114
  942. data/doc/files/lib/Dnsruby/resource/TXT_rb.html +0 -108
  943. data/doc/files/lib/Dnsruby/resource/X25_rb.html +0 -101
  944. data/doc/files/lib/Dnsruby/resource/domain_name_rb.html +0 -101
  945. data/doc/files/lib/Dnsruby/resource/generic_rb.html +0 -132
  946. data/doc/files/lib/Dnsruby/resource/resource_rb.html +0 -110
  947. data/doc/files/lib/Dnsruby/select_thread_rb.html +0 -111
  948. data/doc/files/lib/Dnsruby/update_rb.html +0 -101
  949. data/doc/files/lib/Dnsruby/zone_transfer_rb.html +0 -101
  950. data/doc/files/lib/dnsruby_rb.html +0 -118
  951. data/doc/files/setup_rb.html +0 -148
  952. data/doc/files/setup_rb.src/M000006.html +0 -18
  953. data/doc/files/test/tc_axfr_rb.html +0 -110
  954. data/doc/files/test/tc_dns_rb.html +0 -117
  955. data/doc/files/test/tc_dnskey_rb.html +0 -109
  956. data/doc/files/test/tc_dnsruby_rb.html +0 -117
  957. data/doc/files/test/tc_dnssec_rb.html +0 -109
  958. data/doc/files/test/tc_ds_rb.html +0 -110
  959. data/doc/files/test/tc_escapedchars_rb.html +0 -117
  960. data/doc/files/test/tc_event_machine_deferrable_rb.html +0 -111
  961. data/doc/files/test/tc_event_machine_res_rb.html +0 -111
  962. data/doc/files/test/tc_event_machine_single_res_rb.html +0 -111
  963. data/doc/files/test/tc_event_machine_soak_rb.html +0 -113
  964. data/doc/files/test/tc_header_rb.html +0 -117
  965. data/doc/files/test/tc_misc_rb.html +0 -110
  966. data/doc/files/test/tc_name_rb.html +0 -117
  967. data/doc/files/test/tc_nsec3_rb.html +0 -109
  968. data/doc/files/test/tc_nsec3param_rb.html +0 -109
  969. data/doc/files/test/tc_nsec_rb.html +0 -109
  970. data/doc/files/test/tc_packet_rb.html +0 -117
  971. data/doc/files/test/tc_packet_unique_push_rb.html +0 -117
  972. data/doc/files/test/tc_question_rb.html +0 -117
  973. data/doc/files/test/tc_queue_rb.html +0 -109
  974. data/doc/files/test/tc_recur_rb.html +0 -109
  975. data/doc/files/test/tc_res_config_rb.html +0 -110
  976. data/doc/files/test/tc_res_env_rb.html +0 -117
  977. data/doc/files/test/tc_res_file_rb.html +0 -110
  978. data/doc/files/test/tc_res_opt_rb.html +0 -117
  979. data/doc/files/test/tc_resolver_rb.html +0 -117
  980. data/doc/files/test/tc_rr-opt_rb.html +0 -118
  981. data/doc/files/test/tc_rr-txt_rb.html +0 -117
  982. data/doc/files/test/tc_rr-unknown_rb.html +0 -110
  983. data/doc/files/test/tc_rr_rb.html +0 -117
  984. data/doc/files/test/tc_rrset_rb.html +0 -109
  985. data/doc/files/test/tc_rrsig_rb.html +0 -109
  986. data/doc/files/test/tc_single_resolver_rb.html +0 -117
  987. data/doc/files/test/tc_soak_base_rb.html +0 -110
  988. data/doc/files/test/tc_soak_rb.html +0 -121
  989. data/doc/files/test/tc_tcp_rb.html +0 -110
  990. data/doc/files/test/tc_tkey_rb.html +0 -111
  991. data/doc/files/test/tc_tsig_rb.html +0 -111
  992. data/doc/files/test/tc_update_rb.html +0 -117
  993. data/doc/files/test/ts_dnsruby_rb.html +0 -109
  994. data/doc/files/test/ts_offline_rb.html +0 -133
  995. data/doc/files/test/ts_online_rb.html +0 -128
  996. data/doc/fr_method_index.html +0 -726
@@ -13,12 +13,14 @@
13
13
  #See the License for the specific language governing permissions and
14
14
  #limitations under the License.
15
15
  #++
16
- require "Dnsruby/SingleResolver"
16
+ #require "Dnsruby/resolver_register.rb"
17
+ require "Dnsruby/PacketSender"
17
18
  require "Dnsruby/Recursor"
18
19
  module Dnsruby
19
20
  #== Description
20
21
  #Dnsruby::Resolver is a DNS stub resolver.
21
- #This class uses a set of SingleResolvers to perform queries with retries across multiple nameservers.
22
+ #This class performs queries with retries across multiple nameservers.
23
+ #The system configured resolvers are used by default.
22
24
  #
23
25
  #The retry policy is a combination of the Net::DNS and dnsjava approach, and has the option of :
24
26
  #* A total timeout for the query (defaults to 0, meaning "no total timeout")
@@ -31,6 +33,14 @@ module Dnsruby
31
33
  #
32
34
  # Note also that these timeouts are distinct from the SingleResolver's packet_timeout
33
35
  #
36
+ # Timeouts apply to the initial query and response. If DNSSEC validation is to
37
+ # be performed, then additional queries may be required (these are performed automatically
38
+ # by Dnsruby). Each additional query will be performed with its own timeouts.
39
+ # So, even with a query_timeout of 5 seconds, a response which required extensive
40
+ # validation may take several times that long.
41
+ # (Future versions of Dnsruby may expose finer-grained events for client tracking of
42
+ # responses and validation)
43
+ #
34
44
  #== Methods
35
45
  #
36
46
  #=== Synchronous
@@ -46,29 +56,24 @@ module Dnsruby
46
56
  #
47
57
  #== Event Loop
48
58
  #Dnsruby runs a pure Ruby event loop to handle I/O in a single thread.
49
- #It is also possible to configure Dnsruby to use EventMachine instead.
50
- #See the Dnsruby::Resolver::use_eventmachine method for details.
51
- #
52
- #Note that, if using Dnsruby from an EventMachine loop, you will need to tell
53
- #Dnsruby not to start the event loop itself :
54
- #
55
- # Dnsruby::Resolver::use_eventmachine(true)
56
- # Dnsruby::Resolver::start_eventmachine_loop(false)
59
+ #Support for EventMachine has been deprecated.
57
60
  class Resolver
58
- @@event_machine_available=false
59
- begin
60
- require 'Dnsruby/event_machine_interface'
61
- @@event_machine_available=true
62
- Dnsruby.log.debug{"EventMachine loaded"}
63
- rescue LoadError
64
- Dnsruby.log.error{"EventMachine not found"}
65
- end
66
61
  DefaultQueryTimeout = 0
67
62
  DefaultPacketTimeout = 10
68
63
  DefaultRetryTimes = 4
69
64
  DefaultRetryDelay = 5
70
65
  DefaultPort = 53
71
- DefaultUDPSize = 512
66
+ DefaultDnssec = true
67
+ AbsoluteMinDnssecUdpSize = 1220
68
+ MinDnssecUdpSize = 4096
69
+ DefaultUDPSize = MinDnssecUdpSize
70
+
71
+ class EventType
72
+ RECEIVED = 0
73
+ VALIDATED = 1 # @TODO@ Should be COMPLETE?
74
+ ERROR = 2
75
+ end
76
+
72
77
  # The port to send queries to on the resolver
73
78
  attr_reader :port
74
79
 
@@ -85,11 +90,6 @@ module Dnsruby
85
90
  # The source address to send queries from
86
91
  attr_reader :src_address
87
92
 
88
- # Should TCP queries be sent on a persistent socket?
89
- attr_reader :persistent_tcp
90
- # Should UDP queries be sent on a persistent socket?
91
- attr_reader :persistent_udp
92
-
93
93
  # Should the Recursion Desired bit be set?
94
94
  attr_reader :recurse
95
95
 
@@ -100,7 +100,19 @@ module Dnsruby
100
100
  attr_reader :config
101
101
 
102
102
  # The array of SingleResolvers used for sending query messages
103
- attr_reader :single_resolvers
103
+ # attr_accessor :single_resolvers # :nodoc:
104
+ def single_resolvers=(s) # :nodoc:
105
+ @configured = true
106
+ # @single_res_mutex.synchronize {
107
+ @single_resolvers = s
108
+ # }
109
+ end
110
+ def single_resolvers # :nodoc:
111
+ if (!@configured)
112
+ add_config_nameservers
113
+ end
114
+ return @single_resolvers
115
+ end
104
116
 
105
117
  #The timeout for any individual packet. This is the timeout used by SingleResolver
106
118
  attr_reader :packet_timeout
@@ -119,15 +131,21 @@ module Dnsruby
119
131
 
120
132
  # Use DNSSEC for this Resolver
121
133
  attr_reader :dnssec
122
-
123
- @@use_eventmachine=false
124
- @@start_eventmachine_loop=true
134
+
135
+ # Defines whether validation is performed by default on this Resolver when the
136
+ # query method is called.
137
+ # Note that send_message and send_async expect a
138
+ # Message object to be passed in, which is already configured to the callers
139
+ # requirements.
140
+ attr_accessor :do_validation
125
141
 
126
142
  #--
127
143
  #@TODO@ add load_balance? i.e. Target nameservers in a random, rather than pre-determined, order?
144
+ #This is best done when configuring the Resolver, as it will re-order servers based on their response times.
145
+ #
128
146
  #++
129
147
 
130
- # Query for a n. If a valid Message is received, then it is returned
148
+ # Query for a name. If a valid Message is received, then it is returned
131
149
  # to the caller. Otherwise an exception (a Dnsruby::ResolvError or Dnsruby::ResolvTimeout) is raised.
132
150
  #
133
151
  # require 'Dnsruby'
@@ -140,11 +158,23 @@ module Dnsruby
140
158
  msg = Message.new
141
159
  msg.header.rd = 1
142
160
  msg.add_question(name, type, klass)
161
+ msg.do_validation = @do_validation
143
162
  if (@dnssec)
144
163
  msg.header.cd = set_cd # We do our own validation by default
145
164
  end
146
165
  return send_message(msg)
147
166
  end
167
+
168
+ def query_no_validation_or_recursion(name, type=Types.A, klass=Classes.IN) # :nodoc: all
169
+ msg = Message.new
170
+ msg.header.rd = false
171
+ msg.do_validation = false
172
+ msg.add_question(name, type, klass)
173
+ if (@dnssec)
174
+ msg.header.cd = true # We do our own validation by default
175
+ end
176
+ return send_message(msg)
177
+ end
148
178
 
149
179
  # Send a message, and wait for the response. If a valid Message is received, then it is returned
150
180
  # to the caller. Otherwise an exception (a Dnsruby::ResolvError or Dnsruby::ResolvTimeout) is raised.
@@ -153,7 +183,8 @@ module Dnsruby
153
183
  #
154
184
  # example :
155
185
  #
156
- # require 'Dnsruby'
186
+ # require 'dnsruby'
187
+ # include Dnsruby
157
188
  # res = Dnsruby::Resolver.new
158
189
  # begin
159
190
  # response = res.send_message(Message.new("example.com", Types.MX))
@@ -166,18 +197,69 @@ module Dnsruby
166
197
  Dnsruby.log.debug{"Resolver : sending message"}
167
198
  q = Queue.new
168
199
  send_async(message, q)
200
+ # # @TODO@ Add new queue tuples, e.g. :
201
+ # event_type = EventType::RECEIVED
202
+ # reply = nil
203
+ # while (event_type == EventType::RECEIVED)
204
+ # id, event_type, reply, error = q.pop
205
+ # Dnsruby.log.debug{"Resolver : result received"}
206
+ # if ((error != nil) && (event_type == EventType::ERROR))
207
+ # raise error
208
+ # end
209
+ # print "Reply = #{reply}\n"
210
+ # end
211
+ # print "Reply = #{reply}\n"
212
+ # return reply
213
+
169
214
  id, result, error = q.pop
170
- Dnsruby.log.debug{"Resolver : result received"}
215
+
171
216
  if (error != nil)
172
217
  raise error
173
218
  else
174
219
  return result
175
220
  end
176
221
  end
222
+
223
+ # This method takes a Message (supplied by the client), and sends it to
224
+ # the configured nameservers. No changes are made to the Message before it
225
+ # is sent (TSIG signatures will be applied if configured on the Resolver).
226
+ # Retries are handled as the Resolver is configured to do.
227
+ # Incoming responses to the query are not cached or validated (although TCP
228
+ # fallback will be performed if the TC bit is set and the (Single)Resolver has
229
+ # ignore_truncation set to false).
230
+ # Note that the Message is left untouched - this means that no OPT records are
231
+ # added, even if the UDP transport for the server is specified at more than 512
232
+ # bytes. If it is desired to use EDNS for this packet, then you should call
233
+ # the Dnsruby::PacketSender#prepare_for_dnssec(msg), or
234
+ # Dnsruby::PacketSender#add_opt_rr(msg)
235
+ # The return value from this method is the [response, error] tuple. Either of
236
+ # these values may be nil - it is up to the client to check.
237
+ #
238
+ # example :
239
+ #
240
+ # require 'dnsruby'
241
+ # include Dnsruby
242
+ # res = Dnsruby::Resolver.new
243
+ # response, error = res.send_plain_message(Message.new("example.com", Types.MX))
244
+ # if (error)
245
+ # print "Error returned : #{error}\n"
246
+ # else
247
+ # process_response(response)
248
+ # end
249
+ def send_plain_message(message)
250
+ Dnsruby::TheLog.debug("Resolver : send_plain_message")
251
+ message.do_caching = false
252
+ message.do_validation = false
253
+ message.send_raw = true
254
+ q = Queue.new
255
+ send_async(message, q)
256
+ id, result, error = q.pop
257
+ return [result, error]
258
+ end
177
259
 
178
260
 
179
261
  #Asynchronously send a Message to the server. The send can be done using just
180
- #Dnsruby, or using EventMachine.
262
+ #Dnsruby. Support for EventMachine has been deprecated.
181
263
  #
182
264
  #== Dnsruby pure Ruby event loop :
183
265
  #
@@ -229,75 +311,23 @@ module Dnsruby
229
311
  # end
230
312
  # end
231
313
  #
232
- #== If EventMachine is being used :
233
- #
234
- #If EventMachine is being used (see Dnsruby::Resolver::use_eventmachine, then this method returns
235
- #an EM::Deferrable object. When the response is known, then the Deferrable will complete.
236
- #If a queue (and ID) is passed in, then the response will also be
237
- #pushed to the Queue. Note that an ID is not automatically generated by this version.
238
- #
239
- #=== Example invocations :
240
- #
241
- # deferrable = res.send_async(msg)
242
- # deferrable = res.send_async(msg, use_tcp)
243
- # deferrable = res.send_async(msg, q, id, use_tcp)
244
- #
245
- #=== Example code
246
- #* Here is an example of using the code in an EventMachine style :
247
- #
248
- # require 'Dnsruby'
249
- # require 'eventmachine'
250
- # res = Dnsruby::Resolver.new
251
- # Dnsruby::Resolver.use_eventmachine
252
- # Dnsruby::Resolver.start_eventmachine_loop(false)
253
- # EventMachine::run {
254
- # df = res.send_async(Dnsruby::Message.new("example.com"))
255
- # df.callback {|msg|
256
- # puts "Response : #{msg}"
257
- # EM.stop}
258
- # df.errback {|msg, err|
259
- # puts "Response : #{msg}"
260
- # puts "Error: #{err}"
261
- # EM.stop}
262
- # }
263
- #
264
- #* And an example in a normal Dnsruby style :
265
- #
266
- # require 'Dnsruby'
267
- # res = Dnsruby::Resolver.new
268
- # Dnsruby::Resolver.use_eventmachine
269
- # Dnsruby::Resolver.start_eventmachine_loop(true) # default
270
- # q = Queue.new
271
- # id = res.send_async(Dnsruby::Message.new("example.com"),q)
272
- # id, response, error = q.pop
273
- #
274
314
  def send_async(*args) # msg, client_queue, client_query_id)
275
- if (Resolver.eventmachine?)
276
- if (!@resolver_em)
277
- @resolver_em = ResolverEM.new(self)
278
- end
279
- return @resolver_em.send_async(*args)
280
- else
281
- if (!@resolver_ruby) # @TODO@ Synchronize this?
282
- @resolver_ruby = ResolverRuby.new(self)
283
- end
284
- return @resolver_ruby.send_async(*args)
315
+ if (!@configured)
316
+ add_config_nameservers
317
+ end
318
+ # @single_res_mutex.synchronize {
319
+ if (!@resolver_ruby) # @TODO@ Synchronize this?
320
+ @resolver_ruby = ResolverRuby.new(self)
285
321
  end
322
+ # }
323
+ return @resolver_ruby.send_async(*args)
286
324
  end
287
325
 
288
326
  # Close the Resolver. Unfinished queries are terminated with OtherResolvError.
289
327
  def close
290
- [@resolver_em, @resolver_ruby].each do |r| r.close if r end
328
+ @resolver_ruby.close if @resolver_ruby
291
329
  end
292
330
 
293
- # def make_query(*args)
294
- # return @single_resolvers[0].make_query(*args)
295
- # end
296
- #
297
- # def make_query_packet(args)
298
- # return @single_resolvers[0].make_query_packet(args)
299
- # end
300
- #
301
331
  # Create a new Resolver object. If no parameters are passed in, then the default
302
332
  # system configuration will be used. Otherwise, a Hash may be passed in with the
303
333
  # following optional elements :
@@ -309,8 +339,6 @@ module Dnsruby
309
339
  # * :ignore_truncation
310
340
  # * :src_address
311
341
  # * :src_port
312
- # * :persistent_tcp
313
- # * :persistent_udp
314
342
  # * :recurse
315
343
  # * :udp_size
316
344
  # * :config_info - see Config
@@ -320,9 +348,12 @@ module Dnsruby
320
348
  # * :retry_times
321
349
  # * :retry_delay
322
350
  def initialize(*args)
323
- @resolver_em = nil
351
+ # @TODO@ Should we allow :namesver to be an RRSet of NS records? Would then need to randomly order them?
324
352
  @resolver_ruby = nil
325
353
  @src_address = nil
354
+ @single_res_mutex = Mutex.new
355
+ @configured = false
356
+ @config = Config.new()
326
357
  reset_attributes
327
358
 
328
359
  # Process args
@@ -350,46 +381,58 @@ module Dnsruby
350
381
  else
351
382
  # Anything to do?
352
383
  end
353
- if (@single_resolvers==[])
354
- add_config_nameservers
355
- end
384
+ # if (@single_resolvers==[])
385
+ # add_config_nameservers
386
+ # end
356
387
  update
388
+ # ResolverRegister::register_resolver(self)
357
389
  end
358
390
 
359
- def add_config_nameservers
391
+ def add_config_nameservers # :nodoc: all
392
+ if (!@configured)
393
+ @config.get_ready
394
+ end
395
+ @configured = true
396
+ @single_res_mutex.synchronize {
360
397
  # Add the Config nameservers
361
398
  @config.nameserver.each do |ns|
362
- @single_resolvers.push(SingleResolver.new({:server=>ns, :dnssec=>@dnssec,
363
- :use_tcp=>@use_tcp, :packet_timeout=>@packet_timeout,
364
- :tsig => @tsig, :ignore_truncation=>@ignore_truncation,
365
- :src_address=>@src_address, :src_port=>@src_port,
366
- :recurse=>@recurse, :udp_size=>@udp_size}))
399
+ @single_resolvers.push(PacketSender.new({:server=>ns, :dnssec=>@dnssec,
400
+ :use_tcp=>@use_tcp, :packet_timeout=>@packet_timeout,
401
+ :tsig => @tsig, :ignore_truncation=>@ignore_truncation,
402
+ :src_address=>@src_address, :src_port=>@src_port,
403
+ :recurse=>@recurse, :udp_size=>@udp_size}))
367
404
  end
405
+ }
368
406
  end
369
407
 
370
408
  def set_config_nameserver(n)
409
+ # @TODO@ Should we allow NS RRSet here? If so, then .sort_by {rand}
410
+ if (!@configured)
411
+ @config.get_ready
412
+ end
413
+ @configured = true
371
414
  if (n).kind_of?String
372
415
  @config.nameserver=[n]
373
416
  else
374
417
  @config.nameserver=n
375
418
  end
419
+ add_config_nameservers
376
420
  end
377
421
 
378
422
  def reset_attributes #:nodoc: all
379
- if (@resolver_em)
380
- @resolver_em.reset_attributes
381
- end
382
423
  if (@resolver_ruby)
383
424
  @resolver_ruby.reset_attributes
384
425
  end
385
426
 
386
427
  # Attributes
428
+ @do_validation = true
387
429
  @query_timeout = DefaultQueryTimeout
388
430
  @retry_delay = DefaultRetryDelay
389
431
  @retry_times = DefaultRetryTimes
390
432
  @packet_timeout = DefaultPacketTimeout
391
433
  @port = DefaultPort
392
434
  @udp_size = DefaultUDPSize
435
+ @dnssec = DefaultDnssec
393
436
  @use_tcp = false
394
437
  @tsig = nil
395
438
  @ignore_truncation = false
@@ -397,32 +440,51 @@ module Dnsruby
397
440
  @src_address = '0.0.0.0'
398
441
  @src_port = [0]
399
442
  @recurse = true
400
- @persistent_udp = false
401
- @persistent_tcp = false
443
+ @single_res_mutex.synchronize {
402
444
  @single_resolvers=[]
403
- @dnssec = SingleResolver::DEFAULT_DNSSEC
445
+ }
446
+ @configured = false
404
447
  end
405
448
 
406
449
  def update #:nodoc: all
407
450
  #Update any resolvers we have with the latest config
408
- @single_resolvers.each do |res|
409
- [:port, :use_tcp, :tsig, :ignore_truncation, :packet_timeout,
410
- :src_address, :src_port, :persistent_tcp, :persistent_udp, :recurse,
411
- :udp_size, :dnssec].each do |param|
412
-
413
- res.send(param.to_s+"=", instance_variable_get("@"+param.to_s))
451
+ @single_res_mutex.synchronize {
452
+ @single_resolvers.each do |res|
453
+ update_internal_res(res)
414
454
  end
415
- end
455
+ }
416
456
  end
417
457
 
418
- # Add a new SingleResolver to the list of resolvers this Resolver object will
419
- # query.
420
- def add_resolver(single)
421
- @single_resolvers.push(single)
458
+ # # Add a new SingleResolver to the list of resolvers this Resolver object will
459
+ # # query.
460
+ # def add_resolver(internal) # :nodoc:
461
+ # # @TODO@ Make a new PacketSender from this SingleResolver!!
462
+ # @single_resolvers.push(internal)
463
+ # end
464
+
465
+ def add_server(server)# :nodoc:
466
+ @configured = true
467
+ res = PacketSender.new(server)
468
+ update_internal_res(res)
469
+ @single_res_mutex.synchronize {
470
+ @single_resolvers.push(res)
471
+ }
472
+ end
473
+
474
+ def update_internal_res(res)
475
+ [:port, :use_tcp, :tsig, :ignore_truncation, :packet_timeout,
476
+ :src_address, :src_port, :recurse,
477
+ :udp_size, :dnssec].each do |param|
478
+
479
+ res.send(param.to_s+"=", instance_variable_get("@"+param.to_s))
480
+ end
422
481
  end
423
482
 
424
483
  def nameserver=(n)
484
+ @configured = true
485
+ @single_res_mutex.synchronize {
425
486
  @single_resolvers=[]
487
+ }
426
488
  set_config_nameserver(n)
427
489
  add_config_nameservers
428
490
  end
@@ -458,8 +520,8 @@ module Dnsruby
458
520
  # res.src_port=60015..60115
459
521
  #
460
522
  def src_port=(p)
461
- if (SingleResolver.check_port(p))
462
- @src_port = SingleResolver.get_ports_from(p)
523
+ if (Resolver.check_port(p))
524
+ @src_port = Resolver.get_ports_from(p)
463
525
  update
464
526
  end
465
527
  end
@@ -477,8 +539,8 @@ module Dnsruby
477
539
  # res.add_src_port(60015..60115)
478
540
  #
479
541
  def add_src_port(p)
480
- if (SingleResolver.check_port(p, @src_port))
481
- a = SingleResolver.get_ports_from(p)
542
+ if (Resolver.check_port(p, @src_port))
543
+ a = Resolver.get_ports_from(p)
482
544
  a.each do |x|
483
545
  if ((@src_port.length > 0) && (x == 0))
484
546
  raise ArgumentError.new("src_port of 0 only allowed as only src_port value (currently #{@src_port.length} values")
@@ -489,6 +551,48 @@ module Dnsruby
489
551
  update
490
552
  end
491
553
 
554
+ def Resolver.check_port(p, src_port=[])
555
+ if (p.class != Fixnum)
556
+ tmp_src_ports = Array.new(src_port)
557
+ p.each do |x|
558
+ if (!Resolver.check_port(x, tmp_src_ports))
559
+ return false
560
+ end
561
+ tmp_src_ports.push(x)
562
+ end
563
+ return true
564
+ end
565
+ if (Resolver.port_in_range(p))
566
+ if ((p == 0) && (src_port.length > 0))
567
+ return false
568
+ end
569
+ return true
570
+ else
571
+ Dnsruby.log.error("Illegal port (#{p})")
572
+ raise ArgumentError.new("Illegal port #{p}")
573
+ end
574
+ end
575
+
576
+ def Resolver.port_in_range(p)
577
+ if ((p == 0) || ((IANA_PORTS.index(p)) == nil &&
578
+ (p > 1024) && (p < 65535)))
579
+ return true
580
+ end
581
+ return false
582
+ end
583
+
584
+ def Resolver.get_ports_from(p)
585
+ a = []
586
+ if (p.class == Fixnum)
587
+ a = [p]
588
+ else
589
+ p.each do |x|
590
+ a.push(x)
591
+ end
592
+ end
593
+ return a
594
+ end
595
+
492
596
  def use_tcp=(on)
493
597
  @use_tcp = on
494
598
  update
@@ -504,6 +608,29 @@ module Dnsruby
504
608
  @tsig=t
505
609
  update
506
610
  end
611
+
612
+ def Resolver.get_tsig(args)
613
+ tsig = nil
614
+ if (args.length == 1)
615
+ if (args[0])
616
+ if (args[0].instance_of?RR::TSIG)
617
+ tsig = args[0]
618
+ elsif (args[0].instance_of?Array)
619
+ tsig = RR.new_from_hash({:type => Types.TSIG, :klass => Classes.ANY, :name => args[0][0], :key => args[0][1]})
620
+ end
621
+ else
622
+ # Dnsruby.log.debug{"TSIG signing switched off"}
623
+ return nil
624
+ end
625
+ elsif (args.length ==2)
626
+ tsig = RR.new_from_hash({:type => Types.TSIG, :klass => Classes.ANY, :name => args[0], :key => args[1]})
627
+ else
628
+ raise ArgumentError.new("Wrong number of arguments to tsig=")
629
+ end
630
+ Dnsruby.log.info{"TSIG signing now using #{tsig.name}, key=#{tsig.key}"}
631
+ return tsig
632
+ end
633
+
507
634
 
508
635
  def ignore_truncation=(on)
509
636
  @ignore_truncation = on
@@ -537,6 +664,12 @@ module Dnsruby
537
664
 
538
665
  def dnssec=(d)
539
666
  @dnssec = d
667
+ if (d)
668
+ # Set the UDP size (RFC 4035 section 4.1)
669
+ if (@udp_size < MinDnssecUdpSize)
670
+ self.udp_size = MinDnssecUdpSize
671
+ end
672
+ end
540
673
  update
541
674
  end
542
675
 
@@ -544,262 +677,46 @@ module Dnsruby
544
677
  @udp_size = s
545
678
  update
546
679
  end
547
- #Tell Dnsruby to use EventMachine for I/O.
548
- #
549
- #If EventMachine is not used, then the pure Ruby event loop in Dnsruby will
550
- #be used instead.
551
- #
552
- #If EventMachine is not available on the platform, then a RuntimeError will be raised.
553
- #
554
- #Takes a bool to say whether or not to use EventMachine.
555
- def Resolver.use_eventmachine(on=true)
556
- if (on && !@@event_machine_available)
557
- raise RuntimeError.new("EventMachine is not available in this environment!")
558
- end
559
- @@use_eventmachine = on
560
- if (on)
561
- Dnsruby.log.info{"EventMachine will be used for IO"}
562
- else
563
- Dnsruby.log.info{"EventMachine will not be used for IO"}
564
- end
565
- end
566
- #Check whether EventMachine will be used by Dnsruby
567
- def Resolver.eventmachine?
568
- return @@use_eventmachine
569
- end
570
- #If EventMachine is being used, then this method tells Dnsruby whether or not
571
- #to start the EventMachine loop. If you want to use Dnsruby client code as
572
- #is, but using EventMachine for I/O, then Dnsruby must start the EventMachine
573
- #loop for you. This is the default behaviour.
574
- #If you want to use EventMachine-style code, where everything is wrapped
575
- #up in an EventMachine::run{} call, then this method should be called with
576
- #false as the parameter.
577
- #
578
- #Takes a bool argument to say whether or not to start the event loop when required.
579
- def Resolver.start_eventmachine_loop(on=true)
580
- @@start_eventmachine_loop=on
581
- if (on)
582
- Dnsruby.log.info{"EventMachine loop will be started by Dnsruby"}
583
- else
584
- Dnsruby.log.info{"EventMachine loop will not be started by Dnsruby"}
585
- end
586
- end
587
- #Checks whether Dnsruby will start the EventMachine loop when required.
588
- def Resolver.start_eventmachine_loop?
589
- return @@start_eventmachine_loop
680
+
681
+ def single_res_mutex # :nodoc: all
682
+ return @single_res_mutex
590
683
  end
684
+
591
685
  def generate_timeouts(base=0) #:nodoc: all
592
686
  #These should be be pegged to the single_resolver they are targetting :
593
687
  # e.g. timeouts[timeout1]=nameserver
594
688
  timeouts = {}
595
689
  retry_delay = @retry_delay
596
- @retry_times.times do |retry_count|
597
- if (retry_count>0)
598
- retry_delay *= 2
599
- end
600
- servers=[]
601
- @single_resolvers.each do |r| servers.push(r.server) end
602
- @single_resolvers.each_index do |i|
603
- res= @single_resolvers[i]
604
- offset = (i*@retry_delay.to_f/@single_resolvers.length)
605
- if (retry_count==0)
606
- timeouts[base+offset]=[res, retry_count]
607
- else
608
- if (timeouts.has_key?(base+retry_delay+offset))
609
- Dnsruby.log.error{"Duplicate timeout key!"}
610
- raise RuntimeError.new("Duplicate timeout key!")
611
- end
612
- timeouts[base+retry_delay+offset]=[res, retry_count]
690
+ # @single_res_mutex.synchronize {
691
+ @retry_times.times do |retry_count|
692
+ if (retry_count>0)
693
+ retry_delay *= 2
613
694
  end
614
- end
615
- end
616
- return timeouts
617
- end
618
- end
619
-
620
- # This class implements the I/O using EventMachine.
621
- # This is the preferred implementation.
622
- # NOTE - EM does not work properly on Windows with version 0.8.1 - do not use!
623
- class ResolverEM #:nodoc: all
624
- TIMER_PERIOD = 0.1
625
- def initialize(parent)
626
- @parent=parent
627
- end
628
- def reset_attributes #:nodoc: all
629
- end
630
- class PersistentData
631
- attr_accessor :outstanding, :deferrable, :to_send, :timeouts, :timer_procs, :timer_keys_sorted, :finish
632
- end
633
- def send_async(*args) #msg, client_queue=nil, client_query_id=nil)
634
- msg=args[0]
635
- client_queue=nil
636
- client_query_id=nil
637
- if (args.length>1)
638
- client_queue=args[1]
639
- if (args.length > 2)
640
- client_query_id = args[2]
641
- end
642
- end
643
- # We want to send the query to the first resolver.
644
- # We then want to set up all the timers for all of the events which might happen
645
- # (first round timers, retry timers, etc.)
646
- # The callbacks for these should be able to cancel any of the rest (including any for broken resolvers)
647
- # We can then forget about the query, as all the callbacks will be lodged with EventMachine.
648
-
649
- EventMachineInterface::start_em_for_resolver(self)
650
- persistent_data = PersistentData.new
651
- persistent_data.deferrable = EM::DefaultDeferrable.new
652
- persistent_data.outstanding = []
653
- persistent_data.to_send = 0
654
- persistent_data.timeouts=@parent.generate_timeouts(Time.now)
655
- persistent_data.timer_procs = {}
656
- persistent_data.finish = false
657
- persistent_data.timeouts.keys.sort.each do |timeout|
658
- value = persistent_data.timeouts[timeout]
659
- # timeout = timeout.round
660
- single_resolver, retry_count = value
661
- persistent_data.to_send+=1
662
- df = nil
663
- if (timeout == 0)
664
- # Send immediately
665
- Dnsruby.log.debug{"Sending first EM query"}
666
- df = send_new_em_query(single_resolver, msg, client_queue, client_query_id, persistent_data)
667
- persistent_data.outstanding.push(df)
668
- else
669
- # Send later
670
- persistent_data.timer_procs[timeout]=Proc.new{
671
- Dnsruby.log.debug{"Sending #{timeout} delayed EM query"}
672
- df = send_new_em_query(single_resolver, msg, client_queue, client_query_id, persistent_data)
673
- persistent_data.outstanding.push(df)
674
- }
675
- end
676
- end
677
- query_timeout = @parent.query_timeout
678
- if (query_timeout > 0)
679
- persistent_data.timer_procs[Time.now+query_timeout]=Proc.new{
680
- cancel_queries(persistent_data)
681
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, nil, ResolvTimeout.new("Query timed out after query_timeout=#{query_timeout.round} seconds"))
682
- }
683
- end
684
- persistent_data.timer_keys_sorted = persistent_data.timer_procs.keys.sort
685
- EventMachine::add_timer(0) {process_eventmachine_timers(persistent_data)}
686
- return persistent_data.deferrable
687
- end
688
-
689
- # Close the Resolver. Unfinished queries are terminated with OtherResolvError.
690
- def close
691
- # @TODO@ We need a list of open deferrables so that we can complete them
692
- end
693
-
694
- def process_eventmachine_timers(persistent_data)
695
- if (persistent_data.finish)
696
- return
697
- end
698
- now = Time.now
699
- persistent_data.timer_keys_sorted.each do |timeout|
700
- if (timeout > now)
701
- break
702
- end
703
- persistent_data.timer_procs[timeout].call
704
- persistent_data.timer_procs.delete(timeout)
705
- persistent_data.timer_keys_sorted.delete(timeout)
706
- end
707
- EventMachine::add_timer(TIMER_PERIOD) {process_eventmachine_timers(persistent_data)}
708
- end
709
-
710
- def send_new_em_query(single_resolver, msg, client_queue, client_query_id, persistent_data)
711
- # Pick a new QID here
712
- new_msg = msg.dup();
713
- new_msg.header = msg.header.dup();
714
- new_msg.header.id = rand(65535);
715
- df = single_resolver.send_async(new_msg) # client_queue, client_query_id)
716
- persistent_data.to_send-=1
717
- df.callback { |answer|
718
- Dnsruby.log.debug{"Response returned"}
719
- persistent_data.outstanding.delete(df)
720
- cancel_queries(persistent_data)
721
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, answer, nil)
722
- }
723
- df.errback { |response, error|
724
- Dnsruby.log.debug{"Error #{error} returned"}
725
- persistent_data.outstanding.delete(df)
726
- if (response!="cancelling")
727
-
728
- if (error.kind_of?(ResolvTimeout))
729
- # - if it was a timeout, then check which number it was, and how many retries are expected on that server
730
- # - if it was the last retry, on the last server, then return a timeout to the client (and clean up)
731
- # - otherwise, continue
732
- # Do we have any more packets to send to this resolver?
733
- if (persistent_data.outstanding.empty? && persistent_data.to_send==0)
734
- Dnsruby.log.debug{"Sending timeout to client"}
735
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, response, error)
736
- end
737
- elsif (error.kind_of?NXDomain)
738
- # - if it was an NXDomain, then return that to the client, and stop all new queries (and clean up)
739
- Dnsruby.log.debug{"NXDomain - returning to client"}
740
- cancel_queries(persistent_data)
741
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, response, error)
742
- elsif (error.kind_of?FormErr)
743
- # - if it was a FormErr, then return that to the client, and stop all new queries (and clean up)
744
- Dnsruby.log.debug{"FormErr - returning to client"}
745
- cancel_queries(persistent_data)
746
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, response, error)
747
- else
748
- # - if it was any other error, then remove that server from the list for that query
749
- # If a Too Many Open Files error, then don't remove, but let retry work.
750
- if (!(error.to_s=~/Errno::EMFILE/))
751
- remove_server(single_resolver, persistent_data)
752
- Dnsruby.log.debug{"Removing #{single_resolver.server} from resolver list for this query"}
695
+ # servers=[]
696
+ # @single_resolvers.each do |r| servers.push(r.server) end
697
+ @single_resolvers.each_index do |i|
698
+ res= @single_resolvers[i]
699
+ next if !res # @TODO@ WHY?1
700
+ offset = (i*@retry_delay.to_f/@single_resolvers.length)
701
+ if (retry_count==0)
702
+ timeouts[base+offset]=[res, retry_count]
753
703
  else
754
- Dnsruby.log.debug{"NOT Removing #{single_resolver.server} due to Errno::EMFILE"}
755
- end
756
- # - if it was the last server, then return an error to the client (and clean up)
757
- if (persistent_data.outstanding.empty? && persistent_data.to_send==0)
758
- # if (outstanding.empty?)
759
- Dnsruby.log.debug{"Sending error to client"}
760
- return_to_client(persistent_data.deferrable, client_queue, client_query_id, response, error)
704
+ if (timeouts.has_key?(base+retry_delay+offset))
705
+ Dnsruby.log.error{"Duplicate timeout key!"}
706
+ raise RuntimeError.new("Duplicate timeout key!")
707
+ end
708
+ timeouts[base+retry_delay+offset]=[res, retry_count]
761
709
  end
762
710
  end
763
711
  end
764
- }
765
- return df
766
- end
767
-
768
- def remove_server(server, persistent_data)
769
- # Go through persistent_data.timeouts and check all the values for that resolver
770
- persistent_data.timeouts.each do |key, value|
771
- if (value[0] == server)
772
- # Remove the server from the list
773
- persistent_data.timer_procs.delete(key)
774
- persistent_data.timer_keys_sorted.delete(key)
775
- end
776
- end
777
- end
778
-
779
- def cancel_queries(persistent_data)
780
- Dnsruby.log.debug{"Cancelling EM queries"}
781
- persistent_data.outstanding.each do |df|
782
- df.set_deferred_status :failed, "cancelling", "cancelling"
783
- end
784
- # Cancel the next tick
785
- persistent_data.finish = true
786
- end
787
-
788
- def return_to_client(deferrable, client_queue, client_query_id, answer, error)
789
- if (client_queue)
790
- client_queue.push([client_query_id, answer, error])
791
- end
792
- # We call set_defered_status when done
793
- if (error != nil)
794
- deferrable.set_deferred_status :failed, answer, error
795
- else
796
- deferrable.set_deferred_status :succeeded, answer
797
- end
798
- EventMachineInterface::stop_em_for_resolver(self)
712
+ # }
713
+ return timeouts
799
714
  end
800
715
  end
716
+
801
717
 
802
718
  # This class implements the I/O using pure Ruby, with no dependencies.
719
+ # Support for EventMachine has been deprecated.
803
720
  class ResolverRuby #:nodoc: all
804
721
  def initialize(parent)
805
722
  reset_attributes
@@ -807,7 +724,7 @@ module Dnsruby
807
724
  end
808
725
  def reset_attributes #:nodoc: all
809
726
  # data structures
810
- @mutex=Mutex.new
727
+ # @mutex=Mutex.new
811
728
  @query_list = {}
812
729
  @timeouts = {}
813
730
  end
@@ -837,22 +754,26 @@ module Dnsruby
837
754
 
838
755
  if (!client_queue.kind_of?Queue)
839
756
  Dnsruby.log.error{"Wrong type for client_queue in Resolver#send_async"}
757
+ # @TODO@ Handle different queue tuples - push this to generic send_error method
840
758
  client_queue.push([client_query_id, ArgumentError.new("Wrong type of client_queue passed to Dnsruby::Resolver#send_async - should have been Queue, was #{client_queue.class}")])
841
759
  return
842
760
  end
843
761
 
844
762
  if (!msg.kind_of?Message)
845
763
  Dnsruby.log.error{"Wrong type for msg in Resolver#send_async"}
764
+ # @TODO@ Handle different queue tuples - push this to generic send_error method
846
765
  client_queue.push([client_query_id, ArgumentError.new("Wrong type of msg passed to Dnsruby::Resolver#send_async - should have been Message, was #{msg.class}")])
847
766
  return
848
767
  end
849
768
 
850
769
  tick_needed=false
851
770
  # add to our data structures
852
- @mutex.synchronize{
771
+ # @mutex.synchronize{
772
+ @parent.single_res_mutex.synchronize {
853
773
  tick_needed = true if @query_list.empty?
854
774
  if (@query_list.has_key?client_query_id)
855
775
  Dnsruby.log.error{"Duplicate query id requested (#{client_query_id}"}
776
+ # @TODO@ Handle different queue tuples - push this to generic send_error method
856
777
  client_queue.push([client_query_id, ArgumentError.new("Client query ID already in use")])
857
778
  return
858
779
  end
@@ -887,7 +808,8 @@ module Dnsruby
887
808
 
888
809
  # Close the Resolver. Unfinished queries are terminated with OtherResolvError.
889
810
  def close
890
- @mutex.synchronize {
811
+ # @mutex.synchronize {
812
+ @parent.single_res_mutex.synchronize {
891
813
  @query_list.each do |client_query_id, values|
892
814
  msg, client_queue, q, outstanding = values
893
815
  send_result_and_close(client_queue, client_query_id, q, nil, OtherResolvError.new("Resolver closing!"))
@@ -899,34 +821,56 @@ module Dnsruby
899
821
  #
900
822
  # Send the result back to the client, and close the socket for that query by removing
901
823
  # the query from the select thread.
902
- def send_result_and_close(client_queue, client_query_id, select_queue, msg, error) #:nodoc: all
824
+ def send_result_and_stop_querying(client_queue, client_query_id, select_queue, msg, error) #:nodoc: all
825
+ stop_querying(client_query_id)
826
+ send_result(client_queue, client_query_id, select_queue, msg, error)
827
+ end
828
+
829
+ # MUST BE CALLED IN A SYNCHRONIZED BLOCK!
830
+ #
831
+ # Stops send any more packets for a client-level query
832
+ def stop_querying(client_query_id) #:nodoc: all
833
+ @timeouts.delete(client_query_id)
834
+ end
835
+
836
+ # MUST BE CALLED IN A SYNCHRONIZED BLOCK!
837
+ #
838
+ # Sends the result to the client's queue, and removes the queue observer from the select thread
839
+ def send_result(client_queue, client_query_id, select_queue, msg, error) #:nodoc: all
840
+ stop_querying(client_query_id) # @TODO@ !
903
841
  # We might still get some callbacks, which we should ignore
904
842
  st = SelectThread.instance
905
843
  st.remove_observer(select_queue, self)
906
844
  # @mutex.synchronize{
907
845
  # Remove the query from all of the data structures
908
- @timeouts.delete(client_query_id)
909
846
  @query_list.delete(client_query_id)
910
847
  # }
911
848
  # Return the response to the client
912
- client_queue.push([client_query_id, msg, error])
849
+ if (error != nil)
850
+ # client_queue.push([client_query_id, Resolver::EventType::ERROR, msg, error])
851
+ client_queue.push([client_query_id, msg, error])
852
+ else
853
+ # client_queue.push([client_query_id, Resolver::EventType::VALIDATED, msg, error])
854
+ client_queue.push([client_query_id, msg, error])
855
+ end
913
856
  end
914
857
 
915
- # This method is called ten times a second from the select loop, in the select thread.
916
- # It should arguably be called from another worker thread...
858
+ # This method is called twice a second from the select loop, in the select thread.
859
+ # It should arguably be called from another worker thread... (which also handles the queue)
917
860
  # Each tick, we check if any timeouts have occurred. If so, we take the appropriate action :
918
861
  # Return a timeout to the client, or send a new query
919
862
  def tick #:nodoc: all
920
863
  # Handle the tick
921
864
  # Do we have any retries due to be sent yet?
922
- @mutex.synchronize{
865
+ # @mutex.synchronize{
866
+ @parent.single_res_mutex.synchronize {
923
867
  time_now = Time.now
924
868
  @timeouts.keys.each do |client_query_id|
925
869
  msg, client_queue, select_queue, outstanding = @query_list[client_query_id]
926
870
  query_timeout, timeouts = @timeouts[client_query_id]
927
871
  if (query_timeout < Time.now)
928
872
  #Time the query out
929
- send_result_and_close(client_queue, client_query_id, select_queue, nil, ResolvTimeout.new("Query timed out"))
873
+ send_result_and_stop_querying(client_queue, client_query_id, select_queue, nil, ResolvTimeout.new("Query timed out"))
930
874
  next
931
875
  end
932
876
  timeouts_done = []
@@ -941,11 +885,10 @@ module Dnsruby
941
885
  timeouts_done.push(timeout)
942
886
  timeouts.delete(timeout)
943
887
 
944
- # Pick a new QID here
945
- new_msg = msg.dup();
946
- new_msg.header = msg.header.dup();
947
- new_msg.header.id = rand(65535);
948
- res.send_async(new_msg, select_queue, id)
888
+ # Pick a new QID here @TODO@ !!!
889
+ # msg.header.id = rand(65535);
890
+ # print "New query : #{new_msg}\n"
891
+ res.send_async(msg, select_queue, id)
949
892
  else
950
893
  break
951
894
  end
@@ -962,8 +905,8 @@ module Dnsruby
962
905
  # It's probably a good idea to create a new "worker thread" to take items from the select thread queue and
963
906
  # call this method in the worker thread.
964
907
  #
965
- # Time to process a new queue event.
966
908
  def handle_queue_event(queue, id) #:nodoc: all
909
+ # Time to process a new queue event.
967
910
  # If we get a callback for an ID we don't know about, don't worry -
968
911
  # just ignore it. It may be for a query we've already completed.
969
912
  #
@@ -972,98 +915,216 @@ module Dnsruby
972
915
  # @TODO@ Tick could poll the queue and then call this method if needed - no need for observer interface.
973
916
  # @TODO@ Currently, tick and handle_queue_event called from select_thread - could have thread chuck events in to tick_queue. But then, clients would have to call in on other thread!
974
917
  #
918
+ # So - two types of response :
919
+ # 1) we've got a coherent response (or error) - stop sending more packets for that query!
920
+ # 2) we've validated the response - it's ready to be sent to the client
921
+ #
922
+ # so need two more methods :
923
+ # handleValidationResponse : basically calls send_result_and_close and
924
+ # handleValidationError : does the same as handleValidationResponse, but for errors
925
+ # can leave handleError alone
926
+ # but need to change handleResponse to stop sending, rather than send_result_and_close.
927
+ #
928
+ # @TODO@ Also, we could really do with a MaxValidationTimeout - if validation not OK within
929
+ # this time, then raise Timeout (and stop validation)?
930
+ #
931
+ # @TODO@ Also, should there be some facility to stop validator following same chain
932
+ # concurrently?
933
+ #
934
+ # @TODO@ Also, should have option to speak only to configured resolvers (not follow authoritative chain)
935
+ #
975
936
  if (queue.empty?)
976
937
  Dnsruby.log.fatal{"Queue empty in handle_queue_event!"}
977
938
  raise RuntimeError.new("Severe internal error - Queue empty in handle_queue_event")
978
939
  end
979
- event_id, response, error = queue.pop
940
+ event_id, event_type, response, error = queue.pop
980
941
  # We should remove this packet from the list of outstanding packets for this query
981
942
  resolver, msg, client_query_id, retry_count = id
982
943
  if (id != event_id)
983
944
  Dnsruby.log.error{"Serious internal error!! #{id} expected, #{event_id} received"}
984
945
  raise RuntimeError.new("Serious internal error!! #{id} expected, #{event_id} received")
985
946
  end
986
- @mutex.synchronize{
947
+ # @mutex.synchronize{
948
+ @parent.single_res_mutex.synchronize {
987
949
  if (@query_list[client_query_id]==nil)
950
+ # print "Dead query response - ignoring\n"
988
951
  Dnsruby.log.debug{"Ignoring response for dead query"}
989
952
  return
990
953
  end
991
954
  msg, client_queue, select_queue, outstanding = @query_list[client_query_id]
992
- if (!outstanding.include?id)
993
- Dnsruby.log.error{"Query id not on outstanding list! #{outstanding.length} items. #{id} not on #{outstanding}"}
994
- raise RuntimeError.new("Query id not on outstanding!")
955
+ if (event_type == Resolver::EventType::RECEIVED ||
956
+ event_type == Resolver::EventType::ERROR)
957
+ if (!outstanding.include?id)
958
+ Dnsruby.log.error{"Query id not on outstanding list! #{outstanding.length} items. #{id} not on #{outstanding}"}
959
+ raise RuntimeError.new("Query id not on outstanding!")
960
+ end
961
+ outstanding.delete(id)
962
+ end
963
+ # }
964
+ if (event_type == Resolver::EventType::RECEIVED)
965
+ # if (event.kind_of?(Exception))
966
+ if (error != nil)
967
+ handle_error_response(queue, event_id, error, response)
968
+ else # if (event.kind_of?(Message))
969
+ handle_response(queue, event_id, response)
970
+ # else
971
+ # Dnsruby.log.error("Random object #{event.class} returned through queue to Resolver")
972
+ end
973
+ elsif (event_type == Resolver::EventType::VALIDATED)
974
+ if (error != nil)
975
+ handle_validation_error(queue, event_id, error, response)
976
+ else
977
+ handle_validation_response(queue, event_id, response)
978
+ end
979
+ elsif (event_type == Resolver::EventType::ERROR)
980
+ handle_error_response(queue, event_id, error, response)
981
+ else
982
+ # print "ERROR - UNKNOWN EVENT TYPE IN RESOLVER : #{event_type}\n"
983
+ TheLog.error("ERROR - UNKNOWN EVENT TYPE IN RESOLVER : #{event_type}")
995
984
  end
996
- outstanding.delete(id)
997
985
  }
998
- # if (event.kind_of?(Exception))
999
- if (error != nil)
1000
- handle_error_response(queue, event_id, error, response)
1001
- else # if (event.kind_of?(Message))
1002
- handle_response(queue, event_id, response)
1003
- # else
1004
- # Dnsruby.log.error("Random object #{event.class} returned through queue to Resolver")
1005
- end
1006
986
  end
1007
987
 
1008
988
  def handle_error_response(select_queue, query_id, error, response) #:nodoc: all
1009
989
  #Handle an error
1010
- @mutex.synchronize{
1011
- Dnsruby.log.debug{"handling error #{error.class}, #{error}"}
1012
- # Check what sort of error it was :
1013
- resolver, msg, client_query_id, retry_count = query_id
1014
- msg, client_queue, select_queue, outstanding = @query_list[client_query_id]
1015
- if (error.kind_of?(ResolvTimeout))
1016
- # - if it was a timeout, then check which number it was, and how many retries are expected on that server
1017
- # - if it was the last retry, on the last server, then return a timeout to the client (and clean up)
1018
- # - otherwise, continue
1019
- # Do we have any more packets to send to this resolver?
1020
- timeouts = @timeouts[client_query_id]
1021
- if (outstanding.empty? && timeouts[1].values.empty?)
1022
- Dnsruby.log.debug{"Sending timeout to client"}
1023
- send_result_and_close(client_queue, client_query_id, select_queue, response, error)
1024
- end
1025
- elsif (error.kind_of?NXDomain)
1026
- # - if it was an NXDomain, then return that to the client, and stop all new queries (and clean up)
1027
- send_result_and_close(client_queue, client_query_id, select_queue, response, error)
1028
- else
1029
- # - if it was any other error, then remove that server from the list for that query
1030
- # If a Too Many Open Files error, then don't remove, but let retry work.
1031
- timeouts = @timeouts[client_query_id]
1032
- if (!(error.to_s=~/Errno::EMFILE/))
1033
- Dnsruby.log.debug{"Removing #{resolver.server} from resolver list for this query"}
1034
- timeouts[1].each do |key, value|
1035
- res = value[0]
1036
- if (res == resolver)
1037
- timeouts[1].delete(key)
1038
- end
990
+ # @mutex.synchronize{
991
+ Dnsruby.log.debug{"handling error #{error.class}, #{error}"}
992
+ # Check what sort of error it was :
993
+ resolver, msg, client_query_id, retry_count = query_id
994
+ msg, client_queue, select_queue, outstanding = @query_list[client_query_id]
995
+ if (error.kind_of?(ResolvTimeout))
996
+ # - if it was a timeout, then check which number it was, and how many retries are expected on that server
997
+ # - if it was the last retry, on the last server, then return a timeout to the client (and clean up)
998
+ # - otherwise, continue
999
+ # Do we have any more packets to send to this resolver?
1000
+
1001
+ decrement_resolver_priority(resolver)
1002
+ timeouts = @timeouts[client_query_id]
1003
+ if (outstanding.empty? && timeouts && timeouts[1].values.empty?)
1004
+ Dnsruby.log.debug{"Sending timeout to client"}
1005
+ send_result_and_stop_querying(client_queue, client_query_id, select_queue, response, error)
1006
+ end
1007
+ elsif (error.kind_of?NXDomain)
1008
+ # - if it was an NXDomain, then return that to the client, and stop all new queries (and clean up)
1009
+ # send_result_and_stop_querying(client_queue, client_query_id, select_queue, response, error)
1010
+ increment_resolver_priority(resolver) if (!response.cached)
1011
+ stop_querying(client_query_id)
1012
+ # @TODO@ Does the client want notified at this point?
1013
+ else
1014
+ # - if it was any other error, then remove that server from the list for that query
1015
+ # If a Too Many Open Files error, then don't remove, but let retry work.
1016
+ timeouts = @timeouts[client_query_id]
1017
+ if (!(error.to_s=~/Errno::EMFILE/))
1018
+ Dnsruby.log.debug{"Removing #{resolver.server} from resolver list for this query"}
1019
+ timeouts[1].each do |key, value|
1020
+ res = value[0]
1021
+ if (res == resolver)
1022
+ timeouts[1].delete(key)
1039
1023
  end
1040
- else
1041
- Dnsruby.log.debug{"NOT Removing #{resolver.server} due to Errno::EMFILE"}
1042
- end
1043
- # - if it was the last server, then return an error to the client (and clean up)
1044
- if (outstanding.empty? && timeouts[1].values.empty?)
1045
- # if (outstanding.empty?)
1046
- Dnsruby.log.debug{"Sending error to client"}
1047
- send_result_and_close(client_queue, client_query_id, select_queue, response, error)
1048
1024
  end
1025
+ # Also stick it to the back of the list for future queries
1026
+ demote_resolver(resolver)
1027
+ else
1028
+ Dnsruby.log.debug{"NOT Removing #{resolver.server} due to Errno::EMFILE"}
1049
1029
  end
1050
- #@TODO@ If we're still sending packets for this query, but none are outstanding, then
1051
- #jumpstart the next query?
1052
- }
1030
+ # - if it was the last server, then return an error to the client (and clean up)
1031
+ if (outstanding.empty? && timeouts && timeouts[1].values.empty?)
1032
+ # if (outstanding.empty?)
1033
+ Dnsruby.log.debug{"Sending error to client"}
1034
+ send_result_and_stop_querying(client_queue, client_query_id, select_queue, response, error)
1035
+ end
1036
+ end
1037
+ #@TODO@ If we're still sending packets for this query, but none are outstanding, then
1038
+ #jumpstart the next query?
1039
+ # }
1040
+ end
1041
+
1042
+ # TO BE CALLED IN A SYNCHRONIZED BLOCK
1043
+ def increment_resolver_priority(res)
1044
+ TheLog.debug("Incrementing resolver priority for #{res.server}\n")
1045
+ # @parent.single_res_mutex.synchronize {
1046
+ index = @parent.single_resolvers.index(res)
1047
+ if (index > 0)
1048
+ @parent.single_resolvers.delete(res)
1049
+ @parent.single_resolvers.insert(index-1,res)
1050
+ end
1051
+ # }
1052
+ end
1053
+
1054
+ # TO BE CALLED IN A SYNCHRONIZED BLOCK
1055
+ def decrement_resolver_priority(res)
1056
+ TheLog.debug("Decrementing resolver priority for #{res.server}\n")
1057
+ # @parent.single_res_mutex.synchronize {
1058
+ index = @parent.single_resolvers.index(res)
1059
+ if (index < @parent.single_resolvers.length)
1060
+ @parent.single_resolvers.delete(res)
1061
+ @parent.single_resolvers.insert(index+1,res)
1062
+ end
1063
+ # }
1064
+ end
1065
+
1066
+ # TO BE CALLED IN A SYNCHRONIZED BLOCK
1067
+ def demote_resolver(res)
1068
+ TheLog.debug("Demoting resolver priority for #{res.server} to bottom\n")
1069
+ # @parent.single_res_mutex.synchronize {
1070
+ @parent.single_resolvers.delete(res)
1071
+ @parent.single_resolvers.push(res)
1072
+ # }
1053
1073
  end
1054
1074
 
1055
1075
  def handle_response(select_queue, query_id, response) #:nodoc: all
1056
1076
  # Handle a good response
1077
+ # Should also stick resolver more to the front of the list for future queries
1057
1078
  Dnsruby.log.debug{"Handling good response"}
1058
1079
  resolver, msg, client_query_id, retry_count = query_id
1059
- @mutex.synchronize{
1060
- query, client_queue, s_queue, outstanding = @query_list[client_query_id]
1061
- if (s_queue != select_queue)
1062
- Dnsruby.log.error{"Serious internal error : expected select queue #{s_queue}, got #{select_queue}"}
1063
- raise RuntimeError.new("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
1064
- end
1065
- send_result_and_close(client_queue, client_query_id, select_queue, response, nil)
1066
- }
1080
+ increment_resolver_priority(resolver) if (!response.cached)
1081
+ # @mutex.synchronize{
1082
+ query, client_queue, s_queue, outstanding = @query_list[client_query_id]
1083
+ if (s_queue != select_queue)
1084
+ Dnsruby.log.error{"Serious internal error : expected select queue #{s_queue}, got #{select_queue}"}
1085
+ raise RuntimeError.new("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
1086
+ end
1087
+ # send_result_and_close(client_queue, client_query_id, select_queue, response, nil)
1088
+ stop_querying(client_query_id)
1089
+ # @TODO@ Does the client want notified at this point?
1090
+ # client_queue.push([client_query_id, Resolver::EventType::RECEIVED, msg, nil])
1091
+ # }
1092
+ end
1093
+
1094
+ def handle_validation_response(select_queue, query_id, response) #:nodoc: all
1095
+ resolver, msg, client_query_id, retry_count = query_id
1096
+ # @mutex.synchronize {
1097
+ query, client_queue, s_queue, outstanding = @query_list[client_query_id]
1098
+ if (s_queue != select_queue)
1099
+ Dnsruby.log.error{"Serious internal error : expected select queue #{s_queue}, got #{select_queue}"}
1100
+ raise RuntimeError.new("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
1101
+ end
1102
+ if (response.rcode == RCode.NXDOMAIN)
1103
+ send_result(client_queue, client_query_id, select_queue, response, NXDomain.new)
1104
+ else
1105
+ # @TODO@ Was there an error validating? Should we raise an exception for certain security levels?
1106
+ # This should be configurable by the client.
1107
+ # send_result_and_close(client_queue, client_query_id, select_queue, response, nil)
1108
+ send_result(client_queue, client_query_id, select_queue, response, nil)
1109
+ # }
1110
+ end
1067
1111
  end
1068
- end
1069
- end
1112
+
1113
+ def handle_validation_error(select_queue, query_id, error, response)
1114
+ resolver, msg, client_query_id, retry_count = query_id
1115
+ query, client_queue, s_queue, outstanding = @query_list[client_query_id]
1116
+ if (s_queue != select_queue)
1117
+ Dnsruby.log.error{"Serious internal error : expected select queue #{s_queue}, got #{select_queue}"}
1118
+ raise RuntimeError.new("Serious internal error : expected select queue #{s_queue}, got #{select_queue}")
1119
+ end
1120
+ # For some errors, we immediately send result. For others, should we retry?
1121
+ # Either :
1122
+ # handle_error_response(queue, event_id, error, response)
1123
+ # Or:
1124
+ send_result(client_queue, client_query_id, select_queue, response, error)
1125
+ #
1126
+ #
1127
+ end
1128
+ end
1129
+ end
1130
+ require "Dnsruby/SingleResolver"