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,195 @@
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
+
19
+ #ifdef HAVE_SYS_SOCKET_H
20
+ # include <sys/socket.h>
21
+ #endif
22
+ #ifdef HAVE_NETINET_IN_H
23
+ # include <netinet/in.h>
24
+ #endif
25
+ #ifdef HAVE_ARPA_NAMESER_H
26
+ # include <arpa/nameser.h>
27
+ #else
28
+ # include "nameser.h"
29
+ #endif
30
+ #ifdef HAVE_ARPA_NAMESER_COMPAT_H
31
+ # include <arpa/nameser_compat.h>
32
+ #endif
33
+
34
+ #include <stdlib.h>
35
+ #include <string.h>
36
+ #include "ares.h"
37
+ #include "ares_dns.h"
38
+ #include "ares_private.h"
39
+
40
+ /* Header format, from RFC 1035:
41
+ * 1 1 1 1 1 1
42
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
43
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
44
+ * | ID |
45
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
46
+ * |QR| Opcode |AA|TC|RD|RA| Z | RCODE |
47
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
48
+ * | QDCOUNT |
49
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
50
+ * | ANCOUNT |
51
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
52
+ * | NSCOUNT |
53
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
54
+ * | ARCOUNT |
55
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
56
+ *
57
+ * AA, TC, RA, and RCODE are only set in responses. Brief description
58
+ * of the remaining fields:
59
+ * ID Identifier to match responses with queries
60
+ * QR Query (0) or response (1)
61
+ * Opcode For our purposes, always QUERY
62
+ * RD Recursion desired
63
+ * Z Reserved (zero)
64
+ * QDCOUNT Number of queries
65
+ * ANCOUNT Number of answers
66
+ * NSCOUNT Number of name server records
67
+ * ARCOUNT Number of additional records
68
+ *
69
+ * Question format, from RFC 1035:
70
+ * 1 1 1 1 1 1
71
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
72
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
73
+ * | |
74
+ * / QNAME /
75
+ * / /
76
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
77
+ * | QTYPE |
78
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
79
+ * | QCLASS |
80
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
81
+ *
82
+ * The query name is encoded as a series of labels, each represented
83
+ * as a one-byte length (maximum 63) followed by the text of the
84
+ * label. The list is terminated by a label of length zero (which can
85
+ * be thought of as the root domain).
86
+ */
87
+
88
+ int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
89
+ int rd, unsigned char **buf, int *buflen)
90
+ {
91
+ int len;
92
+ unsigned char *q;
93
+ const char *p;
94
+
95
+ /* Set our results early, in case we bail out early with an error. */
96
+ *buflen = 0;
97
+ *buf = NULL;
98
+
99
+ /* Compute the length of the encoded name so we can check buflen.
100
+ * Start counting at 1 for the zero-length label at the end. */
101
+ len = 1;
102
+ for (p = name; *p; p++)
103
+ {
104
+ if (*p == '\\' && *(p + 1) != 0)
105
+ p++;
106
+ len++;
107
+ }
108
+ /* If there are n periods in the name, there are n + 1 labels, and
109
+ * thus n + 1 length fields, unless the name is empty or ends with a
110
+ * period. So add 1 unless name is empty or ends with a period.
111
+ */
112
+ if (*name && *(p - 1) != '.')
113
+ len++;
114
+
115
+ /* Immediately reject names that are longer than the maximum of 255
116
+ * bytes that's specified in RFC 1035 ("To simplify implementations,
117
+ * the total length of a domain name (i.e., label octets and label
118
+ * length octets) is restricted to 255 octets or less."). We aren't
119
+ * doing this just to be a stickler about RFCs. For names that are
120
+ * too long, 'dnscache' closes its TCP connection to us immediately
121
+ * (when using TCP) and ignores the request when using UDP, and
122
+ * BIND's named returns ServFail (TCP or UDP). Sending a request
123
+ * that we know will cause 'dnscache' to close the TCP connection is
124
+ * painful, since that makes any other outstanding requests on that
125
+ * connection fail. And sending a UDP request that we know
126
+ * 'dnscache' will ignore is bad because resources will be tied up
127
+ * until we time-out the request.
128
+ */
129
+ if (len > MAXCDNAME)
130
+ return ARES_EBADNAME;
131
+
132
+ *buflen = len + HFIXEDSZ + QFIXEDSZ;
133
+ *buf = malloc(*buflen);
134
+ if (!*buf)
135
+ return ARES_ENOMEM;
136
+
137
+ /* Set up the header. */
138
+ q = *buf;
139
+ memset(q, 0, HFIXEDSZ);
140
+ DNS_HEADER_SET_QID(q, id);
141
+ DNS_HEADER_SET_OPCODE(q, QUERY);
142
+ if (rd) {
143
+ DNS_HEADER_SET_RD(q, 1);
144
+ }
145
+ else {
146
+ DNS_HEADER_SET_RD(q, 0);
147
+ }
148
+ DNS_HEADER_SET_QDCOUNT(q, 1);
149
+
150
+ /* A name of "." is a screw case for the loop below, so adjust it. */
151
+ if (strcmp(name, ".") == 0)
152
+ name++;
153
+
154
+ /* Start writing out the name after the header. */
155
+ q += HFIXEDSZ;
156
+ while (*name)
157
+ {
158
+ if (*name == '.')
159
+ return ARES_EBADNAME;
160
+
161
+ /* Count the number of bytes in this label. */
162
+ len = 0;
163
+ for (p = name; *p && *p != '.'; p++)
164
+ {
165
+ if (*p == '\\' && *(p + 1) != 0)
166
+ p++;
167
+ len++;
168
+ }
169
+ if (len > MAXLABEL)
170
+ return ARES_EBADNAME;
171
+
172
+ /* Encode the length and copy the data. */
173
+ *q++ = (unsigned char)len;
174
+ for (p = name; *p && *p != '.'; p++)
175
+ {
176
+ if (*p == '\\' && *(p + 1) != 0)
177
+ p++;
178
+ *q++ = *p;
179
+ }
180
+
181
+ /* Go to the next label and repeat, unless we hit the end. */
182
+ if (!*p)
183
+ break;
184
+ name = p + 1;
185
+ }
186
+
187
+ /* Add the zero-length label at the end. */
188
+ *q++ = 0;
189
+
190
+ /* Finish off the question with the type and class. */
191
+ DNS_QUESTION_SET_TYPE(q, type);
192
+ DNS_QUESTION_SET_CLASS(q, dnsclass);
193
+
194
+ return ARES_SUCCESS;
195
+ }
@@ -0,0 +1,181 @@
1
+
2
+ /* Copyright (C) 2010-2011 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
+ #ifdef HAVE_ASSERT_H
21
+ # include <assert.h>
22
+ #endif
23
+
24
+ #if defined(__INTEL_COMPILER) && defined(__unix__)
25
+
26
+ #ifdef HAVE_SYS_SOCKET_H
27
+ # include <sys/socket.h>
28
+ #endif
29
+ #ifdef HAVE_NETINET_IN_H
30
+ # include <netinet/in.h>
31
+ #endif
32
+ #ifdef HAVE_ARPA_INET_H
33
+ # include <arpa/inet.h>
34
+ #endif
35
+
36
+ #endif /* __INTEL_COMPILER && __unix__ */
37
+
38
+ #define BUILDING_ARES_NOWARN_C 1
39
+
40
+ #include "ares_nowarn.h"
41
+
42
+ #if (SIZEOF_INT == 2)
43
+ # define CARES_MASK_SINT 0x7FFF
44
+ # define CARES_MASK_UINT 0xFFFF
45
+ #elif (SIZEOF_INT == 4)
46
+ # define CARES_MASK_SINT 0x7FFFFFFF
47
+ # define CARES_MASK_UINT 0xFFFFFFFF
48
+ #elif (SIZEOF_INT == 8)
49
+ # define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF
50
+ # define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF
51
+ #elif (SIZEOF_INT == 16)
52
+ # define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
53
+ # define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
54
+ #endif
55
+
56
+ /*
57
+ ** unsigned size_t to signed int
58
+ */
59
+
60
+ int aresx_uztosi(size_t uznum)
61
+ {
62
+ #ifdef __INTEL_COMPILER
63
+ # pragma warning(push)
64
+ # pragma warning(disable:810) /* conversion may lose significant bits */
65
+ #endif
66
+
67
+ return (int)(uznum & (size_t) CARES_MASK_SINT);
68
+
69
+ #ifdef __INTEL_COMPILER
70
+ # pragma warning(pop)
71
+ #endif
72
+ }
73
+
74
+ /*
75
+ ** signed long to signed int
76
+ */
77
+
78
+ int aresx_sltosi(long slnum)
79
+ {
80
+ #ifdef __INTEL_COMPILER
81
+ # pragma warning(push)
82
+ # pragma warning(disable:810) /* conversion may lose significant bits */
83
+ #endif
84
+
85
+ DEBUGASSERT(slnum >= 0);
86
+ return (int)(slnum & (long) CARES_MASK_SINT);
87
+
88
+ #ifdef __INTEL_COMPILER
89
+ # pragma warning(pop)
90
+ #endif
91
+ }
92
+
93
+ /*
94
+ ** signed ssize_t to signed int
95
+ */
96
+
97
+ int aresx_sztosi(ssize_t sznum)
98
+ {
99
+ #ifdef __INTEL_COMPILER
100
+ # pragma warning(push)
101
+ # pragma warning(disable:810) /* conversion may lose significant bits */
102
+ #endif
103
+
104
+ DEBUGASSERT(sznum >= 0);
105
+ return (int)(sznum & (ssize_t) CARES_MASK_SINT);
106
+
107
+ #ifdef __INTEL_COMPILER
108
+ # pragma warning(pop)
109
+ #endif
110
+ }
111
+
112
+ /*
113
+ ** signed ssize_t to unsigned int
114
+ */
115
+
116
+ unsigned int aresx_sztoui(ssize_t sznum)
117
+ {
118
+ #ifdef __INTEL_COMPILER
119
+ # pragma warning(push)
120
+ # pragma warning(disable:810) /* conversion may lose significant bits */
121
+ #endif
122
+
123
+ DEBUGASSERT(sznum >= 0);
124
+ return (unsigned int)(sznum & (ssize_t) CARES_MASK_UINT);
125
+
126
+ #ifdef __INTEL_COMPILER
127
+ # pragma warning(pop)
128
+ #endif
129
+ }
130
+
131
+ #if defined(__INTEL_COMPILER) && defined(__unix__)
132
+
133
+ int aresx_FD_ISSET(int fd, fd_set *fdset)
134
+ {
135
+ #pragma warning(push)
136
+ #pragma warning(disable:1469) /* clobber ignored */
137
+ return FD_ISSET(fd, fdset);
138
+ #pragma warning(pop)
139
+ }
140
+
141
+ void aresx_FD_SET(int fd, fd_set *fdset)
142
+ {
143
+ #pragma warning(push)
144
+ #pragma warning(disable:1469) /* clobber ignored */
145
+ FD_SET(fd, fdset);
146
+ #pragma warning(pop)
147
+ }
148
+
149
+ void aresx_FD_ZERO(fd_set *fdset)
150
+ {
151
+ #pragma warning(push)
152
+ #pragma warning(disable:593) /* variable was set but never used */
153
+ FD_ZERO(fdset);
154
+ #pragma warning(pop)
155
+ }
156
+
157
+ unsigned short aresx_htons(unsigned short usnum)
158
+ {
159
+ #if (__INTEL_COMPILER == 910) && defined(__i386__)
160
+ return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
161
+ #else
162
+ #pragma warning(push)
163
+ #pragma warning(disable:810) /* conversion may lose significant bits */
164
+ return htons(usnum);
165
+ #pragma warning(pop)
166
+ #endif
167
+ }
168
+
169
+ unsigned short aresx_ntohs(unsigned short usnum)
170
+ {
171
+ #if (__INTEL_COMPILER == 910) && defined(__i386__)
172
+ return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
173
+ #else
174
+ #pragma warning(push)
175
+ #pragma warning(disable:810) /* conversion may lose significant bits */
176
+ return ntohs(usnum);
177
+ #pragma warning(pop)
178
+ #endif
179
+ }
180
+
181
+ #endif /* __INTEL_COMPILER && __unix__ */
@@ -0,0 +1,55 @@
1
+ #ifndef HEADER_CARES_NOWARN_H
2
+ #define HEADER_CARES_NOWARN_H
3
+
4
+
5
+ /* Copyright (C) 2010-2011 by Daniel Stenberg
6
+ *
7
+ * Permission to use, copy, modify, and distribute this
8
+ * software and its documentation for any purpose and without
9
+ * fee is hereby granted, provided that the above copyright
10
+ * notice appear in all copies and that both that copyright
11
+ * notice and this permission notice appear in supporting
12
+ * documentation, and that the name of M.I.T. not be used in
13
+ * advertising or publicity pertaining to distribution of the
14
+ * software without specific, written prior permission.
15
+ * M.I.T. makes no representations about the suitability of
16
+ * this software for any purpose. It is provided "as is"
17
+ * without express or implied warranty.
18
+ */
19
+
20
+ int aresx_uztosi(size_t uznum);
21
+
22
+ int aresx_sltosi(long slnum);
23
+
24
+ int aresx_sztosi(ssize_t sznum);
25
+
26
+ unsigned int aresx_sztoui(ssize_t sznum);
27
+
28
+ #if defined(__INTEL_COMPILER) && defined(__unix__)
29
+
30
+ int aresx_FD_ISSET(int fd, fd_set *fdset);
31
+
32
+ void aresx_FD_SET(int fd, fd_set *fdset);
33
+
34
+ void aresx_FD_ZERO(fd_set *fdset);
35
+
36
+ unsigned short aresx_htons(unsigned short usnum);
37
+
38
+ unsigned short aresx_ntohs(unsigned short usnum);
39
+
40
+ #ifndef BUILDING_ARES_NOWARN_C
41
+ # undef FD_ISSET
42
+ # define FD_ISSET(a,b) aresx_FD_ISSET((a),(b))
43
+ # undef FD_SET
44
+ # define FD_SET(a,b) aresx_FD_SET((a),(b))
45
+ # undef FD_ZERO
46
+ # define FD_ZERO(a) aresx_FD_ZERO((a))
47
+ # undef htons
48
+ # define htons(a) aresx_htons((a))
49
+ # undef ntohs
50
+ # define ntohs(a) aresx_ntohs((a))
51
+ #endif
52
+
53
+ #endif /* __INTEL_COMPILER && __unix__ */
54
+
55
+ #endif /* HEADER_CARES_NOWARN_H */
@@ -0,0 +1,248 @@
1
+
2
+ /* Copyright 1998 by the Massachusetts Institute of Technology.
3
+ * Copyright (C) 2008-2011 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
+
19
+ #include "ares_setup.h"
20
+
21
+ #ifdef HAVE_ARPA_INET_H
22
+ # include <arpa/inet.h>
23
+ #endif
24
+
25
+ #include "ares.h"
26
+ #include "ares_data.h"
27
+ #include "inet_net_pton.h"
28
+ #include "ares_private.h"
29
+
30
+
31
+ int ares_get_servers(ares_channel channel,
32
+ struct ares_addr_node **servers)
33
+ {
34
+ struct ares_addr_node *srvr_head = NULL;
35
+ struct ares_addr_node *srvr_last = NULL;
36
+ struct ares_addr_node *srvr_curr;
37
+ int status = ARES_SUCCESS;
38
+ int i;
39
+
40
+ if (!channel)
41
+ return ARES_ENODATA;
42
+
43
+ for (i = 0; i < channel->nservers; i++)
44
+ {
45
+ /* Allocate storage for this server node appending it to the list */
46
+ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE);
47
+ if (!srvr_curr)
48
+ {
49
+ status = ARES_ENOMEM;
50
+ break;
51
+ }
52
+ if (srvr_last)
53
+ {
54
+ srvr_last->next = srvr_curr;
55
+ }
56
+ else
57
+ {
58
+ srvr_head = srvr_curr;
59
+ }
60
+ srvr_last = srvr_curr;
61
+
62
+ /* Fill this server node data */
63
+ srvr_curr->family = channel->servers[i].addr.family;
64
+ if (srvr_curr->family == AF_INET)
65
+ memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
66
+ sizeof(srvr_curr->addrV4));
67
+ else
68
+ memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
69
+ sizeof(srvr_curr->addrV6));
70
+ }
71
+
72
+ if (status != ARES_SUCCESS)
73
+ {
74
+ if (srvr_head)
75
+ {
76
+ ares_free_data(srvr_head);
77
+ srvr_head = NULL;
78
+ }
79
+ }
80
+
81
+ *servers = srvr_head;
82
+
83
+ return status;
84
+ }
85
+
86
+
87
+ int ares_set_servers(ares_channel channel,
88
+ struct ares_addr_node *servers)
89
+ {
90
+ struct ares_addr_node *srvr;
91
+ int num_srvrs = 0;
92
+ int i;
93
+
94
+ if (ares_library_initialized() != ARES_SUCCESS)
95
+ return ARES_ENOTINITIALIZED;
96
+
97
+ if (!channel)
98
+ return ARES_ENODATA;
99
+
100
+ ares__destroy_servers_state(channel);
101
+
102
+ for (srvr = servers; srvr; srvr = srvr->next)
103
+ {
104
+ num_srvrs++;
105
+ }
106
+
107
+ if (num_srvrs > 0)
108
+ {
109
+ /* Allocate storage for servers state */
110
+ channel->servers = malloc(num_srvrs * sizeof(struct server_state));
111
+ if (!channel->servers)
112
+ {
113
+ return ARES_ENOMEM;
114
+ }
115
+ channel->nservers = num_srvrs;
116
+ /* Fill servers state address data */
117
+ for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next)
118
+ {
119
+ channel->servers[i].addr.family = srvr->family;
120
+ if (srvr->family == AF_INET)
121
+ memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
122
+ sizeof(srvr->addrV4));
123
+ else
124
+ memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
125
+ sizeof(srvr->addrV6));
126
+ }
127
+ /* Initialize servers state remaining data */
128
+ ares__init_servers_state(channel);
129
+ }
130
+
131
+ return ARES_SUCCESS;
132
+ }
133
+
134
+ /* Incomming string format: host[:port][,host[:port]]... */
135
+ int ares_set_servers_csv(ares_channel channel,
136
+ const char* _csv)
137
+ {
138
+ size_t i;
139
+ char* csv = NULL;
140
+ char* ptr;
141
+ char* start_host;
142
+ int rv = ARES_SUCCESS;
143
+ struct ares_addr_node *servers = NULL;
144
+ struct ares_addr_node *last = NULL;
145
+
146
+ if (ares_library_initialized() != ARES_SUCCESS)
147
+ return ARES_ENOTINITIALIZED;
148
+
149
+ if (!channel)
150
+ return ARES_ENODATA;
151
+
152
+ ares__destroy_servers_state(channel);
153
+
154
+ i = strlen(_csv);
155
+ if (i == 0)
156
+ return ARES_SUCCESS; /* blank all servers */
157
+
158
+ csv = malloc(i + 2);
159
+ strcpy(csv, _csv);
160
+ if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */
161
+ csv[i] = ',';
162
+ csv[i+1] = 0;
163
+ }
164
+
165
+ start_host = csv;
166
+ for (ptr = csv; *ptr; ptr++) {
167
+ if (*ptr == ',') {
168
+ char* pp = ptr - 1;
169
+ struct in_addr in4;
170
+ struct ares_in6_addr in6;
171
+ struct ares_addr_node *s = NULL;
172
+
173
+ *ptr = 0; /* null terminate host:port string */
174
+ /* Got an entry..see if port was specified. */
175
+ while (pp > start_host) {
176
+ if (*pp == ':')
177
+ break; /* yes */
178
+ if (!ISDIGIT(*pp)) {
179
+ /* Found end of digits before we found :, so wasn't a port */
180
+ pp = ptr;
181
+ break;
182
+ }
183
+ pp--;
184
+ }
185
+ if ((pp != start_host) && ((pp + 1) < ptr)) {
186
+ /* Found it. Parse over the port number */
187
+ (void)strtol(pp + 1, NULL, 10);
188
+ *pp = 0; /* null terminate host */
189
+ }
190
+ /* resolve host, try ipv4 first, rslt is in network byte order */
191
+ rv = ares_inet_pton(AF_INET, start_host, &in4);
192
+ if (!rv) {
193
+ /* Ok, try IPv6 then */
194
+ rv = ares_inet_pton(AF_INET6, start_host, &in6);
195
+ if (!rv) {
196
+ rv = ARES_EBADSTR;
197
+ goto out;
198
+ }
199
+ /* was ipv6, add new server */
200
+ s = malloc(sizeof(*s));
201
+ if (!s) {
202
+ rv = ARES_ENOMEM;
203
+ goto out;
204
+ }
205
+ s->family = AF_INET6;
206
+ memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr));
207
+ }
208
+ else {
209
+ /* was ipv4, add new server */
210
+ s = malloc(sizeof(*s));
211
+ if (!s) {
212
+ rv = ARES_ENOMEM;
213
+ goto out;
214
+ }
215
+ s->family = AF_INET;
216
+ memcpy(&s->addr, &in4, sizeof(struct in_addr));
217
+ }
218
+ if (s) {
219
+ /* TODO: Add port to ares_addr_node and assign it here. */
220
+
221
+ s->next = NULL;
222
+ if (last) {
223
+ last->next = s;
224
+ }
225
+ else {
226
+ servers = s;
227
+ last = s;
228
+ }
229
+ }
230
+
231
+ /* Set up for next one */
232
+ start_host = ptr + 1;
233
+ }
234
+ }
235
+
236
+ rv = ares_set_servers(channel, servers);
237
+
238
+ out:
239
+ if (csv)
240
+ free(csv);
241
+ while (servers) {
242
+ struct ares_addr_node *s = servers;
243
+ servers = servers->next;
244
+ free(s);
245
+ }
246
+
247
+ return rv;
248
+ }