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,427 @@
1
+
2
+ /* Copyright 2005 by Dominick Meglio
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
+ #include "ares_setup.h"
17
+
18
+ #ifdef HAVE_GETSERVBYPORT_R
19
+ # if !defined(GETSERVBYPORT_R_ARGS) || \
20
+ (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
21
+ # error "you MUST specifiy a valid number of arguments for getservbyport_r"
22
+ # endif
23
+ #endif
24
+
25
+ #ifdef HAVE_SYS_SOCKET_H
26
+ # include <sys/socket.h>
27
+ #endif
28
+ #ifdef HAVE_NETINET_IN_H
29
+ # include <netinet/in.h>
30
+ #endif
31
+ #ifdef HAVE_NETDB_H
32
+ # include <netdb.h>
33
+ #endif
34
+ #ifdef HAVE_ARPA_INET_H
35
+ # include <arpa/inet.h>
36
+ #endif
37
+ #ifdef HAVE_ARPA_NAMESER_H
38
+ # include <arpa/nameser.h>
39
+ #else
40
+ # include "nameser.h"
41
+ #endif
42
+ #ifdef HAVE_ARPA_NAMESER_COMPAT_H
43
+ # include <arpa/nameser_compat.h>
44
+ #endif
45
+
46
+ #ifdef HAVE_NET_IF_H
47
+ #include <net/if.h>
48
+ #endif
49
+
50
+ #ifdef HAVE_UNISTD_H
51
+ #include <unistd.h>
52
+ #endif
53
+
54
+ #include <stdio.h>
55
+ #include <stdlib.h>
56
+ #include <string.h>
57
+
58
+ #include "ares.h"
59
+ #include "ares_ipv6.h"
60
+ #include "inet_ntop.h"
61
+ #include "ares_nowarn.h"
62
+ #include "ares_private.h"
63
+
64
+ struct nameinfo_query {
65
+ ares_nameinfo_callback callback;
66
+ void *arg;
67
+ union {
68
+ struct sockaddr_in addr4;
69
+ struct sockaddr_in6 addr6;
70
+ } addr;
71
+ int family;
72
+ int flags;
73
+ int timeouts;
74
+ };
75
+
76
+ #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
77
+ #define IPBUFSIZ \
78
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
79
+ #else
80
+ #define IPBUFSIZ \
81
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
82
+ #endif
83
+
84
+ static void nameinfo_callback(void *arg, int status, int timeouts,
85
+ struct hostent *host);
86
+ static char *lookup_service(unsigned short port, int flags,
87
+ char *buf, size_t buflen);
88
+ #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
89
+ static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
90
+ char *buf, size_t buflen);
91
+ #endif
92
+ static char *ares_striendstr(const char *s1, const char *s2);
93
+
94
+ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
95
+ ares_socklen_t salen,
96
+ int flags, ares_nameinfo_callback callback, void *arg)
97
+ {
98
+ struct sockaddr_in *addr = NULL;
99
+ struct sockaddr_in6 *addr6 = NULL;
100
+ struct nameinfo_query *niquery;
101
+ unsigned int port = 0;
102
+
103
+ /* Validate socket address family and length */
104
+ if ((sa->sa_family == AF_INET) &&
105
+ (salen == sizeof(struct sockaddr_in)))
106
+ {
107
+ addr = (struct sockaddr_in *)sa;
108
+ port = addr->sin_port;
109
+ }
110
+ else if ((sa->sa_family == AF_INET6) &&
111
+ (salen == sizeof(struct sockaddr_in6)))
112
+ {
113
+ addr6 = (struct sockaddr_in6 *)sa;
114
+ port = addr6->sin6_port;
115
+ }
116
+ else
117
+ {
118
+ callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
119
+ return;
120
+ }
121
+
122
+ /* If neither, assume they want a host */
123
+ if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
124
+ flags |= ARES_NI_LOOKUPHOST;
125
+
126
+ /* All they want is a service, no need for DNS */
127
+ if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
128
+ {
129
+ char buf[33], *service;
130
+
131
+ service = lookup_service((unsigned short)(port & 0xffff),
132
+ flags, buf, sizeof(buf));
133
+ callback(arg, ARES_SUCCESS, 0, NULL, service);
134
+ return;
135
+ }
136
+
137
+ /* They want a host lookup */
138
+ if ((flags & ARES_NI_LOOKUPHOST))
139
+ {
140
+ /* A numeric host can be handled without DNS */
141
+ if ((flags & ARES_NI_NUMERICHOST))
142
+ {
143
+ char ipbuf[IPBUFSIZ];
144
+ char srvbuf[33];
145
+ char *service = NULL;
146
+ ipbuf[0] = 0;
147
+
148
+ /* Specifying not to lookup a host, but then saying a host
149
+ * is required has to be illegal.
150
+ */
151
+ if (flags & ARES_NI_NAMEREQD)
152
+ {
153
+ callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
154
+ return;
155
+ }
156
+ if (salen == sizeof(struct sockaddr_in6))
157
+ {
158
+ ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
159
+ /* If the system supports scope IDs, use it */
160
+ #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
161
+ append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
162
+ #endif
163
+ }
164
+ else
165
+ {
166
+ ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
167
+ }
168
+ /* They also want a service */
169
+ if (flags & ARES_NI_LOOKUPSERVICE)
170
+ service = lookup_service((unsigned short)(port & 0xffff),
171
+ flags, srvbuf, sizeof(srvbuf));
172
+ callback(arg, ARES_SUCCESS, 0, ipbuf, service);
173
+ return;
174
+ }
175
+ /* This is where a DNS lookup becomes necessary */
176
+ else
177
+ {
178
+ niquery = malloc(sizeof(struct nameinfo_query));
179
+ if (!niquery)
180
+ {
181
+ callback(arg, ARES_ENOMEM, 0, NULL, NULL);
182
+ return;
183
+ }
184
+ niquery->callback = callback;
185
+ niquery->arg = arg;
186
+ niquery->flags = flags;
187
+ niquery->timeouts = 0;
188
+ if (sa->sa_family == AF_INET)
189
+ {
190
+ niquery->family = AF_INET;
191
+ memcpy(&niquery->addr.addr4, addr, sizeof(struct in_addr));
192
+ ares_gethostbyaddr(channel, &addr->sin_addr,
193
+ sizeof(struct in_addr), AF_INET,
194
+ nameinfo_callback, niquery);
195
+ }
196
+ else
197
+ {
198
+ niquery->family = AF_INET6;
199
+ memcpy(&niquery->addr.addr6, addr6, sizeof(struct ares_in6_addr));
200
+ ares_gethostbyaddr(channel, &addr6->sin6_addr,
201
+ sizeof(struct ares_in6_addr), AF_INET6,
202
+ nameinfo_callback, niquery);
203
+ }
204
+ }
205
+ }
206
+ }
207
+
208
+ static void nameinfo_callback(void *arg, int status, int timeouts,
209
+ struct hostent *host)
210
+ {
211
+ struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
212
+ char srvbuf[33];
213
+ char *service = NULL;
214
+
215
+ niquery->timeouts += timeouts;
216
+ if (status == ARES_SUCCESS)
217
+ {
218
+ /* They want a service too */
219
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE)
220
+ {
221
+ if (niquery->family == AF_INET)
222
+ service = lookup_service(niquery->addr.addr4.sin_port,
223
+ niquery->flags, srvbuf, sizeof(srvbuf));
224
+ else
225
+ service = lookup_service(niquery->addr.addr6.sin6_port,
226
+ niquery->flags, srvbuf, sizeof(srvbuf));
227
+ }
228
+ /* NOFQDN means we have to strip off the domain name portion. We do
229
+ this by determining our own domain name, then searching the string
230
+ for this domain name and removing it.
231
+ */
232
+ #ifdef HAVE_GETHOSTNAME
233
+ if (niquery->flags & ARES_NI_NOFQDN)
234
+ {
235
+ char buf[255];
236
+ char *domain;
237
+ gethostname(buf, 255);
238
+ if ((domain = strchr(buf, '.')) != NULL)
239
+ {
240
+ char *end = ares_striendstr(host->h_name, domain);
241
+ if (end)
242
+ *end = 0;
243
+ }
244
+ }
245
+ #endif
246
+ niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts,
247
+ (char *)(host->h_name),
248
+ service);
249
+ free(niquery);
250
+ return;
251
+ }
252
+ /* We couldn't find the host, but it's OK, we can use the IP */
253
+ else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
254
+ {
255
+ char ipbuf[IPBUFSIZ];
256
+ if (niquery->family == AF_INET)
257
+ ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf,
258
+ IPBUFSIZ);
259
+ else
260
+ {
261
+ ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf,
262
+ IPBUFSIZ);
263
+ #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
264
+ append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
265
+ sizeof(ipbuf));
266
+ #endif
267
+ }
268
+ /* They want a service too */
269
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE)
270
+ {
271
+ if (niquery->family == AF_INET)
272
+ service = lookup_service(niquery->addr.addr4.sin_port,
273
+ niquery->flags, srvbuf, sizeof(srvbuf));
274
+ else
275
+ service = lookup_service(niquery->addr.addr6.sin6_port,
276
+ niquery->flags, srvbuf, sizeof(srvbuf));
277
+ }
278
+ niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf,
279
+ service);
280
+ free(niquery);
281
+ return;
282
+ }
283
+ niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL);
284
+ free(niquery);
285
+ }
286
+
287
+ static char *lookup_service(unsigned short port, int flags,
288
+ char *buf, size_t buflen)
289
+ {
290
+ const char *proto;
291
+ struct servent *sep;
292
+ #ifdef HAVE_GETSERVBYPORT_R
293
+ struct servent se;
294
+ #endif
295
+ char tmpbuf[4096];
296
+
297
+ if (port)
298
+ {
299
+ if (flags & ARES_NI_NUMERICSERV)
300
+ sep = NULL;
301
+ else
302
+ {
303
+ if (flags & ARES_NI_UDP)
304
+ proto = "udp";
305
+ else if (flags & ARES_NI_SCTP)
306
+ proto = "sctp";
307
+ else if (flags & ARES_NI_DCCP)
308
+ proto = "dccp";
309
+ else
310
+ proto = "tcp";
311
+ #ifdef HAVE_GETSERVBYPORT_R
312
+ sep = &se;
313
+ memset(tmpbuf, 0, sizeof(tmpbuf));
314
+ #if GETSERVBYPORT_R_ARGS == 6
315
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf,
316
+ sizeof(tmpbuf), &sep) != 0)
317
+ sep = NULL;
318
+ #elif GETSERVBYPORT_R_ARGS == 5
319
+ sep = getservbyport_r(port, proto, &se, (void *)tmpbuf,
320
+ sizeof(tmpbuf));
321
+ #elif GETSERVBYPORT_R_ARGS == 4
322
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
323
+ sep = NULL;
324
+ #else
325
+ /* Lets just hope the OS uses TLS! */
326
+ sep = getservbyport(port, proto);
327
+ #endif
328
+ #else
329
+ /* Lets just hope the OS uses TLS! */
330
+ #if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
331
+ sep = getservbyport(port, (char*)proto);
332
+ #else
333
+ sep = getservbyport(port, proto);
334
+ #endif
335
+ #endif
336
+ }
337
+ if (sep && sep->s_name)
338
+ /* get service name */
339
+ strcpy(tmpbuf, sep->s_name);
340
+ else
341
+ /* get port as a string */
342
+ sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
343
+ if (strlen(tmpbuf) < buflen)
344
+ /* return it if buffer big enough */
345
+ strcpy(buf, tmpbuf);
346
+ else
347
+ /* avoid reusing previous one */
348
+ buf[0] = '\0';
349
+ return buf;
350
+ }
351
+ buf[0] = '\0';
352
+ return NULL;
353
+ }
354
+
355
+ #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
356
+ static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
357
+ char *buf, size_t buflen)
358
+ {
359
+ #ifdef HAVE_IF_INDEXTONAME
360
+ int is_ll, is_mcll;
361
+ #endif
362
+ static const char fmt_u[] = "%u";
363
+ static const char fmt_lu[] = "%lu";
364
+ char tmpbuf[IF_NAMESIZE + 2];
365
+ size_t bufl;
366
+ const char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))?
367
+ fmt_lu:fmt_u;
368
+
369
+ tmpbuf[0] = '%';
370
+
371
+ #ifdef HAVE_IF_INDEXTONAME
372
+ is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
373
+ is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
374
+ if ((flags & ARES_NI_NUMERICSCOPE) ||
375
+ (!is_ll && !is_mcll))
376
+ {
377
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
378
+ }
379
+ else
380
+ {
381
+ if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
382
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
383
+ }
384
+ #else
385
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id);
386
+ (void) flags;
387
+ #endif
388
+ tmpbuf[IF_NAMESIZE + 1] = '\0';
389
+ bufl = strlen(buf);
390
+
391
+ if(bufl + strlen(tmpbuf) < buflen)
392
+ /* only append the scopeid string if it fits in the target buffer */
393
+ strcpy(&buf[bufl], tmpbuf);
394
+ }
395
+ #endif
396
+
397
+ /* Determines if s1 ends with the string in s2 (case-insensitive) */
398
+ static char *ares_striendstr(const char *s1, const char *s2)
399
+ {
400
+ const char *c1, *c2, *c1_begin;
401
+ int lo1, lo2;
402
+ size_t s1_len = strlen(s1), s2_len = strlen(s2);
403
+
404
+ /* If the substr is longer than the full str, it can't match */
405
+ if (s2_len > s1_len)
406
+ return NULL;
407
+
408
+ /* Jump to the end of s1 minus the length of s2 */
409
+ c1_begin = s1+s1_len-s2_len;
410
+ c1 = (const char *)c1_begin;
411
+ c2 = s2;
412
+ while (c2 < s2+s2_len)
413
+ {
414
+ lo1 = TOLOWER(*c1);
415
+ lo2 = TOLOWER(*c2);
416
+ if (lo1 != lo2)
417
+ return NULL;
418
+ else
419
+ {
420
+ c1++;
421
+ c2++;
422
+ }
423
+ }
424
+ if (c2 == c1 && c2 == NULL)
425
+ return (char *)c1_begin;
426
+ return NULL;
427
+ }
@@ -0,0 +1,122 @@
1
+ /*
2
+ * Original file name getopt.c Initial import into the c-ares source tree
3
+ * on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with
4
+ * the modified BSD license, BSD license without the advertising clause.
5
+ *
6
+ */
7
+
8
+ /*
9
+ * getopt.c --
10
+ *
11
+ * Standard UNIX getopt function. Code is from BSD.
12
+ *
13
+ * Copyright (c) 1987-2001 The Regents of the University of California.
14
+ * All rights reserved.
15
+ *
16
+ * Redistribution and use in source and binary forms, with or without
17
+ * modification, are permitted provided that the following conditions are met:
18
+ *
19
+ * A. Redistributions of source code must retain the above copyright notice,
20
+ * this list of conditions and the following disclaimer.
21
+ * B. Redistributions in binary form must reproduce the above copyright notice,
22
+ * this list of conditions and the following disclaimer in the documentation
23
+ * and/or other materials provided with the distribution.
24
+ * C. Neither the names of the copyright holders nor the names of its
25
+ * contributors may be used to endorse or promote products derived from this
26
+ * software without specific prior written permission.
27
+ *
28
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
29
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
32
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
33
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
34
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
36
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
37
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38
+ * POSSIBILITY OF SUCH DAMAGE.
39
+ */
40
+
41
+ /* #if !defined(lint)
42
+ * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
43
+ * #endif
44
+ */
45
+
46
+ #include <stdio.h>
47
+ #include <stdlib.h>
48
+ #include <string.h>
49
+ #include "ares_getopt.h"
50
+
51
+ int opterr = 1, /* if error message should be printed */
52
+ optind = 1; /* index into parent argv vector */
53
+ int optopt = 0; /* character checked for validity */
54
+ static int optreset; /* reset getopt */
55
+ char *optarg; /* argument associated with option */
56
+
57
+ #define BADCH (int)'?'
58
+ #define BADARG (int)':'
59
+ #define EMSG (char *)""
60
+
61
+ /*
62
+ * ares_getopt --
63
+ * Parse argc/argv argument vector.
64
+ */
65
+ int
66
+ ares_getopt(int nargc, char * const nargv[], const char *ostr)
67
+ {
68
+ static char *place = EMSG; /* option letter processing */
69
+ char *oli; /* option letter list index */
70
+
71
+ if (optreset || !*place) { /* update scanning pointer */
72
+ optreset = 0;
73
+ if (optind >= nargc || *(place = nargv[optind]) != '-') {
74
+ place = EMSG;
75
+ return (EOF);
76
+ }
77
+ if (place[1] && *++place == '-') { /* found "--" */
78
+ ++optind;
79
+ place = EMSG;
80
+ return (EOF);
81
+ }
82
+ } /* option letter okay? */
83
+ if ((optopt = (int)*place++) == (int)':' ||
84
+ (oli = strchr(ostr, optopt)) == NULL) {
85
+ /*
86
+ * if the user didn't specify '-' as an option,
87
+ * assume it means EOF.
88
+ */
89
+ if (optopt == (int)'-')
90
+ return (EOF);
91
+ if (!*place)
92
+ ++optind;
93
+ if (opterr && *ostr != ':')
94
+ (void)fprintf(stderr,
95
+ "%s: illegal option -- %c\n", __FILE__, optopt);
96
+ return (BADCH);
97
+ }
98
+ if (*++oli != ':') { /* don't need argument */
99
+ optarg = NULL;
100
+ if (!*place)
101
+ ++optind;
102
+ }
103
+ else { /* need an argument */
104
+ if (*place) /* no white space */
105
+ optarg = place;
106
+ else if (nargc <= ++optind) { /* no arg */
107
+ place = EMSG;
108
+ if (*ostr == ':')
109
+ return (BADARG);
110
+ if (opterr)
111
+ (void)fprintf(stderr,
112
+ "%s: option requires an argument -- %c\n",
113
+ __FILE__, optopt);
114
+ return (BADCH);
115
+ }
116
+ else /* white space */
117
+ optarg = nargv[optind];
118
+ place = EMSG;
119
+ ++optind;
120
+ }
121
+ return (optopt); /* dump back option letter */
122
+ }
@@ -0,0 +1,53 @@
1
+ #ifndef ARES_GETOPT_H
2
+ #define ARES_GETOPT_H
3
+
4
+ /*
5
+ * Copyright (c) 1987-2001 The Regents of the University of California.
6
+ * All rights reserved.
7
+ *
8
+ * Redistribution and use in source and binary forms, with or without
9
+ * modification, are permitted provided that the following conditions are met:
10
+ *
11
+ * A. Redistributions of source code must retain the above copyright notice,
12
+ * this list of conditions and the following disclaimer.
13
+ * B. Redistributions in binary form must reproduce the above copyright notice,
14
+ * this list of conditions and the following disclaimer in the documentation
15
+ * and/or other materials provided with the distribution.
16
+ * C. Neither the names of the copyright holders nor the names of its
17
+ * contributors may be used to endorse or promote products derived from this
18
+ * software without specific prior written permission.
19
+ *
20
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
21
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
24
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
+ * POSSIBILITY OF SUCH DAMAGE.
31
+ */
32
+
33
+
34
+ int ares_getopt(int nargc, char * const nargv[], const char *ostr);
35
+
36
+ #undef optarg
37
+ #undef optind
38
+ #undef opterr
39
+ #undef optopt
40
+ #undef optreset
41
+
42
+ #define optarg ares_optarg
43
+ #define optind ares_optind
44
+ #define opterr ares_opterr
45
+ #define optopt ares_optopt
46
+ #define optreset ares_optreset
47
+
48
+ extern char *optarg;
49
+ extern int optind;
50
+ extern int opterr;
51
+ extern int optopt;
52
+
53
+ #endif /* ARES_GETOPT_H */
@@ -0,0 +1,72 @@
1
+
2
+ /* Copyright (C) 2005 - 2010, Daniel Stenberg
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
+
17
+ #ifdef HAVE_SYS_TIME_H
18
+ #include <sys/time.h>
19
+ #endif
20
+
21
+ #include "ares.h"
22
+ #include "ares_private.h"
23
+
24
+ int ares_getsock(ares_channel channel,
25
+ ares_socket_t *socks,
26
+ int numsocks) /* size of the 'socks' array */
27
+ {
28
+ struct server_state *server;
29
+ int i;
30
+ int sockindex=0;
31
+ int bitmap = 0;
32
+ unsigned int setbits = 0xffffffff;
33
+
34
+ /* Are there any active queries? */
35
+ int active_queries = !ares__is_list_empty(&(channel->all_queries));
36
+
37
+ for (i = 0;
38
+ (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM);
39
+ i++)
40
+ {
41
+ server = &channel->servers[i];
42
+ /* We only need to register interest in UDP sockets if we have
43
+ * outstanding queries.
44
+ */
45
+ if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
46
+ {
47
+ if(sockindex >= numsocks)
48
+ break;
49
+ socks[sockindex] = server->udp_socket;
50
+ bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
51
+ sockindex++;
52
+ }
53
+ /* We always register for TCP events, because we want to know
54
+ * when the other side closes the connection, so we don't waste
55
+ * time trying to use a broken connection.
56
+ */
57
+ if (server->tcp_socket != ARES_SOCKET_BAD)
58
+ {
59
+ if(sockindex >= numsocks)
60
+ break;
61
+ socks[sockindex] = server->tcp_socket;
62
+ bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
63
+
64
+ if (server->qhead && active_queries)
65
+ /* then the tcp socket is also writable! */
66
+ bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
67
+
68
+ sockindex++;
69
+ }
70
+ }
71
+ return bitmap;
72
+ }