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,71 @@
|
|
1
|
+
|
2
|
+
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this
|
5
|
+
* software and its documentation for any purpose and without
|
6
|
+
* fee is hereby granted, provided that the above copyright
|
7
|
+
* notice appear in all copies and that both that copyright
|
8
|
+
* notice and this permission notice appear in supporting
|
9
|
+
* documentation, and that the name of M.I.T. not be used in
|
10
|
+
* advertising or publicity pertaining to distribution of the
|
11
|
+
* software without specific, written prior permission.
|
12
|
+
* M.I.T. makes no representations about the suitability of
|
13
|
+
* this software for any purpose. It is provided "as is"
|
14
|
+
* without express or implied warranty.
|
15
|
+
*/
|
16
|
+
|
17
|
+
#include "ares_setup.h"
|
18
|
+
#include <stdio.h>
|
19
|
+
#include <stdlib.h>
|
20
|
+
#include <string.h>
|
21
|
+
#include "ares.h"
|
22
|
+
#include "ares_nowarn.h"
|
23
|
+
#include "ares_private.h"
|
24
|
+
|
25
|
+
/* This is an internal function. Its contract is to read a line from
|
26
|
+
* a file into a dynamically allocated buffer, zeroing the trailing
|
27
|
+
* newline if there is one. The calling routine may call
|
28
|
+
* ares__read_line multiple times with the same buf and bufsize
|
29
|
+
* pointers; *buf will be reallocated and *bufsize adjusted as
|
30
|
+
* appropriate. The initial value of *buf should be NULL. After the
|
31
|
+
* calling routine is done reading lines, it should free *buf.
|
32
|
+
*/
|
33
|
+
int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
|
34
|
+
{
|
35
|
+
char *newbuf;
|
36
|
+
size_t offset = 0;
|
37
|
+
size_t len;
|
38
|
+
|
39
|
+
if (*buf == NULL)
|
40
|
+
{
|
41
|
+
*buf = malloc(128);
|
42
|
+
if (!*buf)
|
43
|
+
return ARES_ENOMEM;
|
44
|
+
*bufsize = 128;
|
45
|
+
}
|
46
|
+
|
47
|
+
for (;;)
|
48
|
+
{
|
49
|
+
int bytestoread = aresx_uztosi(*bufsize - offset);
|
50
|
+
|
51
|
+
if (!fgets(*buf + offset, bytestoread, fp))
|
52
|
+
return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
|
53
|
+
len = offset + strlen(*buf + offset);
|
54
|
+
if ((*buf)[len - 1] == '\n')
|
55
|
+
{
|
56
|
+
(*buf)[len - 1] = 0;
|
57
|
+
break;
|
58
|
+
}
|
59
|
+
offset = len;
|
60
|
+
if(len < *bufsize - 1)
|
61
|
+
continue;
|
62
|
+
|
63
|
+
/* Allocate more space. */
|
64
|
+
newbuf = realloc(*buf, *bufsize * 2);
|
65
|
+
if (!newbuf)
|
66
|
+
return ARES_ENOMEM;
|
67
|
+
*buf = newbuf;
|
68
|
+
*bufsize *= 2;
|
69
|
+
}
|
70
|
+
return ARES_SUCCESS;
|
71
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
|
2
|
+
/* Copyright (C) 2008 by Daniel Stenberg et al
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this software and its
|
5
|
+
* documentation for any purpose and without fee is hereby granted, provided
|
6
|
+
* that the above copyright notice appear in all copies and that both that
|
7
|
+
* copyright notice and this permission notice appear in supporting
|
8
|
+
* documentation, and that the name of M.I.T. not be used in advertising or
|
9
|
+
* publicity pertaining to distribution of the software without specific,
|
10
|
+
* written prior permission. M.I.T. makes no representations about the
|
11
|
+
* suitability of this software for any purpose. It is provided "as is"
|
12
|
+
* without express or implied warranty.
|
13
|
+
*/
|
14
|
+
|
15
|
+
#include "ares_setup.h"
|
16
|
+
#include "ares.h"
|
17
|
+
#include "ares_private.h"
|
18
|
+
|
19
|
+
#if defined(WIN32) && !defined(MSDOS)
|
20
|
+
|
21
|
+
struct timeval ares__tvnow(void)
|
22
|
+
{
|
23
|
+
/*
|
24
|
+
** GetTickCount() is available on _all_ Windows versions from W95 up
|
25
|
+
** to nowadays. Returns milliseconds elapsed since last system boot,
|
26
|
+
** increases monotonically and wraps once 49.7 days have elapsed.
|
27
|
+
*/
|
28
|
+
struct timeval now;
|
29
|
+
DWORD milliseconds = GetTickCount();
|
30
|
+
now.tv_sec = milliseconds / 1000;
|
31
|
+
now.tv_usec = (milliseconds % 1000) * 1000;
|
32
|
+
return now;
|
33
|
+
}
|
34
|
+
|
35
|
+
#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
|
36
|
+
|
37
|
+
struct timeval ares__tvnow(void)
|
38
|
+
{
|
39
|
+
/*
|
40
|
+
** clock_gettime() is granted to be increased monotonically when the
|
41
|
+
** monotonic clock is queried. Time starting point is unspecified, it
|
42
|
+
** could be the system start-up time, the Epoch, or something else,
|
43
|
+
** in any case the time starting point does not change once that the
|
44
|
+
** system has started up.
|
45
|
+
*/
|
46
|
+
struct timeval now;
|
47
|
+
struct timespec tsnow;
|
48
|
+
if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
|
49
|
+
now.tv_sec = tsnow.tv_sec;
|
50
|
+
now.tv_usec = tsnow.tv_nsec / 1000;
|
51
|
+
}
|
52
|
+
/*
|
53
|
+
** Even when the configure process has truly detected monotonic clock
|
54
|
+
** availability, it might happen that it is not actually available at
|
55
|
+
** run-time. When this occurs simply fallback to other time source.
|
56
|
+
*/
|
57
|
+
#ifdef HAVE_GETTIMEOFDAY
|
58
|
+
else
|
59
|
+
(void)gettimeofday(&now, NULL);
|
60
|
+
#else
|
61
|
+
else {
|
62
|
+
now.tv_sec = (long)time(NULL);
|
63
|
+
now.tv_usec = 0;
|
64
|
+
}
|
65
|
+
#endif
|
66
|
+
return now;
|
67
|
+
}
|
68
|
+
|
69
|
+
#elif defined(HAVE_GETTIMEOFDAY)
|
70
|
+
|
71
|
+
struct timeval ares__tvnow(void)
|
72
|
+
{
|
73
|
+
/*
|
74
|
+
** gettimeofday() is not granted to be increased monotonically, due to
|
75
|
+
** clock drifting and external source time synchronization it can jump
|
76
|
+
** forward or backward in time.
|
77
|
+
*/
|
78
|
+
struct timeval now;
|
79
|
+
(void)gettimeofday(&now, NULL);
|
80
|
+
return now;
|
81
|
+
}
|
82
|
+
|
83
|
+
#else
|
84
|
+
|
85
|
+
struct timeval ares__tvnow(void)
|
86
|
+
{
|
87
|
+
/*
|
88
|
+
** time() returns the value of time in seconds since the Epoch.
|
89
|
+
*/
|
90
|
+
struct timeval now;
|
91
|
+
now.tv_sec = (long)time(NULL);
|
92
|
+
now.tv_usec = 0;
|
93
|
+
return now;
|
94
|
+
}
|
95
|
+
|
96
|
+
#endif
|
97
|
+
|
98
|
+
#if 0 /* Not used */
|
99
|
+
/*
|
100
|
+
* Make sure that the first argument is the more recent time, as otherwise
|
101
|
+
* we'll get a weird negative time-diff back...
|
102
|
+
*
|
103
|
+
* Returns: the time difference in number of milliseconds.
|
104
|
+
*/
|
105
|
+
long ares__tvdiff(struct timeval newer, struct timeval older)
|
106
|
+
{
|
107
|
+
return (newer.tv_sec-older.tv_sec)*1000+
|
108
|
+
(newer.tv_usec-older.tv_usec)/1000;
|
109
|
+
}
|
110
|
+
#endif
|
111
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
|
2
|
+
/* Copyright (C) 2004 by Daniel Stenberg et al
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this software and its
|
5
|
+
* documentation for any purpose and without fee is hereby granted, provided
|
6
|
+
* that the above copyright notice appear in all copies and that both that
|
7
|
+
* copyright notice and this permission notice appear in supporting
|
8
|
+
* documentation, and that the name of M.I.T. not be used in advertising or
|
9
|
+
* publicity pertaining to distribution of the software without specific,
|
10
|
+
* written prior permission. M.I.T. makes no representations about the
|
11
|
+
* suitability of this software for any purpose. It is provided "as is"
|
12
|
+
* without express or implied warranty.
|
13
|
+
*/
|
14
|
+
|
15
|
+
#include "ares_setup.h"
|
16
|
+
#include <assert.h>
|
17
|
+
#include <stdlib.h>
|
18
|
+
#include "ares.h"
|
19
|
+
#include "ares_private.h"
|
20
|
+
|
21
|
+
/*
|
22
|
+
* ares_cancel() cancels all ongoing requests/resolves that might be going on
|
23
|
+
* on the given channel. It does NOT kill the channel, use ares_destroy() for
|
24
|
+
* that.
|
25
|
+
*/
|
26
|
+
void ares_cancel(ares_channel channel)
|
27
|
+
{
|
28
|
+
struct query *query;
|
29
|
+
struct list_node* list_head;
|
30
|
+
struct list_node* list_node;
|
31
|
+
int i;
|
32
|
+
|
33
|
+
list_head = &(channel->all_queries);
|
34
|
+
for (list_node = list_head->next; list_node != list_head; )
|
35
|
+
{
|
36
|
+
query = list_node->data;
|
37
|
+
list_node = list_node->next; /* since we're deleting the query */
|
38
|
+
query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
|
39
|
+
ares__free_query(query);
|
40
|
+
}
|
41
|
+
#ifndef NDEBUG
|
42
|
+
/* Freeing the query should remove it from all the lists in which it sits,
|
43
|
+
* so all query lists should be empty now.
|
44
|
+
*/
|
45
|
+
assert(ares__is_list_empty(&(channel->all_queries)));
|
46
|
+
for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
|
47
|
+
{
|
48
|
+
assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
|
49
|
+
}
|
50
|
+
for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
|
51
|
+
{
|
52
|
+
assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
|
53
|
+
}
|
54
|
+
#endif
|
55
|
+
if (!(channel->flags & ARES_FLAG_STAYOPEN))
|
56
|
+
{
|
57
|
+
if (channel->servers)
|
58
|
+
{
|
59
|
+
for (i = 0; i < channel->nservers; i++)
|
60
|
+
ares__close_sockets(channel, &channel->servers[i]);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
@@ -0,0 +1,190 @@
|
|
1
|
+
|
2
|
+
/* Copyright (C) 2009-2010 by Daniel Stenberg
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this
|
5
|
+
* software and its documentation for any purpose and without
|
6
|
+
* fee is hereby granted, provided that the above copyright
|
7
|
+
* notice appear in all copies and that both that copyright
|
8
|
+
* notice and this permission notice appear in supporting
|
9
|
+
* documentation, and that the name of M.I.T. not be used in
|
10
|
+
* advertising or publicity pertaining to distribution of the
|
11
|
+
* software without specific, written prior permission.
|
12
|
+
* M.I.T. makes no representations about the suitability of
|
13
|
+
* this software for any purpose. It is provided "as is"
|
14
|
+
* without express or implied warranty.
|
15
|
+
*/
|
16
|
+
|
17
|
+
|
18
|
+
#include "ares_setup.h"
|
19
|
+
|
20
|
+
#include <stddef.h>
|
21
|
+
|
22
|
+
#include "ares.h"
|
23
|
+
#include "ares_data.h"
|
24
|
+
#include "ares_private.h"
|
25
|
+
|
26
|
+
|
27
|
+
/*
|
28
|
+
** ares_free_data() - c-ares external API function.
|
29
|
+
**
|
30
|
+
** This function must be used by the application to free data memory that
|
31
|
+
** has been internally allocated by some c-ares function and for which a
|
32
|
+
** pointer has already been returned to the calling application. The list
|
33
|
+
** of c-ares functions returning pointers that must be free'ed using this
|
34
|
+
** function is:
|
35
|
+
**
|
36
|
+
** ares_get_servers()
|
37
|
+
** ares_parse_srv_reply()
|
38
|
+
** ares_parse_txt_reply()
|
39
|
+
*/
|
40
|
+
|
41
|
+
void ares_free_data(void *dataptr)
|
42
|
+
{
|
43
|
+
struct ares_data *ptr;
|
44
|
+
|
45
|
+
if (!dataptr)
|
46
|
+
return;
|
47
|
+
|
48
|
+
#ifdef __INTEL_COMPILER
|
49
|
+
# pragma warning(push)
|
50
|
+
# pragma warning(disable:1684)
|
51
|
+
/* 1684: conversion from pointer to same-sized integral type */
|
52
|
+
#endif
|
53
|
+
|
54
|
+
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
|
55
|
+
|
56
|
+
#ifdef __INTEL_COMPILER
|
57
|
+
# pragma warning(pop)
|
58
|
+
#endif
|
59
|
+
|
60
|
+
if (ptr->mark != ARES_DATATYPE_MARK)
|
61
|
+
return;
|
62
|
+
|
63
|
+
switch (ptr->type)
|
64
|
+
{
|
65
|
+
case ARES_DATATYPE_MX_REPLY:
|
66
|
+
|
67
|
+
if (ptr->data.mx_reply.next)
|
68
|
+
ares_free_data(ptr->data.mx_reply.next);
|
69
|
+
if (ptr->data.mx_reply.host)
|
70
|
+
free(ptr->data.mx_reply.host);
|
71
|
+
break;
|
72
|
+
|
73
|
+
case ARES_DATATYPE_SRV_REPLY:
|
74
|
+
|
75
|
+
if (ptr->data.srv_reply.next)
|
76
|
+
ares_free_data(ptr->data.srv_reply.next);
|
77
|
+
if (ptr->data.srv_reply.host)
|
78
|
+
free(ptr->data.srv_reply.host);
|
79
|
+
break;
|
80
|
+
|
81
|
+
case ARES_DATATYPE_TXT_REPLY:
|
82
|
+
|
83
|
+
if (ptr->data.txt_reply.next)
|
84
|
+
ares_free_data(ptr->data.txt_reply.next);
|
85
|
+
if (ptr->data.txt_reply.txt)
|
86
|
+
free(ptr->data.txt_reply.txt);
|
87
|
+
break;
|
88
|
+
|
89
|
+
case ARES_DATATYPE_ADDR_NODE:
|
90
|
+
|
91
|
+
if (ptr->data.addr_node.next)
|
92
|
+
ares_free_data(ptr->data.addr_node.next);
|
93
|
+
break;
|
94
|
+
|
95
|
+
default:
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
|
99
|
+
free(ptr);
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
/*
|
104
|
+
** ares_malloc_data() - c-ares internal helper function.
|
105
|
+
**
|
106
|
+
** This function allocates memory for a c-ares private ares_data struct
|
107
|
+
** for the specified ares_datatype, initializes c-ares private fields
|
108
|
+
** and zero initializes those which later might be used from the public
|
109
|
+
** API. It returns an interior pointer which can be passed by c-ares
|
110
|
+
** functions to the calling application, and that must be free'ed using
|
111
|
+
** c-ares external API function ares_free_data().
|
112
|
+
*/
|
113
|
+
|
114
|
+
void *ares_malloc_data(ares_datatype type)
|
115
|
+
{
|
116
|
+
struct ares_data *ptr;
|
117
|
+
|
118
|
+
ptr = malloc(sizeof(struct ares_data));
|
119
|
+
if (!ptr)
|
120
|
+
return NULL;
|
121
|
+
|
122
|
+
switch (type)
|
123
|
+
{
|
124
|
+
case ARES_DATATYPE_MX_REPLY:
|
125
|
+
ptr->data.mx_reply.next = NULL;
|
126
|
+
ptr->data.mx_reply.host = NULL;
|
127
|
+
ptr->data.mx_reply.priority = 0;
|
128
|
+
break;
|
129
|
+
|
130
|
+
case ARES_DATATYPE_SRV_REPLY:
|
131
|
+
ptr->data.srv_reply.next = NULL;
|
132
|
+
ptr->data.srv_reply.host = NULL;
|
133
|
+
ptr->data.srv_reply.priority = 0;
|
134
|
+
ptr->data.srv_reply.weight = 0;
|
135
|
+
ptr->data.srv_reply.port = 0;
|
136
|
+
break;
|
137
|
+
|
138
|
+
case ARES_DATATYPE_TXT_REPLY:
|
139
|
+
ptr->data.txt_reply.next = NULL;
|
140
|
+
ptr->data.txt_reply.txt = NULL;
|
141
|
+
ptr->data.txt_reply.length = 0;
|
142
|
+
break;
|
143
|
+
|
144
|
+
case ARES_DATATYPE_ADDR_NODE:
|
145
|
+
ptr->data.addr_node.next = NULL;
|
146
|
+
ptr->data.addr_node.family = 0;
|
147
|
+
memset(&ptr->data.addr_node.addrV6, 0,
|
148
|
+
sizeof(ptr->data.addr_node.addrV6));
|
149
|
+
break;
|
150
|
+
|
151
|
+
default:
|
152
|
+
free(ptr);
|
153
|
+
return NULL;
|
154
|
+
}
|
155
|
+
|
156
|
+
ptr->mark = ARES_DATATYPE_MARK;
|
157
|
+
ptr->type = type;
|
158
|
+
|
159
|
+
return &ptr->data;
|
160
|
+
}
|
161
|
+
|
162
|
+
|
163
|
+
/*
|
164
|
+
** ares_get_datatype() - c-ares internal helper function.
|
165
|
+
**
|
166
|
+
** This function returns the ares_datatype of the data stored in a
|
167
|
+
** private ares_data struct when given the public API pointer.
|
168
|
+
*/
|
169
|
+
|
170
|
+
ares_datatype ares_get_datatype(void * dataptr)
|
171
|
+
{
|
172
|
+
struct ares_data *ptr;
|
173
|
+
|
174
|
+
#ifdef __INTEL_COMPILER
|
175
|
+
# pragma warning(push)
|
176
|
+
# pragma warning(disable:1684)
|
177
|
+
/* 1684: conversion from pointer to same-sized integral type */
|
178
|
+
#endif
|
179
|
+
|
180
|
+
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
|
181
|
+
|
182
|
+
#ifdef __INTEL_COMPILER
|
183
|
+
# pragma warning(pop)
|
184
|
+
#endif
|
185
|
+
|
186
|
+
if (ptr->mark == ARES_DATATYPE_MARK)
|
187
|
+
return ptr->type;
|
188
|
+
|
189
|
+
return ARES_DATATYPE_UNKNOWN;
|
190
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
/* Copyright (C) 2009-2010 by Daniel Stenberg
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this
|
5
|
+
* software and its documentation for any purpose and without
|
6
|
+
* fee is hereby granted, provided that the above copyright
|
7
|
+
* notice appear in all copies and that both that copyright
|
8
|
+
* notice and this permission notice appear in supporting
|
9
|
+
* documentation, and that the name of M.I.T. not be used in
|
10
|
+
* advertising or publicity pertaining to distribution of the
|
11
|
+
* software without specific, written prior permission.
|
12
|
+
* M.I.T. makes no representations about the suitability of
|
13
|
+
* this software for any purpose. It is provided "as is"
|
14
|
+
* without express or implied warranty.
|
15
|
+
*/
|
16
|
+
|
17
|
+
typedef enum {
|
18
|
+
ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */
|
19
|
+
ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */
|
20
|
+
ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */
|
21
|
+
ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */
|
22
|
+
ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */
|
23
|
+
#if 0
|
24
|
+
ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */
|
25
|
+
ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */
|
26
|
+
ARES_DATATYPE_HOSTENT, /* struct hostent */
|
27
|
+
ARES_DATATYPE_OPTIONS, /* struct ares_options */
|
28
|
+
#endif
|
29
|
+
ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */
|
30
|
+
} ares_datatype;
|
31
|
+
|
32
|
+
#define ARES_DATATYPE_MARK 0xbead
|
33
|
+
|
34
|
+
/*
|
35
|
+
* ares_data struct definition is internal to c-ares and shall not
|
36
|
+
* be exposed by the public API in order to allow future changes
|
37
|
+
* and extensions to it without breaking ABI. This will be used
|
38
|
+
* internally by c-ares as the container of multiple types of data
|
39
|
+
* dynamically allocated for which a reference will be returned
|
40
|
+
* to the calling application.
|
41
|
+
*
|
42
|
+
* c-ares API functions returning a pointer to c-ares internally
|
43
|
+
* allocated data will actually be returning an interior pointer
|
44
|
+
* into this ares_data struct.
|
45
|
+
*
|
46
|
+
* All this is 'invisible' to the calling application, the only
|
47
|
+
* requirement is that this kind of data must be free'ed by the
|
48
|
+
* calling application using ares_free_data() with the pointer
|
49
|
+
* it has received from a previous c-ares function call.
|
50
|
+
*/
|
51
|
+
|
52
|
+
struct ares_data {
|
53
|
+
ares_datatype type; /* Actual data type identifier. */
|
54
|
+
unsigned int mark; /* Private ares_data signature. */
|
55
|
+
union {
|
56
|
+
struct ares_txt_reply txt_reply;
|
57
|
+
struct ares_srv_reply srv_reply;
|
58
|
+
struct ares_addr_node addr_node;
|
59
|
+
struct ares_mx_reply mx_reply;
|
60
|
+
} data;
|
61
|
+
};
|
62
|
+
|
63
|
+
void *ares_malloc_data(ares_datatype type);
|
64
|
+
|
65
|
+
ares_datatype ares_get_datatype(void * dataptr);
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
3
|
+
* Copyright (C) 2004-2010 by Daniel Stenberg
|
4
|
+
*
|
5
|
+
* Permission to use, copy, modify, and distribute this
|
6
|
+
* software and its documentation for any purpose and without
|
7
|
+
* fee is hereby granted, provided that the above copyright
|
8
|
+
* notice appear in all copies and that both that copyright
|
9
|
+
* notice and this permission notice appear in supporting
|
10
|
+
* documentation, and that the name of M.I.T. not be used in
|
11
|
+
* advertising or publicity pertaining to distribution of the
|
12
|
+
* software without specific, written prior permission.
|
13
|
+
* M.I.T. makes no representations about the suitability of
|
14
|
+
* this software for any purpose. It is provided "as is"
|
15
|
+
* without express or implied warranty.
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include "ares_setup.h"
|
19
|
+
#include <assert.h>
|
20
|
+
#include <stdlib.h>
|
21
|
+
#include "ares.h"
|
22
|
+
#include "ares_private.h"
|
23
|
+
|
24
|
+
void ares_destroy_options(struct ares_options *options)
|
25
|
+
{
|
26
|
+
int i;
|
27
|
+
|
28
|
+
if(options->servers)
|
29
|
+
free(options->servers);
|
30
|
+
for (i = 0; i < options->ndomains; i++)
|
31
|
+
free(options->domains[i]);
|
32
|
+
free(options->domains);
|
33
|
+
if(options->sortlist)
|
34
|
+
free(options->sortlist);
|
35
|
+
free(options->lookups);
|
36
|
+
}
|
37
|
+
|
38
|
+
void ares_destroy(ares_channel channel)
|
39
|
+
{
|
40
|
+
int i;
|
41
|
+
struct query *query;
|
42
|
+
struct list_node* list_head;
|
43
|
+
struct list_node* list_node;
|
44
|
+
|
45
|
+
if (!channel)
|
46
|
+
return;
|
47
|
+
|
48
|
+
list_head = &(channel->all_queries);
|
49
|
+
for (list_node = list_head->next; list_node != list_head; )
|
50
|
+
{
|
51
|
+
query = list_node->data;
|
52
|
+
list_node = list_node->next; /* since we're deleting the query */
|
53
|
+
query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
|
54
|
+
ares__free_query(query);
|
55
|
+
}
|
56
|
+
#ifndef NDEBUG
|
57
|
+
/* Freeing the query should remove it from all the lists in which it sits,
|
58
|
+
* so all query lists should be empty now.
|
59
|
+
*/
|
60
|
+
assert(ares__is_list_empty(&(channel->all_queries)));
|
61
|
+
for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
|
62
|
+
{
|
63
|
+
assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
|
64
|
+
}
|
65
|
+
for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
|
66
|
+
{
|
67
|
+
assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
|
68
|
+
}
|
69
|
+
#endif
|
70
|
+
|
71
|
+
ares__destroy_servers_state(channel);
|
72
|
+
|
73
|
+
if (channel->domains) {
|
74
|
+
for (i = 0; i < channel->ndomains; i++)
|
75
|
+
free(channel->domains[i]);
|
76
|
+
free(channel->domains);
|
77
|
+
}
|
78
|
+
|
79
|
+
if(channel->sortlist)
|
80
|
+
free(channel->sortlist);
|
81
|
+
|
82
|
+
if (channel->lookups)
|
83
|
+
free(channel->lookups);
|
84
|
+
|
85
|
+
free(channel);
|
86
|
+
}
|
87
|
+
|
88
|
+
void ares__destroy_servers_state(ares_channel channel)
|
89
|
+
{
|
90
|
+
struct server_state *server;
|
91
|
+
int i;
|
92
|
+
|
93
|
+
if (channel->servers)
|
94
|
+
{
|
95
|
+
for (i = 0; i < channel->nservers; i++)
|
96
|
+
{
|
97
|
+
server = &channel->servers[i];
|
98
|
+
ares__close_sockets(channel, server);
|
99
|
+
assert(ares__is_list_empty(&server->queries_to_server));
|
100
|
+
}
|
101
|
+
free(channel->servers);
|
102
|
+
channel->servers = NULL;
|
103
|
+
}
|
104
|
+
channel->nservers = -1;
|
105
|
+
}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
|
2
|
+
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
3
|
+
*
|
4
|
+
* Permission to use, copy, modify, and distribute this
|
5
|
+
* software and its documentation for any purpose and without
|
6
|
+
* fee is hereby granted, provided that the above copyright
|
7
|
+
* notice appear in all copies and that both that copyright
|
8
|
+
* notice and this permission notice appear in supporting
|
9
|
+
* documentation, and that the name of M.I.T. not be used in
|
10
|
+
* advertising or publicity pertaining to distribution of the
|
11
|
+
* software without specific, written prior permission.
|
12
|
+
* M.I.T. makes no representations about the suitability of
|
13
|
+
* this software for any purpose. It is provided "as is"
|
14
|
+
* without express or implied warranty.
|
15
|
+
*/
|
16
|
+
|
17
|
+
#ifndef ARES__DNS_H
|
18
|
+
#define ARES__DNS_H
|
19
|
+
|
20
|
+
#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1])
|
21
|
+
#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \
|
22
|
+
((p)[2] << 8) | (p)[3])
|
23
|
+
|
24
|
+
#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
|
25
|
+
((p)[1] = (unsigned char)((v) & 0xff)))
|
26
|
+
#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
|
27
|
+
((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
|
28
|
+
((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
|
29
|
+
((p)[3] = (unsigned char)((v) & 0xff)))
|
30
|
+
|
31
|
+
#if 0
|
32
|
+
/* we cannot use this approach on systems where we can't access 16/32 bit
|
33
|
+
data on un-aligned addresses */
|
34
|
+
#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
|
35
|
+
#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
|
36
|
+
#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
|
37
|
+
#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
|
38
|
+
#endif
|
39
|
+
|
40
|
+
/* Macros for parsing a DNS header */
|
41
|
+
#define DNS_HEADER_QID(h) DNS__16BIT(h)
|
42
|
+
#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
|
43
|
+
#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
|
44
|
+
#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
|
45
|
+
#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
|
46
|
+
#define DNS_HEADER_RD(h) ((h)[2] & 0x1)
|
47
|
+
#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
|
48
|
+
#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
|
49
|
+
#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
|
50
|
+
#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
|
51
|
+
#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
|
52
|
+
#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
|
53
|
+
#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
|
54
|
+
|
55
|
+
/* Macros for constructing a DNS header */
|
56
|
+
#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
|
57
|
+
#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
|
58
|
+
#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
|
59
|
+
#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
|
60
|
+
#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
|
61
|
+
#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
|
62
|
+
#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
|
63
|
+
#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
|
64
|
+
#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
|
65
|
+
#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
|
66
|
+
#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
|
67
|
+
#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
|
68
|
+
#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
|
69
|
+
|
70
|
+
/* Macros for parsing the fixed part of a DNS question */
|
71
|
+
#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
|
72
|
+
#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
|
73
|
+
|
74
|
+
/* Macros for constructing the fixed part of a DNS question */
|
75
|
+
#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
|
76
|
+
#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
|
77
|
+
|
78
|
+
/* Macros for parsing the fixed part of a DNS resource record */
|
79
|
+
#define DNS_RR_TYPE(r) DNS__16BIT(r)
|
80
|
+
#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
|
81
|
+
#define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
|
82
|
+
#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
|
83
|
+
|
84
|
+
/* Macros for constructing the fixed part of a DNS resource record */
|
85
|
+
#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v)
|
86
|
+
#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v)
|
87
|
+
#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v)
|
88
|
+
#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v)
|
89
|
+
|
90
|
+
#endif /* ARES__DNS_H */
|