Dnsruby 0.5.0

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