asyncengine 0.0.1.testing

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 (317) hide show
  1. data/README.markdown +0 -0
  2. data/asyncengine.gemspec +26 -0
  3. data/ext/asyncengine_ext/asyncengine_ruby.c +82 -0
  4. data/ext/asyncengine_ext/extconf.rb +47 -0
  5. data/ext/asyncengine_ext/libuv/AUTHORS +45 -0
  6. data/ext/asyncengine_ext/libuv/LICENSE +42 -0
  7. data/ext/asyncengine_ext/libuv/Makefile +119 -0
  8. data/ext/asyncengine_ext/libuv/README.md +88 -0
  9. data/ext/asyncengine_ext/libuv/build/gcc_version.py +20 -0
  10. data/ext/asyncengine_ext/libuv/common.gypi +176 -0
  11. data/ext/asyncengine_ext/libuv/config-mingw.mk +61 -0
  12. data/ext/asyncengine_ext/libuv/config-unix.mk +173 -0
  13. data/ext/asyncengine_ext/libuv/gyp_uv +60 -0
  14. data/ext/asyncengine_ext/libuv/include/ares.h +591 -0
  15. data/ext/asyncengine_ext/libuv/include/ares_version.h +24 -0
  16. data/ext/asyncengine_ext/libuv/include/uv-private/eio.h +403 -0
  17. data/ext/asyncengine_ext/libuv/include/uv-private/ev.h +838 -0
  18. data/ext/asyncengine_ext/libuv/include/uv-private/ngx-queue.h +106 -0
  19. data/ext/asyncengine_ext/libuv/include/uv-private/tree.h +768 -0
  20. data/ext/asyncengine_ext/libuv/include/uv-private/uv-unix.h +256 -0
  21. data/ext/asyncengine_ext/libuv/include/uv-private/uv-win.h +458 -0
  22. data/ext/asyncengine_ext/libuv/include/uv.h +1556 -0
  23. data/ext/asyncengine_ext/libuv/src/ares/AUTHORS +37 -0
  24. data/ext/asyncengine_ext/libuv/src/ares/CHANGES +1218 -0
  25. data/ext/asyncengine_ext/libuv/src/ares/CMakeLists.txt +22 -0
  26. data/ext/asyncengine_ext/libuv/src/ares/NEWS +21 -0
  27. data/ext/asyncengine_ext/libuv/src/ares/README +60 -0
  28. data/ext/asyncengine_ext/libuv/src/ares/README.cares +13 -0
  29. data/ext/asyncengine_ext/libuv/src/ares/README.msvc +142 -0
  30. data/ext/asyncengine_ext/libuv/src/ares/README.node +21 -0
  31. data/ext/asyncengine_ext/libuv/src/ares/RELEASE-NOTES +26 -0
  32. data/ext/asyncengine_ext/libuv/src/ares/TODO +23 -0
  33. data/ext/asyncengine_ext/libuv/src/ares/ares__close_sockets.c +66 -0
  34. data/ext/asyncengine_ext/libuv/src/ares/ares__get_hostent.c +263 -0
  35. data/ext/asyncengine_ext/libuv/src/ares/ares__read_line.c +71 -0
  36. data/ext/asyncengine_ext/libuv/src/ares/ares__timeval.c +111 -0
  37. data/ext/asyncengine_ext/libuv/src/ares/ares_cancel.c +63 -0
  38. data/ext/asyncengine_ext/libuv/src/ares/ares_data.c +190 -0
  39. data/ext/asyncengine_ext/libuv/src/ares/ares_data.h +65 -0
  40. data/ext/asyncengine_ext/libuv/src/ares/ares_destroy.c +105 -0
  41. data/ext/asyncengine_ext/libuv/src/ares/ares_dns.h +90 -0
  42. data/ext/asyncengine_ext/libuv/src/ares/ares_expand_name.c +200 -0
  43. data/ext/asyncengine_ext/libuv/src/ares/ares_expand_string.c +75 -0
  44. data/ext/asyncengine_ext/libuv/src/ares/ares_fds.c +63 -0
  45. data/ext/asyncengine_ext/libuv/src/ares/ares_free_hostent.c +42 -0
  46. data/ext/asyncengine_ext/libuv/src/ares/ares_free_string.c +25 -0
  47. data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.c +30 -0
  48. data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.h +26 -0
  49. data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyaddr.c +301 -0
  50. data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyname.c +523 -0
  51. data/ext/asyncengine_ext/libuv/src/ares/ares_getnameinfo.c +427 -0
  52. data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.c +122 -0
  53. data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.h +53 -0
  54. data/ext/asyncengine_ext/libuv/src/ares/ares_getsock.c +72 -0
  55. data/ext/asyncengine_ext/libuv/src/ares/ares_init.c +1809 -0
  56. data/ext/asyncengine_ext/libuv/src/ares/ares_iphlpapi.h +221 -0
  57. data/ext/asyncengine_ext/libuv/src/ares/ares_ipv6.h +78 -0
  58. data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.c +142 -0
  59. data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.h +42 -0
  60. data/ext/asyncengine_ext/libuv/src/ares/ares_llist.c +86 -0
  61. data/ext/asyncengine_ext/libuv/src/ares/ares_llist.h +42 -0
  62. data/ext/asyncengine_ext/libuv/src/ares/ares_mkquery.c +195 -0
  63. data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.c +181 -0
  64. data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.h +55 -0
  65. data/ext/asyncengine_ext/libuv/src/ares/ares_options.c +248 -0
  66. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_a_reply.c +263 -0
  67. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_aaaa_reply.c +259 -0
  68. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_mx_reply.c +170 -0
  69. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ns_reply.c +182 -0
  70. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ptr_reply.c +217 -0
  71. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_srv_reply.c +179 -0
  72. data/ext/asyncengine_ext/libuv/src/ares/ares_parse_txt_reply.c +201 -0
  73. data/ext/asyncengine_ext/libuv/src/ares/ares_platform.c +11035 -0
  74. data/ext/asyncengine_ext/libuv/src/ares/ares_platform.h +43 -0
  75. data/ext/asyncengine_ext/libuv/src/ares/ares_private.h +355 -0
  76. data/ext/asyncengine_ext/libuv/src/ares/ares_process.c +1295 -0
  77. data/ext/asyncengine_ext/libuv/src/ares/ares_query.c +183 -0
  78. data/ext/asyncengine_ext/libuv/src/ares/ares_rules.h +144 -0
  79. data/ext/asyncengine_ext/libuv/src/ares/ares_search.c +321 -0
  80. data/ext/asyncengine_ext/libuv/src/ares/ares_send.c +134 -0
  81. data/ext/asyncengine_ext/libuv/src/ares/ares_setup.h +199 -0
  82. data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.c +66 -0
  83. data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.h +30 -0
  84. data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.c +42 -0
  85. data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.h +26 -0
  86. data/ext/asyncengine_ext/libuv/src/ares/ares_strerror.c +56 -0
  87. data/ext/asyncengine_ext/libuv/src/ares/ares_timeout.c +80 -0
  88. data/ext/asyncengine_ext/libuv/src/ares/ares_version.c +11 -0
  89. data/ext/asyncengine_ext/libuv/src/ares/ares_writev.c +79 -0
  90. data/ext/asyncengine_ext/libuv/src/ares/ares_writev.h +36 -0
  91. data/ext/asyncengine_ext/libuv/src/ares/bitncmp.c +59 -0
  92. data/ext/asyncengine_ext/libuv/src/ares/bitncmp.h +26 -0
  93. data/ext/asyncengine_ext/libuv/src/ares/config_cygwin/ares_config.h +512 -0
  94. data/ext/asyncengine_ext/libuv/src/ares/config_darwin/ares_config.h +512 -0
  95. data/ext/asyncengine_ext/libuv/src/ares/config_freebsd/ares_config.h +512 -0
  96. data/ext/asyncengine_ext/libuv/src/ares/config_linux/ares_config.h +512 -0
  97. data/ext/asyncengine_ext/libuv/src/ares/config_netbsd/ares_config.h +512 -0
  98. data/ext/asyncengine_ext/libuv/src/ares/config_openbsd/ares_config.h +512 -0
  99. data/ext/asyncengine_ext/libuv/src/ares/config_sunos/ares_config.h +512 -0
  100. data/ext/asyncengine_ext/libuv/src/ares/config_win32/ares_config.h +369 -0
  101. data/ext/asyncengine_ext/libuv/src/ares/get_ver.awk +35 -0
  102. data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.c +451 -0
  103. data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.h +31 -0
  104. data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.c +208 -0
  105. data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.h +26 -0
  106. data/ext/asyncengine_ext/libuv/src/ares/nameser.h +203 -0
  107. data/ext/asyncengine_ext/libuv/src/ares/setup_once.h +504 -0
  108. data/ext/asyncengine_ext/libuv/src/ares/windows_port.c +22 -0
  109. data/ext/asyncengine_ext/libuv/src/unix/async.c +58 -0
  110. data/ext/asyncengine_ext/libuv/src/unix/cares.c +194 -0
  111. data/ext/asyncengine_ext/libuv/src/unix/check.c +80 -0
  112. data/ext/asyncengine_ext/libuv/src/unix/core.c +588 -0
  113. data/ext/asyncengine_ext/libuv/src/unix/cygwin.c +84 -0
  114. data/ext/asyncengine_ext/libuv/src/unix/darwin.c +341 -0
  115. data/ext/asyncengine_ext/libuv/src/unix/dl.c +91 -0
  116. data/ext/asyncengine_ext/libuv/src/unix/eio/Changes +63 -0
  117. data/ext/asyncengine_ext/libuv/src/unix/eio/LICENSE +36 -0
  118. data/ext/asyncengine_ext/libuv/src/unix/eio/Makefile.am +15 -0
  119. data/ext/asyncengine_ext/libuv/src/unix/eio/aclocal.m4 +8957 -0
  120. data/ext/asyncengine_ext/libuv/src/unix/eio/autogen.sh +3 -0
  121. data/ext/asyncengine_ext/libuv/src/unix/eio/config.h.in +86 -0
  122. data/ext/asyncengine_ext/libuv/src/unix/eio/config_cygwin.h +80 -0
  123. data/ext/asyncengine_ext/libuv/src/unix/eio/config_darwin.h +141 -0
  124. data/ext/asyncengine_ext/libuv/src/unix/eio/config_freebsd.h +81 -0
  125. data/ext/asyncengine_ext/libuv/src/unix/eio/config_linux.h +94 -0
  126. data/ext/asyncengine_ext/libuv/src/unix/eio/config_netbsd.h +81 -0
  127. data/ext/asyncengine_ext/libuv/src/unix/eio/config_openbsd.h +137 -0
  128. data/ext/asyncengine_ext/libuv/src/unix/eio/config_sunos.h +84 -0
  129. data/ext/asyncengine_ext/libuv/src/unix/eio/configure.ac +22 -0
  130. data/ext/asyncengine_ext/libuv/src/unix/eio/demo.c +194 -0
  131. data/ext/asyncengine_ext/libuv/src/unix/eio/ecb.h +370 -0
  132. data/ext/asyncengine_ext/libuv/src/unix/eio/eio.3 +3428 -0
  133. data/ext/asyncengine_ext/libuv/src/unix/eio/eio.c +2593 -0
  134. data/ext/asyncengine_ext/libuv/src/unix/eio/eio.pod +969 -0
  135. data/ext/asyncengine_ext/libuv/src/unix/eio/libeio.m4 +195 -0
  136. data/ext/asyncengine_ext/libuv/src/unix/eio/xthread.h +164 -0
  137. data/ext/asyncengine_ext/libuv/src/unix/error.c +98 -0
  138. data/ext/asyncengine_ext/libuv/src/unix/ev/Changes +388 -0
  139. data/ext/asyncengine_ext/libuv/src/unix/ev/LICENSE +36 -0
  140. data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.am +18 -0
  141. data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.in +771 -0
  142. data/ext/asyncengine_ext/libuv/src/unix/ev/README +58 -0
  143. data/ext/asyncengine_ext/libuv/src/unix/ev/aclocal.m4 +8957 -0
  144. data/ext/asyncengine_ext/libuv/src/unix/ev/autogen.sh +6 -0
  145. data/ext/asyncengine_ext/libuv/src/unix/ev/config.guess +1526 -0
  146. data/ext/asyncengine_ext/libuv/src/unix/ev/config.h.in +125 -0
  147. data/ext/asyncengine_ext/libuv/src/unix/ev/config.sub +1658 -0
  148. data/ext/asyncengine_ext/libuv/src/unix/ev/config_cygwin.h +123 -0
  149. data/ext/asyncengine_ext/libuv/src/unix/ev/config_darwin.h +122 -0
  150. data/ext/asyncengine_ext/libuv/src/unix/ev/config_freebsd.h +120 -0
  151. data/ext/asyncengine_ext/libuv/src/unix/ev/config_linux.h +141 -0
  152. data/ext/asyncengine_ext/libuv/src/unix/ev/config_netbsd.h +120 -0
  153. data/ext/asyncengine_ext/libuv/src/unix/ev/config_openbsd.h +126 -0
  154. data/ext/asyncengine_ext/libuv/src/unix/ev/config_sunos.h +122 -0
  155. data/ext/asyncengine_ext/libuv/src/unix/ev/configure +13037 -0
  156. data/ext/asyncengine_ext/libuv/src/unix/ev/configure.ac +18 -0
  157. data/ext/asyncengine_ext/libuv/src/unix/ev/depcomp +630 -0
  158. data/ext/asyncengine_ext/libuv/src/unix/ev/ev++.h +816 -0
  159. data/ext/asyncengine_ext/libuv/src/unix/ev/ev.3 +5311 -0
  160. data/ext/asyncengine_ext/libuv/src/unix/ev/ev.c +3921 -0
  161. data/ext/asyncengine_ext/libuv/src/unix/ev/ev.pod +5243 -0
  162. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_epoll.c +266 -0
  163. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_kqueue.c +235 -0
  164. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_poll.c +148 -0
  165. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_port.c +179 -0
  166. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_select.c +310 -0
  167. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_vars.h +203 -0
  168. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_win32.c +153 -0
  169. data/ext/asyncengine_ext/libuv/src/unix/ev/ev_wrap.h +196 -0
  170. data/ext/asyncengine_ext/libuv/src/unix/ev/event.c +402 -0
  171. data/ext/asyncengine_ext/libuv/src/unix/ev/event.h +170 -0
  172. data/ext/asyncengine_ext/libuv/src/unix/ev/install-sh +294 -0
  173. data/ext/asyncengine_ext/libuv/src/unix/ev/libev.m4 +39 -0
  174. data/ext/asyncengine_ext/libuv/src/unix/ev/ltmain.sh +8413 -0
  175. data/ext/asyncengine_ext/libuv/src/unix/ev/missing +336 -0
  176. data/ext/asyncengine_ext/libuv/src/unix/ev/mkinstalldirs +111 -0
  177. data/ext/asyncengine_ext/libuv/src/unix/freebsd.c +312 -0
  178. data/ext/asyncengine_ext/libuv/src/unix/fs.c +707 -0
  179. data/ext/asyncengine_ext/libuv/src/unix/idle.c +79 -0
  180. data/ext/asyncengine_ext/libuv/src/unix/internal.h +161 -0
  181. data/ext/asyncengine_ext/libuv/src/unix/kqueue.c +127 -0
  182. data/ext/asyncengine_ext/libuv/src/unix/linux/core.c +474 -0
  183. data/ext/asyncengine_ext/libuv/src/unix/linux/inotify.c +211 -0
  184. data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.c +230 -0
  185. data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.h +87 -0
  186. data/ext/asyncengine_ext/libuv/src/unix/loop.c +58 -0
  187. data/ext/asyncengine_ext/libuv/src/unix/netbsd.c +108 -0
  188. data/ext/asyncengine_ext/libuv/src/unix/openbsd.c +295 -0
  189. data/ext/asyncengine_ext/libuv/src/unix/pipe.c +266 -0
  190. data/ext/asyncengine_ext/libuv/src/unix/prepare.c +79 -0
  191. data/ext/asyncengine_ext/libuv/src/unix/process.c +369 -0
  192. data/ext/asyncengine_ext/libuv/src/unix/stream.c +1033 -0
  193. data/ext/asyncengine_ext/libuv/src/unix/sunos.c +466 -0
  194. data/ext/asyncengine_ext/libuv/src/unix/tcp.c +327 -0
  195. data/ext/asyncengine_ext/libuv/src/unix/thread.c +154 -0
  196. data/ext/asyncengine_ext/libuv/src/unix/timer.c +127 -0
  197. data/ext/asyncengine_ext/libuv/src/unix/tty.c +146 -0
  198. data/ext/asyncengine_ext/libuv/src/unix/udp.c +670 -0
  199. data/ext/asyncengine_ext/libuv/src/unix/uv-eio.c +124 -0
  200. data/ext/asyncengine_ext/libuv/src/unix/uv-eio.h +13 -0
  201. data/ext/asyncengine_ext/libuv/src/uv-common.c +354 -0
  202. data/ext/asyncengine_ext/libuv/src/uv-common.h +87 -0
  203. data/ext/asyncengine_ext/libuv/src/win/async.c +127 -0
  204. data/ext/asyncengine_ext/libuv/src/win/cares.c +290 -0
  205. data/ext/asyncengine_ext/libuv/src/win/core.c +270 -0
  206. data/ext/asyncengine_ext/libuv/src/win/dl.c +82 -0
  207. data/ext/asyncengine_ext/libuv/src/win/error.c +132 -0
  208. data/ext/asyncengine_ext/libuv/src/win/fs-event.c +514 -0
  209. data/ext/asyncengine_ext/libuv/src/win/fs.c +1576 -0
  210. data/ext/asyncengine_ext/libuv/src/win/getaddrinfo.c +372 -0
  211. data/ext/asyncengine_ext/libuv/src/win/handle.c +225 -0
  212. data/ext/asyncengine_ext/libuv/src/win/internal.h +352 -0
  213. data/ext/asyncengine_ext/libuv/src/win/loop-watcher.c +131 -0
  214. data/ext/asyncengine_ext/libuv/src/win/pipe.c +1661 -0
  215. data/ext/asyncengine_ext/libuv/src/win/process.c +1140 -0
  216. data/ext/asyncengine_ext/libuv/src/win/req.c +174 -0
  217. data/ext/asyncengine_ext/libuv/src/win/stream.c +201 -0
  218. data/ext/asyncengine_ext/libuv/src/win/tcp.c +1282 -0
  219. data/ext/asyncengine_ext/libuv/src/win/thread.c +332 -0
  220. data/ext/asyncengine_ext/libuv/src/win/threadpool.c +73 -0
  221. data/ext/asyncengine_ext/libuv/src/win/timer.c +276 -0
  222. data/ext/asyncengine_ext/libuv/src/win/tty.c +1795 -0
  223. data/ext/asyncengine_ext/libuv/src/win/udp.c +709 -0
  224. data/ext/asyncengine_ext/libuv/src/win/util.c +719 -0
  225. data/ext/asyncengine_ext/libuv/src/win/winapi.c +117 -0
  226. data/ext/asyncengine_ext/libuv/src/win/winapi.h +4419 -0
  227. data/ext/asyncengine_ext/libuv/src/win/winsock.c +470 -0
  228. data/ext/asyncengine_ext/libuv/src/win/winsock.h +138 -0
  229. data/ext/asyncengine_ext/libuv/test/benchmark-ares.c +118 -0
  230. data/ext/asyncengine_ext/libuv/test/benchmark-getaddrinfo.c +94 -0
  231. data/ext/asyncengine_ext/libuv/test/benchmark-list.h +105 -0
  232. data/ext/asyncengine_ext/libuv/test/benchmark-ping-pongs.c +213 -0
  233. data/ext/asyncengine_ext/libuv/test/benchmark-pound.c +324 -0
  234. data/ext/asyncengine_ext/libuv/test/benchmark-pump.c +462 -0
  235. data/ext/asyncengine_ext/libuv/test/benchmark-sizes.c +40 -0
  236. data/ext/asyncengine_ext/libuv/test/benchmark-spawn.c +156 -0
  237. data/ext/asyncengine_ext/libuv/test/benchmark-tcp-write-batch.c +140 -0
  238. data/ext/asyncengine_ext/libuv/test/benchmark-thread.c +64 -0
  239. data/ext/asyncengine_ext/libuv/test/benchmark-udp-packet-storm.c +247 -0
  240. data/ext/asyncengine_ext/libuv/test/blackhole-server.c +118 -0
  241. data/ext/asyncengine_ext/libuv/test/dns-server.c +321 -0
  242. data/ext/asyncengine_ext/libuv/test/echo-server.c +370 -0
  243. data/ext/asyncengine_ext/libuv/test/fixtures/empty_file +0 -0
  244. data/ext/asyncengine_ext/libuv/test/fixtures/load_error.node +1 -0
  245. data/ext/asyncengine_ext/libuv/test/run-benchmarks.c +64 -0
  246. data/ext/asyncengine_ext/libuv/test/run-tests.c +108 -0
  247. data/ext/asyncengine_ext/libuv/test/runner-unix.c +315 -0
  248. data/ext/asyncengine_ext/libuv/test/runner-unix.h +36 -0
  249. data/ext/asyncengine_ext/libuv/test/runner-win.c +343 -0
  250. data/ext/asyncengine_ext/libuv/test/runner-win.h +42 -0
  251. data/ext/asyncengine_ext/libuv/test/runner.c +317 -0
  252. data/ext/asyncengine_ext/libuv/test/runner.h +159 -0
  253. data/ext/asyncengine_ext/libuv/test/task.h +117 -0
  254. data/ext/asyncengine_ext/libuv/test/test-async.c +216 -0
  255. data/ext/asyncengine_ext/libuv/test/test-callback-stack.c +203 -0
  256. data/ext/asyncengine_ext/libuv/test/test-connection-fail.c +148 -0
  257. data/ext/asyncengine_ext/libuv/test/test-counters-init.c +216 -0
  258. data/ext/asyncengine_ext/libuv/test/test-cwd-and-chdir.c +64 -0
  259. data/ext/asyncengine_ext/libuv/test/test-delayed-accept.c +197 -0
  260. data/ext/asyncengine_ext/libuv/test/test-dlerror.c +49 -0
  261. data/ext/asyncengine_ext/libuv/test/test-eio-overflow.c +90 -0
  262. data/ext/asyncengine_ext/libuv/test/test-error.c +59 -0
  263. data/ext/asyncengine_ext/libuv/test/test-fail-always.c +29 -0
  264. data/ext/asyncengine_ext/libuv/test/test-fs-event.c +442 -0
  265. data/ext/asyncengine_ext/libuv/test/test-fs.c +1731 -0
  266. data/ext/asyncengine_ext/libuv/test/test-get-currentexe.c +63 -0
  267. data/ext/asyncengine_ext/libuv/test/test-get-loadavg.c +36 -0
  268. data/ext/asyncengine_ext/libuv/test/test-get-memory.c +38 -0
  269. data/ext/asyncengine_ext/libuv/test/test-getaddrinfo.c +122 -0
  270. data/ext/asyncengine_ext/libuv/test/test-gethostbyname.c +189 -0
  271. data/ext/asyncengine_ext/libuv/test/test-getsockname.c +342 -0
  272. data/ext/asyncengine_ext/libuv/test/test-hrtime.c +51 -0
  273. data/ext/asyncengine_ext/libuv/test/test-idle.c +81 -0
  274. data/ext/asyncengine_ext/libuv/test/test-ipc-send-recv.c +209 -0
  275. data/ext/asyncengine_ext/libuv/test/test-ipc.c +614 -0
  276. data/ext/asyncengine_ext/libuv/test/test-list.h +371 -0
  277. data/ext/asyncengine_ext/libuv/test/test-loop-handles.c +359 -0
  278. data/ext/asyncengine_ext/libuv/test/test-multiple-listen.c +102 -0
  279. data/ext/asyncengine_ext/libuv/test/test-mutexes.c +63 -0
  280. data/ext/asyncengine_ext/libuv/test/test-pass-always.c +28 -0
  281. data/ext/asyncengine_ext/libuv/test/test-ping-pong.c +253 -0
  282. data/ext/asyncengine_ext/libuv/test/test-pipe-bind-error.c +140 -0
  283. data/ext/asyncengine_ext/libuv/test/test-pipe-connect-error.c +96 -0
  284. data/ext/asyncengine_ext/libuv/test/test-platform-output.c +87 -0
  285. data/ext/asyncengine_ext/libuv/test/test-process-title.c +42 -0
  286. data/ext/asyncengine_ext/libuv/test/test-ref.c +322 -0
  287. data/ext/asyncengine_ext/libuv/test/test-run-once.c +44 -0
  288. data/ext/asyncengine_ext/libuv/test/test-shutdown-close.c +103 -0
  289. data/ext/asyncengine_ext/libuv/test/test-shutdown-eof.c +183 -0
  290. data/ext/asyncengine_ext/libuv/test/test-spawn.c +499 -0
  291. data/ext/asyncengine_ext/libuv/test/test-stdio-over-pipes.c +256 -0
  292. data/ext/asyncengine_ext/libuv/test/test-tcp-bind-error.c +191 -0
  293. data/ext/asyncengine_ext/libuv/test/test-tcp-bind6-error.c +154 -0
  294. data/ext/asyncengine_ext/libuv/test/test-tcp-close.c +129 -0
  295. data/ext/asyncengine_ext/libuv/test/test-tcp-connect-error.c +70 -0
  296. data/ext/asyncengine_ext/libuv/test/test-tcp-connect6-error.c +68 -0
  297. data/ext/asyncengine_ext/libuv/test/test-tcp-flags.c +51 -0
  298. data/ext/asyncengine_ext/libuv/test/test-tcp-write-error.c +168 -0
  299. data/ext/asyncengine_ext/libuv/test/test-tcp-write-to-half-open-connection.c +135 -0
  300. data/ext/asyncengine_ext/libuv/test/test-tcp-writealot.c +195 -0
  301. data/ext/asyncengine_ext/libuv/test/test-thread.c +183 -0
  302. data/ext/asyncengine_ext/libuv/test/test-threadpool.c +57 -0
  303. data/ext/asyncengine_ext/libuv/test/test-timer-again.c +141 -0
  304. data/ext/asyncengine_ext/libuv/test/test-timer.c +130 -0
  305. data/ext/asyncengine_ext/libuv/test/test-tty.c +110 -0
  306. data/ext/asyncengine_ext/libuv/test/test-udp-dgram-too-big.c +86 -0
  307. data/ext/asyncengine_ext/libuv/test/test-udp-ipv6.c +156 -0
  308. data/ext/asyncengine_ext/libuv/test/test-udp-multicast-join.c +139 -0
  309. data/ext/asyncengine_ext/libuv/test/test-udp-multicast-ttl.c +86 -0
  310. data/ext/asyncengine_ext/libuv/test/test-udp-options.c +86 -0
  311. data/ext/asyncengine_ext/libuv/test/test-udp-send-and-recv.c +208 -0
  312. data/ext/asyncengine_ext/libuv/test/test-util.c +97 -0
  313. data/ext/asyncengine_ext/libuv/uv.gyp +435 -0
  314. data/ext/asyncengine_ext/libuv/vcbuild.bat +105 -0
  315. data/lib/asyncengine/version.rb +3 -0
  316. data/lib/asyncengine.rb +41 -0
  317. metadata +384 -0
@@ -0,0 +1,71 @@
1
+
2
+ /* Copyright 1998 by the Massachusetts Institute of Technology.
3
+ *
4
+ * Permission to use, copy, modify, and distribute this
5
+ * software and its documentation for any purpose and without
6
+ * fee is hereby granted, provided that the above copyright
7
+ * notice appear in all copies and that both that copyright
8
+ * notice and this permission notice appear in supporting
9
+ * documentation, and that the name of M.I.T. not be used in
10
+ * advertising or publicity pertaining to distribution of the
11
+ * software without specific, written prior permission.
12
+ * M.I.T. makes no representations about the suitability of
13
+ * this software for any purpose. It is provided "as is"
14
+ * without express or implied warranty.
15
+ */
16
+
17
+ #include "ares_setup.h"
18
+ #include <stdio.h>
19
+ #include <stdlib.h>
20
+ #include <string.h>
21
+ #include "ares.h"
22
+ #include "ares_nowarn.h"
23
+ #include "ares_private.h"
24
+
25
+ /* This is an internal function. Its contract is to read a line from
26
+ * a file into a dynamically allocated buffer, zeroing the trailing
27
+ * newline if there is one. The calling routine may call
28
+ * ares__read_line multiple times with the same buf and bufsize
29
+ * pointers; *buf will be reallocated and *bufsize adjusted as
30
+ * appropriate. The initial value of *buf should be NULL. After the
31
+ * calling routine is done reading lines, it should free *buf.
32
+ */
33
+ int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
34
+ {
35
+ char *newbuf;
36
+ size_t offset = 0;
37
+ size_t len;
38
+
39
+ if (*buf == NULL)
40
+ {
41
+ *buf = malloc(128);
42
+ if (!*buf)
43
+ return ARES_ENOMEM;
44
+ *bufsize = 128;
45
+ }
46
+
47
+ for (;;)
48
+ {
49
+ int bytestoread = aresx_uztosi(*bufsize - offset);
50
+
51
+ if (!fgets(*buf + offset, bytestoread, fp))
52
+ return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
53
+ len = offset + strlen(*buf + offset);
54
+ if ((*buf)[len - 1] == '\n')
55
+ {
56
+ (*buf)[len - 1] = 0;
57
+ break;
58
+ }
59
+ offset = len;
60
+ if(len < *bufsize - 1)
61
+ continue;
62
+
63
+ /* Allocate more space. */
64
+ newbuf = realloc(*buf, *bufsize * 2);
65
+ if (!newbuf)
66
+ return ARES_ENOMEM;
67
+ *buf = newbuf;
68
+ *bufsize *= 2;
69
+ }
70
+ return ARES_SUCCESS;
71
+ }
@@ -0,0 +1,111 @@
1
+
2
+ /* Copyright (C) 2008 by Daniel Stenberg et al
3
+ *
4
+ * Permission to use, copy, modify, and distribute this software and its
5
+ * documentation for any purpose and without fee is hereby granted, provided
6
+ * that the above copyright notice appear in all copies and that both that
7
+ * copyright notice and this permission notice appear in supporting
8
+ * documentation, and that the name of M.I.T. not be used in advertising or
9
+ * publicity pertaining to distribution of the software without specific,
10
+ * written prior permission. M.I.T. makes no representations about the
11
+ * suitability of this software for any purpose. It is provided "as is"
12
+ * without express or implied warranty.
13
+ */
14
+
15
+ #include "ares_setup.h"
16
+ #include "ares.h"
17
+ #include "ares_private.h"
18
+
19
+ #if defined(WIN32) && !defined(MSDOS)
20
+
21
+ struct timeval ares__tvnow(void)
22
+ {
23
+ /*
24
+ ** GetTickCount() is available on _all_ Windows versions from W95 up
25
+ ** to nowadays. Returns milliseconds elapsed since last system boot,
26
+ ** increases monotonically and wraps once 49.7 days have elapsed.
27
+ */
28
+ struct timeval now;
29
+ DWORD milliseconds = GetTickCount();
30
+ now.tv_sec = milliseconds / 1000;
31
+ now.tv_usec = (milliseconds % 1000) * 1000;
32
+ return now;
33
+ }
34
+
35
+ #elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
36
+
37
+ struct timeval ares__tvnow(void)
38
+ {
39
+ /*
40
+ ** clock_gettime() is granted to be increased monotonically when the
41
+ ** monotonic clock is queried. Time starting point is unspecified, it
42
+ ** could be the system start-up time, the Epoch, or something else,
43
+ ** in any case the time starting point does not change once that the
44
+ ** system has started up.
45
+ */
46
+ struct timeval now;
47
+ struct timespec tsnow;
48
+ if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
49
+ now.tv_sec = tsnow.tv_sec;
50
+ now.tv_usec = tsnow.tv_nsec / 1000;
51
+ }
52
+ /*
53
+ ** Even when the configure process has truly detected monotonic clock
54
+ ** availability, it might happen that it is not actually available at
55
+ ** run-time. When this occurs simply fallback to other time source.
56
+ */
57
+ #ifdef HAVE_GETTIMEOFDAY
58
+ else
59
+ (void)gettimeofday(&now, NULL);
60
+ #else
61
+ else {
62
+ now.tv_sec = (long)time(NULL);
63
+ now.tv_usec = 0;
64
+ }
65
+ #endif
66
+ return now;
67
+ }
68
+
69
+ #elif defined(HAVE_GETTIMEOFDAY)
70
+
71
+ struct timeval ares__tvnow(void)
72
+ {
73
+ /*
74
+ ** gettimeofday() is not granted to be increased monotonically, due to
75
+ ** clock drifting and external source time synchronization it can jump
76
+ ** forward or backward in time.
77
+ */
78
+ struct timeval now;
79
+ (void)gettimeofday(&now, NULL);
80
+ return now;
81
+ }
82
+
83
+ #else
84
+
85
+ struct timeval ares__tvnow(void)
86
+ {
87
+ /*
88
+ ** time() returns the value of time in seconds since the Epoch.
89
+ */
90
+ struct timeval now;
91
+ now.tv_sec = (long)time(NULL);
92
+ now.tv_usec = 0;
93
+ return now;
94
+ }
95
+
96
+ #endif
97
+
98
+ #if 0 /* Not used */
99
+ /*
100
+ * Make sure that the first argument is the more recent time, as otherwise
101
+ * we'll get a weird negative time-diff back...
102
+ *
103
+ * Returns: the time difference in number of milliseconds.
104
+ */
105
+ long ares__tvdiff(struct timeval newer, struct timeval older)
106
+ {
107
+ return (newer.tv_sec-older.tv_sec)*1000+
108
+ (newer.tv_usec-older.tv_usec)/1000;
109
+ }
110
+ #endif
111
+
@@ -0,0 +1,63 @@
1
+
2
+ /* Copyright (C) 2004 by Daniel Stenberg et al
3
+ *
4
+ * Permission to use, copy, modify, and distribute this software and its
5
+ * documentation for any purpose and without fee is hereby granted, provided
6
+ * that the above copyright notice appear in all copies and that both that
7
+ * copyright notice and this permission notice appear in supporting
8
+ * documentation, and that the name of M.I.T. not be used in advertising or
9
+ * publicity pertaining to distribution of the software without specific,
10
+ * written prior permission. M.I.T. makes no representations about the
11
+ * suitability of this software for any purpose. It is provided "as is"
12
+ * without express or implied warranty.
13
+ */
14
+
15
+ #include "ares_setup.h"
16
+ #include <assert.h>
17
+ #include <stdlib.h>
18
+ #include "ares.h"
19
+ #include "ares_private.h"
20
+
21
+ /*
22
+ * ares_cancel() cancels all ongoing requests/resolves that might be going on
23
+ * on the given channel. It does NOT kill the channel, use ares_destroy() for
24
+ * that.
25
+ */
26
+ void ares_cancel(ares_channel channel)
27
+ {
28
+ struct query *query;
29
+ struct list_node* list_head;
30
+ struct list_node* list_node;
31
+ int i;
32
+
33
+ list_head = &(channel->all_queries);
34
+ for (list_node = list_head->next; list_node != list_head; )
35
+ {
36
+ query = list_node->data;
37
+ list_node = list_node->next; /* since we're deleting the query */
38
+ query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
39
+ ares__free_query(query);
40
+ }
41
+ #ifndef NDEBUG
42
+ /* Freeing the query should remove it from all the lists in which it sits,
43
+ * so all query lists should be empty now.
44
+ */
45
+ assert(ares__is_list_empty(&(channel->all_queries)));
46
+ for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
47
+ {
48
+ assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
49
+ }
50
+ for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
51
+ {
52
+ assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
53
+ }
54
+ #endif
55
+ if (!(channel->flags & ARES_FLAG_STAYOPEN))
56
+ {
57
+ if (channel->servers)
58
+ {
59
+ for (i = 0; i < channel->nservers; i++)
60
+ ares__close_sockets(channel, &channel->servers[i]);
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,190 @@
1
+
2
+ /* Copyright (C) 2009-2010 by Daniel Stenberg
3
+ *
4
+ * Permission to use, copy, modify, and distribute this
5
+ * software and its documentation for any purpose and without
6
+ * fee is hereby granted, provided that the above copyright
7
+ * notice appear in all copies and that both that copyright
8
+ * notice and this permission notice appear in supporting
9
+ * documentation, and that the name of M.I.T. not be used in
10
+ * advertising or publicity pertaining to distribution of the
11
+ * software without specific, written prior permission.
12
+ * M.I.T. makes no representations about the suitability of
13
+ * this software for any purpose. It is provided "as is"
14
+ * without express or implied warranty.
15
+ */
16
+
17
+
18
+ #include "ares_setup.h"
19
+
20
+ #include <stddef.h>
21
+
22
+ #include "ares.h"
23
+ #include "ares_data.h"
24
+ #include "ares_private.h"
25
+
26
+
27
+ /*
28
+ ** ares_free_data() - c-ares external API function.
29
+ **
30
+ ** This function must be used by the application to free data memory that
31
+ ** has been internally allocated by some c-ares function and for which a
32
+ ** pointer has already been returned to the calling application. The list
33
+ ** of c-ares functions returning pointers that must be free'ed using this
34
+ ** function is:
35
+ **
36
+ ** ares_get_servers()
37
+ ** ares_parse_srv_reply()
38
+ ** ares_parse_txt_reply()
39
+ */
40
+
41
+ void ares_free_data(void *dataptr)
42
+ {
43
+ struct ares_data *ptr;
44
+
45
+ if (!dataptr)
46
+ return;
47
+
48
+ #ifdef __INTEL_COMPILER
49
+ # pragma warning(push)
50
+ # pragma warning(disable:1684)
51
+ /* 1684: conversion from pointer to same-sized integral type */
52
+ #endif
53
+
54
+ ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
55
+
56
+ #ifdef __INTEL_COMPILER
57
+ # pragma warning(pop)
58
+ #endif
59
+
60
+ if (ptr->mark != ARES_DATATYPE_MARK)
61
+ return;
62
+
63
+ switch (ptr->type)
64
+ {
65
+ case ARES_DATATYPE_MX_REPLY:
66
+
67
+ if (ptr->data.mx_reply.next)
68
+ ares_free_data(ptr->data.mx_reply.next);
69
+ if (ptr->data.mx_reply.host)
70
+ free(ptr->data.mx_reply.host);
71
+ break;
72
+
73
+ case ARES_DATATYPE_SRV_REPLY:
74
+
75
+ if (ptr->data.srv_reply.next)
76
+ ares_free_data(ptr->data.srv_reply.next);
77
+ if (ptr->data.srv_reply.host)
78
+ free(ptr->data.srv_reply.host);
79
+ break;
80
+
81
+ case ARES_DATATYPE_TXT_REPLY:
82
+
83
+ if (ptr->data.txt_reply.next)
84
+ ares_free_data(ptr->data.txt_reply.next);
85
+ if (ptr->data.txt_reply.txt)
86
+ free(ptr->data.txt_reply.txt);
87
+ break;
88
+
89
+ case ARES_DATATYPE_ADDR_NODE:
90
+
91
+ if (ptr->data.addr_node.next)
92
+ ares_free_data(ptr->data.addr_node.next);
93
+ break;
94
+
95
+ default:
96
+ return;
97
+ }
98
+
99
+ free(ptr);
100
+ }
101
+
102
+
103
+ /*
104
+ ** ares_malloc_data() - c-ares internal helper function.
105
+ **
106
+ ** This function allocates memory for a c-ares private ares_data struct
107
+ ** for the specified ares_datatype, initializes c-ares private fields
108
+ ** and zero initializes those which later might be used from the public
109
+ ** API. It returns an interior pointer which can be passed by c-ares
110
+ ** functions to the calling application, and that must be free'ed using
111
+ ** c-ares external API function ares_free_data().
112
+ */
113
+
114
+ void *ares_malloc_data(ares_datatype type)
115
+ {
116
+ struct ares_data *ptr;
117
+
118
+ ptr = malloc(sizeof(struct ares_data));
119
+ if (!ptr)
120
+ return NULL;
121
+
122
+ switch (type)
123
+ {
124
+ case ARES_DATATYPE_MX_REPLY:
125
+ ptr->data.mx_reply.next = NULL;
126
+ ptr->data.mx_reply.host = NULL;
127
+ ptr->data.mx_reply.priority = 0;
128
+ break;
129
+
130
+ case ARES_DATATYPE_SRV_REPLY:
131
+ ptr->data.srv_reply.next = NULL;
132
+ ptr->data.srv_reply.host = NULL;
133
+ ptr->data.srv_reply.priority = 0;
134
+ ptr->data.srv_reply.weight = 0;
135
+ ptr->data.srv_reply.port = 0;
136
+ break;
137
+
138
+ case ARES_DATATYPE_TXT_REPLY:
139
+ ptr->data.txt_reply.next = NULL;
140
+ ptr->data.txt_reply.txt = NULL;
141
+ ptr->data.txt_reply.length = 0;
142
+ break;
143
+
144
+ case ARES_DATATYPE_ADDR_NODE:
145
+ ptr->data.addr_node.next = NULL;
146
+ ptr->data.addr_node.family = 0;
147
+ memset(&ptr->data.addr_node.addrV6, 0,
148
+ sizeof(ptr->data.addr_node.addrV6));
149
+ break;
150
+
151
+ default:
152
+ free(ptr);
153
+ return NULL;
154
+ }
155
+
156
+ ptr->mark = ARES_DATATYPE_MARK;
157
+ ptr->type = type;
158
+
159
+ return &ptr->data;
160
+ }
161
+
162
+
163
+ /*
164
+ ** ares_get_datatype() - c-ares internal helper function.
165
+ **
166
+ ** This function returns the ares_datatype of the data stored in a
167
+ ** private ares_data struct when given the public API pointer.
168
+ */
169
+
170
+ ares_datatype ares_get_datatype(void * dataptr)
171
+ {
172
+ struct ares_data *ptr;
173
+
174
+ #ifdef __INTEL_COMPILER
175
+ # pragma warning(push)
176
+ # pragma warning(disable:1684)
177
+ /* 1684: conversion from pointer to same-sized integral type */
178
+ #endif
179
+
180
+ ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
181
+
182
+ #ifdef __INTEL_COMPILER
183
+ # pragma warning(pop)
184
+ #endif
185
+
186
+ if (ptr->mark == ARES_DATATYPE_MARK)
187
+ return ptr->type;
188
+
189
+ return ARES_DATATYPE_UNKNOWN;
190
+ }
@@ -0,0 +1,65 @@
1
+
2
+ /* Copyright (C) 2009-2010 by Daniel Stenberg
3
+ *
4
+ * Permission to use, copy, modify, and distribute this
5
+ * software and its documentation for any purpose and without
6
+ * fee is hereby granted, provided that the above copyright
7
+ * notice appear in all copies and that both that copyright
8
+ * notice and this permission notice appear in supporting
9
+ * documentation, and that the name of M.I.T. not be used in
10
+ * advertising or publicity pertaining to distribution of the
11
+ * software without specific, written prior permission.
12
+ * M.I.T. makes no representations about the suitability of
13
+ * this software for any purpose. It is provided "as is"
14
+ * without express or implied warranty.
15
+ */
16
+
17
+ typedef enum {
18
+ ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */
19
+ ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */
20
+ ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */
21
+ ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */
22
+ ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */
23
+ #if 0
24
+ ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */
25
+ ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */
26
+ ARES_DATATYPE_HOSTENT, /* struct hostent */
27
+ ARES_DATATYPE_OPTIONS, /* struct ares_options */
28
+ #endif
29
+ ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */
30
+ } ares_datatype;
31
+
32
+ #define ARES_DATATYPE_MARK 0xbead
33
+
34
+ /*
35
+ * ares_data struct definition is internal to c-ares and shall not
36
+ * be exposed by the public API in order to allow future changes
37
+ * and extensions to it without breaking ABI. This will be used
38
+ * internally by c-ares as the container of multiple types of data
39
+ * dynamically allocated for which a reference will be returned
40
+ * to the calling application.
41
+ *
42
+ * c-ares API functions returning a pointer to c-ares internally
43
+ * allocated data will actually be returning an interior pointer
44
+ * into this ares_data struct.
45
+ *
46
+ * All this is 'invisible' to the calling application, the only
47
+ * requirement is that this kind of data must be free'ed by the
48
+ * calling application using ares_free_data() with the pointer
49
+ * it has received from a previous c-ares function call.
50
+ */
51
+
52
+ struct ares_data {
53
+ ares_datatype type; /* Actual data type identifier. */
54
+ unsigned int mark; /* Private ares_data signature. */
55
+ union {
56
+ struct ares_txt_reply txt_reply;
57
+ struct ares_srv_reply srv_reply;
58
+ struct ares_addr_node addr_node;
59
+ struct ares_mx_reply mx_reply;
60
+ } data;
61
+ };
62
+
63
+ void *ares_malloc_data(ares_datatype type);
64
+
65
+ ares_datatype ares_get_datatype(void * dataptr);
@@ -0,0 +1,105 @@
1
+
2
+ /* Copyright 1998 by the Massachusetts Institute of Technology.
3
+ * Copyright (C) 2004-2010 by Daniel Stenberg
4
+ *
5
+ * Permission to use, copy, modify, and distribute this
6
+ * software and its documentation for any purpose and without
7
+ * fee is hereby granted, provided that the above copyright
8
+ * notice appear in all copies and that both that copyright
9
+ * notice and this permission notice appear in supporting
10
+ * documentation, and that the name of M.I.T. not be used in
11
+ * advertising or publicity pertaining to distribution of the
12
+ * software without specific, written prior permission.
13
+ * M.I.T. makes no representations about the suitability of
14
+ * this software for any purpose. It is provided "as is"
15
+ * without express or implied warranty.
16
+ */
17
+
18
+ #include "ares_setup.h"
19
+ #include <assert.h>
20
+ #include <stdlib.h>
21
+ #include "ares.h"
22
+ #include "ares_private.h"
23
+
24
+ void ares_destroy_options(struct ares_options *options)
25
+ {
26
+ int i;
27
+
28
+ if(options->servers)
29
+ free(options->servers);
30
+ for (i = 0; i < options->ndomains; i++)
31
+ free(options->domains[i]);
32
+ free(options->domains);
33
+ if(options->sortlist)
34
+ free(options->sortlist);
35
+ free(options->lookups);
36
+ }
37
+
38
+ void ares_destroy(ares_channel channel)
39
+ {
40
+ int i;
41
+ struct query *query;
42
+ struct list_node* list_head;
43
+ struct list_node* list_node;
44
+
45
+ if (!channel)
46
+ return;
47
+
48
+ list_head = &(channel->all_queries);
49
+ for (list_node = list_head->next; list_node != list_head; )
50
+ {
51
+ query = list_node->data;
52
+ list_node = list_node->next; /* since we're deleting the query */
53
+ query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
54
+ ares__free_query(query);
55
+ }
56
+ #ifndef NDEBUG
57
+ /* Freeing the query should remove it from all the lists in which it sits,
58
+ * so all query lists should be empty now.
59
+ */
60
+ assert(ares__is_list_empty(&(channel->all_queries)));
61
+ for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
62
+ {
63
+ assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
64
+ }
65
+ for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
66
+ {
67
+ assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
68
+ }
69
+ #endif
70
+
71
+ ares__destroy_servers_state(channel);
72
+
73
+ if (channel->domains) {
74
+ for (i = 0; i < channel->ndomains; i++)
75
+ free(channel->domains[i]);
76
+ free(channel->domains);
77
+ }
78
+
79
+ if(channel->sortlist)
80
+ free(channel->sortlist);
81
+
82
+ if (channel->lookups)
83
+ free(channel->lookups);
84
+
85
+ free(channel);
86
+ }
87
+
88
+ void ares__destroy_servers_state(ares_channel channel)
89
+ {
90
+ struct server_state *server;
91
+ int i;
92
+
93
+ if (channel->servers)
94
+ {
95
+ for (i = 0; i < channel->nservers; i++)
96
+ {
97
+ server = &channel->servers[i];
98
+ ares__close_sockets(channel, server);
99
+ assert(ares__is_list_empty(&server->queries_to_server));
100
+ }
101
+ free(channel->servers);
102
+ channel->servers = NULL;
103
+ }
104
+ channel->nservers = -1;
105
+ }
@@ -0,0 +1,90 @@
1
+
2
+ /* Copyright 1998 by the Massachusetts Institute of Technology.
3
+ *
4
+ * Permission to use, copy, modify, and distribute this
5
+ * software and its documentation for any purpose and without
6
+ * fee is hereby granted, provided that the above copyright
7
+ * notice appear in all copies and that both that copyright
8
+ * notice and this permission notice appear in supporting
9
+ * documentation, and that the name of M.I.T. not be used in
10
+ * advertising or publicity pertaining to distribution of the
11
+ * software without specific, written prior permission.
12
+ * M.I.T. makes no representations about the suitability of
13
+ * this software for any purpose. It is provided "as is"
14
+ * without express or implied warranty.
15
+ */
16
+
17
+ #ifndef ARES__DNS_H
18
+ #define ARES__DNS_H
19
+
20
+ #define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
21
+ #define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
22
+ ((p)[2] << 8) | (p)[3])
23
+
24
+ #define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
25
+ ((p)[1] = (unsigned char)((v) & 0xff)))
26
+ #define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
27
+ ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
28
+ ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
29
+ ((p)[3] = (unsigned char)((v) & 0xff)))
30
+
31
+ #if 0
32
+ /* we cannot use this approach on systems where we can't access 16/32 bit
33
+ data on un-aligned addresses */
34
+ #define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
35
+ #define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
36
+ #define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
37
+ #define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
38
+ #endif
39
+
40
+ /* Macros for parsing a DNS header */
41
+ #define DNS_HEADER_QID(h) DNS__16BIT(h)
42
+ #define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
43
+ #define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
44
+ #define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
45
+ #define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
46
+ #define DNS_HEADER_RD(h) ((h)[2] & 0x1)
47
+ #define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
48
+ #define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
49
+ #define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
50
+ #define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
51
+ #define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
52
+ #define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
53
+ #define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
54
+
55
+ /* Macros for constructing a DNS header */
56
+ #define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
57
+ #define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
58
+ #define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
59
+ #define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
60
+ #define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
61
+ #define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
62
+ #define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
63
+ #define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
64
+ #define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
65
+ #define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
66
+ #define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
67
+ #define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
68
+ #define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
69
+
70
+ /* Macros for parsing the fixed part of a DNS question */
71
+ #define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
72
+ #define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
73
+
74
+ /* Macros for constructing the fixed part of a DNS question */
75
+ #define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
76
+ #define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
77
+
78
+ /* Macros for parsing the fixed part of a DNS resource record */
79
+ #define DNS_RR_TYPE(r) DNS__16BIT(r)
80
+ #define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
81
+ #define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
82
+ #define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
83
+
84
+ /* Macros for constructing the fixed part of a DNS resource record */
85
+ #define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v)
86
+ #define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v)
87
+ #define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v)
88
+ #define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v)
89
+
90
+ #endif /* ARES__DNS_H */