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.
- data/README.markdown +0 -0
- data/asyncengine.gemspec +26 -0
- data/ext/asyncengine_ext/asyncengine_ruby.c +82 -0
- data/ext/asyncengine_ext/extconf.rb +47 -0
- data/ext/asyncengine_ext/libuv/AUTHORS +45 -0
- data/ext/asyncengine_ext/libuv/LICENSE +42 -0
- data/ext/asyncengine_ext/libuv/Makefile +119 -0
- data/ext/asyncengine_ext/libuv/README.md +88 -0
- data/ext/asyncengine_ext/libuv/build/gcc_version.py +20 -0
- data/ext/asyncengine_ext/libuv/common.gypi +176 -0
- data/ext/asyncengine_ext/libuv/config-mingw.mk +61 -0
- data/ext/asyncengine_ext/libuv/config-unix.mk +173 -0
- data/ext/asyncengine_ext/libuv/gyp_uv +60 -0
- data/ext/asyncengine_ext/libuv/include/ares.h +591 -0
- data/ext/asyncengine_ext/libuv/include/ares_version.h +24 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/eio.h +403 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/ev.h +838 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/ngx-queue.h +106 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/tree.h +768 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/uv-unix.h +256 -0
- data/ext/asyncengine_ext/libuv/include/uv-private/uv-win.h +458 -0
- data/ext/asyncengine_ext/libuv/include/uv.h +1556 -0
- data/ext/asyncengine_ext/libuv/src/ares/AUTHORS +37 -0
- data/ext/asyncengine_ext/libuv/src/ares/CHANGES +1218 -0
- data/ext/asyncengine_ext/libuv/src/ares/CMakeLists.txt +22 -0
- data/ext/asyncengine_ext/libuv/src/ares/NEWS +21 -0
- data/ext/asyncengine_ext/libuv/src/ares/README +60 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.cares +13 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.msvc +142 -0
- data/ext/asyncengine_ext/libuv/src/ares/README.node +21 -0
- data/ext/asyncengine_ext/libuv/src/ares/RELEASE-NOTES +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/TODO +23 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__close_sockets.c +66 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__get_hostent.c +263 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__read_line.c +71 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares__timeval.c +111 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_cancel.c +63 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_data.c +190 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_data.h +65 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_destroy.c +105 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_dns.h +90 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_expand_name.c +200 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_expand_string.c +75 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_fds.c +63 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_free_hostent.c +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_free_string.c +25 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.c +30 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getenv.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyaddr.c +301 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_gethostbyname.c +523 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getnameinfo.c +427 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.c +122 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getopt.h +53 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_getsock.c +72 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_init.c +1809 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_iphlpapi.h +221 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_ipv6.h +78 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.c +142 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_library_init.h +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_llist.c +86 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_llist.h +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_mkquery.c +195 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.c +181 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_nowarn.h +55 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_options.c +248 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_a_reply.c +263 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_aaaa_reply.c +259 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_mx_reply.c +170 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ns_reply.c +182 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_ptr_reply.c +217 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_srv_reply.c +179 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_parse_txt_reply.c +201 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_platform.c +11035 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_platform.h +43 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_private.h +355 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_process.c +1295 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_query.c +183 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_rules.h +144 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_search.c +321 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_send.c +134 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_setup.h +199 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.c +66 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strcasecmp.h +30 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.c +42 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strdup.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_strerror.c +56 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_timeout.c +80 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_version.c +11 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_writev.c +79 -0
- data/ext/asyncengine_ext/libuv/src/ares/ares_writev.h +36 -0
- data/ext/asyncengine_ext/libuv/src/ares/bitncmp.c +59 -0
- data/ext/asyncengine_ext/libuv/src/ares/bitncmp.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_cygwin/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_darwin/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_freebsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_linux/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_netbsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_openbsd/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_sunos/ares_config.h +512 -0
- data/ext/asyncengine_ext/libuv/src/ares/config_win32/ares_config.h +369 -0
- data/ext/asyncengine_ext/libuv/src/ares/get_ver.awk +35 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.c +451 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_net_pton.h +31 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.c +208 -0
- data/ext/asyncengine_ext/libuv/src/ares/inet_ntop.h +26 -0
- data/ext/asyncengine_ext/libuv/src/ares/nameser.h +203 -0
- data/ext/asyncengine_ext/libuv/src/ares/setup_once.h +504 -0
- data/ext/asyncengine_ext/libuv/src/ares/windows_port.c +22 -0
- data/ext/asyncengine_ext/libuv/src/unix/async.c +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/cares.c +194 -0
- data/ext/asyncengine_ext/libuv/src/unix/check.c +80 -0
- data/ext/asyncengine_ext/libuv/src/unix/core.c +588 -0
- data/ext/asyncengine_ext/libuv/src/unix/cygwin.c +84 -0
- data/ext/asyncengine_ext/libuv/src/unix/darwin.c +341 -0
- data/ext/asyncengine_ext/libuv/src/unix/dl.c +91 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/Changes +63 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/LICENSE +36 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/Makefile.am +15 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/aclocal.m4 +8957 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/autogen.sh +3 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config.h.in +86 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_cygwin.h +80 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_darwin.h +141 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_freebsd.h +81 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_linux.h +94 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_netbsd.h +81 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_openbsd.h +137 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/config_sunos.h +84 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/configure.ac +22 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/demo.c +194 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/ecb.h +370 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.3 +3428 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.c +2593 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/eio.pod +969 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/libeio.m4 +195 -0
- data/ext/asyncengine_ext/libuv/src/unix/eio/xthread.h +164 -0
- data/ext/asyncengine_ext/libuv/src/unix/error.c +98 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Changes +388 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/LICENSE +36 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.am +18 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/Makefile.in +771 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/README +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/aclocal.m4 +8957 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/autogen.sh +6 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.guess +1526 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.h.in +125 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config.sub +1658 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_cygwin.h +123 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_darwin.h +122 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_freebsd.h +120 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_linux.h +141 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_netbsd.h +120 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_openbsd.h +126 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/config_sunos.h +122 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/configure +13037 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/configure.ac +18 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/depcomp +630 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev++.h +816 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.3 +5311 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.c +3921 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev.pod +5243 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_epoll.c +266 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_kqueue.c +235 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_poll.c +148 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_port.c +179 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_select.c +310 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_vars.h +203 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_win32.c +153 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ev_wrap.h +196 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/event.c +402 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/event.h +170 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/install-sh +294 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/libev.m4 +39 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/ltmain.sh +8413 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/missing +336 -0
- data/ext/asyncengine_ext/libuv/src/unix/ev/mkinstalldirs +111 -0
- data/ext/asyncengine_ext/libuv/src/unix/freebsd.c +312 -0
- data/ext/asyncengine_ext/libuv/src/unix/fs.c +707 -0
- data/ext/asyncengine_ext/libuv/src/unix/idle.c +79 -0
- data/ext/asyncengine_ext/libuv/src/unix/internal.h +161 -0
- data/ext/asyncengine_ext/libuv/src/unix/kqueue.c +127 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/core.c +474 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/inotify.c +211 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.c +230 -0
- data/ext/asyncengine_ext/libuv/src/unix/linux/syscalls.h +87 -0
- data/ext/asyncengine_ext/libuv/src/unix/loop.c +58 -0
- data/ext/asyncengine_ext/libuv/src/unix/netbsd.c +108 -0
- data/ext/asyncengine_ext/libuv/src/unix/openbsd.c +295 -0
- data/ext/asyncengine_ext/libuv/src/unix/pipe.c +266 -0
- data/ext/asyncengine_ext/libuv/src/unix/prepare.c +79 -0
- data/ext/asyncengine_ext/libuv/src/unix/process.c +369 -0
- data/ext/asyncengine_ext/libuv/src/unix/stream.c +1033 -0
- data/ext/asyncengine_ext/libuv/src/unix/sunos.c +466 -0
- data/ext/asyncengine_ext/libuv/src/unix/tcp.c +327 -0
- data/ext/asyncengine_ext/libuv/src/unix/thread.c +154 -0
- data/ext/asyncengine_ext/libuv/src/unix/timer.c +127 -0
- data/ext/asyncengine_ext/libuv/src/unix/tty.c +146 -0
- data/ext/asyncengine_ext/libuv/src/unix/udp.c +670 -0
- data/ext/asyncengine_ext/libuv/src/unix/uv-eio.c +124 -0
- data/ext/asyncengine_ext/libuv/src/unix/uv-eio.h +13 -0
- data/ext/asyncengine_ext/libuv/src/uv-common.c +354 -0
- data/ext/asyncengine_ext/libuv/src/uv-common.h +87 -0
- data/ext/asyncengine_ext/libuv/src/win/async.c +127 -0
- data/ext/asyncengine_ext/libuv/src/win/cares.c +290 -0
- data/ext/asyncengine_ext/libuv/src/win/core.c +270 -0
- data/ext/asyncengine_ext/libuv/src/win/dl.c +82 -0
- data/ext/asyncengine_ext/libuv/src/win/error.c +132 -0
- data/ext/asyncengine_ext/libuv/src/win/fs-event.c +514 -0
- data/ext/asyncengine_ext/libuv/src/win/fs.c +1576 -0
- data/ext/asyncengine_ext/libuv/src/win/getaddrinfo.c +372 -0
- data/ext/asyncengine_ext/libuv/src/win/handle.c +225 -0
- data/ext/asyncengine_ext/libuv/src/win/internal.h +352 -0
- data/ext/asyncengine_ext/libuv/src/win/loop-watcher.c +131 -0
- data/ext/asyncengine_ext/libuv/src/win/pipe.c +1661 -0
- data/ext/asyncengine_ext/libuv/src/win/process.c +1140 -0
- data/ext/asyncengine_ext/libuv/src/win/req.c +174 -0
- data/ext/asyncengine_ext/libuv/src/win/stream.c +201 -0
- data/ext/asyncengine_ext/libuv/src/win/tcp.c +1282 -0
- data/ext/asyncengine_ext/libuv/src/win/thread.c +332 -0
- data/ext/asyncengine_ext/libuv/src/win/threadpool.c +73 -0
- data/ext/asyncengine_ext/libuv/src/win/timer.c +276 -0
- data/ext/asyncengine_ext/libuv/src/win/tty.c +1795 -0
- data/ext/asyncengine_ext/libuv/src/win/udp.c +709 -0
- data/ext/asyncengine_ext/libuv/src/win/util.c +719 -0
- data/ext/asyncengine_ext/libuv/src/win/winapi.c +117 -0
- data/ext/asyncengine_ext/libuv/src/win/winapi.h +4419 -0
- data/ext/asyncengine_ext/libuv/src/win/winsock.c +470 -0
- data/ext/asyncengine_ext/libuv/src/win/winsock.h +138 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-ares.c +118 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-getaddrinfo.c +94 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-list.h +105 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-ping-pongs.c +213 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-pound.c +324 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-pump.c +462 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-sizes.c +40 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-spawn.c +156 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-tcp-write-batch.c +140 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-thread.c +64 -0
- data/ext/asyncengine_ext/libuv/test/benchmark-udp-packet-storm.c +247 -0
- data/ext/asyncengine_ext/libuv/test/blackhole-server.c +118 -0
- data/ext/asyncengine_ext/libuv/test/dns-server.c +321 -0
- data/ext/asyncengine_ext/libuv/test/echo-server.c +370 -0
- data/ext/asyncengine_ext/libuv/test/fixtures/empty_file +0 -0
- data/ext/asyncengine_ext/libuv/test/fixtures/load_error.node +1 -0
- data/ext/asyncengine_ext/libuv/test/run-benchmarks.c +64 -0
- data/ext/asyncengine_ext/libuv/test/run-tests.c +108 -0
- data/ext/asyncengine_ext/libuv/test/runner-unix.c +315 -0
- data/ext/asyncengine_ext/libuv/test/runner-unix.h +36 -0
- data/ext/asyncengine_ext/libuv/test/runner-win.c +343 -0
- data/ext/asyncengine_ext/libuv/test/runner-win.h +42 -0
- data/ext/asyncengine_ext/libuv/test/runner.c +317 -0
- data/ext/asyncengine_ext/libuv/test/runner.h +159 -0
- data/ext/asyncengine_ext/libuv/test/task.h +117 -0
- data/ext/asyncengine_ext/libuv/test/test-async.c +216 -0
- data/ext/asyncengine_ext/libuv/test/test-callback-stack.c +203 -0
- data/ext/asyncengine_ext/libuv/test/test-connection-fail.c +148 -0
- data/ext/asyncengine_ext/libuv/test/test-counters-init.c +216 -0
- data/ext/asyncengine_ext/libuv/test/test-cwd-and-chdir.c +64 -0
- data/ext/asyncengine_ext/libuv/test/test-delayed-accept.c +197 -0
- data/ext/asyncengine_ext/libuv/test/test-dlerror.c +49 -0
- data/ext/asyncengine_ext/libuv/test/test-eio-overflow.c +90 -0
- data/ext/asyncengine_ext/libuv/test/test-error.c +59 -0
- data/ext/asyncengine_ext/libuv/test/test-fail-always.c +29 -0
- data/ext/asyncengine_ext/libuv/test/test-fs-event.c +442 -0
- data/ext/asyncengine_ext/libuv/test/test-fs.c +1731 -0
- data/ext/asyncengine_ext/libuv/test/test-get-currentexe.c +63 -0
- data/ext/asyncengine_ext/libuv/test/test-get-loadavg.c +36 -0
- data/ext/asyncengine_ext/libuv/test/test-get-memory.c +38 -0
- data/ext/asyncengine_ext/libuv/test/test-getaddrinfo.c +122 -0
- data/ext/asyncengine_ext/libuv/test/test-gethostbyname.c +189 -0
- data/ext/asyncengine_ext/libuv/test/test-getsockname.c +342 -0
- data/ext/asyncengine_ext/libuv/test/test-hrtime.c +51 -0
- data/ext/asyncengine_ext/libuv/test/test-idle.c +81 -0
- data/ext/asyncengine_ext/libuv/test/test-ipc-send-recv.c +209 -0
- data/ext/asyncengine_ext/libuv/test/test-ipc.c +614 -0
- data/ext/asyncengine_ext/libuv/test/test-list.h +371 -0
- data/ext/asyncengine_ext/libuv/test/test-loop-handles.c +359 -0
- data/ext/asyncengine_ext/libuv/test/test-multiple-listen.c +102 -0
- data/ext/asyncengine_ext/libuv/test/test-mutexes.c +63 -0
- data/ext/asyncengine_ext/libuv/test/test-pass-always.c +28 -0
- data/ext/asyncengine_ext/libuv/test/test-ping-pong.c +253 -0
- data/ext/asyncengine_ext/libuv/test/test-pipe-bind-error.c +140 -0
- data/ext/asyncengine_ext/libuv/test/test-pipe-connect-error.c +96 -0
- data/ext/asyncengine_ext/libuv/test/test-platform-output.c +87 -0
- data/ext/asyncengine_ext/libuv/test/test-process-title.c +42 -0
- data/ext/asyncengine_ext/libuv/test/test-ref.c +322 -0
- data/ext/asyncengine_ext/libuv/test/test-run-once.c +44 -0
- data/ext/asyncengine_ext/libuv/test/test-shutdown-close.c +103 -0
- data/ext/asyncengine_ext/libuv/test/test-shutdown-eof.c +183 -0
- data/ext/asyncengine_ext/libuv/test/test-spawn.c +499 -0
- data/ext/asyncengine_ext/libuv/test/test-stdio-over-pipes.c +256 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-bind-error.c +191 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-bind6-error.c +154 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-close.c +129 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-connect-error.c +70 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-connect6-error.c +68 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-flags.c +51 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-write-error.c +168 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-write-to-half-open-connection.c +135 -0
- data/ext/asyncengine_ext/libuv/test/test-tcp-writealot.c +195 -0
- data/ext/asyncengine_ext/libuv/test/test-thread.c +183 -0
- data/ext/asyncengine_ext/libuv/test/test-threadpool.c +57 -0
- data/ext/asyncengine_ext/libuv/test/test-timer-again.c +141 -0
- data/ext/asyncengine_ext/libuv/test/test-timer.c +130 -0
- data/ext/asyncengine_ext/libuv/test/test-tty.c +110 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-dgram-too-big.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-ipv6.c +156 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-multicast-join.c +139 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-multicast-ttl.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-options.c +86 -0
- data/ext/asyncengine_ext/libuv/test/test-udp-send-and-recv.c +208 -0
- data/ext/asyncengine_ext/libuv/test/test-util.c +97 -0
- data/ext/asyncengine_ext/libuv/uv.gyp +435 -0
- data/ext/asyncengine_ext/libuv/vcbuild.bat +105 -0
- data/lib/asyncengine/version.rb +3 -0
- data/lib/asyncengine.rb +41 -0
- 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
|
+
}
|