|
From 7fb847bc420024cbdf5e361423e78207358113ec Mon Sep 17 00:00:00 2001 |
|
From: Henry Rawas <[email protected]> |
|
Date: Fri, 2 Dec 2011 13:45:27 -0800 |
|
Subject: [PATCH] REDIS for Window using Libuv |
|
|
|
--- |
|
deps/hiredis/async.c | 9 +- |
|
deps/hiredis/example.c | 17 + |
|
deps/hiredis/hiredis.c | 81 +- |
|
deps/hiredis/hiredis.h | 13 + |
|
deps/hiredis/net.c | 161 +- |
|
deps/hiredis/sds.h | 10 +- |
|
deps/hiredis/test.c | 20 + |
|
deps/libuv/.gitignore | 28 + |
|
deps/libuv/.mailmap | 11 + |
|
deps/libuv/AUTHORS | 35 + |
|
deps/libuv/LICENSE | 40 + |
|
deps/libuv/Makefile | 119 + |
|
deps/libuv/README.md | 88 + |
|
deps/libuv/build/gcc_version.py | 20 + |
|
deps/libuv/common.gypi | 177 + |
|
deps/libuv/config-mingw.mk | 61 + |
|
deps/libuv/config-unix.mk | 164 + |
|
deps/libuv/gyp_uv | 60 + |
|
deps/libuv/include/ares.h | 591 + |
|
deps/libuv/include/ares_version.h | 24 + |
|
deps/libuv/include/uv-private/eio.h | 376 + |
|
deps/libuv/include/uv-private/ev.h | 836 ++ |
|
deps/libuv/include/uv-private/ngx-queue.h | 102 + |
|
deps/libuv/include/uv-private/tree.h | 762 ++ |
|
deps/libuv/include/uv-private/uv-unix.h | 223 + |
|
deps/libuv/include/uv-private/uv-win.h | 422 + |
|
deps/libuv/include/uv.h | 1325 ++ |
|
deps/libuv/src/ares/AUTHORS | 37 + |
|
deps/libuv/src/ares/CHANGES | 1218 ++ |
|
deps/libuv/src/ares/CMakeLists.txt | 22 + |
|
deps/libuv/src/ares/NEWS | 21 + |
|
deps/libuv/src/ares/README | 60 + |
|
deps/libuv/src/ares/README.cares | 13 + |
|
deps/libuv/src/ares/README.msvc | 142 + |
|
deps/libuv/src/ares/README.node | 21 + |
|
deps/libuv/src/ares/RELEASE-NOTES | 26 + |
|
deps/libuv/src/ares/TODO | 23 + |
|
deps/libuv/src/ares/ares__close_sockets.c | 66 + |
|
deps/libuv/src/ares/ares__get_hostent.c | 263 + |
|
deps/libuv/src/ares/ares__read_line.c | 71 + |
|
deps/libuv/src/ares/ares__timeval.c | 111 + |
|
deps/libuv/src/ares/ares_cancel.c | 63 + |
|
deps/libuv/src/ares/ares_data.c | 190 + |
|
deps/libuv/src/ares/ares_data.h | 65 + |
|
deps/libuv/src/ares/ares_destroy.c | 105 + |
|
deps/libuv/src/ares/ares_dns.h | 90 + |
|
deps/libuv/src/ares/ares_expand_name.c | 200 + |
|
deps/libuv/src/ares/ares_expand_string.c | 75 + |
|
deps/libuv/src/ares/ares_fds.c | 63 + |
|
deps/libuv/src/ares/ares_free_hostent.c | 42 + |
|
deps/libuv/src/ares/ares_free_string.c | 25 + |
|
deps/libuv/src/ares/ares_getenv.c | 30 + |
|
deps/libuv/src/ares/ares_getenv.h | 26 + |
|
deps/libuv/src/ares/ares_gethostbyaddr.c | 301 + |
|
deps/libuv/src/ares/ares_gethostbyname.c | 523 + |
|
deps/libuv/src/ares/ares_getnameinfo.c | 427 + |
|
deps/libuv/src/ares/ares_getopt.c | 122 + |
|
deps/libuv/src/ares/ares_getopt.h | 53 + |
|
deps/libuv/src/ares/ares_getsock.c | 72 + |
|
deps/libuv/src/ares/ares_init.c | 1809 +++ |
|
deps/libuv/src/ares/ares_iphlpapi.h | 221 + |
|
deps/libuv/src/ares/ares_ipv6.h | 78 + |
|
deps/libuv/src/ares/ares_library_init.c | 142 + |
|
deps/libuv/src/ares/ares_library_init.h | 42 + |
|
deps/libuv/src/ares/ares_llist.c | 86 + |
|
deps/libuv/src/ares/ares_llist.h | 42 + |
|
deps/libuv/src/ares/ares_mkquery.c | 195 + |
|
deps/libuv/src/ares/ares_nowarn.c | 181 + |
|
deps/libuv/src/ares/ares_nowarn.h | 55 + |
|
deps/libuv/src/ares/ares_options.c | 248 + |
|
deps/libuv/src/ares/ares_parse_a_reply.c | 263 + |
|
deps/libuv/src/ares/ares_parse_aaaa_reply.c | 259 + |
|
deps/libuv/src/ares/ares_parse_mx_reply.c | 170 + |
|
deps/libuv/src/ares/ares_parse_ns_reply.c | 182 + |
|
deps/libuv/src/ares/ares_parse_ptr_reply.c | 217 + |
|
deps/libuv/src/ares/ares_parse_srv_reply.c | 179 + |
|
deps/libuv/src/ares/ares_parse_txt_reply.c | 201 + |
|
deps/libuv/src/ares/ares_platform.c |11035 +++++++++++++++++ |
|
deps/libuv/src/ares/ares_platform.h | 43 + |
|
deps/libuv/src/ares/ares_private.h | 355 + |
|
deps/libuv/src/ares/ares_process.c | 1295 ++ |
|
deps/libuv/src/ares/ares_query.c | 183 + |
|
deps/libuv/src/ares/ares_rules.h | 144 + |
|
deps/libuv/src/ares/ares_search.c | 321 + |
|
deps/libuv/src/ares/ares_send.c | 134 + |
|
deps/libuv/src/ares/ares_setup.h | 199 + |
|
deps/libuv/src/ares/ares_strcasecmp.c | 66 + |
|
deps/libuv/src/ares/ares_strcasecmp.h | 30 + |
|
deps/libuv/src/ares/ares_strdup.c | 42 + |
|
deps/libuv/src/ares/ares_strdup.h | 26 + |
|
deps/libuv/src/ares/ares_strerror.c | 56 + |
|
deps/libuv/src/ares/ares_timeout.c | 80 + |
|
deps/libuv/src/ares/ares_version.c | 11 + |
|
deps/libuv/src/ares/ares_writev.c | 79 + |
|
deps/libuv/src/ares/ares_writev.h | 36 + |
|
deps/libuv/src/ares/bitncmp.c | 59 + |
|
deps/libuv/src/ares/bitncmp.h | 26 + |
|
deps/libuv/src/ares/config_cygwin/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_darwin/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_freebsd/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_linux/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_netbsd/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_openbsd/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_sunos/ares_config.h | 512 + |
|
deps/libuv/src/ares/config_win32/ares_config.h | 369 + |
|
deps/libuv/src/ares/get_ver.awk | 35 + |
|
deps/libuv/src/ares/inet_net_pton.c | 451 + |
|
deps/libuv/src/ares/inet_net_pton.h | 31 + |
|
deps/libuv/src/ares/inet_ntop.c | 208 + |
|
deps/libuv/src/ares/inet_ntop.h | 26 + |
|
deps/libuv/src/ares/nameser.h | 203 + |
|
deps/libuv/src/ares/setup_once.h | 504 + |
|
deps/libuv/src/ares/windows_port.c | 22 + |
|
deps/libuv/src/unix/cares.c | 186 + |
|
deps/libuv/src/unix/core.c | 847 ++ |
|
deps/libuv/src/unix/cygwin.c | 81 + |
|
deps/libuv/src/unix/darwin.c | 108 + |
|
deps/libuv/src/unix/dl.c | 57 + |
|
deps/libuv/src/unix/eio/Changes | 63 + |
|
deps/libuv/src/unix/eio/LICENSE | 36 + |
|
deps/libuv/src/unix/eio/Makefile.am | 15 + |
|
deps/libuv/src/unix/eio/aclocal.m4 | 8957 ++++++++++++++ |
|
deps/libuv/src/unix/eio/autogen.sh | 3 + |
|
deps/libuv/src/unix/eio/config.h.in | 86 + |
|
deps/libuv/src/unix/eio/config_cygwin.h | 80 + |
|
deps/libuv/src/unix/eio/config_darwin.h | 141 + |
|
deps/libuv/src/unix/eio/config_freebsd.h | 81 + |
|
deps/libuv/src/unix/eio/config_linux.h | 91 + |
|
deps/libuv/src/unix/eio/config_netbsd.h | 81 + |
|
deps/libuv/src/unix/eio/config_openbsd.h | 137 + |
|
deps/libuv/src/unix/eio/config_sunos.h | 84 + |
|
deps/libuv/src/unix/eio/configure.ac | 22 + |
|
deps/libuv/src/unix/eio/demo.c | 194 + |
|
deps/libuv/src/unix/eio/ecb.h | 370 + |
|
deps/libuv/src/unix/eio/eio.3 | 3428 +++++ |
|
deps/libuv/src/unix/eio/eio.c | 2594 ++++ |
|
deps/libuv/src/unix/eio/eio.pod | 969 ++ |
|
deps/libuv/src/unix/eio/libeio.m4 | 195 + |
|
deps/libuv/src/unix/eio/xthread.h | 164 + |
|
deps/libuv/src/unix/error.c | 90 + |
|
deps/libuv/src/unix/ev/Changes | 388 + |
|
deps/libuv/src/unix/ev/LICENSE | 36 + |
|
deps/libuv/src/unix/ev/Makefile.am | 18 + |
|
deps/libuv/src/unix/ev/Makefile.in | 771 ++ |
|
deps/libuv/src/unix/ev/README | 58 + |
|
deps/libuv/src/unix/ev/aclocal.m4 | 8957 ++++++++++++++ |
|
deps/libuv/src/unix/ev/autogen.sh | 6 + |
|
deps/libuv/src/unix/ev/config.guess | 1526 +++ |
|
deps/libuv/src/unix/ev/config.h.in | 125 + |
|
deps/libuv/src/unix/ev/config.sub | 1658 +++ |
|
deps/libuv/src/unix/ev/config_cygwin.h | 123 + |
|
deps/libuv/src/unix/ev/config_darwin.h | 122 + |
|
deps/libuv/src/unix/ev/config_freebsd.h | 120 + |
|
deps/libuv/src/unix/ev/config_linux.h | 141 + |
|
deps/libuv/src/unix/ev/config_netbsd.h | 120 + |
|
deps/libuv/src/unix/ev/config_openbsd.h | 126 + |
|
deps/libuv/src/unix/ev/config_sunos.h | 122 + |
|
deps/libuv/src/unix/ev/configure |13037 ++++++++++++++++++++ |
|
deps/libuv/src/unix/ev/configure.ac | 18 + |
|
deps/libuv/src/unix/ev/depcomp | 630 + |
|
deps/libuv/src/unix/ev/ev++.h | 816 ++ |
|
deps/libuv/src/unix/ev/ev.3 | 5311 ++++++++ |
|
deps/libuv/src/unix/ev/ev.c | 3914 ++++++ |
|
deps/libuv/src/unix/ev/ev.pod | 5243 ++++++++ |
|
deps/libuv/src/unix/ev/ev_epoll.c | 266 + |
|
deps/libuv/src/unix/ev/ev_kqueue.c | 213 + |
|
deps/libuv/src/unix/ev/ev_poll.c | 148 + |
|
deps/libuv/src/unix/ev/ev_port.c | 179 + |
|
deps/libuv/src/unix/ev/ev_select.c | 310 + |
|
deps/libuv/src/unix/ev/ev_vars.h | 203 + |
|
deps/libuv/src/unix/ev/ev_win32.c | 153 + |
|
deps/libuv/src/unix/ev/ev_wrap.h | 196 + |
|
deps/libuv/src/unix/ev/event.c | 402 + |
|
deps/libuv/src/unix/ev/event.h | 170 + |
|
deps/libuv/src/unix/ev/install-sh | 294 + |
|
deps/libuv/src/unix/ev/libev.m4 | 39 + |
|
deps/libuv/src/unix/ev/ltmain.sh | 8413 +++++++++++++ |
|
deps/libuv/src/unix/ev/missing | 336 + |
|
deps/libuv/src/unix/ev/mkinstalldirs | 111 + |
|
deps/libuv/src/unix/freebsd.c | 110 + |
|
deps/libuv/src/unix/fs.c | 703 ++ |
|
deps/libuv/src/unix/internal.h | 145 + |
|
deps/libuv/src/unix/kqueue.c | 146 + |
|
deps/libuv/src/unix/linux.c | 209 + |
|
deps/libuv/src/unix/netbsd.c | 112 + |
|
deps/libuv/src/unix/openbsd.c | 123 + |
|
deps/libuv/src/unix/pipe.c | 273 + |
|
deps/libuv/src/unix/process.c | 369 + |
|
deps/libuv/src/unix/stream.c | 961 ++ |
|
deps/libuv/src/unix/sunos.c | 197 + |
|
deps/libuv/src/unix/tcp.c | 336 + |
|
deps/libuv/src/unix/tty.c | 148 + |
|
deps/libuv/src/unix/udp.c | 590 + |
|
deps/libuv/src/unix/uv-eio.c | 134 + |
|
deps/libuv/src/unix/uv-eio.h | 13 + |
|
deps/libuv/src/uv-common.c | 263 + |
|
deps/libuv/src/uv-common.h | 77 + |
|
deps/libuv/src/win/async.c | 127 + |
|
deps/libuv/src/win/cares.c | 289 + |
|
deps/libuv/src/win/core.c | 236 + |
|
deps/libuv/src/win/dl.c | 63 + |
|
deps/libuv/src/win/error.c | 112 + |
|
deps/libuv/src/win/fs-event.c | 420 + |
|
deps/libuv/src/win/fs.c | 1519 +++ |
|
deps/libuv/src/win/getaddrinfo.c | 368 + |
|
deps/libuv/src/win/handle.c | 226 + |
|
deps/libuv/src/win/internal.h | 364 + |
|
deps/libuv/src/win/loop-watcher.c | 131 + |
|
deps/libuv/src/win/pipe.c | 1564 +++ |
|
deps/libuv/src/win/process.c | 1140 ++ |
|
deps/libuv/src/win/req.c | 182 + |
|
deps/libuv/src/win/stream.c | 188 + |
|
deps/libuv/src/win/tcp.c | 1156 ++ |
|
deps/libuv/src/win/threadpool.c | 73 + |
|
deps/libuv/src/win/threads.c | 81 + |
|
deps/libuv/src/win/timer.c | 276 + |
|
deps/libuv/src/win/tty.c | 1758 +++ |
|
deps/libuv/src/win/udp.c | 564 + |
|
deps/libuv/src/win/util.c | 152 + |
|
deps/libuv/src/win/winapi.c | 89 + |
|
deps/libuv/src/win/winapi.h | 4366 +++++++ |
|
deps/libuv/src/win/winsock.c | 425 + |
|
deps/libuv/src/win/winsock.h | 110 + |
|
deps/libuv/test/benchmark-ares.c | 120 + |
|
deps/libuv/test/benchmark-getaddrinfo.c | 94 + |
|
deps/libuv/test/benchmark-list.h | 103 + |
|
deps/libuv/test/benchmark-ping-pongs.c | 213 + |
|
deps/libuv/test/benchmark-pound.c | 322 + |
|
deps/libuv/test/benchmark-pump.c | 462 + |
|
deps/libuv/test/benchmark-sizes.c | 40 + |
|
deps/libuv/test/benchmark-spawn.c | 156 + |
|
deps/libuv/test/benchmark-tcp-write-batch.c | 144 + |
|
deps/libuv/test/benchmark-udp-packet-storm.c | 249 + |
|
deps/libuv/test/blackhole-server.c | 122 + |
|
deps/libuv/test/dns-server.c | 328 + |
|
deps/libuv/test/echo-server.c | 306 + |
|
deps/libuv/test/run-benchmarks.c | 64 + |
|
deps/libuv/test/run-tests.c | 296 + |
|
deps/libuv/test/runner-unix.c | 315 + |
|
deps/libuv/test/runner-unix.h | 36 + |
|
deps/libuv/test/runner-win.c | 343 + |
|
deps/libuv/test/runner-win.h | 42 + |
|
deps/libuv/test/runner.c | 311 + |
|
deps/libuv/test/runner.h | 155 + |
|
deps/libuv/test/task.h | 113 + |
|
deps/libuv/test/test-async.c | 216 + |
|
deps/libuv/test/test-callback-stack.c | 203 + |
|
deps/libuv/test/test-connection-fail.c | 148 + |
|
deps/libuv/test/test-delayed-accept.c | 197 + |
|
deps/libuv/test/test-error.c | 59 + |
|
deps/libuv/test/test-fail-always.c | 29 + |
|
deps/libuv/test/test-fs-event.c | 270 + |
|
deps/libuv/test/test-fs.c | 1478 +++ |
|
deps/libuv/test/test-get-currentexe.c | 63 + |
|
deps/libuv/test/test-get-loadavg.c | 36 + |
|
deps/libuv/test/test-get-memory.c | 36 + |
|
deps/libuv/test/test-getaddrinfo.c | 122 + |
|
deps/libuv/test/test-gethostbyname.c | 189 + |
|
deps/libuv/test/test-getsockname.c | 342 + |
|
deps/libuv/test/test-hrtime.c | 51 + |
|
deps/libuv/test/test-idle.c | 81 + |
|
deps/libuv/test/test-ipc.c | 278 + |
|
deps/libuv/test/test-list.h | 274 + |
|
deps/libuv/test/test-loop-handles.c | 359 + |
|
deps/libuv/test/test-multiple-listen.c | 102 + |
|
deps/libuv/test/test-pass-always.c | 28 + |
|
deps/libuv/test/test-ping-pong.c | 249 + |
|
deps/libuv/test/test-pipe-bind-error.c | 140 + |
|
deps/libuv/test/test-pipe-connect-error.c | 68 + |
|
deps/libuv/test/test-ref.c | 85 + |
|
deps/libuv/test/test-shutdown-eof.c | 183 + |
|
deps/libuv/test/test-spawn.c | 468 + |
|
deps/libuv/test/test-stdio-over-pipes.c | 157 + |
|
deps/libuv/test/test-tcp-bind-error.c | 191 + |
|
deps/libuv/test/test-tcp-bind6-error.c | 154 + |
|
deps/libuv/test/test-tcp-close.c | 176 + |
|
deps/libuv/test/test-tcp-connect-error.c | 70 + |
|
deps/libuv/test/test-tcp-connect6-error.c | 68 + |
|
deps/libuv/test/test-tcp-flags.c | 51 + |
|
deps/libuv/test/test-tcp-write-error.c | 168 + |
|
.../test/test-tcp-write-to-half-open-connection.c | 135 + |
|
deps/libuv/test/test-tcp-writealot.c | 196 + |
|
deps/libuv/test/test-threadpool.c | 57 + |
|
deps/libuv/test/test-timer-again.c | 141 + |
|
deps/libuv/test/test-timer.c | 172 + |
|
deps/libuv/test/test-tty.c | 66 + |
|
deps/libuv/test/test-udp-dgram-too-big.c | 86 + |
|
deps/libuv/test/test-udp-ipv6.c | 156 + |
|
deps/libuv/test/test-udp-multicast-join.c | 139 + |
|
deps/libuv/test/test-udp-send-and-recv.c | 208 + |
|
deps/libuv/uv.gyp | 397 + |
|
deps/libuv/uv.vcxproj | 1 + |
|
deps/libuv/vcbuild.bat | 93 + |
|
deps/linenoise/Makefile | 4 +- |
|
deps/linenoise/linenoise.c | 244 + |
|
msvs/RedisBenchmark/RedisBenchmark.vcxproj | 102 + |
|
msvs/RedisCheckAof/RedisCheckAof.vcxproj | 87 + |
|
msvs/RedisCheckDump/RedisCheckDump.vcxproj | 88 + |
|
msvs/RedisCli/RedisCli.vcxproj | 97 + |
|
msvs/RedisServer.sln | 109 + |
|
msvs/RedisServer.vcxproj | 156 + |
|
msvs/hiredis/hiredis.vcxproj | 87 + |
|
src/Makefile | 21 +- |
|
src/ae.c | 30 +- |
|
src/ae.h | 3 + |
|
src/ae_ws2.c | 96 + |
|
src/anet.c | 221 + |
|
src/aof.c | 289 +- |
|
src/config.c | 2 +- |
|
src/debug.c | 39 + |
|
src/dict.c | 5 + |
|
src/networking.c | 627 +- |
|
src/object.c | 2 +- |
|
src/pqsort.c | 5 + |
|
src/pubsub.c | 2 +- |
|
src/rdb.c | 225 +- |
|
src/redis-benchmark.c | 218 +- |
|
src/redis-check-aof.c | 48 +- |
|
src/redis-check-dump.c | 78 +- |
|
src/redis-cli.c | 32 +- |
|
src/redis.c | 352 +- |
|
src/redis.h | 108 +- |
|
src/release.c | 8 +- |
|
src/replication.c | 441 +- |
|
src/sds.c | 5 +- |
|
src/sds.h | 8 + |
|
src/sha1.c | 11 + |
|
src/syncio.c | 8 + |
|
src/t_list.c | 24 +- |
|
src/t_zset.c | 35 +- |
|
src/util.c | 22 +- |
|
src/vm.c | 144 +- |
|
src/win32fixes.c | 322 + |
|
src/win32fixes.h | 246 + |
|
src/zipmap.c | 4 + |
|
src/zmalloc.c | 8 + |
|
tests/integration/aof.tcl | 2 +- |
|
tests/support/server.tcl | 43 +- |
|
tests/test_helper.tcl | 2 +- |
|
339 files changed, 146821 insertions(+), 290 deletions(-) |
|
create mode 100644 deps/libuv/.gitignore |
|
create mode 100644 deps/libuv/.mailmap |
|
create mode 100644 deps/libuv/AUTHORS |
|
create mode 100644 deps/libuv/LICENSE |
|
create mode 100644 deps/libuv/Makefile |
|
create mode 100644 deps/libuv/README.md |
|
create mode 100644 deps/libuv/build/gcc_version.py |
|
create mode 100644 deps/libuv/common.gypi |
|
create mode 100644 deps/libuv/config-mingw.mk |
|
create mode 100644 deps/libuv/config-unix.mk |
|
create mode 100644 deps/libuv/gyp_uv |
|
create mode 100644 deps/libuv/include/ares.h |
|
create mode 100644 deps/libuv/include/ares_version.h |
|
create mode 100644 deps/libuv/include/uv-private/eio.h |
|
create mode 100644 deps/libuv/include/uv-private/ev.h |
|
create mode 100644 deps/libuv/include/uv-private/ngx-queue.h |
|
create mode 100644 deps/libuv/include/uv-private/tree.h |
|
create mode 100644 deps/libuv/include/uv-private/uv-unix.h |
|
create mode 100644 deps/libuv/include/uv-private/uv-win.h |
|
create mode 100644 deps/libuv/include/uv.h |
|
create mode 100644 deps/libuv/src/ares/AUTHORS |
|
create mode 100644 deps/libuv/src/ares/CHANGES |
|
create mode 100644 deps/libuv/src/ares/CMakeLists.txt |
|
create mode 100644 deps/libuv/src/ares/NEWS |
|
create mode 100644 deps/libuv/src/ares/README |
|
create mode 100644 deps/libuv/src/ares/README.cares |
|
create mode 100644 deps/libuv/src/ares/README.msvc |
|
create mode 100644 deps/libuv/src/ares/README.node |
|
create mode 100644 deps/libuv/src/ares/RELEASE-NOTES |
|
create mode 100644 deps/libuv/src/ares/TODO |
|
create mode 100644 deps/libuv/src/ares/ares__close_sockets.c |
|
create mode 100644 deps/libuv/src/ares/ares__get_hostent.c |
|
create mode 100644 deps/libuv/src/ares/ares__read_line.c |
|
create mode 100644 deps/libuv/src/ares/ares__timeval.c |
|
create mode 100644 deps/libuv/src/ares/ares_cancel.c |
|
create mode 100644 deps/libuv/src/ares/ares_data.c |
|
create mode 100644 deps/libuv/src/ares/ares_data.h |
|
create mode 100644 deps/libuv/src/ares/ares_destroy.c |
|
create mode 100644 deps/libuv/src/ares/ares_dns.h |
|
create mode 100644 deps/libuv/src/ares/ares_expand_name.c |
|
create mode 100644 deps/libuv/src/ares/ares_expand_string.c |
|
create mode 100644 deps/libuv/src/ares/ares_fds.c |
|
create mode 100644 deps/libuv/src/ares/ares_free_hostent.c |
|
create mode 100644 deps/libuv/src/ares/ares_free_string.c |
|
create mode 100644 deps/libuv/src/ares/ares_getenv.c |
|
create mode 100644 deps/libuv/src/ares/ares_getenv.h |
|
create mode 100644 deps/libuv/src/ares/ares_gethostbyaddr.c |
|
create mode 100644 deps/libuv/src/ares/ares_gethostbyname.c |
|
create mode 100644 deps/libuv/src/ares/ares_getnameinfo.c |
|
create mode 100644 deps/libuv/src/ares/ares_getopt.c |
|
create mode 100644 deps/libuv/src/ares/ares_getopt.h |
|
create mode 100644 deps/libuv/src/ares/ares_getsock.c |
|
create mode 100644 deps/libuv/src/ares/ares_init.c |
|
create mode 100644 deps/libuv/src/ares/ares_iphlpapi.h |
|
create mode 100644 deps/libuv/src/ares/ares_ipv6.h |
|
create mode 100644 deps/libuv/src/ares/ares_library_init.c |
|
create mode 100644 deps/libuv/src/ares/ares_library_init.h |
|
create mode 100644 deps/libuv/src/ares/ares_llist.c |
|
create mode 100644 deps/libuv/src/ares/ares_llist.h |
|
create mode 100644 deps/libuv/src/ares/ares_mkquery.c |
|
create mode 100644 deps/libuv/src/ares/ares_nowarn.c |
|
create mode 100644 deps/libuv/src/ares/ares_nowarn.h |
|
create mode 100644 deps/libuv/src/ares/ares_options.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_a_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_aaaa_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_mx_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_ns_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_ptr_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_srv_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_parse_txt_reply.c |
|
create mode 100644 deps/libuv/src/ares/ares_platform.c |
|
create mode 100644 deps/libuv/src/ares/ares_platform.h |
|
create mode 100644 deps/libuv/src/ares/ares_private.h |
|
create mode 100644 deps/libuv/src/ares/ares_process.c |
|
create mode 100644 deps/libuv/src/ares/ares_query.c |
|
create mode 100644 deps/libuv/src/ares/ares_rules.h |
|
create mode 100644 deps/libuv/src/ares/ares_search.c |
|
create mode 100644 deps/libuv/src/ares/ares_send.c |
|
create mode 100644 deps/libuv/src/ares/ares_setup.h |
|
create mode 100644 deps/libuv/src/ares/ares_strcasecmp.c |
|
create mode 100644 deps/libuv/src/ares/ares_strcasecmp.h |
|
create mode 100644 deps/libuv/src/ares/ares_strdup.c |
|
create mode 100644 deps/libuv/src/ares/ares_strdup.h |
|
create mode 100644 deps/libuv/src/ares/ares_strerror.c |
|
create mode 100644 deps/libuv/src/ares/ares_timeout.c |
|
create mode 100644 deps/libuv/src/ares/ares_version.c |
|
create mode 100644 deps/libuv/src/ares/ares_writev.c |
|
create mode 100644 deps/libuv/src/ares/ares_writev.h |
|
create mode 100644 deps/libuv/src/ares/bitncmp.c |
|
create mode 100644 deps/libuv/src/ares/bitncmp.h |
|
create mode 100644 deps/libuv/src/ares/config_cygwin/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_darwin/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_freebsd/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_linux/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_netbsd/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_openbsd/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_sunos/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/config_win32/ares_config.h |
|
create mode 100644 deps/libuv/src/ares/get_ver.awk |
|
create mode 100644 deps/libuv/src/ares/inet_net_pton.c |
|
create mode 100644 deps/libuv/src/ares/inet_net_pton.h |
|
create mode 100644 deps/libuv/src/ares/inet_ntop.c |
|
create mode 100644 deps/libuv/src/ares/inet_ntop.h |
|
create mode 100644 deps/libuv/src/ares/nameser.h |
|
create mode 100644 deps/libuv/src/ares/setup_once.h |
|
create mode 100644 deps/libuv/src/ares/windows_port.c |
|
create mode 100644 deps/libuv/src/unix/cares.c |
|
create mode 100644 deps/libuv/src/unix/core.c |
|
create mode 100644 deps/libuv/src/unix/cygwin.c |
|
create mode 100644 deps/libuv/src/unix/darwin.c |
|
create mode 100644 deps/libuv/src/unix/dl.c |
|
create mode 100644 deps/libuv/src/unix/eio/Changes |
|
create mode 100644 deps/libuv/src/unix/eio/LICENSE |
|
create mode 100644 deps/libuv/src/unix/eio/Makefile.am |
|
create mode 100644 deps/libuv/src/unix/eio/aclocal.m4 |
|
create mode 100644 deps/libuv/src/unix/eio/autogen.sh |
|
create mode 100644 deps/libuv/src/unix/eio/config.h.in |
|
create mode 100644 deps/libuv/src/unix/eio/config_cygwin.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_darwin.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_freebsd.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_linux.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_netbsd.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_openbsd.h |
|
create mode 100644 deps/libuv/src/unix/eio/config_sunos.h |
|
create mode 100644 deps/libuv/src/unix/eio/configure.ac |
|
create mode 100644 deps/libuv/src/unix/eio/demo.c |
|
create mode 100644 deps/libuv/src/unix/eio/ecb.h |
|
create mode 100644 deps/libuv/src/unix/eio/eio.3 |
|
create mode 100644 deps/libuv/src/unix/eio/eio.c |
|
create mode 100644 deps/libuv/src/unix/eio/eio.pod |
|
create mode 100644 deps/libuv/src/unix/eio/libeio.m4 |
|
create mode 100644 deps/libuv/src/unix/eio/xthread.h |
|
create mode 100644 deps/libuv/src/unix/error.c |
|
create mode 100644 deps/libuv/src/unix/ev/Changes |
|
create mode 100644 deps/libuv/src/unix/ev/LICENSE |
|
create mode 100644 deps/libuv/src/unix/ev/Makefile.am |
|
create mode 100644 deps/libuv/src/unix/ev/Makefile.in |
|
create mode 100644 deps/libuv/src/unix/ev/README |
|
create mode 100644 deps/libuv/src/unix/ev/aclocal.m4 |
|
create mode 100644 deps/libuv/src/unix/ev/autogen.sh |
|
create mode 100644 deps/libuv/src/unix/ev/config.guess |
|
create mode 100644 deps/libuv/src/unix/ev/config.h.in |
|
create mode 100644 deps/libuv/src/unix/ev/config.sub |
|
create mode 100644 deps/libuv/src/unix/ev/config_cygwin.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_darwin.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_freebsd.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_linux.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_netbsd.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_openbsd.h |
|
create mode 100644 deps/libuv/src/unix/ev/config_sunos.h |
|
create mode 100644 deps/libuv/src/unix/ev/configure |
|
create mode 100644 deps/libuv/src/unix/ev/configure.ac |
|
create mode 100644 deps/libuv/src/unix/ev/depcomp |
|
create mode 100644 deps/libuv/src/unix/ev/ev++.h |
|
create mode 100644 deps/libuv/src/unix/ev/ev.3 |
|
create mode 100644 deps/libuv/src/unix/ev/ev.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev.pod |
|
create mode 100644 deps/libuv/src/unix/ev/ev_epoll.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_kqueue.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_poll.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_port.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_select.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_vars.h |
|
create mode 100644 deps/libuv/src/unix/ev/ev_win32.c |
|
create mode 100644 deps/libuv/src/unix/ev/ev_wrap.h |
|
create mode 100644 deps/libuv/src/unix/ev/event.c |
|
create mode 100644 deps/libuv/src/unix/ev/event.h |
|
create mode 100644 deps/libuv/src/unix/ev/install-sh |
|
create mode 100644 deps/libuv/src/unix/ev/libev.m4 |
|
create mode 100644 deps/libuv/src/unix/ev/ltmain.sh |
|
create mode 100644 deps/libuv/src/unix/ev/missing |
|
create mode 100644 deps/libuv/src/unix/ev/mkinstalldirs |
|
create mode 100644 deps/libuv/src/unix/freebsd.c |
|
create mode 100644 deps/libuv/src/unix/fs.c |
|
create mode 100644 deps/libuv/src/unix/internal.h |
|
create mode 100644 deps/libuv/src/unix/kqueue.c |
|
create mode 100644 deps/libuv/src/unix/linux.c |
|
create mode 100644 deps/libuv/src/unix/netbsd.c |
|
create mode 100644 deps/libuv/src/unix/openbsd.c |
|
create mode 100644 deps/libuv/src/unix/pipe.c |
|
create mode 100644 deps/libuv/src/unix/process.c |
|
create mode 100644 deps/libuv/src/unix/stream.c |
|
create mode 100644 deps/libuv/src/unix/sunos.c |
|
create mode 100644 deps/libuv/src/unix/tcp.c |
|
create mode 100644 deps/libuv/src/unix/tty.c |
|
create mode 100644 deps/libuv/src/unix/udp.c |
|
create mode 100644 deps/libuv/src/unix/uv-eio.c |
|
create mode 100644 deps/libuv/src/unix/uv-eio.h |
|
create mode 100644 deps/libuv/src/uv-common.c |
|
create mode 100644 deps/libuv/src/uv-common.h |
|
create mode 100644 deps/libuv/src/win/async.c |
|
create mode 100644 deps/libuv/src/win/cares.c |
|
create mode 100644 deps/libuv/src/win/core.c |
|
create mode 100644 deps/libuv/src/win/dl.c |
|
create mode 100644 deps/libuv/src/win/error.c |
|
create mode 100644 deps/libuv/src/win/fs-event.c |
|
create mode 100644 deps/libuv/src/win/fs.c |
|
create mode 100644 deps/libuv/src/win/getaddrinfo.c |
|
create mode 100644 deps/libuv/src/win/handle.c |
|
create mode 100644 deps/libuv/src/win/internal.h |
|
create mode 100644 deps/libuv/src/win/loop-watcher.c |
|
create mode 100644 deps/libuv/src/win/pipe.c |
|
create mode 100644 deps/libuv/src/win/process.c |
|
create mode 100644 deps/libuv/src/win/req.c |
|
create mode 100644 deps/libuv/src/win/stream.c |
|
create mode 100644 deps/libuv/src/win/tcp.c |
|
create mode 100644 deps/libuv/src/win/threadpool.c |
|
create mode 100644 deps/libuv/src/win/threads.c |
|
create mode 100644 deps/libuv/src/win/timer.c |
|
create mode 100644 deps/libuv/src/win/tty.c |
|
create mode 100644 deps/libuv/src/win/udp.c |
|
create mode 100644 deps/libuv/src/win/util.c |
|
create mode 100644 deps/libuv/src/win/winapi.c |
|
create mode 100644 deps/libuv/src/win/winapi.h |
|
create mode 100644 deps/libuv/src/win/winsock.c |
|
create mode 100644 deps/libuv/src/win/winsock.h |
|
create mode 100644 deps/libuv/test/benchmark-ares.c |
|
create mode 100644 deps/libuv/test/benchmark-getaddrinfo.c |
|
create mode 100644 deps/libuv/test/benchmark-list.h |
|
create mode 100644 deps/libuv/test/benchmark-ping-pongs.c |
|
create mode 100644 deps/libuv/test/benchmark-pound.c |
|
create mode 100644 deps/libuv/test/benchmark-pump.c |
|
create mode 100644 deps/libuv/test/benchmark-sizes.c |
|
create mode 100644 deps/libuv/test/benchmark-spawn.c |
|
create mode 100644 deps/libuv/test/benchmark-tcp-write-batch.c |
|
create mode 100644 deps/libuv/test/benchmark-udp-packet-storm.c |
|
create mode 100644 deps/libuv/test/blackhole-server.c |
|
create mode 100644 deps/libuv/test/dns-server.c |
|
create mode 100644 deps/libuv/test/echo-server.c |
|
create mode 100644 deps/libuv/test/fixtures/empty_file |
|
create mode 100644 deps/libuv/test/run-benchmarks.c |
|
create mode 100644 deps/libuv/test/run-tests.c |
|
create mode 100644 deps/libuv/test/runner-unix.c |
|
create mode 100644 deps/libuv/test/runner-unix.h |
|
create mode 100644 deps/libuv/test/runner-win.c |
|
create mode 100644 deps/libuv/test/runner-win.h |
|
create mode 100644 deps/libuv/test/runner.c |
|
create mode 100644 deps/libuv/test/runner.h |
|
create mode 100644 deps/libuv/test/task.h |
|
create mode 100644 deps/libuv/test/test-async.c |
|
create mode 100644 deps/libuv/test/test-callback-stack.c |
|
create mode 100644 deps/libuv/test/test-connection-fail.c |
|
create mode 100644 deps/libuv/test/test-delayed-accept.c |
|
create mode 100644 deps/libuv/test/test-error.c |
|
create mode 100644 deps/libuv/test/test-fail-always.c |
|
create mode 100644 deps/libuv/test/test-fs-event.c |
|
create mode 100644 deps/libuv/test/test-fs.c |
|
create mode 100644 deps/libuv/test/test-get-currentexe.c |
|
create mode 100644 deps/libuv/test/test-get-loadavg.c |
|
create mode 100644 deps/libuv/test/test-get-memory.c |
|
create mode 100644 deps/libuv/test/test-getaddrinfo.c |
|
create mode 100644 deps/libuv/test/test-gethostbyname.c |
|
create mode 100644 deps/libuv/test/test-getsockname.c |
|
create mode 100644 deps/libuv/test/test-hrtime.c |
|
create mode 100644 deps/libuv/test/test-idle.c |
|
create mode 100644 deps/libuv/test/test-ipc.c |
|
create mode 100644 deps/libuv/test/test-list.h |
|
create mode 100644 deps/libuv/test/test-loop-handles.c |
|
create mode 100644 deps/libuv/test/test-multiple-listen.c |
|
create mode 100644 deps/libuv/test/test-pass-always.c |
|
create mode 100644 deps/libuv/test/test-ping-pong.c |
|
create mode 100644 deps/libuv/test/test-pipe-bind-error.c |
|
create mode 100644 deps/libuv/test/test-pipe-connect-error.c |
|
create mode 100644 deps/libuv/test/test-ref.c |
|
create mode 100644 deps/libuv/test/test-shutdown-eof.c |
|
create mode 100644 deps/libuv/test/test-spawn.c |
|
create mode 100644 deps/libuv/test/test-stdio-over-pipes.c |
|
create mode 100644 deps/libuv/test/test-tcp-bind-error.c |
|
create mode 100644 deps/libuv/test/test-tcp-bind6-error.c |
|
create mode 100644 deps/libuv/test/test-tcp-close.c |
|
create mode 100644 deps/libuv/test/test-tcp-connect-error.c |
|
create mode 100644 deps/libuv/test/test-tcp-connect6-error.c |
|
create mode 100644 deps/libuv/test/test-tcp-flags.c |
|
create mode 100644 deps/libuv/test/test-tcp-write-error.c |
|
create mode 100644 deps/libuv/test/test-tcp-write-to-half-open-connection.c |
|
create mode 100644 deps/libuv/test/test-tcp-writealot.c |
|
create mode 100644 deps/libuv/test/test-threadpool.c |
|
create mode 100644 deps/libuv/test/test-timer-again.c |
|
create mode 100644 deps/libuv/test/test-timer.c |
|
create mode 100644 deps/libuv/test/test-tty.c |
|
create mode 100644 deps/libuv/test/test-udp-dgram-too-big.c |
|
create mode 100644 deps/libuv/test/test-udp-ipv6.c |
|
create mode 100644 deps/libuv/test/test-udp-multicast-join.c |
|
create mode 100644 deps/libuv/test/test-udp-send-and-recv.c |
|
create mode 100644 deps/libuv/uv.gyp |
|
create mode 100644 deps/libuv/uv.vcxproj |
|
create mode 100644 deps/libuv/vcbuild.bat |
|
create mode 100644 msvs/RedisBenchmark/RedisBenchmark.vcxproj |
|
create mode 100644 msvs/RedisCheckAof/RedisCheckAof.vcxproj |
|
create mode 100644 msvs/RedisCheckDump/RedisCheckDump.vcxproj |
|
create mode 100644 msvs/RedisCli/RedisCli.vcxproj |
|
create mode 100644 msvs/RedisServer.sln |
|
create mode 100644 msvs/RedisServer.vcxproj |
|
create mode 100644 msvs/hiredis/hiredis.vcxproj |
|
create mode 100644 src/ae_ws2.c |
|
create mode 100644 src/win32fixes.c |
|
create mode 100644 src/win32fixes.h |
|
|
|
diff --git a/deps/hiredis/async.c b/deps/hiredis/async.c |
|
index 76c4cc3..4a3da73 100644 |
|
--- a/deps/hiredis/async.c |
|
+++ b/deps/hiredis/async.c |
|
@@ -30,7 +30,9 @@ |
|
*/ |
|
|
|
#include <string.h> |
|
+#ifndef _WIN32 |
|
#include <strings.h> |
|
+#endif |
|
#include <assert.h> |
|
#include <ctype.h> |
|
#include "async.h" |
|
@@ -38,6 +40,11 @@ |
|
#include "sds.h" |
|
#include "util.h" |
|
|
|
+#ifdef _WIN32 |
|
+#define strcasecmp _stricmp |
|
+#define strncasecmp _strnicmp |
|
+#endif |
|
+ |
|
/* Forward declaration of function in hiredis.c */ |
|
void __redisAppendCommand(redisContext *c, char *cmd, size_t len); |
|
|
|
@@ -47,8 +54,8 @@ static unsigned int callbackHash(const void *key) { |
|
} |
|
|
|
static void *callbackValDup(void *privdata, const void *src) { |
|
- ((void) privdata); |
|
redisCallback *dup = malloc(sizeof(*dup)); |
|
+ ((void) privdata); |
|
memcpy(dup,src,sizeof(*dup)); |
|
return dup; |
|
} |
|
diff --git a/deps/hiredis/example.c b/deps/hiredis/example.c |
|
index 90ff9ed..a1b199e 100644 |
|
--- a/deps/hiredis/example.c |
|
+++ b/deps/hiredis/example.c |
|
@@ -2,12 +2,29 @@ |
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
|
+#ifdef _WIN32 |
|
+#include <winsock2.h> |
|
+#include <windows.h> |
|
+#endif |
|
+ |
|
#include "hiredis.h" |
|
|
|
int main(void) { |
|
unsigned int j; |
|
redisContext *c; |
|
redisReply *reply; |
|
+#ifdef _WIN32 |
|
+ WSADATA t_wsa; |
|
+ WORD wVers = MAKEWORD(2, 2); // Set the version number to 2.2 |
|
+ int iError = WSAStartup(wVers, &t_wsa); |
|
+ |
|
+ if(iError != NO_ERROR || LOBYTE(t_wsa.wVersion) != 2 || HIBYTE(t_wsa.wVersion) != 2 ) { |
|
+ printf("Winsock2 init error: %d\n", iError); |
|
+ exit(1); |
|
+ } |
|
+ |
|
+ atexit((void(*)(void)) WSACleanup); |
|
+#endif |
|
|
|
struct timeval timeout = { 1, 500000 }; // 1.5 seconds |
|
c = redisConnectWithTimeout((char*)"127.0.0.2", 6379, timeout); |
|
diff --git a/deps/hiredis/hiredis.c b/deps/hiredis/hiredis.c |
|
index b27c63b..8942d04 100644 |
|
--- a/deps/hiredis/hiredis.c |
|
+++ b/deps/hiredis/hiredis.c |
|
@@ -31,7 +31,9 @@ |
|
|
|
#include <string.h> |
|
#include <stdlib.h> |
|
+#ifndef _WIN32 |
|
#include <unistd.h> |
|
+#endif |
|
#include <assert.h> |
|
#include <errno.h> |
|
#include <ctype.h> |
|
@@ -41,6 +43,15 @@ |
|
#include "sds.h" |
|
#include "util.h" |
|
|
|
+#ifdef _WIN32 |
|
+#include <winsock2.h> |
|
+#include <windows.h> |
|
+#endif |
|
+ |
|
+#ifdef _WIN32 |
|
+#define va_copy(d,s) d = (s) |
|
+#endif |
|
+ |
|
typedef struct redisReader { |
|
struct redisReplyObjectFunctions *fn; |
|
sds error; /* holds optional error */ |
|
@@ -596,7 +607,7 @@ static int intlen(int i) { |
|
/* Helper function for redisvFormatCommand(). */ |
|
static void addArgument(sds a, char ***argv, int *argc, int *totlen) { |
|
(*argc)++; |
|
- if ((*argv = realloc(*argv, sizeof(char*)*(*argc))) == NULL) redisOOM(); |
|
+ if ((*argv = (char **)realloc(*argv, sizeof(char*)*(*argc))) == NULL) redisOOM(); |
|
if (totlen) *totlen = *totlen+1+intlen(sdslen(a))+2+sdslen(a)+2; |
|
(*argv)[(*argc)-1] = a; |
|
} |
|
@@ -697,7 +708,11 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) { |
|
} |
|
|
|
/* Consume and discard vararg */ |
|
+#ifdef _WIN32 |
|
+ va_arg(ap,void*); |
|
+#else |
|
va_arg(ap,void); |
|
+#endif |
|
} |
|
} |
|
touched = 1; |
|
@@ -717,11 +732,15 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) { |
|
totlen += 1+intlen(argc)+2; |
|
|
|
/* Build the command at protocol level */ |
|
- cmd = malloc(totlen+1); |
|
+ cmd = (char*)malloc(totlen+1); |
|
if (!cmd) redisOOM(); |
|
pos = sprintf(cmd,"*%d\r\n",argc); |
|
for (j = 0; j < argc; j++) { |
|
+#ifdef _WIN32 |
|
+ pos += sprintf(cmd+pos,"$%llu\r\n",(unsigned long long)sdslen(argv[j])); |
|
+#else |
|
pos += sprintf(cmd+pos,"$%zu\r\n",sdslen(argv[j])); |
|
+#endif |
|
memcpy(cmd+pos,argv[j],sdslen(argv[j])); |
|
pos += sdslen(argv[j]); |
|
sdsfree(argv[j]); |
|
@@ -780,7 +799,11 @@ int redisFormatCommandArgv(char **target, int argc, const char **argv, const siz |
|
pos = sprintf(cmd,"*%d\r\n",argc); |
|
for (j = 0; j < argc; j++) { |
|
len = argvlen ? argvlen[j] : strlen(argv[j]); |
|
+#ifdef _WIN32 |
|
+ pos += sprintf(cmd+pos,"$%llu\r\n",(unsigned long long)len); |
|
+#else |
|
pos += sprintf(cmd+pos,"$%zu\r\n",len); |
|
+#endif |
|
memcpy(cmd+pos,argv[j],len); |
|
pos += len; |
|
cmd[pos++] = '\r'; |
|
@@ -815,7 +838,11 @@ static redisContext *redisContextInit(void) { |
|
|
|
void redisFree(redisContext *c) { |
|
if (c->fd > 0) |
|
+#ifdef _WIN32 |
|
+ closesocket(c->fd); |
|
+#else |
|
close(c->fd); |
|
+#endif |
|
if (c->errstr != NULL) |
|
sdsfree(c->errstr); |
|
if (c->obuf != NULL) |
|
@@ -870,6 +897,21 @@ redisContext *redisConnectUnixNonBlock(const char *path) { |
|
return c; |
|
} |
|
|
|
+/* initializers if caller handles connection */ |
|
+redisContext *redisConnected() { |
|
+ redisContext *c = redisContextInit(); |
|
+ c->fd = -1; |
|
+ c->flags |= REDIS_BLOCK; |
|
+ return c; |
|
+} |
|
+ |
|
+redisContext *redisConnectedNonBlock() { |
|
+ redisContext *c = redisContextInit(); |
|
+ c->fd = -1; |
|
+ c->flags &= ~REDIS_BLOCK; |
|
+ return c; |
|
+} |
|
+ |
|
/* Set read/write timeout on a blocking socket. */ |
|
int redisSetTimeout(redisContext *c, struct timeval tv) { |
|
if (c->flags & REDIS_BLOCK) |
|
@@ -902,7 +944,16 @@ static void __redisCreateReplyReader(redisContext *c) { |
|
* see if there is a reply available. */ |
|
int redisBufferRead(redisContext *c) { |
|
char buf[2048]; |
|
+#ifdef _WIN32 |
|
+ int nread = recv((SOCKET)c->fd,buf,sizeof(buf),0); |
|
+ if (nread == -1) { |
|
+ errno = WSAGetLastError(); |
|
+ if ((errno == ENOENT) || (errno == WSAEWOULDBLOCK)) |
|
+ errno = EAGAIN; |
|
+ } |
|
+#else |
|
int nread = read(c->fd,buf,sizeof(buf)); |
|
+#endif |
|
if (nread == -1) { |
|
if (errno == EAGAIN && !(c->flags & REDIS_BLOCK)) { |
|
/* Try again later */ |
|
@@ -921,6 +972,23 @@ int redisBufferRead(redisContext *c) { |
|
return REDIS_OK; |
|
} |
|
|
|
+/* Use this function if the caller has already read the data. It will |
|
+ * feed bytes to the reply parser. |
|
+ * |
|
+ * After this function is called, you may use redisContextReadReply to |
|
+ * see if there is a reply available. */ |
|
+int redisBufferReadDone(redisContext *c, char *buf, int nread) { |
|
+ if (nread == 0) { |
|
+ __redisSetError(c,REDIS_ERR_EOF, |
|
+ sdsnew("Server closed the connection")); |
|
+ return REDIS_ERR; |
|
+ } else { |
|
+ __redisCreateReplyReader(c); |
|
+ redisReplyReaderFeed(c->reader,buf,nread); |
|
+ } |
|
+ return REDIS_OK; |
|
+} |
|
+ |
|
/* Write the output buffer to the socket. |
|
* |
|
* Returns REDIS_OK when the buffer is empty, or (a part of) the buffer was |
|
@@ -933,7 +1001,16 @@ int redisBufferRead(redisContext *c) { |
|
int redisBufferWrite(redisContext *c, int *done) { |
|
int nwritten; |
|
if (sdslen(c->obuf) > 0) { |
|
+#ifdef _WIN32 |
|
+ nwritten = send((SOCKET)c->fd,c->obuf,sdslen(c->obuf),0); |
|
+ if (nwritten == -1) { |
|
+ errno = WSAGetLastError(); |
|
+ if ((errno == ENOENT) || (errno == WSAEWOULDBLOCK)) |
|
+ errno = EAGAIN; |
|
+ } |
|
+#else |
|
nwritten = write(c->fd,c->obuf,sdslen(c->obuf)); |
|
+#endif |
|
if (nwritten == -1) { |
|
if (errno == EAGAIN && !(c->flags & REDIS_BLOCK)) { |
|
/* Try again later */ |
|
diff --git a/deps/hiredis/hiredis.h b/deps/hiredis/hiredis.h |
|
index f445209..d59bfc7 100644 |
|
--- a/deps/hiredis/hiredis.h |
|
+++ b/deps/hiredis/hiredis.h |
|
@@ -33,7 +33,13 @@ |
|
#define __HIREDIS_H |
|
#include <stdio.h> /* for size_t */ |
|
#include <stdarg.h> /* for va_list */ |
|
+#ifndef _WIN32 |
|
#include <sys/time.h> /* for struct timeval */ |
|
+#endif |
|
+#ifdef _WIN32 |
|
+#include <winsock2.h> |
|
+#include <windows.h> |
|
+#endif |
|
|
|
#define HIREDIS_MAJOR 0 |
|
#define HIREDIS_MINOR 9 |
|
@@ -117,7 +123,11 @@ struct redisContext; /* need forward declaration of redisContext */ |
|
|
|
/* Context for a connection to Redis */ |
|
typedef struct redisContext { |
|
+#ifdef _WIN32 |
|
+ SOCKET fd; |
|
+#else |
|
int fd; |
|
+#endif |
|
int flags; |
|
char *obuf; /* Write buffer */ |
|
int err; /* Error flags, 0 when there is no error */ |
|
@@ -149,10 +159,13 @@ redisContext *redisConnectNonBlock(const char *ip, int port); |
|
redisContext *redisConnectUnix(const char *path); |
|
redisContext *redisConnectUnixWithTimeout(const char *path, struct timeval tv); |
|
redisContext *redisConnectUnixNonBlock(const char *path); |
|
+redisContext *redisConnected(); |
|
+redisContext *redisConnectedNonBlock(); |
|
int redisSetTimeout(redisContext *c, struct timeval tv); |
|
int redisSetReplyObjectFunctions(redisContext *c, redisReplyObjectFunctions *fn); |
|
void redisFree(redisContext *c); |
|
int redisBufferRead(redisContext *c); |
|
+int redisBufferReadDone(redisContext *c, char *buf, int nread); |
|
int redisBufferWrite(redisContext *c, int *done); |
|
|
|
/* In a blocking context, this function first checks if there are unconsumed |
|
diff --git a/deps/hiredis/net.c b/deps/hiredis/net.c |
|
index 438a129..0fd68b5 100644 |
|
--- a/deps/hiredis/net.c |
|
+++ b/deps/hiredis/net.c |
|
@@ -32,6 +32,7 @@ |
|
|
|
#include "fmacros.h" |
|
#include <sys/types.h> |
|
+#ifndef _WIN32 |
|
#include <sys/socket.h> |
|
#include <sys/select.h> |
|
#include <sys/un.h> |
|
@@ -39,9 +40,17 @@ |
|
#include <netinet/tcp.h> |
|
#include <arpa/inet.h> |
|
#include <unistd.h> |
|
+#else |
|
+#include "winsock2.h" |
|
+#include "windows.h" |
|
+#define socklen_t int |
|
+#define EINPROGRESS WSAEWOULDBLOCK |
|
+#endif |
|
#include <fcntl.h> |
|
#include <string.h> |
|
+#ifndef _WIN32 |
|
#include <netdb.h> |
|
+#endif |
|
#include <errno.h> |
|
#include <stdarg.h> |
|
#include <stdio.h> |
|
@@ -52,6 +61,31 @@ |
|
/* Forward declaration */ |
|
void __redisSetError(redisContext *c, int type, sds err); |
|
|
|
+#ifdef _WIN32 |
|
+static int redisCreateSocket(redisContext *c, int type) { |
|
+ SOCKET s; |
|
+ int on=1; |
|
+ |
|
+ s = socket(type, SOCK_STREAM, IPPROTO_TCP); |
|
+ if (s == INVALID_SOCKET) { |
|
+ __redisSetError(c,REDIS_ERR_IO,sdscatprintf(sdsempty(), "socket error: %d\n", WSAGetLastError())); |
|
+ return REDIS_ERR; |
|
+ } |
|
+ if (type == AF_INET) { |
|
+ LINGER l; |
|
+ l.l_onoff = 1; |
|
+ l.l_linger = 2; |
|
+ setsockopt(s, SOL_SOCKET, SO_LINGER, (const char *) &l, sizeof(l)); |
|
+ |
|
+ if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (const char *) &on, sizeof(on)) == -1) { |
|
+ __redisSetError(c,REDIS_ERR_IO,NULL); |
|
+ closesocket(s); |
|
+ return REDIS_ERR; |
|
+ } |
|
+ } |
|
+ return (int)s; |
|
+} |
|
+#else |
|
static int redisCreateSocket(redisContext *c, int type) { |
|
int s, on = 1; |
|
if ((s = socket(type, SOCK_STREAM, 0)) == -1) { |
|
@@ -67,7 +101,31 @@ static int redisCreateSocket(redisContext *c, int type) { |
|
} |
|
return s; |
|
} |
|
+#endif |
|
+ |
|
+ |
|
+#ifdef _WIN32 |
|
+static int redisSetBlocking(redisContext *c, int fd, int blocking) { |
|
+ // If iMode = 0, blocking is enabled; |
|
+ // If iMode != 0, non-blocking mode is enabled. |
|
+ u_long flags; |
|
+ |
|
+ if (blocking) |
|
+ flags = (u_long)0; |
|
+ else |
|
+ flags = (u_long)1; |
|
+ |
|
+ if (ioctlsocket((SOCKET)fd, FIONBIO, &flags) == SOCKET_ERROR) { |
|
+ errno = WSAGetLastError(); |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(), "ioctlsocket(FIONBIO): %d\n", errno)); |
|
+ closesocket(fd); |
|
+ return REDIS_ERR; |
|
+ }; |
|
+ return REDIS_OK; |
|
+} |
|
|
|
+#else |
|
static int redisSetBlocking(redisContext *c, int fd, int blocking) { |
|
int flags; |
|
|
|
@@ -94,7 +152,20 @@ static int redisSetBlocking(redisContext *c, int fd, int blocking) { |
|
} |
|
return REDIS_OK; |
|
} |
|
+#endif |
|
|
|
+#ifdef _WIN32 |
|
+static int redisSetTcpNoDelay(redisContext *c, int fd) { |
|
+ int yes = 1; |
|
+ if (setsockopt((SOCKET)fd, IPPROTO_TCP, TCP_NODELAY, (const char *)&yes, sizeof(yes)) == -1) { |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(), "setsockopt(TCP_NODELAY): %d", (int)GetLastError())); |
|
+ closesocket(fd); |
|
+ return REDIS_ERR; |
|
+ } |
|
+ return REDIS_OK; |
|
+} |
|
+#else |
|
static int redisSetTcpNoDelay(redisContext *c, int fd) { |
|
int yes = 1; |
|
if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &yes, sizeof(yes)) == -1) { |
|
@@ -105,6 +176,7 @@ static int redisSetTcpNoDelay(redisContext *c, int fd) { |
|
} |
|
return REDIS_OK; |
|
} |
|
+#endif |
|
|
|
static int redisContextWaitReady(redisContext *c, int fd, const struct timeval *timeout) { |
|
struct timeval to; |
|
@@ -121,35 +193,62 @@ static int redisContextWaitReady(redisContext *c, int fd, const struct timeval * |
|
|
|
if (errno == EINPROGRESS) { |
|
FD_ZERO(&wfd); |
|
+#ifdef _WIN32 |
|
+ FD_SET((SOCKET)fd, &wfd); |
|
+#else |
|
FD_SET(fd, &wfd); |
|
+#endif |
|
|
|
if (select(FD_SETSIZE, NULL, &wfd, NULL, toptr) == -1) { |
|
__redisSetError(c,REDIS_ERR_IO, |
|
sdscatprintf(sdsempty(), "select(2): %s", strerror(errno))); |
|
+#ifdef _WIN32 |
|
+ closesocket(fd); |
|
+#else |
|
close(fd); |
|
+#endif |
|
return REDIS_ERR; |
|
} |
|
|
|
if (!FD_ISSET(fd, &wfd)) { |
|
+#ifdef _WIN32 |
|
+ errno = WSAGetLastError(); |
|
+ __redisSetError(c,REDIS_ERR_IO,NULL); |
|
+ closesocket(fd); |
|
+#else |
|
errno = ETIMEDOUT; |
|
__redisSetError(c,REDIS_ERR_IO,NULL); |
|
close(fd); |
|
+#endif |
|
return REDIS_ERR; |
|
} |
|
|
|
err = 0; |
|
errlen = sizeof(err); |
|
+#ifdef _WIN32 |
|
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (char *)&err, &errlen) == SOCKET_ERROR) { |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(), "getsockopt(SO_ERROR): %d", WSAGetLastError())); |
|
+ closesocket(fd); |
|
+ return REDIS_ERR; |
|
+ } |
|
+#else |
|
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &errlen) == -1) { |
|
__redisSetError(c,REDIS_ERR_IO, |
|
sdscatprintf(sdsempty(), "getsockopt(SO_ERROR): %s", strerror(errno))); |
|
close(fd); |
|
return REDIS_ERR; |
|
} |
|
+#endif |
|
|
|
if (err) { |
|
errno = err; |
|
__redisSetError(c,REDIS_ERR_IO,NULL); |
|
+#ifdef _WIN32 |
|
+ closesocket(fd); |
|
+#else |
|
close(fd); |
|
+#endif |
|
return REDIS_ERR; |
|
} |
|
|
|
@@ -157,11 +256,27 @@ static int redisContextWaitReady(redisContext *c, int fd, const struct timeval * |
|
} |
|
|
|
__redisSetError(c,REDIS_ERR_IO,NULL); |
|
+#ifdef _WIN32 |
|
+ closesocket(fd); |
|
+#else |
|
close(fd); |
|
+#endif |
|
return REDIS_ERR; |
|
} |
|
|
|
int redisContextSetTimeout(redisContext *c, struct timeval tv) { |
|
+#ifdef _WIN32 |
|
+ if (setsockopt(c->fd,SOL_SOCKET,SO_RCVTIMEO,(const char *)&tv,sizeof(tv)) == SOCKET_ERROR ) { |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(), "setsockopt(SO_RCVTIMEO): %d", WSAGetLastError())); |
|
+ return REDIS_ERR; |
|
+ } |
|
+ if (setsockopt(c->fd,SOL_SOCKET,SO_SNDTIMEO,(const char *)&tv,sizeof(tv)) == SOCKET_ERROR ) { |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(), "setsockopt(SO_SNDTIMEO): %d", WSAGetLastError())); |
|
+ return REDIS_ERR; |
|
+ } |
|
+#else |
|
if (setsockopt(c->fd,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv)) == -1) { |
|
__redisSetError(c,REDIS_ERR_IO, |
|
sdscatprintf(sdsempty(), "setsockopt(SO_RCVTIMEO): %s", strerror(errno))); |
|
@@ -172,6 +287,7 @@ int redisContextSetTimeout(redisContext *c, struct timeval tv) { |
|
sdscatprintf(sdsempty(), "setsockopt(SO_SNDTIMEO): %s", strerror(errno))); |
|
return REDIS_ERR; |
|
} |
|
+#endif |
|
return REDIS_OK; |
|
} |
|
|
|
@@ -179,7 +295,9 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t |
|
int s; |
|
int blocking = (c->flags & REDIS_BLOCK); |
|
struct sockaddr_in sa; |
|
- |
|
+#ifdef _WIN32 |
|
+ unsigned long inAddress; |
|
+#endif |
|
if ((s = redisCreateSocket(c,AF_INET)) < 0) |
|
return REDIS_ERR; |
|
if (redisSetBlocking(c,s,0) != REDIS_OK) |
|
@@ -187,6 +305,27 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t |
|
|
|
sa.sin_family = AF_INET; |
|
sa.sin_port = htons(port); |
|
+#ifdef _WIN32 |
|
+ if (redisSetTcpNoDelay(c,s) != REDIS_OK) |
|
+ return REDIS_ERR; |
|
+ |
|
+ inAddress = inet_addr(addr); |
|
+ if (inAddress == INADDR_NONE || inAddress == INADDR_ANY) { |
|
+ struct hostent *he; |
|
+ |
|
+ he = gethostbyname(addr); |
|
+ if (he == NULL) { |
|
+ __redisSetError(c,REDIS_ERR_OTHER, |
|
+ sdscatprintf(sdsempty(),"can't resolve: %s\n", addr)); |
|
+ closesocket(s); |
|
+ return REDIS_ERR;; |
|
+ } |
|
+ memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); |
|
+ } |
|
+ else { |
|
+ sa.sin_addr.s_addr = inAddress; |
|
+ } |
|
+#else |
|
if (inet_aton(addr, &sa.sin_addr) == 0) { |
|
struct hostent *he; |
|
|
|
@@ -199,8 +338,16 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t |
|
} |
|
memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); |
|
} |
|
- |
|
+#endif |
|
+ |
|
+#ifdef _WIN32 |
|
+ if (connect((SOCKET)s, (struct sockaddr*)&sa, sizeof(sa)) == -1) { |
|
+ errno = WSAGetLastError(); |
|
+ if ((errno == WSAEINVAL) || (errno == WSAEWOULDBLOCK)) |
|
+ errno = EINPROGRESS; |
|
+#else |
|
if (connect(s, (struct sockaddr*)&sa, sizeof(sa)) == -1) { |
|
+#endif |
|
if (errno == EINPROGRESS && !blocking) { |
|
/* This is ok. */ |
|
} else { |
|
@@ -213,8 +360,10 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t |
|
if (blocking && redisSetBlocking(c,s,1) != REDIS_OK) |
|
return REDIS_ERR; |
|
|
|
+#ifndef _WIN32 |
|
if (redisSetTcpNoDelay(c,s) != REDIS_OK) |
|
return REDIS_ERR; |
|
+#endif |
|
|
|
c->fd = s; |
|
c->flags |= REDIS_CONNECTED; |
|
@@ -222,6 +371,13 @@ int redisContextConnectTcp(redisContext *c, const char *addr, int port, struct t |
|
} |
|
|
|
int redisContextConnectUnix(redisContext *c, const char *path, struct timeval *timeout) { |
|
+#ifdef _WIN32 |
|
+ (void) timeout; |
|
+ __redisSetError(c,REDIS_ERR_IO, |
|
+ sdscatprintf(sdsempty(),"Unix sockets are not suported on Windows platform. (%s)\n", path)); |
|
+ |
|
+ return REDIS_ERR; |
|
+#else |
|
int s; |
|
int blocking = (c->flags & REDIS_BLOCK); |
|
struct sockaddr_un sa; |
|
@@ -249,4 +405,5 @@ int redisContextConnectUnix(redisContext *c, const char *path, struct timeval *t |
|
c->fd = s; |
|
c->flags |= REDIS_CONNECTED; |
|
return REDIS_OK; |
|
+#endif |
|
} |
|
diff --git a/deps/hiredis/sds.h b/deps/hiredis/sds.h |
|
index 94f5871..5f23c5a 100644 |
|
--- a/deps/hiredis/sds.h |
|
+++ b/deps/hiredis/sds.h |
|
@@ -36,6 +36,12 @@ |
|
|
|
typedef char *sds; |
|
|
|
+#ifdef _WIN32 |
|
+#define inline __inline |
|
+#define va_copy(d,s) d = (s) |
|
+#endif |
|
+ |
|
+ |
|
struct sdshdr { |
|
int len; |
|
int free; |
|
@@ -43,12 +49,12 @@ struct sdshdr { |
|
}; |
|
|
|
static inline size_t sdslen(const sds s) { |
|
- struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); |
|
+ struct sdshdr *sh = (struct sdshdr*)(s-(sizeof(struct sdshdr))); |
|
return sh->len; |
|
} |
|
|
|
static inline size_t sdsavail(const sds s) { |
|
- struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr))); |
|
+ struct sdshdr *sh = (struct sdshdr*)(s-(sizeof(struct sdshdr))); |
|
return sh->free; |
|
} |
|
|
|
diff --git a/deps/hiredis/test.c b/deps/hiredis/test.c |
|
index 5724a3e..a9e5763 100644 |
|
--- a/deps/hiredis/test.c |
|
+++ b/deps/hiredis/test.c |
|
@@ -10,6 +10,11 @@ |
|
|
|
#include "hiredis.h" |
|
|
|
+#ifdef _WIN32 |
|
+#include <winsock2.h> |
|
+#include <windows.h> |
|
+#endif |
|
+ |
|
/* The following lines make up our testing "framework" :) */ |
|
static int tests = 0, fails = 0; |
|
#define test(_s) { printf("#%02d ", ++tests); printf(_s); } |
|
@@ -515,7 +520,22 @@ int main(int argc, char **argv) { |
|
use_unix = 1; |
|
} |
|
|
|
+#ifdef _WIN32 |
|
+ WSADATA t_wsa; |
|
+ WORD wVers; |
|
+ int iError; |
|
+ |
|
+ wVers = MAKEWORD(2, 2); // Set the version number to 2.2 |
|
+ iError = WSAStartup(wVers, &t_wsa); |
|
+ if(iError != NO_ERROR || LOBYTE(t_wsa.wVersion) != 2 || HIBYTE(t_wsa.wVersion) != 2 ) { |
|
+ printf("Winsock2 init error: %d\n", iError); |
|
+ exit(1); |
|
+ } |
|
+ |
|
+ atexit((void(*)(void)) WSACleanup); |
|
+#else |
|
signal(SIGPIPE, SIG_IGN); |
|
+#endif |
|
test_format_commands(); |
|
test_blocking_connection(); |
|
test_reply_reader(); |
|
diff --git a/deps/libuv/.gitignore b/deps/libuv/.gitignore |
|
new file mode 100644 |
|
index 0000000..18eb4c9 |
|
--- /dev/null |
|
+++ b/deps/libuv/.gitignore |
|
@@ -0,0 +1,28 @@ |
|
+*.swp |
|
+*.o |
|
+*.lo |
|
+*.la |
|
+*.a |
|
+*.opensdf |
|
+*.orig |
|
+*.sdf |
|
+*.suo |
|
+/out/ |
|
+/build/gyp |
|
+ |
|
+/test/run-tests |
|
+/test/run-tests.exe |
|
+/test/run-tests.dSYM |
|
+/test/run-benchmarks |
|
+/test/run-benchmarks.exe |
|
+/test/run-benchmarks.dSYM |
|
+ |
|
+*.sln |
|
+*.vcproj |
|
+*.vcxproj.filters |
|
+*.vcxproj.user |
|
+_UpgradeReport_Files/ |
|
+UpgradeLog*.XML |
|
+Debug |
|
+Release |
|
+ipch |
|
diff --git a/deps/libuv/.mailmap b/deps/libuv/.mailmap |
|
new file mode 100644 |
|
index 0000000..accc962 |
|
--- /dev/null |
|
+++ b/deps/libuv/.mailmap |
|
@@ -0,0 +1,11 @@ |
|
+# update AUTHORS with: |
|
+# git log --all --reverse --format='%aN <%aE>' | perl -ne 'BEGIN{print "# Authors ordered by first contribution.\n"} print unless $h{$_}; $h{$_} = 1' > AUTHORS |
|
+<[email protected]> <[email protected]> |
|
+<[email protected]> <[email protected]> |
|
+<[email protected]> <[email protected]> |
|
+<[email protected]> <[email protected]> |
|
+San-Tai Hsu <[email protected]> |
|
+Isaac Z. Schlueter <[email protected]> |
|
+Saúl Ibarra Corretgé <[email protected]> |
|
+Yuki OKUMURA <[email protected]> |
|
+Frank Denis <[email protected]> |
|
diff --git a/deps/libuv/AUTHORS b/deps/libuv/AUTHORS |
|
new file mode 100644 |
|
index 0000000..16f8893 |
|
--- /dev/null |
|
+++ b/deps/libuv/AUTHORS |
|
@@ -0,0 +1,35 @@ |
|
+# Authors ordered by first contribution. |
|
+Ryan Dahl <[email protected]> |
|
+Bert Belder <[email protected]> |
|
+Josh Roesslein <[email protected]> |
|
+Alan Gutierrez <[email protected]> |
|
+Joshua Peek <[email protected]> |
|
+Igor Zinkovsky <[email protected]> |
|
+San-Tai Hsu <[email protected]> |
|
+Ben Noordhuis <[email protected]> |
|
+Henry Rawas <[email protected]> |
|
+Robert Mustacchi <[email protected]> |
|
+Matt Stevens <[email protected]> |
|
+Paul Querna <[email protected]> |
|
+Shigeki Ohtsu <[email protected]> |
|
+Tom Hughes <[email protected]> |
|
+Peter Bright <[email protected]> |
|
+Jeroen Janssen <[email protected]> |
|
+Andrea Lattuada <[email protected]> |
|
+Augusto Henrique Hentz <[email protected]> |
|
+Clifford Heath <[email protected]> |
|
+Jorge Chamorro Bieling <[email protected]> |
|
+Luis Lavena <[email protected]> |
|
+Matthew Sporleder <[email protected]> |
|
+Erick Tryzelaar <[email protected]> |
|
+Isaac Z. Schlueter <[email protected]> |
|
+Pieter Noordhuis <[email protected]> |
|
+Marek Jelen <[email protected]> |
|
+Fedor Indutny <[email protected]> |
|
+Saúl Ibarra Corretgé <[email protected]> |
|
+Felix GeisendoÌrfer <[email protected]> |
|
+Yuki OKUMURA <[email protected]> |
|
+Roman Shtylman <[email protected]> |
|
+Frank Denis <[email protected]> |
|
+Carter Allen <[email protected]> |
|
+Tj Holowaychuk <[email protected]> |
|
diff --git a/deps/libuv/LICENSE b/deps/libuv/LICENSE |
|
new file mode 100644 |
|
index 0000000..f7df47f |
|
--- /dev/null |
|
+++ b/deps/libuv/LICENSE |
|
@@ -0,0 +1,40 @@ |
|
+libuv is part of the Node project: http://nodejs.org/ |
|
+libuv may be distributed alone under Node's license: |
|
+ |
|
+==== |
|
+ |
|
+Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+of this software and associated documentation files (the "Software"), to |
|
+deal in the Software without restriction, including without limitation the |
|
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+sell copies of the Software, and to permit persons to whom the Software is |
|
+furnished to do so, subject to the following conditions: |
|
+ |
|
+The above copyright notice and this permission notice shall be included in |
|
+all copies or substantial portions of the Software. |
|
+ |
|
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+IN THE SOFTWARE. |
|
+ |
|
+==== |
|
+ |
|
+This license applies to all parts of libuv that are not externally |
|
+maintained libraries. |
|
+ |
|
+The externally maintained libraries used by libuv are: |
|
+ |
|
+ - tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. |
|
+ |
|
+ - ngx_queue.h (from Nginx), copyright Igor Sysoev. Two clause BSD license. |
|
+ |
|
+ - libev, located at ev/ is copyright Marc Alexander Lehmann, and |
|
+ dual-licensed under the MIT license and GPL2. |
|
+ |
|
+ - libeio, located at eio/ is copyright Marc Alexander Lehmann, and |
|
+ dual-licensed under the MIT license and GPL2. |
|
diff --git a/deps/libuv/Makefile b/deps/libuv/Makefile |
|
new file mode 100644 |
|
index 0000000..cf1e788 |
|
--- /dev/null |
|
+++ b/deps/libuv/Makefile |
|
@@ -0,0 +1,119 @@ |
|
+# Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+# |
|
+# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+# of this software and associated documentation files (the "Software"), to |
|
+# deal in the Software without restriction, including without limitation the |
|
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+# sell copies of the Software, and to permit persons to whom the Software is |
|
+# furnished to do so, subject to the following conditions: |
|
+# |
|
+# The above copyright notice and this permission notice shall be included in |
|
+# all copies or substantial portions of the Software. |
|
+# |
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+# IN THE SOFTWARE. |
|
+ |
|
+uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') |
|
+ |
|
+ifdef MSVC |
|
+uname_S := MINGW |
|
+endif |
|
+ |
|
+CPPFLAGS += -Iinclude -Iinclude/uv-private |
|
+ |
|
+CARES_OBJS = |
|
+CARES_OBJS += src/ares/ares__close_sockets.o |
|
+CARES_OBJS += src/ares/ares__get_hostent.o |
|
+CARES_OBJS += src/ares/ares__read_line.o |
|
+CARES_OBJS += src/ares/ares__timeval.o |
|
+CARES_OBJS += src/ares/ares_cancel.o |
|
+CARES_OBJS += src/ares/ares_data.o |
|
+CARES_OBJS += src/ares/ares_destroy.o |
|
+CARES_OBJS += src/ares/ares_expand_name.o |
|
+CARES_OBJS += src/ares/ares_expand_string.o |
|
+CARES_OBJS += src/ares/ares_fds.o |
|
+CARES_OBJS += src/ares/ares_free_hostent.o |
|
+CARES_OBJS += src/ares/ares_free_string.o |
|
+CARES_OBJS += src/ares/ares_gethostbyaddr.o |
|
+CARES_OBJS += src/ares/ares_gethostbyname.o |
|
+CARES_OBJS += src/ares/ares_getnameinfo.o |
|
+CARES_OBJS += src/ares/ares_getopt.o |
|
+CARES_OBJS += src/ares/ares_getsock.o |
|
+CARES_OBJS += src/ares/ares_init.o |
|
+CARES_OBJS += src/ares/ares_library_init.o |
|
+CARES_OBJS += src/ares/ares_llist.o |
|
+CARES_OBJS += src/ares/ares_mkquery.o |
|
+CARES_OBJS += src/ares/ares_nowarn.o |
|
+CARES_OBJS += src/ares/ares_options.o |
|
+CARES_OBJS += src/ares/ares_parse_a_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_aaaa_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_mx_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_ns_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_ptr_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_srv_reply.o |
|
+CARES_OBJS += src/ares/ares_parse_txt_reply.o |
|
+CARES_OBJS += src/ares/ares_process.o |
|
+CARES_OBJS += src/ares/ares_query.o |
|
+CARES_OBJS += src/ares/ares_search.o |
|
+CARES_OBJS += src/ares/ares_send.o |
|
+CARES_OBJS += src/ares/ares_strcasecmp.o |
|
+CARES_OBJS += src/ares/ares_strdup.o |
|
+CARES_OBJS += src/ares/ares_strerror.o |
|
+CARES_OBJS += src/ares/ares_timeout.o |
|
+CARES_OBJS += src/ares/ares_version.o |
|
+CARES_OBJS += src/ares/ares_writev.o |
|
+CARES_OBJS += src/ares/bitncmp.o |
|
+CARES_OBJS += src/ares/inet_net_pton.o |
|
+CARES_OBJS += src/ares/inet_ntop.o |
|
+ |
|
+ifneq (,$(findstring MINGW,$(uname_S))) |
|
+include config-mingw.mk |
|
+else |
|
+include config-unix.mk |
|
+endif |
|
+ |
|
+TESTS=test/blackhole-server.c test/echo-server.c test/test-*.c |
|
+BENCHMARKS=test/blackhole-server.c test/echo-server.c test/dns-server.c test/benchmark-*.c |
|
+ |
|
+all: uv.a |
|
+ |
|
+$(CARES_OBJS): %.o: %.c |
|
+ $(CC) -o $*.o -c $(CFLAGS) $(CPPFLAGS) $< -DHAVE_CONFIG_H |
|
+ |
|
+test/run-tests$(E): test/*.h test/run-tests.c $(RUNNER_SRC) test/runner-unix.c $(TESTS) uv.a |
|
+ $(CC) $(CPPFLAGS) $(RUNNER_CFLAGS) -o test/run-tests test/run-tests.c \ |
|
+ test/runner.c $(RUNNER_SRC) $(TESTS) uv.a $(RUNNER_LIBS) $(RUNNER_LINKFLAGS) |
|
+ |
|
+test/run-benchmarks$(E): test/*.h test/run-benchmarks.c test/runner.c $(RUNNER_SRC) $(BENCHMARKS) uv.a |
|
+ $(CC) $(CPPFLAGS) $(RUNNER_CFLAGS) -o test/run-benchmarks test/run-benchmarks.c \ |
|
+ test/runner.c $(RUNNER_SRC) $(BENCHMARKS) uv.a $(RUNNER_LIBS) $(RUNNER_LINKFLAGS) |
|
+ |
|
+test/echo.o: test/echo.c test/echo.h |
|
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c test/echo.c -o test/echo.o |
|
+ |
|
+ |
|
+.PHONY: clean clean-platform distclean distclean-platform test bench |
|
+ |
|
+ |
|
+test: test/run-tests$(E) |
|
+ test/run-tests |
|
+ |
|
+#test-%: test/run-tests$(E) |
|
+# test/run-tests $(@:test-%=%) |
|
+ |
|
+bench: test/run-benchmarks$(E) |
|
+ test/run-benchmarks |
|
+ |
|
+#bench-%: test/run-benchmarks$(E) |
|
+# test/run-benchmarks $(@:bench-%=%) |
|
+ |
|
+clean: clean-platform |
|
+ $(RM) -f src/*.o *.a test/run-tests$(E) test/run-benchmarks$(E) |
|
+ |
|
+distclean: distclean-platform |
|
+ $(RM) -f src/*.o *.a test/run-tests$(E) test/run-benchmarks$(E) |
|
diff --git a/deps/libuv/README.md b/deps/libuv/README.md |
|
new file mode 100644 |
|
index 0000000..8e569bb |
|
--- /dev/null |
|
+++ b/deps/libuv/README.md |
|
@@ -0,0 +1,88 @@ |
|
+# libuv |
|
+ |
|
+libuv is a new platform layer for Node. Its purpose is to abstract IOCP on |
|
+windows and libev on Unix systems. We intend to eventually contain all |
|
+platform differences in this library. |
|
+ |
|
+http://nodejs.org/ |
|
+ |
|
+## Features |
|
+ |
|
+ * Non-blocking TCP sockets |
|
+ |
|
+ * Non-blocking named pipes |
|
+ |
|
+ * UDP |
|
+ |
|
+ * Timers |
|
+ |
|
+ * Child process spawning |
|
+ |
|
+ * Asynchronous DNS via c-ares or `uv_getaddrinfo`. |
|
+ |
|
+ * Asynchronous file system APIs `uv_fs_*` |
|
+ |
|
+ * High resolution time `uv_hrtime` |
|
+ |
|
+ * Current executable path look up `uv_exepath` |
|
+ |
|
+ * Thread pool scheduling `uv_queue_work` |
|
+ |
|
+ * ANSI escape code controlled TTY `uv_tty_t` |
|
+ |
|
+ * File system events Currently supports inotify, `ReadDirectoryChangesW` |
|
+ and kqueue. Event ports in the near future. |
|
+ `uv_fs_event_t` |
|
+ |
|
+ * IPC and socket sharing between processes `uv_write2` |
|
+ |
|
+ |
|
+## Documentation |
|
+ |
|
+See `include/uv.h`. |
|
+ |
|
+ |
|
+## Build Instructions |
|
+ |
|
+For GCC (including MinGW) there are two methods building: via normal |
|
+makefiles or via GYP. GYP is a meta-build system which can generate MSVS, |
|
+Makefile, and XCode backends. It is best used for integration into other |
|
+projects. The old (more stable) system is using Makefiles. |
|
+ |
|
+To build via Makefile simply execute: |
|
+ |
|
+ make |
|
+ |
|
+To build with Visual Studio run the vcbuilds.bat file which will |
|
+checkout the GYP code into build/gyp and generate the uv.sln and |
|
+related files. |
|
+ |
|
+Windows users can also build from cmd-line using msbuild. This is |
|
+done by running vcbuild.bat from Visual Studio command prompt. |
|
+ |
|
+To have GYP generate build script for another system you will need to |
|
+checkout GYP into the project tree manually: |
|
+ |
|
+ svn co http://gyp.googlecode.com/svn/trunk build/gyp |
|
+ |
|
+Unix users run |
|
+ |
|
+ ./gyp_uv -f make |
|
+ make |
|
+ |
|
+Macintosh users run |
|
+ |
|
+ ./gyp_uv -f xcode |
|
+ xcodebuild -project uv.xcodeproj -configuration Release -target All |
|
+ |
|
+ |
|
+## Supported Platforms |
|
+ |
|
+Microsoft Windows operating systems since Windows XP SP2. It can be built |
|
+with either Visual Studio or MinGW. |
|
+ |
|
+Linux 2.6 using the GCC toolchain. |
|
+ |
|
+MacOS using the GCC or XCode toolchain. |
|
+ |
|
+Solaris 121 and later using GCC toolchain. |
|
diff --git a/deps/libuv/build/gcc_version.py b/deps/libuv/build/gcc_version.py |
|
new file mode 100644 |
|
index 0000000..da019e8 |
|
--- /dev/null |
|
+++ b/deps/libuv/build/gcc_version.py |
|
@@ -0,0 +1,20 @@ |
|
+#!/usr/bin/env python |
|
+ |
|
+import os |
|
+import re |
|
+import subprocess |
|
+import sys |
|
+ |
|
+ |
|
+def DoMain(*args): |
|
+ cc = os.environ.get('CC', 'gcc') |
|
+ stdin, stderr = os.pipe() |
|
+ subprocess.call([cc, '-v'], stderr=stderr) |
|
+ output = os.read(stdin, 4096) |
|
+ match = re.search("\ngcc version (\d+\.\d+\.\d+)", output) |
|
+ if match: |
|
+ print(match.group(1)) |
|
+ |
|
+ |
|
+if __name__ == '__main__': |
|
+ DoMain(*sys.argv) |
|
diff --git a/deps/libuv/common.gypi b/deps/libuv/common.gypi |
|
new file mode 100644 |
|
index 0000000..e0eb76d |
|
--- /dev/null |
|
+++ b/deps/libuv/common.gypi |
|
@@ -0,0 +1,177 @@ |
|
+{ |
|
+ 'variables': { |
|
+ 'visibility%': 'hidden', # V8's visibility setting |
|
+ 'target_arch%': 'ia32', # set v8's target architecture |
|
+ 'host_arch%': 'ia32', # set v8's host architecture |
|
+ 'library%': 'static_library', # allow override to 'shared_library' for DLL/.so builds |
|
+ 'component%': 'static_library', # NB. these names match with what V8 expects |
|
+ 'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way |
|
+ }, |
|
+ |
|
+ 'target_defaults': { |
|
+ 'default_configuration': 'Debug', |
|
+ 'configurations': { |
|
+ 'Debug': { |
|
+ 'defines': [ 'DEBUG', '_DEBUG' ], |
|
+ 'cflags': [ '-g', '-O0' ], |
|
+ 'msvs_settings': { |
|
+ 'VCCLCompilerTool': { |
|
+ 'target_conditions': [ |
|
+ ['library=="static_library"', { |
|
+ 'RuntimeLibrary': 1, # static debug |
|
+ }, { |
|
+ 'RuntimeLibrary': 3, # DLL debug |
|
+ }], |
|
+ ], |
|
+ 'Optimization': 0, # /Od, no optimization |
|
+ 'MinimalRebuild': 'true', |
|
+ 'OmitFramePointers': 'false', |
|
+ 'BasicRuntimeChecks': 3, # /RTC1 |
|
+ }, |
|
+ 'VCLinkerTool': { |
|
+ 'LinkIncremental': 2, # enable incremental linking |
|
+ }, |
|
+ }, |
|
+ 'conditions': [ |
|
+ ['OS != "win"', { |
|
+ 'defines': [ 'EV_VERIFY=2' ], |
|
+ }], |
|
+ ] |
|
+ }, |
|
+ 'Release': { |
|
+ 'defines': [ 'NDEBUG' ], |
|
+ 'cflags': [ '-O3', '-fomit-frame-pointer', '-fdata-sections', '-ffunction-sections' ], |
|
+ 'msvs_settings': { |
|
+ 'VCCLCompilerTool': { |
|
+ 'target_conditions': [ |
|
+ ['library=="static_library"', { |
|
+ 'RuntimeLibrary': 0, # static release |
|
+ }, { |
|
+ 'RuntimeLibrary': 2, # debug release |
|
+ }], |
|
+ ], |
|
+ 'Optimization': 3, # /Ox, full optimization |
|
+ 'FavorSizeOrSpeed': 1, # /Ot, favour speed over size |
|
+ 'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible |
|
+ 'WholeProgramOptimization': 'true', # /GL, whole program optimization, needed for LTCG |
|
+ 'OmitFramePointers': 'true', |
|
+ 'EnableFunctionLevelLinking': 'true', |
|
+ 'EnableIntrinsicFunctions': 'true', |
|
+ 'AdditionalOptions': [ |
|
+ '/MP', # compile across multiple CPUs |
|
+ ], |
|
+ }, |
|
+ 'VCLibrarianTool': { |
|
+ 'AdditionalOptions': [ |
|
+ '/LTCG', # link time code generation |
|
+ ], |
|
+ }, |
|
+ 'VCLinkerTool': { |
|
+ 'LinkTimeCodeGeneration': 1, # link-time code generation |
|
+ 'OptimizeReferences': 2, # /OPT:REF |
|
+ 'EnableCOMDATFolding': 2, # /OPT:ICF |
|
+ 'LinkIncremental': 1, # disable incremental linking |
|
+ }, |
|
+ }, |
|
+ } |
|
+ }, |
|
+ 'msvs_settings': { |
|
+ 'VCCLCompilerTool': { |
|
+ 'StringPooling': 'true', # pool string literals |
|
+ 'DebugInformationFormat': 3, # Generate a PDB |
|
+ 'WarningLevel': 3, |
|
+ 'BufferSecurityCheck': 'true', |
|
+ 'ExceptionHandling': 1, # /EHsc |
|
+ 'SuppressStartupBanner': 'true', |
|
+ 'WarnAsError': 'false', |
|
+ }, |
|
+ 'VCLibrarianTool': { |
|
+ }, |
|
+ 'VCLinkerTool': { |
|
+ 'GenerateDebugInformation': 'true', |
|
+ 'RandomizedBaseAddress': 2, # enable ASLR |
|
+ 'DataExecutionPrevention': 2, # enable DEP |
|
+ 'AllowIsolation': 'true', |
|
+ 'SuppressStartupBanner': 'true', |
|
+ 'target_conditions': [ |
|
+ ['_type=="executable"', { |
|
+ 'SubSystem': 1, # console executable |
|
+ }], |
|
+ ], |
|
+ }, |
|
+ }, |
|
+ 'conditions': [ |
|
+ ['OS == "win"', { |
|
+ 'msvs_cygwin_shell': 0, # prevent actions from trying to use cygwin |
|
+ 'defines': [ |
|
+ 'WIN32', |
|
+ # we don't really want VC++ warning us about |
|
+ # how dangerous C functions are... |
|
+ '_CRT_SECURE_NO_DEPRECATE', |
|
+ # ... or that C implementations shouldn't use |
|
+ # POSIX names |
|
+ '_CRT_NONSTDC_NO_DEPRECATE', |
|
+ ], |
|
+ }], |
|
+ [ 'OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', { |
|
+ 'variables': { |
|
+ 'gcc_version%': '<!(python build/gcc_version.py)>)', |
|
+ }, |
|
+ 'cflags': [ '-Wall' ], |
|
+ 'cflags_cc': [ '-fno-rtti', '-fno-exceptions' ], |
|
+ 'conditions': [ |
|
+ [ 'host_arch != target_arch and target_arch=="ia32"', { |
|
+ 'cflags': [ '-m32' ], |
|
+ 'ldflags': [ '-m32' ], |
|
+ }], |
|
+ [ 'OS=="linux"', { |
|
+ 'cflags': [ '-ansi' ], |
|
+ }], |
|
+ [ 'OS=="solaris"', { |
|
+ 'cflags': [ '-pthreads' ], |
|
+ 'ldflags': [ '-pthreads' ], |
|
+ }, { |
|
+ 'cflags': [ '-pthread' ], |
|
+ 'ldflags': [ '-pthread' ], |
|
+ }], |
|
+ [ 'visibility=="hidden" and gcc_version >= "4.0.0"', { |
|
+ 'cflags': [ '-fvisibility=hidden' ], |
|
+ }], |
|
+ ], |
|
+ }], |
|
+ ['OS=="mac"', { |
|
+ 'xcode_settings': { |
|
+ 'ALWAYS_SEARCH_USER_PATHS': 'NO', |
|
+ 'GCC_CW_ASM_SYNTAX': 'NO', # No -fasm-blocks |
|
+ 'GCC_DYNAMIC_NO_PIC': 'NO', # No -mdynamic-no-pic |
|
+ # (Equivalent to -fPIC) |
|
+ 'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', # -fno-exceptions |
|
+ 'GCC_ENABLE_CPP_RTTI': 'NO', # -fno-rtti |
|
+ 'GCC_ENABLE_PASCAL_STRINGS': 'NO', # No -mpascal-strings |
|
+ # GCC_INLINES_ARE_PRIVATE_EXTERN maps to -fvisibility-inlines-hidden |
|
+ 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES', |
|
+ 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden |
|
+ 'GCC_THREADSAFE_STATICS': 'NO', # -fno-threadsafe-statics |
|
+ 'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES', # -Wnewline-eof |
|
+ 'MACOSX_DEPLOYMENT_TARGET': '10.4', # -mmacosx-version-min=10.4 |
|
+ 'PREBINDING': 'NO', # No -Wl,-prebind |
|
+ 'USE_HEADERMAP': 'NO', |
|
+ 'OTHER_CFLAGS': [ |
|
+ '-fno-strict-aliasing', |
|
+ ], |
|
+ 'WARNING_CFLAGS': [ |
|
+ '-Wall', |
|
+ '-Wendif-labels', |
|
+ '-W', |
|
+ '-Wno-unused-parameter', |
|
+ ], |
|
+ }, |
|
+ 'target_conditions': [ |
|
+ ['_type!="static_library"', { |
|
+ 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-search_paths_first']}, |
|
+ }], |
|
+ ], |
|
+ }], |
|
+ ], |
|
+ }, |
|
+} |
|
diff --git a/deps/libuv/config-mingw.mk b/deps/libuv/config-mingw.mk |
|
new file mode 100644 |
|
index 0000000..5ef189b |
|
--- /dev/null |
|
+++ b/deps/libuv/config-mingw.mk |
|
@@ -0,0 +1,61 @@ |
|
+# Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+# |
|
+# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+# of this software and associated documentation files (the "Software"), to |
|
+# deal in the Software without restriction, including without limitation the |
|
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+# sell copies of the Software, and to permit persons to whom the Software is |
|
+# furnished to do so, subject to the following conditions: |
|
+# |
|
+# The above copyright notice and this permission notice shall be included in |
|
+# all copies or substantial portions of the Software. |
|
+# |
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+# IN THE SOFTWARE. |
|
+ |
|
+# Use make -f Makefile.gcc PREFIX=i686-w64-mingw32- |
|
+# for cross compilation |
|
+CC = $(PREFIX)gcc |
|
+AR = $(PREFIX)ar |
|
+E=.exe |
|
+ |
|
+CFLAGS=$(CPPFLAGS) -g --std=gnu89 -D_WIN32_WINNT=0x0501 -Isrc/ares/config_win32 |
|
+LINKFLAGS=-lm |
|
+ |
|
+CARES_OBJS += src/ares/windows_port.o |
|
+CARES_OBJS += src/ares/ares_platform.o |
|
+WIN_SRCS=$(wildcard src/win/*.c) |
|
+WIN_OBJS=$(WIN_SRCS:.c=.o) |
|
+ |
|
+RUNNER_CFLAGS=$(CFLAGS) -D_GNU_SOURCE # Need _GNU_SOURCE for strdup? |
|
+RUNNER_LINKFLAGS=$(LINKFLAGS) |
|
+RUNNER_LIBS=-lws2_32 |
|
+RUNNER_SRC=test/runner-win.c |
|
+ |
|
+uv.a: $(WIN_OBJS) src/uv-common.o $(CARES_OBJS) |
|
+ $(AR) rcs uv.a src/win/*.o src/uv-common.o $(CARES_OBJS) |
|
+ |
|
+src/win/%.o: src/win/%.c src/win/internal.h |
|
+ $(CC) $(CFLAGS) -o $@ -c $< |
|
+ |
|
+src/uv-common.o: src/uv-common.c include/uv.h include/uv-private/uv-win.h |
|
+ $(CC) $(CFLAGS) -c src/uv-common.c -o src/uv-common.o |
|
+ |
|
+EIO_CPPFLAGS += $(CPPFLAGS) |
|
+EIO_CPPFLAGS += -DEIO_STACKSIZE=65536 |
|
+EIO_CPPFLAGS += -D_GNU_SOURCE |
|
+ |
|
+clean-platform: |
|
+ -rm -f src/ares/*.o |
|
+ -rm -f src/eio/*.o |
|
+ -rm -f src/win/*.o |
|
+ |
|
+distclean-platform: |
|
+ -rm -f src/ares/*.o |
|
+ -rm -f src/eio/*.o |
|
+ -rm -f src/win/*.o |
|
diff --git a/deps/libuv/config-unix.mk b/deps/libuv/config-unix.mk |
|
new file mode 100644 |
|
index 0000000..8fe7254 |
|
--- /dev/null |
|
+++ b/deps/libuv/config-unix.mk |
|
@@ -0,0 +1,164 @@ |
|
+# Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+# |
|
+# Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+# of this software and associated documentation files (the "Software"), to |
|
+# deal in the Software without restriction, including without limitation the |
|
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+# sell copies of the Software, and to permit persons to whom the Software is |
|
+# furnished to do so, subject to the following conditions: |
|
+# |
|
+# The above copyright notice and this permission notice shall be included in |
|
+# all copies or substantial portions of the Software. |
|
+# |
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+# IN THE SOFTWARE. |
|
+ |
|
+E= |
|
+CSTDFLAG=--std=c89 -pedantic -Wall -Wextra -Wno-unused-parameter |
|
+CFLAGS += -g |
|
+CPPFLAGS += -Isrc/unix/ev |
|
+LINKFLAGS=-lm |
|
+ |
|
+CPPFLAGS += -D_LARGEFILE_SOURCE |
|
+CPPFLAGS += -D_FILE_OFFSET_BITS=64 |
|
+ |
|
+OBJS += src/unix/core.o |
|
+OBJS += src/unix/dl.o |
|
+OBJS += src/unix/fs.o |
|
+OBJS += src/unix/cares.o |
|
+OBJS += src/unix/udp.o |
|
+OBJS += src/unix/error.o |
|
+OBJS += src/unix/process.o |
|
+OBJS += src/unix/tcp.o |
|
+OBJS += src/unix/pipe.o |
|
+OBJS += src/unix/tty.o |
|
+OBJS += src/unix/stream.o |
|
+ |
|
+ifeq (SunOS,$(uname_S)) |
|
+EV_CONFIG=config_sunos.h |
|
+EIO_CONFIG=config_sunos.h |
|
+CPPFLAGS += -Isrc/ares/config_sunos -D__EXTENSIONS__ -D_XOPEN_SOURCE=500 |
|
+LINKFLAGS+=-lsocket -lnsl -lkstat |
|
+OBJS += src/unix/sunos.o |
|
+endif |
|
+ |
|
+ifeq (Darwin,$(uname_S)) |
|
+EV_CONFIG=config_darwin.h |
|
+EIO_CONFIG=config_darwin.h |
|
+CPPFLAGS += -Isrc/ares/config_darwin |
|
+LINKFLAGS+=-framework CoreServices |
|
+OBJS += src/unix/darwin.o |
|
+OBJS += src/unix/kqueue.o |
|
+endif |
|
+ |
|
+ifeq (Linux,$(uname_S)) |
|
+EV_CONFIG=config_linux.h |
|
+EIO_CONFIG=config_linux.h |
|
+CSTDFLAG += -D_GNU_SOURCE |
|
+CPPFLAGS += -Isrc/ares/config_linux |
|
+LINKFLAGS+=-lrt |
|
+OBJS += src/unix/linux.o |
|
+endif |
|
+ |
|
+ifeq (FreeBSD,$(uname_S)) |
|
+EV_CONFIG=config_freebsd.h |
|
+EIO_CONFIG=config_freebsd.h |
|
+CPPFLAGS += -Isrc/ares/config_freebsd |
|
+LINKFLAGS+= |
|
+OBJS += src/unix/freebsd.o |
|
+OBJS += src/unix/kqueue.o |
|
+endif |
|
+ |
|
+ifeq (DragonFly,$(uname_S)) |
|
+EV_CONFIG=config_freebsd.h |
|
+EIO_CONFIG=config_freebsd.h |
|
+CPPFLAGS += -Isrc/ares/config_freebsd |
|
+LINKFLAGS+= |
|
+OBJS += src/unix/freebsd.o |
|
+OBJS += src/unix/kqueue.o |
|
+endif |
|
+ |
|
+ifeq (NetBSD,$(uname_S)) |
|
+EV_CONFIG=config_netbsd.h |
|
+EIO_CONFIG=config_netbsd.h |
|
+CPPFLAGS += -Isrc/ares/config_netbsd |
|
+LINKFLAGS+= |
|
+OBJS += src/unix/netbsd.o |
|
+OBJS += src/unix/kqueue.o |
|
+endif |
|
+ |
|
+ifeq (OpenBSD,$(uname_S)) |
|
+EV_CONFIG=config_openbsd.h |
|
+EIO_CONFIG=config_openbsd.h |
|
+CPPFLAGS += -Isrc/ares/config_openbsd |
|
+LINKFLAGS+= |
|
+OBJS += src/unix/openbsd.o |
|
+OBJS += src/unix/kqueue.o |
|
+endif |
|
+ |
|
+ifneq (,$(findstring CYGWIN,$(uname_S))) |
|
+EV_CONFIG=config_cygwin.h |
|
+EIO_CONFIG=config_cygwin.h |
|
+# We drop the --std=c89, it hides CLOCK_MONOTONIC on cygwin |
|
+CSTDFLAG = -D_GNU_SOURCE |
|
+CPPFLAGS += -Isrc/ares/config_cygwin |
|
+LINKFLAGS+= |
|
+OBJS += src/unix/cygwin.o |
|
+endif |
|
+ |
|
+# Need _GNU_SOURCE for strdup? |
|
+RUNNER_CFLAGS=$(CFLAGS) -D_GNU_SOURCE |
|
+RUNNER_LINKFLAGS=$(LINKFLAGS) |
|
+ |
|
+ifeq (SunOS,$(uname_S)) |
|
+RUNNER_LINKFLAGS += -pthreads |
|
+else |
|
+RUNNER_LINKFLAGS += -pthread |
|
+endif |
|
+ |
|
+RUNNER_LIBS= |
|
+RUNNER_SRC=test/runner-unix.c |
|
+ |
|
+uv.a: $(OBJS) src/uv-common.o src/unix/ev/ev.o src/unix/uv-eio.o src/unix/eio/eio.o $(CARES_OBJS) |
|
+ $(AR) rcs uv.a $(OBJS) src/uv-common.o src/unix/uv-eio.o src/unix/ev/ev.o src/unix/eio/eio.o $(CARES_OBJS) |
|
+ |
|
+src/unix/%.o: src/unix/%.c include/uv.h include/uv-private/uv-unix.h src/unix/internal.h |
|
+ $(CC) $(CSTDFLAG) $(CPPFLAGS) -Isrc $(CFLAGS) -c $< -o $@ |
|
+ |
|
+src/uv-common.o: src/uv-common.c include/uv.h include/uv-private/uv-unix.h |
|
+ $(CC) $(CSTDFLAG) $(CPPFLAGS) $(CFLAGS) -c src/uv-common.c -o src/uv-common.o |
|
+ |
|
+src/unix/ev/ev.o: src/unix/ev/ev.c |
|
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c src/unix/ev/ev.c -o src/unix/ev/ev.o -DEV_CONFIG_H=\"$(EV_CONFIG)\" |
|
+ |
|
+ |
|
+EIO_CPPFLAGS += $(CPPFLAGS) |
|
+EIO_CPPFLAGS += -DEIO_CONFIG_H=\"$(EIO_CONFIG)\" |
|
+EIO_CPPFLAGS += -DEIO_STACKSIZE=262144 |
|
+EIO_CPPFLAGS += -D_GNU_SOURCE |
|
+ |
|
+src/unix/eio/eio.o: src/unix/eio/eio.c |
|
+ $(CC) $(EIO_CPPFLAGS) $(CFLAGS) -c src/unix/eio/eio.c -o src/unix/eio/eio.o |
|
+ |
|
+src/unix/uv-eio.o: src/unix/uv-eio.c |
|
+ $(CC) $(CPPFLAGS) -Isrc/unix/eio/ $(CSTDFLAG) $(CFLAGS) -c src/unix/uv-eio.c -o src/unix/uv-eio.o |
|
+ |
|
+ |
|
+clean-platform: |
|
+ -rm -f src/ares/*.o |
|
+ -rm -f src/unix/ev/*.o |
|
+ -rm -f src/unix/eio/*.o |
|
+ -rm -f src/unix/*.o |
|
+ -rm -rf test/run-tests.dSYM run-benchmarks.dSYM |
|
+ |
|
+distclean-platform: |
|
+ -rm -f src/ares/*.o |
|
+ -rm -f src/unix/ev/*.o |
|
+ -rm -f src/unix/*.o |
|
+ -rm -f src/unix/eio/*.o |
|
+ -rm -rf test/run-tests.dSYM run-benchmarks.dSYM |
|
diff --git a/deps/libuv/gyp_uv b/deps/libuv/gyp_uv |
|
new file mode 100644 |
|
index 0000000..a7a9689 |
|
--- /dev/null |
|
+++ b/deps/libuv/gyp_uv |
|
@@ -0,0 +1,60 @@ |
|
+#!/usr/bin/env python |
|
+import glob |
|
+import os |
|
+import shlex |
|
+import sys |
|
+ |
|
+script_dir = os.path.dirname(__file__) |
|
+uv_root = os.path.normpath(script_dir) |
|
+ |
|
+sys.path.insert(0, os.path.join(uv_root, 'build', 'gyp', 'pylib')) |
|
+import gyp |
|
+ |
|
+# Directory within which we want all generated files (including Makefiles) |
|
+# to be written. |
|
+output_dir = os.path.join(os.path.abspath(uv_root), 'out') |
|
+ |
|
+def run_gyp(args): |
|
+ rc = gyp.main(args) |
|
+ if rc != 0: |
|
+ print 'Error running GYP' |
|
+ sys.exit(rc) |
|
+ |
|
+if __name__ == '__main__': |
|
+ args = sys.argv[1:] |
|
+ |
|
+ # GYP bug. |
|
+ # On msvs it will crash if it gets an absolute path. |
|
+ # On Mac/make it will crash if it doesn't get an absolute path. |
|
+ if sys.platform == 'win32': |
|
+ args.append(os.path.join(uv_root, 'uv.gyp')) |
|
+ common_fn = os.path.join(uv_root, 'common.gypi') |
|
+ options_fn = os.path.join(uv_root, 'options.gypi') |
|
+ else: |
|
+ args.append(os.path.join(os.path.abspath(uv_root), 'uv.gyp')) |
|
+ common_fn = os.path.join(os.path.abspath(uv_root), 'common.gypi') |
|
+ options_fn = os.path.join(os.path.abspath(uv_root), 'options.gypi') |
|
+ |
|
+ if os.path.exists(common_fn): |
|
+ args.extend(['-I', common_fn]) |
|
+ |
|
+ if os.path.exists(options_fn): |
|
+ args.extend(['-I', options_fn]) |
|
+ |
|
+ args.append('--depth=' + uv_root) |
|
+ |
|
+ # There's a bug with windows which doesn't allow this feature. |
|
+ if sys.platform != 'win32': |
|
+ |
|
+ # Tell gyp to write the Makefiles into output_dir |
|
+ args.extend(['--generator-output', output_dir]) |
|
+ |
|
+ # Tell make to write its output into the same dir |
|
+ args.extend(['-Goutput_dir=' + output_dir]) |
|
+ |
|
+ args.append('-Dtarget_arch=ia32') |
|
+ args.append('-Dcomponent=static_library') |
|
+ args.append('-Dlibrary=static_library') |
|
+ gyp_args = list(args) |
|
+ print gyp_args |
|
+ run_gyp(gyp_args) |
|
diff --git a/deps/libuv/include/ares.h b/deps/libuv/include/ares.h |
|
new file mode 100644 |
|
index 0000000..53ac861 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/ares.h |
|
@@ -0,0 +1,591 @@ |
|
+ |
|
+/* Copyright 1998, 2009 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2007-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#ifndef ARES__H |
|
+#define ARES__H |
|
+ |
|
+#include "ares_version.h" /* c-ares version defines */ |
|
+ |
|
+/* |
|
+ * Define WIN32 when build target is Win32 API |
|
+ */ |
|
+ |
|
+#if (defined(_WIN32) || defined(__WIN32__)) && \ |
|
+ !defined(WIN32) && !defined(__SYMBIAN32__) |
|
+# define WIN32 |
|
+#endif |
|
+ |
|
+/*************************** libuv patch ***************/ |
|
+ |
|
+/* |
|
+ * We want to avoid autoconf altogether since there are a finite number of |
|
+ * operating systems and simply build c-ares. Therefore we do not want the |
|
+ * configurations provided by ares_build.h since we are always statically |
|
+ * linking c-ares into libuv. Having a system dependent ares_build.h forces |
|
+ * all users of ares.h to include the correct ares_build.h. We do not care |
|
+ * about the linking checks provided by ares_rules.h. This would complicate |
|
+ * the libuv build process. |
|
+ */ |
|
+ |
|
+ |
|
+#if defined(WIN32) |
|
+/* Configure process defines this to 1 when it finds out that system */ |
|
+/* header file ws2tcpip.h must be included by the external interface. */ |
|
+/* #undef CARES_PULL_WS2TCPIP_H */ |
|
+# include <winsock2.h> |
|
+# include <ws2tcpip.h> |
|
+# include <windows.h> |
|
+ |
|
+#else /* Not Windows */ |
|
+ |
|
+# include <sys/time.h> |
|
+# include <sys/types.h> |
|
+# include <sys/socket.h> |
|
+#endif |
|
+ |
|
+#if 0 |
|
+/* The size of `long', as computed by sizeof. */ |
|
+#define CARES_SIZEOF_LONG 4 |
|
+#endif |
|
+ |
|
+/* Integral data type used for ares_socklen_t. */ |
|
+#define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t |
|
+ |
|
+#if 0 |
|
+/* The size of `ares_socklen_t', as computed by sizeof. */ |
|
+#define CARES_SIZEOF_ARES_SOCKLEN_T 4 |
|
+#endif |
|
+ |
|
+/* Data type definition of ares_socklen_t. */ |
|
+typedef int ares_socklen_t; |
|
+ |
|
+#if 0 /* libuv disabled */ |
|
+#include "ares_rules.h" /* c-ares rules enforcement */ |
|
+#endif |
|
+ |
|
+/*********************** end libuv patch ***************/ |
|
+ |
|
+#include <sys/types.h> |
|
+ |
|
+/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish |
|
+ libc5-based Linux systems. Only include it on system that are known to |
|
+ require it! */ |
|
+#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ |
|
+ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) |
|
+#include <sys/select.h> |
|
+#endif |
|
+#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) |
|
+#include <sys/bsdskt.h> |
|
+#endif |
|
+ |
|
+#if defined(WATT32) |
|
+# include <netinet/in.h> |
|
+# include <sys/socket.h> |
|
+# include <tcp.h> |
|
+#elif defined(_WIN32_WCE) |
|
+# ifndef WIN32_LEAN_AND_MEAN |
|
+# define WIN32_LEAN_AND_MEAN |
|
+# endif |
|
+# include <windows.h> |
|
+# include <winsock.h> |
|
+#elif defined(WIN32) |
|
+# ifndef WIN32_LEAN_AND_MEAN |
|
+# define WIN32_LEAN_AND_MEAN |
|
+# endif |
|
+# include <windows.h> |
|
+# include <winsock2.h> |
|
+# include <ws2tcpip.h> |
|
+#else |
|
+# include <sys/socket.h> |
|
+# include <netinet/in.h> |
|
+#endif |
|
+ |
|
+#ifdef __cplusplus |
|
+extern "C" { |
|
+#endif |
|
+ |
|
+/* |
|
+** c-ares external API function linkage decorations. |
|
+*/ |
|
+ |
|
+#if !defined(CARES_STATICLIB) && \ |
|
+ (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) |
|
+ /* __declspec function decoration for Win32 and Symbian DLL's */ |
|
+# if defined(CARES_BUILDING_LIBRARY) |
|
+# define CARES_EXTERN __declspec(dllexport) |
|
+# else |
|
+# define CARES_EXTERN __declspec(dllimport) |
|
+# endif |
|
+#else |
|
+ /* visibility function decoration for other cases */ |
|
+# if !defined(CARES_SYMBOL_HIDING) || \ |
|
+ defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__) |
|
+# define CARES_EXTERN |
|
+# else |
|
+# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN |
|
+# endif |
|
+#endif |
|
+ |
|
+ |
|
+#define ARES_SUCCESS 0 |
|
+ |
|
+/* Server error codes (ARES_ENODATA indicates no relevant answer) */ |
|
+#define ARES_ENODATA 1 |
|
+#define ARES_EFORMERR 2 |
|
+#define ARES_ESERVFAIL 3 |
|
+#define ARES_ENOTFOUND 4 |
|
+#define ARES_ENOTIMP 5 |
|
+#define ARES_EREFUSED 6 |
|
+ |
|
+/* Locally generated error codes */ |
|
+#define ARES_EBADQUERY 7 |
|
+#define ARES_EBADNAME 8 |
|
+#define ARES_EBADFAMILY 9 |
|
+#define ARES_EBADRESP 10 |
|
+#define ARES_ECONNREFUSED 11 |
|
+#define ARES_ETIMEOUT 12 |
|
+#define ARES_EOF 13 |
|
+#define ARES_EFILE 14 |
|
+#define ARES_ENOMEM 15 |
|
+#define ARES_EDESTRUCTION 16 |
|
+#define ARES_EBADSTR 17 |
|
+ |
|
+/* ares_getnameinfo error codes */ |
|
+#define ARES_EBADFLAGS 18 |
|
+ |
|
+/* ares_getaddrinfo error codes */ |
|
+#define ARES_ENONAME 19 |
|
+#define ARES_EBADHINTS 20 |
|
+ |
|
+/* Uninitialized library error code */ |
|
+#define ARES_ENOTINITIALIZED 21 /* introduced in 1.7.0 */ |
|
+ |
|
+/* ares_library_init error codes */ |
|
+#define ARES_ELOADIPHLPAPI 22 /* introduced in 1.7.0 */ |
|
+#define ARES_EADDRGETNETWORKPARAMS 23 /* introduced in 1.7.0 */ |
|
+ |
|
+/* More error codes */ |
|
+#define ARES_ECANCELLED 24 /* introduced in 1.7.0 */ |
|
+ |
|
+/* Flag values */ |
|
+#define ARES_FLAG_USEVC (1 << 0) |
|
+#define ARES_FLAG_PRIMARY (1 << 1) |
|
+#define ARES_FLAG_IGNTC (1 << 2) |
|
+#define ARES_FLAG_NORECURSE (1 << 3) |
|
+#define ARES_FLAG_STAYOPEN (1 << 4) |
|
+#define ARES_FLAG_NOSEARCH (1 << 5) |
|
+#define ARES_FLAG_NOALIASES (1 << 6) |
|
+#define ARES_FLAG_NOCHECKRESP (1 << 7) |
|
+ |
|
+/* Option mask values */ |
|
+#define ARES_OPT_FLAGS (1 << 0) |
|
+#define ARES_OPT_TIMEOUT (1 << 1) |
|
+#define ARES_OPT_TRIES (1 << 2) |
|
+#define ARES_OPT_NDOTS (1 << 3) |
|
+#define ARES_OPT_UDP_PORT (1 << 4) |
|
+#define ARES_OPT_TCP_PORT (1 << 5) |
|
+#define ARES_OPT_SERVERS (1 << 6) |
|
+#define ARES_OPT_DOMAINS (1 << 7) |
|
+#define ARES_OPT_LOOKUPS (1 << 8) |
|
+#define ARES_OPT_SOCK_STATE_CB (1 << 9) |
|
+#define ARES_OPT_SORTLIST (1 << 10) |
|
+#define ARES_OPT_SOCK_SNDBUF (1 << 11) |
|
+#define ARES_OPT_SOCK_RCVBUF (1 << 12) |
|
+#define ARES_OPT_TIMEOUTMS (1 << 13) |
|
+#define ARES_OPT_ROTATE (1 << 14) |
|
+ |
|
+/* Nameinfo flag values */ |
|
+#define ARES_NI_NOFQDN (1 << 0) |
|
+#define ARES_NI_NUMERICHOST (1 << 1) |
|
+#define ARES_NI_NAMEREQD (1 << 2) |
|
+#define ARES_NI_NUMERICSERV (1 << 3) |
|
+#define ARES_NI_DGRAM (1 << 4) |
|
+#define ARES_NI_TCP 0 |
|
+#define ARES_NI_UDP ARES_NI_DGRAM |
|
+#define ARES_NI_SCTP (1 << 5) |
|
+#define ARES_NI_DCCP (1 << 6) |
|
+#define ARES_NI_NUMERICSCOPE (1 << 7) |
|
+#define ARES_NI_LOOKUPHOST (1 << 8) |
|
+#define ARES_NI_LOOKUPSERVICE (1 << 9) |
|
+/* Reserved for future use */ |
|
+#define ARES_NI_IDN (1 << 10) |
|
+#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11) |
|
+#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12) |
|
+ |
|
+/* Addrinfo flag values */ |
|
+#define ARES_AI_CANONNAME (1 << 0) |
|
+#define ARES_AI_NUMERICHOST (1 << 1) |
|
+#define ARES_AI_PASSIVE (1 << 2) |
|
+#define ARES_AI_NUMERICSERV (1 << 3) |
|
+#define ARES_AI_V4MAPPED (1 << 4) |
|
+#define ARES_AI_ALL (1 << 5) |
|
+#define ARES_AI_ADDRCONFIG (1 << 6) |
|
+/* Reserved for future use */ |
|
+#define ARES_AI_IDN (1 << 10) |
|
+#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11) |
|
+#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12) |
|
+#define ARES_AI_CANONIDN (1 << 13) |
|
+ |
|
+#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \ |
|
+ ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \ |
|
+ ARES_AI_ADDRCONFIG) |
|
+#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this |
|
+ many sockets */ |
|
+#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) |
|
+#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ |
|
+ ARES_GETSOCK_MAXNUM))) |
|
+ |
|
+/* c-ares library initialization flag values */ |
|
+#define ARES_LIB_INIT_NONE (0) |
|
+#define ARES_LIB_INIT_WIN32 (1 << 0) |
|
+#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32) |
|
+ |
|
+ |
|
+/* |
|
+ * Typedef our socket type |
|
+ */ |
|
+ |
|
+#ifndef ares_socket_typedef |
|
+#ifdef WIN32 |
|
+typedef SOCKET ares_socket_t; |
|
+#define ARES_SOCKET_BAD INVALID_SOCKET |
|
+#else |
|
+typedef int ares_socket_t; |
|
+#define ARES_SOCKET_BAD -1 |
|
+#endif |
|
+#define ares_socket_typedef |
|
+#endif /* ares_socket_typedef */ |
|
+ |
|
+typedef void (*ares_sock_state_cb)(void *data, |
|
+ ares_socket_t socket_fd, |
|
+ int readable, |
|
+ int writable); |
|
+ |
|
+struct apattern; |
|
+ |
|
+/* NOTE about the ares_options struct to users and developers. |
|
+ |
|
+ This struct will remain looking like this. It will not be extended nor |
|
+ shrunk in future releases, but all new options will be set by ares_set_*() |
|
+ options instead of with the ares_init_options() function. |
|
+ |
|
+ Eventually (in a galaxy far far away), all options will be settable by |
|
+ ares_set_*() options and the ares_init_options() function will become |
|
+ deprecated. |
|
+ |
|
+ When new options are added to c-ares, they are not added to this |
|
+ struct. And they are not "saved" with the ares_save_options() function but |
|
+ instead we encourage the use of the ares_dup() function. Needless to say, |
|
+ if you add config options to c-ares you need to make sure ares_dup() |
|
+ duplicates this new option. |
|
+ |
|
+ */ |
|
+struct ares_options { |
|
+ int flags; |
|
+ int timeout; /* in seconds or milliseconds, depending on options */ |
|
+ int tries; |
|
+ int ndots; |
|
+ unsigned short udp_port; |
|
+ unsigned short tcp_port; |
|
+ int socket_send_buffer_size; |
|
+ int socket_receive_buffer_size; |
|
+ struct in_addr *servers; |
|
+ int nservers; |
|
+ char **domains; |
|
+ int ndomains; |
|
+ char *lookups; |
|
+ ares_sock_state_cb sock_state_cb; |
|
+ void *sock_state_cb_data; |
|
+ struct apattern *sortlist; |
|
+ int nsort; |
|
+}; |
|
+ |
|
+struct hostent; |
|
+struct timeval; |
|
+struct sockaddr; |
|
+struct ares_channeldata; |
|
+ |
|
+typedef struct ares_channeldata *ares_channel; |
|
+ |
|
+typedef void (*ares_callback)(void *arg, |
|
+ int status, |
|
+ int timeouts, |
|
+ unsigned char *abuf, |
|
+ int alen); |
|
+ |
|
+typedef void (*ares_host_callback)(void *arg, |
|
+ int status, |
|
+ int timeouts, |
|
+ struct hostent *hostent); |
|
+ |
|
+typedef void (*ares_nameinfo_callback)(void *arg, |
|
+ int status, |
|
+ int timeouts, |
|
+ char *node, |
|
+ char *service); |
|
+ |
|
+typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd, |
|
+ int type, |
|
+ void *data); |
|
+ |
|
+CARES_EXTERN int ares_library_init(int flags); |
|
+ |
|
+CARES_EXTERN void ares_library_cleanup(void); |
|
+ |
|
+CARES_EXTERN const char *ares_version(int *version); |
|
+ |
|
+CARES_EXTERN int ares_init(ares_channel *channelptr); |
|
+ |
|
+CARES_EXTERN int ares_init_options(ares_channel *channelptr, |
|
+ struct ares_options *options, |
|
+ int optmask); |
|
+ |
|
+CARES_EXTERN int ares_save_options(ares_channel channel, |
|
+ struct ares_options *options, |
|
+ int *optmask); |
|
+ |
|
+CARES_EXTERN void ares_destroy_options(struct ares_options *options); |
|
+ |
|
+CARES_EXTERN int ares_dup(ares_channel *dest, |
|
+ ares_channel src); |
|
+ |
|
+CARES_EXTERN void ares_destroy(ares_channel channel); |
|
+ |
|
+CARES_EXTERN void ares_cancel(ares_channel channel); |
|
+ |
|
+/* These next 3 configure local binding for the out-going socket |
|
+ * connection. Use these to specify source IP and/or network device |
|
+ * on multi-homed systems. |
|
+ */ |
|
+CARES_EXTERN void ares_set_local_ip4(ares_channel channel, unsigned int local_ip); |
|
+ |
|
+/* local_ip6 should be 16 bytes in length */ |
|
+CARES_EXTERN void ares_set_local_ip6(ares_channel channel, |
|
+ const unsigned char* local_ip6); |
|
+ |
|
+/* local_dev_name should be null terminated. */ |
|
+CARES_EXTERN void ares_set_local_dev(ares_channel channel, |
|
+ const char* local_dev_name); |
|
+ |
|
+CARES_EXTERN void ares_set_socket_callback(ares_channel channel, |
|
+ ares_sock_create_callback callback, |
|
+ void *user_data); |
|
+ |
|
+CARES_EXTERN void ares_send(ares_channel channel, |
|
+ const unsigned char *qbuf, |
|
+ int qlen, |
|
+ ares_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN void ares_query(ares_channel channel, |
|
+ const char *name, |
|
+ int dnsclass, |
|
+ int type, |
|
+ ares_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN void ares_search(ares_channel channel, |
|
+ const char *name, |
|
+ int dnsclass, |
|
+ int type, |
|
+ ares_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN void ares_gethostbyname(ares_channel channel, |
|
+ const char *name, |
|
+ int family, |
|
+ ares_host_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN int ares_gethostbyname_file(ares_channel channel, |
|
+ const char *name, |
|
+ int family, |
|
+ struct hostent **host); |
|
+ |
|
+CARES_EXTERN void ares_gethostbyaddr(ares_channel channel, |
|
+ const void *addr, |
|
+ int addrlen, |
|
+ int family, |
|
+ ares_host_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN void ares_getnameinfo(ares_channel channel, |
|
+ const struct sockaddr *sa, |
|
+ ares_socklen_t salen, |
|
+ int flags, |
|
+ ares_nameinfo_callback callback, |
|
+ void *arg); |
|
+ |
|
+CARES_EXTERN int ares_fds(ares_channel channel, |
|
+ fd_set *read_fds, |
|
+ fd_set *write_fds); |
|
+ |
|
+CARES_EXTERN int ares_getsock(ares_channel channel, |
|
+ ares_socket_t *socks, |
|
+ int numsocks); |
|
+ |
|
+CARES_EXTERN struct timeval *ares_timeout(ares_channel channel, |
|
+ struct timeval *maxtv, |
|
+ struct timeval *tv); |
|
+ |
|
+CARES_EXTERN void ares_process(ares_channel channel, |
|
+ fd_set *read_fds, |
|
+ fd_set *write_fds); |
|
+ |
|
+CARES_EXTERN void ares_process_fd(ares_channel channel, |
|
+ ares_socket_t read_fd, |
|
+ ares_socket_t write_fd); |
|
+ |
|
+CARES_EXTERN int ares_mkquery(const char *name, |
|
+ int dnsclass, |
|
+ int type, |
|
+ unsigned short id, |
|
+ int rd, |
|
+ unsigned char **buf, |
|
+ int *buflen); |
|
+ |
|
+CARES_EXTERN int ares_expand_name(const unsigned char *encoded, |
|
+ const unsigned char *abuf, |
|
+ int alen, |
|
+ char **s, |
|
+ long *enclen); |
|
+ |
|
+CARES_EXTERN int ares_expand_string(const unsigned char *encoded, |
|
+ const unsigned char *abuf, |
|
+ int alen, |
|
+ unsigned char **s, |
|
+ long *enclen); |
|
+ |
|
+/* |
|
+ * NOTE: before c-ares 1.7.0 we would most often use the system in6_addr |
|
+ * struct below when ares itself was built, but many apps would use this |
|
+ * private version since the header checked a HAVE_* define for it. Starting |
|
+ * with 1.7.0 we always declare and use our own to stop relying on the |
|
+ * system's one. |
|
+ */ |
|
+struct ares_in6_addr { |
|
+ union { |
|
+ unsigned char _S6_u8[16]; |
|
+ } _S6_un; |
|
+}; |
|
+ |
|
+struct ares_addrttl { |
|
+ struct in_addr ipaddr; |
|
+ int ttl; |
|
+}; |
|
+ |
|
+struct ares_addr6ttl { |
|
+ struct ares_in6_addr ip6addr; |
|
+ int ttl; |
|
+}; |
|
+ |
|
+struct ares_srv_reply { |
|
+ struct ares_srv_reply *next; |
|
+ char *host; |
|
+ unsigned short priority; |
|
+ unsigned short weight; |
|
+ unsigned short port; |
|
+}; |
|
+ |
|
+struct ares_mx_reply { |
|
+ struct ares_mx_reply *next; |
|
+ char *host; |
|
+ unsigned short priority; |
|
+}; |
|
+ |
|
+struct ares_txt_reply { |
|
+ struct ares_txt_reply *next; |
|
+ unsigned char *txt; |
|
+ size_t length; /* length excludes null termination */ |
|
+}; |
|
+ |
|
+/* |
|
+** Parse the buffer, starting at *abuf and of length alen bytes, previously |
|
+** obtained from an ares_search call. Put the results in *host, if nonnull. |
|
+** Also, if addrttls is nonnull, put up to *naddrttls IPv4 addresses along with |
|
+** their TTLs in that array, and set *naddrttls to the number of addresses |
|
+** so written. |
|
+*/ |
|
+ |
|
+CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf, |
|
+ int alen, |
|
+ struct hostent **host, |
|
+ struct ares_addrttl *addrttls, |
|
+ int *naddrttls); |
|
+ |
|
+CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf, |
|
+ int alen, |
|
+ struct hostent **host, |
|
+ struct ares_addr6ttl *addrttls, |
|
+ int *naddrttls); |
|
+ |
|
+CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf, |
|
+ int alen, |
|
+ const void *addr, |
|
+ int addrlen, |
|
+ int family, |
|
+ struct hostent **host); |
|
+ |
|
+CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf, |
|
+ int alen, |
|
+ struct hostent **host); |
|
+ |
|
+CARES_EXTERN int ares_parse_srv_reply(const unsigned char* abuf, |
|
+ int alen, |
|
+ struct ares_srv_reply** srv_out); |
|
+ |
|
+CARES_EXTERN int ares_parse_mx_reply(const unsigned char* abuf, |
|
+ int alen, |
|
+ struct ares_mx_reply** mx_out); |
|
+ |
|
+CARES_EXTERN int ares_parse_txt_reply(const unsigned char* abuf, |
|
+ int alen, |
|
+ struct ares_txt_reply** txt_out); |
|
+ |
|
+CARES_EXTERN void ares_free_string(void *str); |
|
+ |
|
+CARES_EXTERN void ares_free_hostent(struct hostent *host); |
|
+ |
|
+CARES_EXTERN void ares_free_data(void *dataptr); |
|
+ |
|
+CARES_EXTERN const char *ares_strerror(int code); |
|
+ |
|
+/* TODO: Hold port here as well. */ |
|
+struct ares_addr_node { |
|
+ struct ares_addr_node *next; |
|
+ int family; |
|
+ union { |
|
+ struct in_addr addr4; |
|
+ struct ares_in6_addr addr6; |
|
+ } addr; |
|
+}; |
|
+ |
|
+CARES_EXTERN int ares_set_servers(ares_channel channel, |
|
+ struct ares_addr_node *servers); |
|
+ |
|
+/* Incomming string format: host[:port][,host[:port]]... */ |
|
+CARES_EXTERN int ares_set_servers_csv(ares_channel channel, |
|
+ const char* servers); |
|
+ |
|
+CARES_EXTERN int ares_get_servers(ares_channel channel, |
|
+ struct ares_addr_node **servers); |
|
+ |
|
+#ifdef __cplusplus |
|
+} |
|
+#endif |
|
+ |
|
+#endif /* ARES__H */ |
|
diff --git a/deps/libuv/include/ares_version.h b/deps/libuv/include/ares_version.h |
|
new file mode 100644 |
|
index 0000000..efd0156 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/ares_version.h |
|
@@ -0,0 +1,24 @@ |
|
+ |
|
+#ifndef ARES__VERSION_H |
|
+#define ARES__VERSION_H |
|
+ |
|
+/* This is the global package copyright */ |
|
+#define ARES_COPYRIGHT "2004 - 2010 Daniel Stenberg, <[email protected]>." |
|
+ |
|
+#define ARES_VERSION_MAJOR 1 |
|
+#define ARES_VERSION_MINOR 7 |
|
+#define ARES_VERSION_PATCH 5 |
|
+#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\ |
|
+ (ARES_VERSION_MINOR<<8)|\ |
|
+ (ARES_VERSION_PATCH)) |
|
+#define ARES_VERSION_STR "1.7.5-DEV" |
|
+ |
|
+#if (ARES_VERSION >= 0x010700) |
|
+# define CARES_HAVE_ARES_LIBRARY_INIT 1 |
|
+# define CARES_HAVE_ARES_LIBRARY_CLEANUP 1 |
|
+#else |
|
+# undef CARES_HAVE_ARES_LIBRARY_INIT |
|
+# undef CARES_HAVE_ARES_LIBRARY_CLEANUP |
|
+#endif |
|
+ |
|
+#endif |
|
diff --git a/deps/libuv/include/uv-private/eio.h b/deps/libuv/include/uv-private/eio.h |
|
new file mode 100644 |
|
index 0000000..450df6b |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/eio.h |
|
@@ -0,0 +1,376 @@ |
|
+/* |
|
+ * libeio API header |
|
+ * |
|
+ * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <[email protected]> |
|
+ * All rights reserved. |
|
+ * |
|
+ * Redistribution and use in source and binary forms, with or without modifica- |
|
+ * tion, are permitted provided that the following conditions are met: |
|
+ * |
|
+ * 1. Redistributions of source code must retain the above copyright notice, |
|
+ * this list of conditions and the following disclaimer. |
|
+ * |
|
+ * 2. Redistributions in binary form must reproduce the above copyright |
|
+ * notice, this list of conditions and the following disclaimer in the |
|
+ * documentation and/or other materials provided with the distribution. |
|
+ * |
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
|
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- |
|
+ * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
|
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- |
|
+ * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
|
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- |
|
+ * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
|
+ * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
+ * |
|
+ * Alternatively, the contents of this file may be used under the terms of |
|
+ * the GNU General Public License ("GPL") version 2 or any later version, |
|
+ * in which case the provisions of the GPL are applicable instead of |
|
+ * the above. If you wish to allow the use of your version of this file |
|
+ * only under the terms of the GPL and not to allow others to use your |
|
+ * version of this file under the BSD license, indicate your decision |
|
+ * by deleting the provisions above and replace them with the notice |
|
+ * and other provisions required by the GPL. If you do not delete the |
|
+ * provisions above, a recipient may use your version of this file under |
|
+ * either the BSD or the GPL. |
|
+ */ |
|
+ |
|
+#ifndef EIO_H_ |
|
+#define EIO_H_ |
|
+ |
|
+#ifdef __cplusplus |
|
+extern "C" { |
|
+#endif |
|
+ |
|
+#include <stddef.h> |
|
+#include <signal.h> |
|
+#include <sys/types.h> |
|
+ |
|
+typedef struct eio_req eio_req; |
|
+typedef struct eio_dirent eio_dirent; |
|
+ |
|
+typedef int (*eio_cb)(eio_req *req); |
|
+ |
|
+#ifndef EIO_REQ_MEMBERS |
|
+# define EIO_REQ_MEMBERS |
|
+#endif |
|
+ |
|
+#ifndef EIO_STRUCT_STAT |
|
+# ifdef _WIN32 |
|
+# define EIO_STRUCT_STAT struct _stati64 |
|
+# define EIO_STRUCT_STATI64 |
|
+# else |
|
+# define EIO_STRUCT_STAT struct stat |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifdef _WIN32 |
|
+ typedef int eio_uid_t; |
|
+ typedef int eio_gid_t; |
|
+ typedef int eio_mode_t; |
|
+ #ifdef __MINGW32__ /* no intptr_t */ |
|
+ typedef ssize_t eio_ssize_t; |
|
+ #else |
|
+ typedef intptr_t eio_ssize_t; /* or SSIZE_T */ |
|
+ #endif |
|
+ #if __GNUC__ |
|
+ typedef long long eio_ino_t; |
|
+ #else |
|
+ typedef __int64 eio_ino_t; /* unsigned not supported by msvc */ |
|
+ #endif |
|
+#else |
|
+ typedef uid_t eio_uid_t; |
|
+ typedef gid_t eio_gid_t; |
|
+ typedef ssize_t eio_ssize_t; |
|
+ typedef ino_t eio_ino_t; |
|
+ typedef mode_t eio_mode_t; |
|
+#endif |
|
+ |
|
+#ifndef EIO_STRUCT_STATVFS |
|
+# define EIO_STRUCT_STATVFS struct statvfs |
|
+#endif |
|
+ |
|
+/* for readdir */ |
|
+ |
|
+/* eio_readdir flags */ |
|
+enum |
|
+{ |
|
+ EIO_READDIR_DENTS = 0x01, /* ptr2 contains eio_dirents, not just the (unsorted) names */ |
|
+ EIO_READDIR_DIRS_FIRST = 0x02, /* dirents gets sorted into a good stat() ing order to find directories first */ |
|
+ EIO_READDIR_STAT_ORDER = 0x04, /* dirents gets sorted into a good stat() ing order to quickly stat all files */ |
|
+ EIO_READDIR_FOUND_UNKNOWN = 0x80, /* set by eio_readdir when *_ARRAY was set and any TYPE=UNKNOWN's were found */ |
|
+ |
|
+ EIO_READDIR_CUSTOM1 = 0x100, /* for use by apps */ |
|
+ EIO_READDIR_CUSTOM2 = 0x200 /* for use by apps */ |
|
+}; |
|
+ |
|
+/* using "typical" values in the hope that the compiler will do something sensible */ |
|
+enum eio_dtype |
|
+{ |
|
+ EIO_DT_UNKNOWN = 0, |
|
+ EIO_DT_FIFO = 1, |
|
+ EIO_DT_CHR = 2, |
|
+ EIO_DT_MPC = 3, /* multiplexed char device (v7+coherent) */ |
|
+ EIO_DT_DIR = 4, |
|
+ EIO_DT_NAM = 5, /* xenix special named file */ |
|
+ EIO_DT_BLK = 6, |
|
+ EIO_DT_MPB = 7, /* multiplexed block device (v7+coherent) */ |
|
+ EIO_DT_REG = 8, |
|
+ EIO_DT_NWK = 9, /* HP-UX network special */ |
|
+ EIO_DT_CMP = 9, /* VxFS compressed */ |
|
+ EIO_DT_LNK = 10, |
|
+ /* DT_SHAD = 11,*/ |
|
+ EIO_DT_SOCK = 12, |
|
+ EIO_DT_DOOR = 13, /* solaris door */ |
|
+ EIO_DT_WHT = 14, |
|
+ EIO_DT_MAX = 15 /* highest DT_VALUE ever, hopefully */ |
|
+}; |
|
+ |
|
+struct eio_dirent |
|
+{ |
|
+ int nameofs; /* offset of null-terminated name string in (char *)req->ptr2 */ |
|
+ unsigned short namelen; /* size of filename without trailing 0 */ |
|
+ unsigned char type; /* one of EIO_DT_* */ |
|
+ signed char score; /* internal use */ |
|
+ eio_ino_t inode; /* the inode number, if available, otherwise unspecified */ |
|
+}; |
|
+ |
|
+/* eio_msync flags */ |
|
+enum |
|
+{ |
|
+ EIO_MS_ASYNC = 1, |
|
+ EIO_MS_INVALIDATE = 2, |
|
+ EIO_MS_SYNC = 4 |
|
+}; |
|
+ |
|
+/* eio_mtouch flags */ |
|
+enum |
|
+{ |
|
+ EIO_MT_MODIFY = 1 |
|
+}; |
|
+ |
|
+/* eio_sync_file_range flags */ |
|
+enum |
|
+{ |
|
+ EIO_SYNC_FILE_RANGE_WAIT_BEFORE = 1, |
|
+ EIO_SYNC_FILE_RANGE_WRITE = 2, |
|
+ EIO_SYNC_FILE_RANGE_WAIT_AFTER = 4 |
|
+}; |
|
+ |
|
+/* eio_fallocate flags */ |
|
+enum |
|
+{ |
|
+ EIO_FALLOC_FL_KEEP_SIZE = 1 /* MUST match the value in linux/falloc.h */ |
|
+}; |
|
+ |
|
+/* timestamps and differences - feel free to use double in your code directly */ |
|
+typedef double eio_tstamp; |
|
+ |
|
+/* the eio request structure */ |
|
+enum |
|
+{ |
|
+ EIO_CUSTOM, |
|
+ EIO_OPEN, EIO_CLOSE, EIO_DUP2, |
|
+ EIO_READ, EIO_WRITE, |
|
+ EIO_READAHEAD, EIO_SENDFILE, |
|
+ EIO_STAT, EIO_LSTAT, EIO_FSTAT, |
|
+ EIO_STATVFS, EIO_FSTATVFS, |
|
+ EIO_TRUNCATE, EIO_FTRUNCATE, |
|
+ EIO_UTIME, EIO_FUTIME, |
|
+ EIO_CHMOD, EIO_FCHMOD, |
|
+ EIO_CHOWN, EIO_FCHOWN, |
|
+ EIO_SYNC, EIO_FSYNC, EIO_FDATASYNC, EIO_SYNCFS, |
|
+ EIO_MSYNC, EIO_MTOUCH, EIO_SYNC_FILE_RANGE, EIO_FALLOCATE, |
|
+ EIO_MLOCK, EIO_MLOCKALL, |
|
+ EIO_UNLINK, EIO_RMDIR, EIO_MKDIR, EIO_RENAME, |
|
+ EIO_MKNOD, EIO_READDIR, |
|
+ EIO_LINK, EIO_SYMLINK, EIO_READLINK, EIO_REALPATH, |
|
+ EIO_GROUP, EIO_NOP, |
|
+ EIO_BUSY |
|
+}; |
|
+ |
|
+/* mlockall constants */ |
|
+enum |
|
+{ |
|
+ EIO_MCL_CURRENT = 1, |
|
+ EIO_MCL_FUTURE = 2 |
|
+}; |
|
+ |
|
+/* request priorities */ |
|
+ |
|
+enum { |
|
+ EIO_PRI_MIN = -4, |
|
+ EIO_PRI_MAX = 4, |
|
+ EIO_PRI_DEFAULT = 0 |
|
+}; |
|
+ |
|
+/* eio request structure */ |
|
+/* this structure is mostly read-only */ |
|
+/* when initialising it, all members must be zero-initialised */ |
|
+struct eio_req |
|
+{ |
|
+ eio_req volatile *next; /* private ETP */ |
|
+ |
|
+ eio_ssize_t result; /* result of syscall, e.g. result = read (... */ |
|
+ off_t offs; /* read, write, truncate, readahead, sync_file_range, fallocate: file offset, mknod: dev_t */ |
|
+ size_t size; /* read, write, readahead, sendfile, msync, mlock, sync_file_range, fallocate: length */ |
|
+ void *ptr1; /* all applicable requests: pathname, old name; readdir: optional eio_dirents */ |
|
+ void *ptr2; /* all applicable requests: new name or memory buffer; readdir: name strings */ |
|
+ eio_tstamp nv1; /* utime, futime: atime; busy: sleep time */ |
|
+ eio_tstamp nv2; /* utime, futime: mtime */ |
|
+ |
|
+ int type; /* EIO_xxx constant ETP */ |
|
+ int int1; /* all applicable requests: file descriptor; sendfile: output fd; open, msync, mlockall, readdir: flags */ |
|
+ long int2; /* chown, fchown: uid; sendfile: input fd; open, chmod, mkdir, mknod: file mode, sync_file_range, fallocate: flags */ |
|
+ long int3; /* chown, fchown: gid */ |
|
+ int errorno; /* errno value on syscall return */ |
|
+ |
|
+#if __i386 || __amd64 |
|
+ unsigned char cancelled; |
|
+#else |
|
+ sig_atomic_t cancelled; |
|
+#endif |
|
+ |
|
+ unsigned char flags; /* private */ |
|
+ signed char pri; /* the priority */ |
|
+ |
|
+ void *data; |
|
+ eio_cb finish; |
|
+ void (*destroy)(eio_req *req); /* called when request no longer needed */ |
|
+ void (*feed)(eio_req *req); /* only used for group requests */ |
|
+ |
|
+ EIO_REQ_MEMBERS |
|
+ |
|
+ eio_req *grp, *grp_prev, *grp_next, *grp_first; /* private */ |
|
+}; |
|
+ |
|
+/* _private_ request flags */ |
|
+enum { |
|
+ EIO_FLAG_PTR1_FREE = 0x01, /* need to free(ptr1) */ |
|
+ EIO_FLAG_PTR2_FREE = 0x02, /* need to free(ptr2) */ |
|
+ EIO_FLAG_GROUPADD = 0x04 /* some request was added to the group */ |
|
+}; |
|
+ |
|
+/* undocumented/unsupported/private helper */ |
|
+/*void eio_page_align (void **addr, size_t *length);*/ |
|
+ |
|
+/* returns < 0 on error, errno set |
|
+ * need_poll, if non-zero, will be called when results are available |
|
+ * and eio_poll_cb needs to be invoked (it MUST NOT call eio_poll_cb itself). |
|
+ * done_poll is called when the need to poll is gone. |
|
+ */ |
|
+int eio_init (void (*want_poll)(void), void (*done_poll)(void)); |
|
+ |
|
+/* must be called regularly to handle pending requests */ |
|
+/* returns 0 if all requests were handled, -1 if not, or the value of EIO_FINISH if != 0 */ |
|
+int eio_poll (void); |
|
+ |
|
+/* stop polling if poll took longer than duration seconds */ |
|
+void eio_set_max_poll_time (eio_tstamp nseconds); |
|
+/* do not handle more then count requests in one call to eio_poll_cb */ |
|
+void eio_set_max_poll_reqs (unsigned int nreqs); |
|
+ |
|
+/* set minimum required number |
|
+ * maximum wanted number |
|
+ * or maximum idle number of threads */ |
|
+void eio_set_min_parallel (unsigned int nthreads); |
|
+void eio_set_max_parallel (unsigned int nthreads); |
|
+void eio_set_max_idle (unsigned int nthreads); |
|
+void eio_set_idle_timeout (unsigned int seconds); |
|
+ |
|
+unsigned int eio_nreqs (void); /* number of requests in-flight */ |
|
+unsigned int eio_nready (void); /* number of not-yet handled requests */ |
|
+unsigned int eio_npending (void); /* number of finished but unhandled requests */ |
|
+unsigned int eio_nthreads (void); /* number of worker threads in use currently */ |
|
+ |
|
+/*****************************************************************************/ |
|
+/* convenience wrappers */ |
|
+ |
|
+#ifndef EIO_NO_WRAPPERS |
|
+eio_req *eio_nop (int pri, eio_cb cb, void *data); /* does nothing except go through the whole process */ |
|
+eio_req *eio_busy (eio_tstamp delay, int pri, eio_cb cb, void *data); /* ties a thread for this long, simulating busyness */ |
|
+eio_req *eio_sync (int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fsync (int fd, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fdatasync (int fd, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_syncfs (int fd, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_msync (void *addr, size_t length, int flags, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_mtouch (void *addr, size_t length, int flags, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_mlock (void *addr, size_t length, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_mlockall (int flags, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_sync_file_range (int fd, off_t offset, size_t nbytes, unsigned int flags, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fallocate (int fd, int mode, off_t offset, size_t len, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_close (int fd, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_readahead (int fd, off_t offset, size_t length, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_read (int fd, void *buf, size_t length, off_t offset, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_write (int fd, void *buf, size_t length, off_t offset, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fstat (int fd, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ |
|
+eio_req *eio_fstatvfs (int fd, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ |
|
+eio_req *eio_futime (int fd, eio_tstamp atime, eio_tstamp mtime, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_ftruncate (int fd, off_t offset, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fchmod (int fd, eio_mode_t mode, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_fchown (int fd, eio_uid_t uid, eio_gid_t gid, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_dup2 (int fd, int fd2, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_sendfile (int out_fd, int in_fd, off_t in_offset, size_t length, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_open (const char *path, int flags, eio_mode_t mode, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_utime (const char *path, eio_tstamp atime, eio_tstamp mtime, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_truncate (const char *path, off_t offset, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_chown (const char *path, eio_uid_t uid, eio_gid_t gid, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_chmod (const char *path, eio_mode_t mode, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_mkdir (const char *path, eio_mode_t mode, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_readdir (const char *path, int flags, int pri, eio_cb cb, void *data); /* result=ptr2 allocated dynamically */ |
|
+eio_req *eio_rmdir (const char *path, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_unlink (const char *path, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_readlink (const char *path, int pri, eio_cb cb, void *data); /* result=ptr2 allocated dynamically */ |
|
+eio_req *eio_realpath (const char *path, int pri, eio_cb cb, void *data); /* result=ptr2 allocated dynamically */ |
|
+eio_req *eio_stat (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ |
|
+eio_req *eio_lstat (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ |
|
+eio_req *eio_statvfs (const char *path, int pri, eio_cb cb, void *data); /* stat buffer=ptr2 allocated dynamically */ |
|
+eio_req *eio_mknod (const char *path, eio_mode_t mode, dev_t dev, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_link (const char *path, const char *new_path, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_symlink (const char *path, const char *new_path, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_rename (const char *path, const char *new_path, int pri, eio_cb cb, void *data); |
|
+eio_req *eio_custom (void (*execute)(eio_req *), int pri, eio_cb cb, void *data); |
|
+#endif |
|
+ |
|
+/*****************************************************************************/ |
|
+/* groups */ |
|
+ |
|
+eio_req *eio_grp (eio_cb cb, void *data); |
|
+void eio_grp_feed (eio_req *grp, void (*feed)(eio_req *req), int limit); |
|
+void eio_grp_limit (eio_req *grp, int limit); |
|
+void eio_grp_add (eio_req *grp, eio_req *req); |
|
+void eio_grp_cancel (eio_req *grp); /* cancels all sub requests but not the group */ |
|
+ |
|
+/*****************************************************************************/ |
|
+/* request api */ |
|
+ |
|
+/* true if the request was cancelled, useful in the invoke callback */ |
|
+#define EIO_CANCELLED(req) ((req)->cancelled) |
|
+ |
|
+#define EIO_RESULT(req) ((req)->result) |
|
+/* returns a pointer to the result buffer allocated by eio */ |
|
+#define EIO_BUF(req) ((req)->ptr2) |
|
+#define EIO_STAT_BUF(req) ((EIO_STRUCT_STAT *)EIO_BUF(req)) |
|
+#define EIO_STATVFS_BUF(req) ((EIO_STRUCT_STATVFS *)EIO_BUF(req)) |
|
+#define EIO_PATH(req) ((char *)(req)->ptr1) |
|
+ |
|
+/* submit a request for execution */ |
|
+void eio_submit (eio_req *req); |
|
+/* cancel a request as soon fast as possible, if possible */ |
|
+void eio_cancel (eio_req *req); |
|
+ |
|
+/*****************************************************************************/ |
|
+/* convenience functions */ |
|
+ |
|
+eio_ssize_t eio_sendfile_sync (int ofd, int ifd, off_t offset, size_t count); |
|
+eio_ssize_t eio__pread (int fd, void *buf, size_t count, off_t offset); |
|
+eio_ssize_t eio__pwrite (int fd, void *buf, size_t count, off_t offset); |
|
+ |
|
+#ifdef __cplusplus |
|
+} |
|
+#endif |
|
+ |
|
+#endif |
|
+ |
|
diff --git a/deps/libuv/include/uv-private/ev.h b/deps/libuv/include/uv-private/ev.h |
|
new file mode 100644 |
|
index 0000000..5d2d7a1 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/ev.h |
|
@@ -0,0 +1,836 @@ |
|
+/* |
|
+ * libev native API header |
|
+ * |
|
+ * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <[email protected]> |
|
+ * All rights reserved. |
|
+ * |
|
+ * Redistribution and use in source and binary forms, with or without modifica- |
|
+ * tion, are permitted provided that the following conditions are met: |
|
+ * |
|
+ * 1. Redistributions of source code must retain the above copyright notice, |
|
+ * this list of conditions and the following disclaimer. |
|
+ * |
|
+ * 2. Redistributions in binary form must reproduce the above copyright |
|
+ * notice, this list of conditions and the following disclaimer in the |
|
+ * documentation and/or other materials provided with the distribution. |
|
+ * |
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
|
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MER- |
|
+ * CHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
|
+ * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE- |
|
+ * CIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
|
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
|
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
|
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTH- |
|
+ * ERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
|
+ * OF THE POSSIBILITY OF SUCH DAMAGE. |
|
+ * |
|
+ * Alternatively, the contents of this file may be used under the terms of |
|
+ * the GNU General Public License ("GPL") version 2 or any later version, |
|
+ * in which case the provisions of the GPL are applicable instead of |
|
+ * the above. If you wish to allow the use of your version of this file |
|
+ * only under the terms of the GPL and not to allow others to use your |
|
+ * version of this file under the BSD license, indicate your decision |
|
+ * by deleting the provisions above and replace them with the notice |
|
+ * and other provisions required by the GPL. If you do not delete the |
|
+ * provisions above, a recipient may use your version of this file under |
|
+ * either the BSD or the GPL. |
|
+ */ |
|
+ |
|
+#ifndef EV_H_ |
|
+#define EV_H_ |
|
+ |
|
+#ifdef __cplusplus |
|
+# define EV_CPP(x) x |
|
+#else |
|
+# define EV_CPP(x) |
|
+#endif |
|
+ |
|
+EV_CPP(extern "C" {) |
|
+ |
|
+#ifdef __GNUC__ |
|
+# define EV_MAYBE_UNUSED __attribute__ ((unused)) |
|
+#else |
|
+# define EV_MAYBE_UNUSED |
|
+#endif |
|
+ |
|
+/*****************************************************************************/ |
|
+ |
|
+/* pre-4.0 compatibility */ |
|
+#ifndef EV_COMPAT3 |
|
+# define EV_COMPAT3 1 |
|
+#endif |
|
+ |
|
+#ifndef EV_FEATURES |
|
+# define EV_FEATURES 0x7f |
|
+#endif |
|
+ |
|
+#define EV_FEATURE_CODE ((EV_FEATURES) & 1) |
|
+#define EV_FEATURE_DATA ((EV_FEATURES) & 2) |
|
+#define EV_FEATURE_CONFIG ((EV_FEATURES) & 4) |
|
+#define EV_FEATURE_API ((EV_FEATURES) & 8) |
|
+#define EV_FEATURE_WATCHERS ((EV_FEATURES) & 16) |
|
+#define EV_FEATURE_BACKENDS ((EV_FEATURES) & 32) |
|
+#define EV_FEATURE_OS ((EV_FEATURES) & 64) |
|
+ |
|
+/* these priorities are inclusive, higher priorities will be invoked earlier */ |
|
+#ifndef EV_MINPRI |
|
+# define EV_MINPRI (EV_FEATURE_CONFIG ? -2 : 0) |
|
+#endif |
|
+#ifndef EV_MAXPRI |
|
+# define EV_MAXPRI (EV_FEATURE_CONFIG ? +2 : 0) |
|
+#endif |
|
+ |
|
+#ifndef EV_MULTIPLICITY |
|
+# define EV_MULTIPLICITY EV_FEATURE_CONFIG |
|
+#endif |
|
+ |
|
+#ifndef EV_PERIODIC_ENABLE |
|
+# define EV_PERIODIC_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_STAT_ENABLE |
|
+# define EV_STAT_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_PREPARE_ENABLE |
|
+# define EV_PREPARE_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_CHECK_ENABLE |
|
+# define EV_CHECK_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_IDLE_ENABLE |
|
+# define EV_IDLE_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_FORK_ENABLE |
|
+# define EV_FORK_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_CLEANUP_ENABLE |
|
+# define EV_CLEANUP_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_SIGNAL_ENABLE |
|
+# define EV_SIGNAL_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_CHILD_ENABLE |
|
+# ifdef _WIN32 |
|
+# define EV_CHILD_ENABLE 0 |
|
+# else |
|
+# define EV_CHILD_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+#endif |
|
+ |
|
+#ifndef EV_ASYNC_ENABLE |
|
+# define EV_ASYNC_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_EMBED_ENABLE |
|
+# define EV_EMBED_ENABLE EV_FEATURE_WATCHERS |
|
+#endif |
|
+ |
|
+#ifndef EV_WALK_ENABLE |
|
+# define EV_WALK_ENABLE 0 /* not yet */ |
|
+#endif |
|
+ |
|
+/*****************************************************************************/ |
|
+ |
|
+#if EV_CHILD_ENABLE && !EV_SIGNAL_ENABLE |
|
+# undef EV_SIGNAL_ENABLE |
|
+# define EV_SIGNAL_ENABLE 1 |
|
+#endif |
|
+ |
|
+/*****************************************************************************/ |
|
+ |
|
+typedef double ev_tstamp; |
|
+ |
|
+#ifndef EV_ATOMIC_T |
|
+# include <signal.h> |
|
+# define EV_ATOMIC_T sig_atomic_t volatile |
|
+#endif |
|
+ |
|
+#if EV_STAT_ENABLE |
|
+# ifdef _WIN32 |
|
+# include <time.h> |
|
+# include <sys/types.h> |
|
+# endif |
|
+# include <sys/stat.h> |
|
+#endif |
|
+ |
|
+/* support multiple event loops? */ |
|
+#if EV_MULTIPLICITY |
|
+struct ev_loop; |
|
+# define EV_P struct ev_loop *loop /* a loop as sole parameter in a declaration */ |
|
+# define EV_P_ EV_P, /* a loop as first of multiple parameters */ |
|
+# define EV_A loop /* a loop as sole argument to a function call */ |
|
+# define EV_A_ EV_A, /* a loop as first of multiple arguments */ |
|
+# define EV_DEFAULT_UC ev_default_loop_uc_ () /* the default loop, if initialised, as sole arg */ |
|
+# define EV_DEFAULT_UC_ EV_DEFAULT_UC, /* the default loop as first of multiple arguments */ |
|
+# define EV_DEFAULT ev_default_loop (0) /* the default loop as sole arg */ |
|
+# define EV_DEFAULT_ EV_DEFAULT, /* the default loop as first of multiple arguments */ |
|
+#else |
|
+# define EV_P void |
|
+# define EV_P_ |
|
+# define EV_A |
|
+# define EV_A_ |
|
+# define EV_DEFAULT |
|
+# define EV_DEFAULT_ |
|
+# define EV_DEFAULT_UC |
|
+# define EV_DEFAULT_UC_ |
|
+# undef EV_EMBED_ENABLE |
|
+#endif |
|
+ |
|
+/* EV_INLINE is used for functions in header files */ |
|
+#if __STDC_VERSION__ >= 199901L && __GNUC__ >= 3 |
|
+# define EV_INLINE static inline |
|
+#else |
|
+# define EV_INLINE static |
|
+#endif |
|
+ |
|
+/* EV_PROTOTYPES can be used to switch of prototype declarations */ |
|
+#ifndef EV_PROTOTYPES |
|
+# define EV_PROTOTYPES 1 |
|
+#endif |
|
+ |
|
+/*****************************************************************************/ |
|
+ |
|
+#define EV_VERSION_MAJOR 4 |
|
+#define EV_VERSION_MINOR 4 |
|
+ |
|
+/* eventmask, revents, events... */ |
|
+enum { |
|
+ EV_UNDEF = -1, /* guaranteed to be invalid */ |
|
+ EV_NONE = 0x00, /* no events */ |
|
+ EV_READ = 0x01, /* ev_io detected read will not block */ |
|
+ EV_WRITE = 0x02, /* ev_io detected write will not block */ |
|
+ EV_LIBUV_KQUEUE_HACK = 0x40, |
|
+ EV__IOFDSET = 0x80, /* internal use only */ |
|
+ EV_IO = EV_READ, /* alias for type-detection */ |
|
+ EV_TIMER = 0x00000100, /* timer timed out */ |
|
+#if EV_COMPAT3 |
|
+ EV_TIMEOUT = EV_TIMER, /* pre 4.0 API compatibility */ |
|
+#endif |
|
+ EV_PERIODIC = 0x00000200, /* periodic timer timed out */ |
|
+ EV_SIGNAL = 0x00000400, /* signal was received */ |
|
+ EV_CHILD = 0x00000800, /* child/pid had status change */ |
|
+ EV_STAT = 0x00001000, /* stat data changed */ |
|
+ EV_IDLE = 0x00002000, /* event loop is idling */ |
|
+ EV_PREPARE = 0x00004000, /* event loop about to poll */ |
|
+ EV_CHECK = 0x00008000, /* event loop finished poll */ |
|
+ EV_EMBED = 0x00010000, /* embedded event loop needs sweep */ |
|
+ EV_FORK = 0x00020000, /* event loop resumed in child */ |
|
+ EV_CLEANUP = 0x00040000, /* event loop resumed in child */ |
|
+ EV_ASYNC = 0x00080000, /* async intra-loop signal */ |
|
+ EV_CUSTOM = 0x01000000, /* for use by user code */ |
|
+ EV_ERROR = (-2147483647 - 1) /* sent when an error occurs */ |
|
+}; |
|
+ |
|
+/* can be used to add custom fields to all watchers, while losing binary compatibility */ |
|
+#ifndef EV_COMMON |
|
+# define EV_COMMON void *data; |
|
+#endif |
|
+ |
|
+#ifndef EV_CB_DECLARE |
|
+# define EV_CB_DECLARE(type) void (*cb)(EV_P_ struct type *w, int revents); |
|
+#endif |
|
+#ifndef EV_CB_INVOKE |
|
+# define EV_CB_INVOKE(watcher,revents) (watcher)->cb (EV_A_ (watcher), (revents)) |
|
+#endif |
|
+ |
|
+/* not official, do not use */ |
|
+#define EV_CB(type,name) void name (EV_P_ struct ev_ ## type *w, int revents) |
|
+ |
|
+/* |
|
+ * struct member types: |
|
+ * private: you may look at them, but not change them, |
|
+ * and they might not mean anything to you. |
|
+ * ro: can be read anytime, but only changed when the watcher isn't active. |
|
+ * rw: can be read and modified anytime, even when the watcher is active. |
|
+ * |
|
+ * some internal details that might be helpful for debugging: |
|
+ * |
|
+ * active is either 0, which means the watcher is not active, |
|
+ * or the array index of the watcher (periodics, timers) |
|
+ * or the array index + 1 (most other watchers) |
|
+ * or simply 1 for watchers that aren't in some array. |
|
+ * pending is either 0, in which case the watcher isn't, |
|
+ * or the array index + 1 in the pendings array. |
|
+ */ |
|
+ |
|
+#if EV_MINPRI == EV_MAXPRI |
|
+# define EV_DECL_PRIORITY |
|
+#elif !defined (EV_DECL_PRIORITY) |
|
+# define EV_DECL_PRIORITY int priority; |
|
+#endif |
|
+ |
|
+/* shared by all watchers */ |
|
+#define EV_WATCHER(type) \ |
|
+ int active; /* private */ \ |
|
+ int pending; /* private */ \ |
|
+ EV_DECL_PRIORITY /* private */ \ |
|
+ EV_COMMON /* rw */ \ |
|
+ EV_CB_DECLARE (type) /* private */ |
|
+ |
|
+#define EV_WATCHER_LIST(type) \ |
|
+ EV_WATCHER (type) \ |
|
+ struct ev_watcher_list *next; /* private */ |
|
+ |
|
+#define EV_WATCHER_TIME(type) \ |
|
+ EV_WATCHER (type) \ |
|
+ ev_tstamp at; /* private */ |
|
+ |
|
+/* base class, nothing to see here unless you subclass */ |
|
+typedef struct ev_watcher |
|
+{ |
|
+ EV_WATCHER (ev_watcher) |
|
+} ev_watcher; |
|
+ |
|
+/* base class, nothing to see here unless you subclass */ |
|
+typedef struct ev_watcher_list |
|
+{ |
|
+ EV_WATCHER_LIST (ev_watcher_list) |
|
+} ev_watcher_list; |
|
+ |
|
+/* base class, nothing to see here unless you subclass */ |
|
+typedef struct ev_watcher_time |
|
+{ |
|
+ EV_WATCHER_TIME (ev_watcher_time) |
|
+} ev_watcher_time; |
|
+ |
|
+/* invoked when fd is either EV_READable or EV_WRITEable */ |
|
+/* revent EV_READ, EV_WRITE */ |
|
+typedef struct ev_io |
|
+{ |
|
+ EV_WATCHER_LIST (ev_io) |
|
+ |
|
+ int fd; /* ro */ |
|
+ int events; /* ro */ |
|
+} ev_io; |
|
+ |
|
+/* invoked after a specific time, repeatable (based on monotonic clock) */ |
|
+/* revent EV_TIMEOUT */ |
|
+typedef struct ev_timer |
|
+{ |
|
+ EV_WATCHER_TIME (ev_timer) |
|
+ |
|
+ ev_tstamp repeat; /* rw */ |
|
+} ev_timer; |
|
+ |
|
+/* invoked at some specific time, possibly repeating at regular intervals (based on UTC) */ |
|
+/* revent EV_PERIODIC */ |
|
+typedef struct ev_periodic |
|
+{ |
|
+ EV_WATCHER_TIME (ev_periodic) |
|
+ |
|
+ ev_tstamp offset; /* rw */ |
|
+ ev_tstamp interval; /* rw */ |
|
+ ev_tstamp (*reschedule_cb)(struct ev_periodic *w, ev_tstamp now); /* rw */ |
|
+} ev_periodic; |
|
+ |
|
+/* invoked when the given signal has been received */ |
|
+/* revent EV_SIGNAL */ |
|
+typedef struct ev_signal |
|
+{ |
|
+ EV_WATCHER_LIST (ev_signal) |
|
+ |
|
+ int signum; /* ro */ |
|
+} ev_signal; |
|
+ |
|
+/* invoked when sigchld is received and waitpid indicates the given pid */ |
|
+/* revent EV_CHILD */ |
|
+/* does not support priorities */ |
|
+typedef struct ev_child |
|
+{ |
|
+ EV_WATCHER_LIST (ev_child) |
|
+ |
|
+ int flags; /* private */ |
|
+ int pid; /* ro */ |
|
+ int rpid; /* rw, holds the received pid */ |
|
+ int rstatus; /* rw, holds the exit status, use the macros from sys/wait.h */ |
|
+} ev_child; |
|
+ |
|
+#if EV_STAT_ENABLE |
|
+/* st_nlink = 0 means missing file or other error */ |
|
+# ifdef _WIN32 |
|
+typedef struct _stati64 ev_statdata; |
|
+# else |
|
+typedef struct stat ev_statdata; |
|
+# endif |
|
+ |
|
+/* invoked each time the stat data changes for a given path */ |
|
+/* revent EV_STAT */ |
|
+typedef struct ev_stat |
|
+{ |
|
+ EV_WATCHER_LIST (ev_stat) |
|
+ |
|
+ ev_timer timer; /* private */ |
|
+ ev_tstamp interval; /* ro */ |
|
+ const char *path; /* ro */ |
|
+ ev_statdata prev; /* ro */ |
|
+ ev_statdata attr; /* ro */ |
|
+ |
|
+ int wd; /* wd for inotify, fd for kqueue */ |
|
+} ev_stat; |
|
+#endif |
|
+ |
|
+#if EV_IDLE_ENABLE |
|
+/* invoked when the nothing else needs to be done, keeps the process from blocking */ |
|
+/* revent EV_IDLE */ |
|
+typedef struct ev_idle |
|
+{ |
|
+ EV_WATCHER (ev_idle) |
|
+} ev_idle; |
|
+#endif |
|
+ |
|
+/* invoked for each run of the mainloop, just before the blocking call */ |
|
+/* you can still change events in any way you like */ |
|
+/* revent EV_PREPARE */ |
|
+typedef struct ev_prepare |
|
+{ |
|
+ EV_WATCHER (ev_prepare) |
|
+} ev_prepare; |
|
+ |
|
+/* invoked for each run of the mainloop, just after the blocking call */ |
|
+/* revent EV_CHECK */ |
|
+typedef struct ev_check |
|
+{ |
|
+ EV_WATCHER (ev_check) |
|
+} ev_check; |
|
+ |
|
+#if EV_FORK_ENABLE |
|
+/* the callback gets invoked before check in the child process when a fork was detected */ |
|
+/* revent EV_FORK */ |
|
+typedef struct ev_fork |
|
+{ |
|
+ EV_WATCHER (ev_fork) |
|
+} ev_fork; |
|
+#endif |
|
+ |
|
+#if EV_CLEANUP_ENABLE |
|
+/* is invoked just before the loop gets destroyed */ |
|
+/* revent EV_CLEANUP */ |
|
+typedef struct ev_cleanup |
|
+{ |
|
+ EV_WATCHER (ev_cleanup) |
|
+} ev_cleanup; |
|
+#endif |
|
+ |
|
+#if EV_EMBED_ENABLE |
|
+/* used to embed an event loop inside another */ |
|
+/* the callback gets invoked when the event loop has handled events, and can be 0 */ |
|
+typedef struct ev_embed |
|
+{ |
|
+ EV_WATCHER (ev_embed) |
|
+ |
|
+ struct ev_loop *other; /* ro */ |
|
+ ev_io io; /* private */ |
|
+ ev_prepare prepare; /* private */ |
|
+ ev_check check; /* unused */ |
|
+ ev_timer timer; /* unused */ |
|
+ ev_periodic periodic; /* unused */ |
|
+ ev_idle idle; /* unused */ |
|
+ ev_fork fork; /* private */ |
|
+#if EV_CLEANUP_ENABLE |
|
+ ev_cleanup cleanup; /* unused */ |
|
+#endif |
|
+} ev_embed; |
|
+#endif |
|
+ |
|
+#if EV_ASYNC_ENABLE |
|
+/* invoked when somebody calls ev_async_send on the watcher */ |
|
+/* revent EV_ASYNC */ |
|
+typedef struct ev_async |
|
+{ |
|
+ EV_WATCHER (ev_async) |
|
+ |
|
+ EV_ATOMIC_T sent; /* private */ |
|
+} ev_async; |
|
+ |
|
+# define ev_async_pending(w) (+(w)->sent) |
|
+#endif |
|
+ |
|
+/* the presence of this union forces similar struct layout */ |
|
+union ev_any_watcher |
|
+{ |
|
+ struct ev_watcher w; |
|
+ struct ev_watcher_list wl; |
|
+ |
|
+ struct ev_io io; |
|
+ struct ev_timer timer; |
|
+ struct ev_periodic periodic; |
|
+ struct ev_signal signal; |
|
+ struct ev_child child; |
|
+#if EV_STAT_ENABLE |
|
+ struct ev_stat stat; |
|
+#endif |
|
+#if EV_IDLE_ENABLE |
|
+ struct ev_idle idle; |
|
+#endif |
|
+ struct ev_prepare prepare; |
|
+ struct ev_check check; |
|
+#if EV_FORK_ENABLE |
|
+ struct ev_fork fork; |
|
+#endif |
|
+#if EV_CLEANUP_ENABLE |
|
+ struct ev_cleanup cleanup; |
|
+#endif |
|
+#if EV_EMBED_ENABLE |
|
+ struct ev_embed embed; |
|
+#endif |
|
+#if EV_ASYNC_ENABLE |
|
+ struct ev_async async; |
|
+#endif |
|
+}; |
|
+ |
|
+/* flag bits for ev_default_loop and ev_loop_new */ |
|
+enum { |
|
+ /* the default */ |
|
+ EVFLAG_AUTO = 0x00000000U, /* not quite a mask */ |
|
+ /* flag bits */ |
|
+ EVFLAG_NOENV = 0x01000000U, /* do NOT consult environment */ |
|
+ EVFLAG_FORKCHECK = 0x02000000U, /* check for a fork in each iteration */ |
|
+ /* debugging/feature disable */ |
|
+ EVFLAG_NOINOTIFY = 0x00100000U, /* do not attempt to use inotify */ |
|
+#if EV_COMPAT3 |
|
+ EVFLAG_NOSIGFD = 0, /* compatibility to pre-3.9 */ |
|
+#endif |
|
+ EVFLAG_SIGNALFD = 0x00200000U, /* attempt to use signalfd */ |
|
+ EVFLAG_NOSIGMASK = 0x00400000U /* avoid modifying the signal mask */ |
|
+}; |
|
+ |
|
+/* method bits to be ored together */ |
|
+enum { |
|
+ EVBACKEND_SELECT = 0x00000001U, /* about anywhere */ |
|
+ EVBACKEND_POLL = 0x00000002U, /* !win */ |
|
+ EVBACKEND_EPOLL = 0x00000004U, /* linux */ |
|
+ EVBACKEND_KQUEUE = 0x00000008U, /* bsd */ |
|
+ EVBACKEND_DEVPOLL = 0x00000010U, /* solaris 8 */ /* NYI */ |
|
+ EVBACKEND_PORT = 0x00000020U, /* solaris 10 */ |
|
+ EVBACKEND_ALL = 0x0000003FU, /* all known backends */ |
|
+ EVBACKEND_MASK = 0x0000FFFFU /* all future backends */ |
|
+}; |
|
+ |
|
+#if EV_PROTOTYPES |
|
+int ev_version_major (void); |
|
+int ev_version_minor (void); |
|
+ |
|
+unsigned int ev_supported_backends (void); |
|
+unsigned int ev_recommended_backends (void); |
|
+unsigned int ev_embeddable_backends (void); |
|
+ |
|
+ev_tstamp ev_time (void); |
|
+void ev_sleep (ev_tstamp delay); /* sleep for a while */ |
|
+ |
|
+/* Sets the allocation function to use, works like realloc. |
|
+ * It is used to allocate and free memory. |
|
+ * If it returns zero when memory needs to be allocated, the library might abort |
|
+ * or take some potentially destructive action. |
|
+ * The default is your system realloc function. |
|
+ */ |
|
+void ev_set_allocator (void *(*cb)(void *ptr, long size)); |
|
+ |
|
+/* set the callback function to call on a |
|
+ * retryable syscall error |
|
+ * (such as failed select, poll, epoll_wait) |
|
+ */ |
|
+void ev_set_syserr_cb (void (*cb)(const char *msg)); |
|
+ |
|
+#if EV_MULTIPLICITY |
|
+ |
|
+/* the default loop is the only one that handles signals and child watchers */ |
|
+/* you can call this as often as you like */ |
|
+struct ev_loop *ev_default_loop (unsigned int flags EV_CPP (= 0)); |
|
+ |
|
+EV_INLINE struct ev_loop * |
|
+EV_MAYBE_UNUSED ev_default_loop_uc_ (void) |
|
+{ |
|
+ extern struct ev_loop *ev_default_loop_ptr; |
|
+ |
|
+ return ev_default_loop_ptr; |
|
+} |
|
+ |
|
+EV_INLINE int |
|
+EV_MAYBE_UNUSED ev_is_default_loop (EV_P) |
|
+{ |
|
+ return EV_A == EV_DEFAULT_UC; |
|
+} |
|
+ |
|
+/* create and destroy alternative loops that don't handle signals */ |
|
+struct ev_loop *ev_loop_new (unsigned int flags EV_CPP (= 0)); |
|
+ |
|
+ev_tstamp ev_now (EV_P); /* time w.r.t. timers and the eventloop, updated after each poll */ |
|
+ |
|
+#else |
|
+ |
|
+int ev_default_loop (unsigned int flags EV_CPP (= 0)); /* returns true when successful */ |
|
+ |
|
+EV_INLINE ev_tstamp |
|
+ev_now (void) |
|
+{ |
|
+ extern ev_tstamp ev_rt_now; |
|
+ |
|
+ return ev_rt_now; |
|
+} |
|
+ |
|
+/* looks weird, but ev_is_default_loop (EV_A) still works if this exists */ |
|
+EV_INLINE int |
|
+ev_is_default_loop (void) |
|
+{ |
|
+ return 1; |
|
+} |
|
+ |
|
+#endif /* multiplicity */ |
|
+ |
|
+/* destroy event loops, also works for the default loop */ |
|
+void ev_loop_destroy (EV_P); |
|
+ |
|
+/* this needs to be called after fork, to duplicate the loop */ |
|
+/* when you want to re-use it in the child */ |
|
+/* you can call it in either the parent or the child */ |
|
+/* you can actually call it at any time, anywhere :) */ |
|
+void ev_loop_fork (EV_P); |
|
+ |
|
+unsigned int ev_backend (EV_P); /* backend in use by loop */ |
|
+ |
|
+void ev_now_update (EV_P); /* update event loop time */ |
|
+ |
|
+#if EV_WALK_ENABLE |
|
+/* walk (almost) all watchers in the loop of a given type, invoking the */ |
|
+/* callback on every such watcher. The callback might stop the watcher, */ |
|
+/* but do nothing else with the loop */ |
|
+void ev_walk (EV_P_ int types, void (*cb)(EV_P_ int type, void *w)); |
|
+#endif |
|
+ |
|
+#endif /* prototypes */ |
|
+ |
|
+/* ev_run flags values */ |
|
+enum { |
|
+ EVRUN_NOWAIT = 1, /* do not block/wait */ |
|
+ EVRUN_ONCE = 2 /* block *once* only */ |
|
+}; |
|
+ |
|
+/* ev_break how values */ |
|
+enum { |
|
+ EVBREAK_CANCEL = 0, /* undo unloop */ |
|
+ EVBREAK_ONE = 1, /* unloop once */ |
|
+ EVBREAK_ALL = 2 /* unloop all loops */ |
|
+}; |
|
+ |
|
+#if EV_PROTOTYPES |
|
+void ev_run (EV_P_ int flags EV_CPP (= 0)); |
|
+void ev_break (EV_P_ int how EV_CPP (= EVBREAK_ONE)); /* break out of the loop */ |
|
+ |
|
+/* |
|
+ * ref/unref can be used to add or remove a refcount on the mainloop. every watcher |
|
+ * keeps one reference. if you have a long-running watcher you never unregister that |
|
+ * should not keep ev_loop from running, unref() after starting, and ref() before stopping. |
|
+ */ |
|
+void ev_ref (EV_P); |
|
+void ev_unref (EV_P); |
|
+ |
|
+/* |
|
+ * convenience function, wait for a single event, without registering an event watcher |
|
+ * if timeout is < 0, do wait indefinitely |
|
+ */ |
|
+void ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg); |
|
+ |
|
+# if EV_FEATURE_API |
|
+unsigned int ev_iteration (EV_P); /* number of loop iterations */ |
|
+unsigned int ev_depth (EV_P); /* #ev_loop enters - #ev_loop leaves */ |
|
+void ev_verify (EV_P); /* abort if loop data corrupted */ |
|
+ |
|
+void ev_set_io_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */ |
|
+void ev_set_timeout_collect_interval (EV_P_ ev_tstamp interval); /* sleep at least this time, default 0 */ |
|
+ |
|
+/* advanced stuff for threading etc. support, see docs */ |
|
+void ev_set_userdata (EV_P_ void *data); |
|
+void *ev_userdata (EV_P); |
|
+void ev_set_invoke_pending_cb (EV_P_ void (*invoke_pending_cb)(EV_P)); |
|
+void ev_set_loop_release_cb (EV_P_ void (*release)(EV_P), void (*acquire)(EV_P)); |
|
+ |
|
+unsigned int ev_pending_count (EV_P); /* number of pending events, if any */ |
|
+void ev_invoke_pending (EV_P); /* invoke all pending watchers */ |
|
+ |
|
+/* |
|
+ * stop/start the timer handling. |
|
+ */ |
|
+void ev_suspend (EV_P); |
|
+void ev_resume (EV_P); |
|
+#endif |
|
+ |
|
+#endif |
|
+ |
|
+/* these may evaluate ev multiple times, and the other arguments at most once */ |
|
+/* either use ev_init + ev_TYPE_set, or the ev_TYPE_init macro, below, to first initialise a watcher */ |
|
+#define ev_init(ev,cb_) do { \ |
|
+ ((ev_watcher *)(void *)(ev))->active = \ |
|
+ ((ev_watcher *)(void *)(ev))->pending = 0; \ |
|
+ ev_set_priority ((ev), 0); \ |
|
+ ev_set_cb ((ev), cb_); \ |
|
+} while (0) |
|
+ |
|
+#define ev_io_set(ev,fd_,events_) do { (ev)->fd = (fd_); (ev)->events = (events_) | EV__IOFDSET; } while (0) |
|
+#define ev_timer_set(ev,after_,repeat_) do { ((ev_watcher_time *)(ev))->at = (after_); (ev)->repeat = (repeat_); } while (0) |
|
+#define ev_periodic_set(ev,ofs_,ival_,rcb_) do { (ev)->offset = (ofs_); (ev)->interval = (ival_); (ev)->reschedule_cb = (rcb_); } while (0) |
|
+#define ev_signal_set(ev,signum_) do { (ev)->signum = (signum_); } while (0) |
|
+#define ev_child_set(ev,pid_,trace_) do { (ev)->pid = (pid_); (ev)->flags = !!(trace_); } while (0) |
|
+#define ev_stat_set(ev,path_,interval_) do { (ev)->path = (path_); (ev)->interval = (interval_); (ev)->wd = -2; } while (0) |
|
+#define ev_idle_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+#define ev_prepare_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+#define ev_check_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+#define ev_embed_set(ev,other_) do { (ev)->other = (other_); } while (0) |
|
+#define ev_fork_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+#define ev_cleanup_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+#define ev_async_set(ev) /* nop, yes, this is a serious in-joke */ |
|
+ |
|
+#define ev_io_init(ev,cb,fd,events) do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } while (0) |
|
+#define ev_timer_init(ev,cb,after,repeat) do { ev_init ((ev), (cb)); ev_timer_set ((ev),(after),(repeat)); } while (0) |
|
+#define ev_periodic_init(ev,cb,ofs,ival,rcb) do { ev_init ((ev), (cb)); ev_periodic_set ((ev),(ofs),(ival),(rcb)); } while (0) |
|
+#define ev_signal_init(ev,cb,signum) do { ev_init ((ev), (cb)); ev_signal_set ((ev), (signum)); } while (0) |
|
+#define ev_child_init(ev,cb,pid,trace) do { ev_init ((ev), (cb)); ev_child_set ((ev),(pid),(trace)); } while (0) |
|
+#define ev_stat_init(ev,cb,path,interval) do { ev_init ((ev), (cb)); ev_stat_set ((ev),(path),(interval)); } while (0) |
|
+#define ev_idle_init(ev,cb) do { ev_init ((ev), (cb)); ev_idle_set ((ev)); } while (0) |
|
+#define ev_prepare_init(ev,cb) do { ev_init ((ev), (cb)); ev_prepare_set ((ev)); } while (0) |
|
+#define ev_check_init(ev,cb) do { ev_init ((ev), (cb)); ev_check_set ((ev)); } while (0) |
|
+#define ev_embed_init(ev,cb,other) do { ev_init ((ev), (cb)); ev_embed_set ((ev),(other)); } while (0) |
|
+#define ev_fork_init(ev,cb) do { ev_init ((ev), (cb)); ev_fork_set ((ev)); } while (0) |
|
+#define ev_cleanup_init(ev,cb) do { ev_init ((ev), (cb)); ev_cleanup_set ((ev)); } while (0) |
|
+#define ev_async_init(ev,cb) do { ev_init ((ev), (cb)); ev_async_set ((ev)); } while (0) |
|
+ |
|
+#define ev_is_pending(ev) (0 + ((ev_watcher *)(void *)(ev))->pending) /* ro, true when watcher is waiting for callback invocation */ |
|
+#define ev_is_active(ev) (0 + ((ev_watcher *)(void *)(ev))->active) /* ro, true when the watcher has been started */ |
|
+ |
|
+#define ev_cb(ev) (ev)->cb /* rw */ |
|
+ |
|
+#if EV_MINPRI == EV_MAXPRI |
|
+# define ev_priority(ev) ((ev), EV_MINPRI) |
|
+# define ev_set_priority(ev,pri) ((ev), (pri)) |
|
+#else |
|
+# define ev_priority(ev) (+(((ev_watcher *)(void *)(ev))->priority)) |
|
+# define ev_set_priority(ev,pri) ( (ev_watcher *)(void *)(ev))->priority = (pri) |
|
+#endif |
|
+ |
|
+#define ev_periodic_at(ev) (+((ev_watcher_time *)(ev))->at) |
|
+ |
|
+#ifndef ev_set_cb |
|
+# define ev_set_cb(ev,cb_) ev_cb (ev) = (cb_) |
|
+#endif |
|
+ |
|
+/* stopping (enabling, adding) a watcher does nothing if it is already running */ |
|
+/* stopping (disabling, deleting) a watcher does nothing unless its already running */ |
|
+#if EV_PROTOTYPES |
|
+ |
|
+/* feeds an event into a watcher as if the event actually occured */ |
|
+/* accepts any ev_watcher type */ |
|
+void ev_feed_event (EV_P_ void *w, int revents); |
|
+void ev_feed_fd_event (EV_P_ int fd, int revents); |
|
+#if EV_SIGNAL_ENABLE |
|
+void ev_feed_signal (int signum); |
|
+void ev_feed_signal_event (EV_P_ int signum); |
|
+#endif |
|
+void ev_invoke (EV_P_ void *w, int revents); |
|
+int ev_clear_pending (EV_P_ void *w); |
|
+ |
|
+void ev_io_start (EV_P_ ev_io *w); |
|
+void ev_io_stop (EV_P_ ev_io *w); |
|
+ |
|
+void ev_timer_start (EV_P_ ev_timer *w); |
|
+void ev_timer_stop (EV_P_ ev_timer *w); |
|
+/* stops if active and no repeat, restarts if active and repeating, starts if inactive and repeating */ |
|
+void ev_timer_again (EV_P_ ev_timer *w); |
|
+/* return remaining time */ |
|
+ev_tstamp ev_timer_remaining (EV_P_ ev_timer *w); |
|
+ |
|
+#if EV_PERIODIC_ENABLE |
|
+void ev_periodic_start (EV_P_ ev_periodic *w); |
|
+void ev_periodic_stop (EV_P_ ev_periodic *w); |
|
+void ev_periodic_again (EV_P_ ev_periodic *w); |
|
+#endif |
|
+ |
|
+/* only supported in the default loop */ |
|
+#if EV_SIGNAL_ENABLE |
|
+void ev_signal_start (EV_P_ ev_signal *w); |
|
+void ev_signal_stop (EV_P_ ev_signal *w); |
|
+#endif |
|
+ |
|
+/* only supported in the default loop */ |
|
+# if EV_CHILD_ENABLE |
|
+void ev_child_start (EV_P_ ev_child *w); |
|
+void ev_child_stop (EV_P_ ev_child *w); |
|
+# endif |
|
+ |
|
+# if EV_STAT_ENABLE |
|
+void ev_stat_start (EV_P_ ev_stat *w); |
|
+void ev_stat_stop (EV_P_ ev_stat *w); |
|
+void ev_stat_stat (EV_P_ ev_stat *w); |
|
+# endif |
|
+ |
|
+# if EV_IDLE_ENABLE |
|
+void ev_idle_start (EV_P_ ev_idle *w); |
|
+void ev_idle_stop (EV_P_ ev_idle *w); |
|
+# endif |
|
+ |
|
+#if EV_PREPARE_ENABLE |
|
+void ev_prepare_start (EV_P_ ev_prepare *w); |
|
+void ev_prepare_stop (EV_P_ ev_prepare *w); |
|
+#endif |
|
+ |
|
+#if EV_CHECK_ENABLE |
|
+void ev_check_start (EV_P_ ev_check *w); |
|
+void ev_check_stop (EV_P_ ev_check *w); |
|
+#endif |
|
+ |
|
+# if EV_FORK_ENABLE |
|
+void ev_fork_start (EV_P_ ev_fork *w); |
|
+void ev_fork_stop (EV_P_ ev_fork *w); |
|
+# endif |
|
+ |
|
+# if EV_CLEANUP_ENABLE |
|
+void ev_cleanup_start (EV_P_ ev_cleanup *w); |
|
+void ev_cleanup_stop (EV_P_ ev_cleanup *w); |
|
+# endif |
|
+ |
|
+# if EV_EMBED_ENABLE |
|
+/* only supported when loop to be embedded is in fact embeddable */ |
|
+void ev_embed_start (EV_P_ ev_embed *w); |
|
+void ev_embed_stop (EV_P_ ev_embed *w); |
|
+void ev_embed_sweep (EV_P_ ev_embed *w); |
|
+# endif |
|
+ |
|
+# if EV_ASYNC_ENABLE |
|
+void ev_async_start (EV_P_ ev_async *w); |
|
+void ev_async_stop (EV_P_ ev_async *w); |
|
+void ev_async_send (EV_P_ ev_async *w); |
|
+# endif |
|
+ |
|
+#if EV_COMPAT3 |
|
+ #define EVLOOP_NONBLOCK EVRUN_NOWAIT |
|
+ #define EVLOOP_ONESHOT EVRUN_ONCE |
|
+ #define EVUNLOOP_CANCEL EVBREAK_CANCEL |
|
+ #define EVUNLOOP_ONE EVBREAK_ONE |
|
+ #define EVUNLOOP_ALL EVBREAK_ALL |
|
+ #if EV_PROTOTYPES |
|
+ EV_INLINE void EV_MAYBE_UNUSED ev_loop (EV_P_ int flags) { ev_run (EV_A_ flags); } |
|
+ EV_INLINE void EV_MAYBE_UNUSED ev_unloop (EV_P_ int how ) { ev_break (EV_A_ how ); } |
|
+ EV_INLINE void EV_MAYBE_UNUSED ev_default_destroy (void) { ev_loop_destroy (EV_DEFAULT); } |
|
+ EV_INLINE void EV_MAYBE_UNUSED ev_default_fork (void) { ev_loop_fork (EV_DEFAULT); } |
|
+ #if EV_FEATURE_API |
|
+ EV_INLINE unsigned int EV_MAYBE_UNUSED ev_loop_count (EV_P) { return ev_iteration (EV_A); } |
|
+ EV_INLINE unsigned int EV_MAYBE_UNUSED ev_loop_depth (EV_P) { return ev_depth (EV_A); } |
|
+ EV_INLINE void EV_MAYBE_UNUSED ev_loop_verify (EV_P) { ev_verify (EV_A); } |
|
+ #endif |
|
+ #endif |
|
+#else |
|
+ typedef struct ev_loop ev_loop; |
|
+#endif |
|
+ |
|
+#endif |
|
+ |
|
+EV_CPP(}) |
|
+ |
|
+#endif |
|
+ |
|
diff --git a/deps/libuv/include/uv-private/ngx-queue.h b/deps/libuv/include/uv-private/ngx-queue.h |
|
new file mode 100644 |
|
index 0000000..f8576d6 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/ngx-queue.h |
|
@@ -0,0 +1,102 @@ |
|
+ |
|
+/* |
|
+ * Copyright (C) Igor Sysoev |
|
+ */ |
|
+ |
|
+ |
|
+#ifndef _NGX_QUEUE_H_INCLUDED_ |
|
+#define _NGX_QUEUE_H_INCLUDED_ |
|
+ |
|
+ |
|
+typedef struct ngx_queue_s ngx_queue_t; |
|
+ |
|
+struct ngx_queue_s { |
|
+ ngx_queue_t *prev; |
|
+ ngx_queue_t *next; |
|
+}; |
|
+ |
|
+ |
|
+#define ngx_queue_init(q) \ |
|
+ (q)->prev = q; \ |
|
+ (q)->next = q |
|
+ |
|
+ |
|
+#define ngx_queue_empty(h) \ |
|
+ (h == (h)->prev) |
|
+ |
|
+ |
|
+#define ngx_queue_insert_head(h, x) \ |
|
+ (x)->next = (h)->next; \ |
|
+ (x)->next->prev = x; \ |
|
+ (x)->prev = h; \ |
|
+ (h)->next = x |
|
+ |
|
+ |
|
+#define ngx_queue_insert_after ngx_queue_insert_head |
|
+ |
|
+ |
|
+#define ngx_queue_insert_tail(h, x) \ |
|
+ (x)->prev = (h)->prev; \ |
|
+ (x)->prev->next = x; \ |
|
+ (x)->next = h; \ |
|
+ (h)->prev = x |
|
+ |
|
+ |
|
+#define ngx_queue_head(h) \ |
|
+ (h)->next |
|
+ |
|
+ |
|
+#define ngx_queue_last(h) \ |
|
+ (h)->prev |
|
+ |
|
+ |
|
+#define ngx_queue_sentinel(h) \ |
|
+ (h) |
|
+ |
|
+ |
|
+#define ngx_queue_next(q) \ |
|
+ (q)->next |
|
+ |
|
+ |
|
+#define ngx_queue_prev(q) \ |
|
+ (q)->prev |
|
+ |
|
+ |
|
+#if (NGX_DEBUG) |
|
+ |
|
+#define ngx_queue_remove(x) \ |
|
+ (x)->next->prev = (x)->prev; \ |
|
+ (x)->prev->next = (x)->next; \ |
|
+ (x)->prev = NULL; \ |
|
+ (x)->next = NULL |
|
+ |
|
+#else |
|
+ |
|
+#define ngx_queue_remove(x) \ |
|
+ (x)->next->prev = (x)->prev; \ |
|
+ (x)->prev->next = (x)->next |
|
+ |
|
+#endif |
|
+ |
|
+ |
|
+#define ngx_queue_split(h, q, n) \ |
|
+ (n)->prev = (h)->prev; \ |
|
+ (n)->prev->next = n; \ |
|
+ (n)->next = q; \ |
|
+ (h)->prev = (q)->prev; \ |
|
+ (h)->prev->next = h; \ |
|
+ (q)->prev = n; |
|
+ |
|
+ |
|
+#define ngx_queue_add(h, n) \ |
|
+ (h)->prev->next = (n)->next; \ |
|
+ (n)->next->prev = (h)->prev; \ |
|
+ (h)->prev = (n)->prev; \ |
|
+ (h)->prev->next = h; |
|
+ |
|
+ |
|
+#define ngx_queue_data(q, type, link) \ |
|
+ (type *) ((unsigned char *) q - offsetof(type, link)) |
|
+ |
|
+ |
|
+#endif /* _NGX_QUEUE_H_INCLUDED_ */ |
|
diff --git a/deps/libuv/include/uv-private/tree.h b/deps/libuv/include/uv-private/tree.h |
|
new file mode 100644 |
|
index 0000000..37966d3 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/tree.h |
|
@@ -0,0 +1,762 @@ |
|
+/*- |
|
+ * Copyright 2002 Niels Provos <[email protected]> |
|
+ * All rights reserved. |
|
+ * |
|
+ * Redistribution and use in source and binary forms, with or without |
|
+ * modification, are permitted provided that the following conditions |
|
+ * are met: |
|
+ * 1. Redistributions of source code must retain the above copyright |
|
+ * notice, this list of conditions and the following disclaimer. |
|
+ * 2. Redistributions in binary form must reproduce the above copyright |
|
+ * notice, this list of conditions and the following disclaimer in the |
|
+ * documentation and/or other materials provided with the distribution. |
|
+ * |
|
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
+ */ |
|
+ |
|
+#ifndef _UV_TREE_H_ |
|
+#define _UV_TREE_H_ |
|
+ |
|
+#define __unused |
|
+ |
|
+/* |
|
+ * This file defines data structures for different types of trees: |
|
+ * splay trees and red-black trees. |
|
+ * |
|
+ * A splay tree is a self-organizing data structure. Every operation |
|
+ * on the tree causes a splay to happen. The splay moves the requested |
|
+ * node to the root of the tree and partly rebalances it. |
|
+ * |
|
+ * This has the benefit that request locality causes faster lookups as |
|
+ * the requested nodes move to the top of the tree. On the other hand, |
|
+ * every lookup causes memory writes. |
|
+ * |
|
+ * The Balance Theorem bounds the total access time for m operations |
|
+ * and n inserts on an initially empty tree as O((m + n)lg n). The |
|
+ * amortized cost for a sequence of m accesses to a splay tree is O(lg n); |
|
+ * |
|
+ * A red-black tree is a binary search tree with the node color as an |
|
+ * extra attribute. It fulfills a set of conditions: |
|
+ * - every search path from the root to a leaf consists of the |
|
+ * same number of black nodes, |
|
+ * - each red node (except for the root) has a black parent, |
|
+ * - each leaf node is black. |
|
+ * |
|
+ * Every operation on a red-black tree is bounded as O(lg n). |
|
+ * The maximum height of a red-black tree is 2lg (n+1). |
|
+ */ |
|
+ |
|
+#define SPLAY_HEAD(name, type) \ |
|
+struct name { \ |
|
+ struct type *sph_root; /* root of the tree */ \ |
|
+} |
|
+ |
|
+#define SPLAY_INITIALIZER(root) \ |
|
+ { NULL } |
|
+ |
|
+#define SPLAY_INIT(root) do { \ |
|
+ (root)->sph_root = NULL; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define SPLAY_ENTRY(type) \ |
|
+struct { \ |
|
+ struct type *spe_left; /* left element */ \ |
|
+ struct type *spe_right; /* right element */ \ |
|
+} |
|
+ |
|
+#define SPLAY_LEFT(elm, field) (elm)->field.spe_left |
|
+#define SPLAY_RIGHT(elm, field) (elm)->field.spe_right |
|
+#define SPLAY_ROOT(head) (head)->sph_root |
|
+#define SPLAY_EMPTY(head) (SPLAY_ROOT(head) == NULL) |
|
+ |
|
+/* SPLAY_ROTATE_{LEFT,RIGHT} expect that tmp hold SPLAY_{RIGHT,LEFT} */ |
|
+#define SPLAY_ROTATE_RIGHT(head, tmp, field) do { \ |
|
+ SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(tmp, field); \ |
|
+ SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ |
|
+ (head)->sph_root = tmp; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define SPLAY_ROTATE_LEFT(head, tmp, field) do { \ |
|
+ SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(tmp, field); \ |
|
+ SPLAY_LEFT(tmp, field) = (head)->sph_root; \ |
|
+ (head)->sph_root = tmp; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define SPLAY_LINKLEFT(head, tmp, field) do { \ |
|
+ SPLAY_LEFT(tmp, field) = (head)->sph_root; \ |
|
+ tmp = (head)->sph_root; \ |
|
+ (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define SPLAY_LINKRIGHT(head, tmp, field) do { \ |
|
+ SPLAY_RIGHT(tmp, field) = (head)->sph_root; \ |
|
+ tmp = (head)->sph_root; \ |
|
+ (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define SPLAY_ASSEMBLE(head, node, left, right, field) do { \ |
|
+ SPLAY_RIGHT(left, field) = SPLAY_LEFT((head)->sph_root, field); \ |
|
+ SPLAY_LEFT(right, field) = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ SPLAY_LEFT((head)->sph_root, field) = SPLAY_RIGHT(node, field); \ |
|
+ SPLAY_RIGHT((head)->sph_root, field) = SPLAY_LEFT(node, field); \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+/* Generates prototypes and inline functions */ |
|
+ |
|
+#define SPLAY_PROTOTYPE(name, type, field, cmp) \ |
|
+void name##_SPLAY(struct name *, struct type *); \ |
|
+void name##_SPLAY_MINMAX(struct name *, int); \ |
|
+struct type *name##_SPLAY_INSERT(struct name *, struct type *); \ |
|
+struct type *name##_SPLAY_REMOVE(struct name *, struct type *); \ |
|
+ \ |
|
+/* Finds the node with the same key as elm */ \ |
|
+static __inline struct type * \ |
|
+name##_SPLAY_FIND(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ if (SPLAY_EMPTY(head)) \ |
|
+ return(NULL); \ |
|
+ name##_SPLAY(head, elm); \ |
|
+ if ((cmp)(elm, (head)->sph_root) == 0) \ |
|
+ return (head->sph_root); \ |
|
+ return (NULL); \ |
|
+} \ |
|
+ \ |
|
+static __inline struct type * \ |
|
+name##_SPLAY_NEXT(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ name##_SPLAY(head, elm); \ |
|
+ if (SPLAY_RIGHT(elm, field) != NULL) { \ |
|
+ elm = SPLAY_RIGHT(elm, field); \ |
|
+ while (SPLAY_LEFT(elm, field) != NULL) { \ |
|
+ elm = SPLAY_LEFT(elm, field); \ |
|
+ } \ |
|
+ } else \ |
|
+ elm = NULL; \ |
|
+ return (elm); \ |
|
+} \ |
|
+ \ |
|
+static __inline struct type * \ |
|
+name##_SPLAY_MIN_MAX(struct name *head, int val) \ |
|
+{ \ |
|
+ name##_SPLAY_MINMAX(head, val); \ |
|
+ return (SPLAY_ROOT(head)); \ |
|
+} |
|
+ |
|
+/* Main splay operation. |
|
+ * Moves node close to the key of elm to top |
|
+ */ |
|
+#define SPLAY_GENERATE(name, type, field, cmp) \ |
|
+struct type * \ |
|
+name##_SPLAY_INSERT(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ if (SPLAY_EMPTY(head)) { \ |
|
+ SPLAY_LEFT(elm, field) = SPLAY_RIGHT(elm, field) = NULL; \ |
|
+ } else { \ |
|
+ int __comp; \ |
|
+ name##_SPLAY(head, elm); \ |
|
+ __comp = (cmp)(elm, (head)->sph_root); \ |
|
+ if(__comp < 0) { \ |
|
+ SPLAY_LEFT(elm, field) = SPLAY_LEFT((head)->sph_root, field); \ |
|
+ SPLAY_RIGHT(elm, field) = (head)->sph_root; \ |
|
+ SPLAY_LEFT((head)->sph_root, field) = NULL; \ |
|
+ } else if (__comp > 0) { \ |
|
+ SPLAY_RIGHT(elm, field) = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ SPLAY_LEFT(elm, field) = (head)->sph_root; \ |
|
+ SPLAY_RIGHT((head)->sph_root, field) = NULL; \ |
|
+ } else \ |
|
+ return ((head)->sph_root); \ |
|
+ } \ |
|
+ (head)->sph_root = (elm); \ |
|
+ return (NULL); \ |
|
+} \ |
|
+ \ |
|
+struct type * \ |
|
+name##_SPLAY_REMOVE(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *__tmp; \ |
|
+ if (SPLAY_EMPTY(head)) \ |
|
+ return (NULL); \ |
|
+ name##_SPLAY(head, elm); \ |
|
+ if ((cmp)(elm, (head)->sph_root) == 0) { \ |
|
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL) { \ |
|
+ (head)->sph_root = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ } else { \ |
|
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ (head)->sph_root = SPLAY_LEFT((head)->sph_root, field); \ |
|
+ name##_SPLAY(head, elm); \ |
|
+ SPLAY_RIGHT((head)->sph_root, field) = __tmp; \ |
|
+ } \ |
|
+ return (elm); \ |
|
+ } \ |
|
+ return (NULL); \ |
|
+} \ |
|
+ \ |
|
+void \ |
|
+name##_SPLAY(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type __node, *__left, *__right, *__tmp; \ |
|
+ int __comp; \ |
|
+ \ |
|
+ SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ |
|
+ __left = __right = &__node; \ |
|
+ \ |
|
+ while ((__comp = (cmp)(elm, (head)->sph_root)) != 0) { \ |
|
+ if (__comp < 0) { \ |
|
+ __tmp = SPLAY_LEFT((head)->sph_root, field); \ |
|
+ if (__tmp == NULL) \ |
|
+ break; \ |
|
+ if ((cmp)(elm, __tmp) < 0){ \ |
|
+ SPLAY_ROTATE_RIGHT(head, __tmp, field); \ |
|
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ |
|
+ break; \ |
|
+ } \ |
|
+ SPLAY_LINKLEFT(head, __right, field); \ |
|
+ } else if (__comp > 0) { \ |
|
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ if (__tmp == NULL) \ |
|
+ break; \ |
|
+ if ((cmp)(elm, __tmp) > 0){ \ |
|
+ SPLAY_ROTATE_LEFT(head, __tmp, field); \ |
|
+ if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ |
|
+ break; \ |
|
+ } \ |
|
+ SPLAY_LINKRIGHT(head, __left, field); \ |
|
+ } \ |
|
+ } \ |
|
+ SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ |
|
+} \ |
|
+ \ |
|
+/* Splay with either the minimum or the maximum element \ |
|
+ * Used to find minimum or maximum element in tree. \ |
|
+ */ \ |
|
+void name##_SPLAY_MINMAX(struct name *head, int __comp) \ |
|
+{ \ |
|
+ struct type __node, *__left, *__right, *__tmp; \ |
|
+ \ |
|
+ SPLAY_LEFT(&__node, field) = SPLAY_RIGHT(&__node, field) = NULL; \ |
|
+ __left = __right = &__node; \ |
|
+ \ |
|
+ while (1) { \ |
|
+ if (__comp < 0) { \ |
|
+ __tmp = SPLAY_LEFT((head)->sph_root, field); \ |
|
+ if (__tmp == NULL) \ |
|
+ break; \ |
|
+ if (__comp < 0){ \ |
|
+ SPLAY_ROTATE_RIGHT(head, __tmp, field); \ |
|
+ if (SPLAY_LEFT((head)->sph_root, field) == NULL) \ |
|
+ break; \ |
|
+ } \ |
|
+ SPLAY_LINKLEFT(head, __right, field); \ |
|
+ } else if (__comp > 0) { \ |
|
+ __tmp = SPLAY_RIGHT((head)->sph_root, field); \ |
|
+ if (__tmp == NULL) \ |
|
+ break; \ |
|
+ if (__comp > 0) { \ |
|
+ SPLAY_ROTATE_LEFT(head, __tmp, field); \ |
|
+ if (SPLAY_RIGHT((head)->sph_root, field) == NULL) \ |
|
+ break; \ |
|
+ } \ |
|
+ SPLAY_LINKRIGHT(head, __left, field); \ |
|
+ } \ |
|
+ } \ |
|
+ SPLAY_ASSEMBLE(head, &__node, __left, __right, field); \ |
|
+} |
|
+ |
|
+#define SPLAY_NEGINF -1 |
|
+#define SPLAY_INF 1 |
|
+ |
|
+#define SPLAY_INSERT(name, x, y) name##_SPLAY_INSERT(x, y) |
|
+#define SPLAY_REMOVE(name, x, y) name##_SPLAY_REMOVE(x, y) |
|
+#define SPLAY_FIND(name, x, y) name##_SPLAY_FIND(x, y) |
|
+#define SPLAY_NEXT(name, x, y) name##_SPLAY_NEXT(x, y) |
|
+#define SPLAY_MIN(name, x) (SPLAY_EMPTY(x) ? NULL \ |
|
+ : name##_SPLAY_MIN_MAX(x, SPLAY_NEGINF)) |
|
+#define SPLAY_MAX(name, x) (SPLAY_EMPTY(x) ? NULL \ |
|
+ : name##_SPLAY_MIN_MAX(x, SPLAY_INF)) |
|
+ |
|
+#define SPLAY_FOREACH(x, name, head) \ |
|
+ for ((x) = SPLAY_MIN(name, head); \ |
|
+ (x) != NULL; \ |
|
+ (x) = SPLAY_NEXT(name, head, x)) |
|
+ |
|
+/* Macros that define a red-black tree */ |
|
+#define RB_HEAD(name, type) \ |
|
+struct name { \ |
|
+ struct type *rbh_root; /* root of the tree */ \ |
|
+} |
|
+ |
|
+#define RB_INITIALIZER(root) \ |
|
+ { NULL } |
|
+ |
|
+#define RB_INIT(root) do { \ |
|
+ (root)->rbh_root = NULL; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define RB_BLACK 0 |
|
+#define RB_RED 1 |
|
+#define RB_ENTRY(type) \ |
|
+struct { \ |
|
+ struct type *rbe_left; /* left element */ \ |
|
+ struct type *rbe_right; /* right element */ \ |
|
+ struct type *rbe_parent; /* parent element */ \ |
|
+ int rbe_color; /* node color */ \ |
|
+} |
|
+ |
|
+#define RB_LEFT(elm, field) (elm)->field.rbe_left |
|
+#define RB_RIGHT(elm, field) (elm)->field.rbe_right |
|
+#define RB_PARENT(elm, field) (elm)->field.rbe_parent |
|
+#define RB_COLOR(elm, field) (elm)->field.rbe_color |
|
+#define RB_ROOT(head) (head)->rbh_root |
|
+#define RB_EMPTY(head) (RB_ROOT(head) == NULL) |
|
+ |
|
+#define RB_SET(elm, parent, field) do { \ |
|
+ RB_PARENT(elm, field) = parent; \ |
|
+ RB_LEFT(elm, field) = RB_RIGHT(elm, field) = NULL; \ |
|
+ RB_COLOR(elm, field) = RB_RED; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define RB_SET_BLACKRED(black, red, field) do { \ |
|
+ RB_COLOR(black, field) = RB_BLACK; \ |
|
+ RB_COLOR(red, field) = RB_RED; \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#ifndef RB_AUGMENT |
|
+#define RB_AUGMENT(x) do {} while (0) |
|
+#endif |
|
+ |
|
+#define RB_ROTATE_LEFT(head, elm, tmp, field) do { \ |
|
+ (tmp) = RB_RIGHT(elm, field); \ |
|
+ if ((RB_RIGHT(elm, field) = RB_LEFT(tmp, field)) != NULL) { \ |
|
+ RB_PARENT(RB_LEFT(tmp, field), field) = (elm); \ |
|
+ } \ |
|
+ RB_AUGMENT(elm); \ |
|
+ if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ |
|
+ if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ |
|
+ RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ |
|
+ else \ |
|
+ RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ |
|
+ } else \ |
|
+ (head)->rbh_root = (tmp); \ |
|
+ RB_LEFT(tmp, field) = (elm); \ |
|
+ RB_PARENT(elm, field) = (tmp); \ |
|
+ RB_AUGMENT(tmp); \ |
|
+ if ((RB_PARENT(tmp, field))) \ |
|
+ RB_AUGMENT(RB_PARENT(tmp, field)); \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+#define RB_ROTATE_RIGHT(head, elm, tmp, field) do { \ |
|
+ (tmp) = RB_LEFT(elm, field); \ |
|
+ if ((RB_LEFT(elm, field) = RB_RIGHT(tmp, field)) != NULL) { \ |
|
+ RB_PARENT(RB_RIGHT(tmp, field), field) = (elm); \ |
|
+ } \ |
|
+ RB_AUGMENT(elm); \ |
|
+ if ((RB_PARENT(tmp, field) = RB_PARENT(elm, field)) != NULL) { \ |
|
+ if ((elm) == RB_LEFT(RB_PARENT(elm, field), field)) \ |
|
+ RB_LEFT(RB_PARENT(elm, field), field) = (tmp); \ |
|
+ else \ |
|
+ RB_RIGHT(RB_PARENT(elm, field), field) = (tmp); \ |
|
+ } else \ |
|
+ (head)->rbh_root = (tmp); \ |
|
+ RB_RIGHT(tmp, field) = (elm); \ |
|
+ RB_PARENT(elm, field) = (tmp); \ |
|
+ RB_AUGMENT(tmp); \ |
|
+ if ((RB_PARENT(tmp, field))) \ |
|
+ RB_AUGMENT(RB_PARENT(tmp, field)); \ |
|
+} while (/*CONSTCOND*/ 0) |
|
+ |
|
+/* Generates prototypes and inline functions */ |
|
+#define RB_PROTOTYPE(name, type, field, cmp) \ |
|
+ RB_PROTOTYPE_INTERNAL(name, type, field, cmp,) |
|
+#define RB_PROTOTYPE_STATIC(name, type, field, cmp) \ |
|
+ RB_PROTOTYPE_INTERNAL(name, type, field, cmp, __unused static) |
|
+#define RB_PROTOTYPE_INTERNAL(name, type, field, cmp, attr) \ |
|
+attr void name##_RB_INSERT_COLOR(struct name *, struct type *); \ |
|
+attr void name##_RB_REMOVE_COLOR(struct name *, struct type *, struct type *);\ |
|
+attr struct type *name##_RB_REMOVE(struct name *, struct type *); \ |
|
+attr struct type *name##_RB_INSERT(struct name *, struct type *); \ |
|
+attr struct type *name##_RB_FIND(struct name *, struct type *); \ |
|
+attr struct type *name##_RB_NFIND(struct name *, struct type *); \ |
|
+attr struct type *name##_RB_NEXT(struct type *); \ |
|
+attr struct type *name##_RB_PREV(struct type *); \ |
|
+attr struct type *name##_RB_MINMAX(struct name *, int); \ |
|
+ \ |
|
+ |
|
+/* Main rb operation. |
|
+ * Moves node close to the key of elm to top |
|
+ */ |
|
+#define RB_GENERATE(name, type, field, cmp) \ |
|
+ RB_GENERATE_INTERNAL(name, type, field, cmp,) |
|
+#define RB_GENERATE_STATIC(name, type, field, cmp) \ |
|
+ RB_GENERATE_INTERNAL(name, type, field, cmp, __unused static) |
|
+#define RB_GENERATE_INTERNAL(name, type, field, cmp, attr) \ |
|
+attr void \ |
|
+name##_RB_INSERT_COLOR(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *parent, *gparent, *tmp; \ |
|
+ while ((parent = RB_PARENT(elm, field)) != NULL && \ |
|
+ RB_COLOR(parent, field) == RB_RED) { \ |
|
+ gparent = RB_PARENT(parent, field); \ |
|
+ if (parent == RB_LEFT(gparent, field)) { \ |
|
+ tmp = RB_RIGHT(gparent, field); \ |
|
+ if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ |
|
+ RB_COLOR(tmp, field) = RB_BLACK; \ |
|
+ RB_SET_BLACKRED(parent, gparent, field); \ |
|
+ elm = gparent; \ |
|
+ continue; \ |
|
+ } \ |
|
+ if (RB_RIGHT(parent, field) == elm) { \ |
|
+ RB_ROTATE_LEFT(head, parent, tmp, field); \ |
|
+ tmp = parent; \ |
|
+ parent = elm; \ |
|
+ elm = tmp; \ |
|
+ } \ |
|
+ RB_SET_BLACKRED(parent, gparent, field); \ |
|
+ RB_ROTATE_RIGHT(head, gparent, tmp, field); \ |
|
+ } else { \ |
|
+ tmp = RB_LEFT(gparent, field); \ |
|
+ if (tmp && RB_COLOR(tmp, field) == RB_RED) { \ |
|
+ RB_COLOR(tmp, field) = RB_BLACK; \ |
|
+ RB_SET_BLACKRED(parent, gparent, field); \ |
|
+ elm = gparent; \ |
|
+ continue; \ |
|
+ } \ |
|
+ if (RB_LEFT(parent, field) == elm) { \ |
|
+ RB_ROTATE_RIGHT(head, parent, tmp, field); \ |
|
+ tmp = parent; \ |
|
+ parent = elm; \ |
|
+ elm = tmp; \ |
|
+ } \ |
|
+ RB_SET_BLACKRED(parent, gparent, field); \ |
|
+ RB_ROTATE_LEFT(head, gparent, tmp, field); \ |
|
+ } \ |
|
+ } \ |
|
+ RB_COLOR(head->rbh_root, field) = RB_BLACK; \ |
|
+} \ |
|
+ \ |
|
+attr void \ |
|
+name##_RB_REMOVE_COLOR(struct name *head, struct type *parent, \ |
|
+ struct type *elm) \ |
|
+{ \ |
|
+ struct type *tmp; \ |
|
+ while ((elm == NULL || RB_COLOR(elm, field) == RB_BLACK) && \ |
|
+ elm != RB_ROOT(head)) { \ |
|
+ if (RB_LEFT(parent, field) == elm) { \ |
|
+ tmp = RB_RIGHT(parent, field); \ |
|
+ if (RB_COLOR(tmp, field) == RB_RED) { \ |
|
+ RB_SET_BLACKRED(tmp, parent, field); \ |
|
+ RB_ROTATE_LEFT(head, parent, tmp, field); \ |
|
+ tmp = RB_RIGHT(parent, field); \ |
|
+ } \ |
|
+ if ((RB_LEFT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ |
|
+ (RB_RIGHT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ |
|
+ RB_COLOR(tmp, field) = RB_RED; \ |
|
+ elm = parent; \ |
|
+ parent = RB_PARENT(elm, field); \ |
|
+ } else { \ |
|
+ if (RB_RIGHT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK) { \ |
|
+ struct type *oleft; \ |
|
+ if ((oleft = RB_LEFT(tmp, field)) \ |
|
+ != NULL) \ |
|
+ RB_COLOR(oleft, field) = RB_BLACK; \ |
|
+ RB_COLOR(tmp, field) = RB_RED; \ |
|
+ RB_ROTATE_RIGHT(head, tmp, oleft, field); \ |
|
+ tmp = RB_RIGHT(parent, field); \ |
|
+ } \ |
|
+ RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ |
|
+ RB_COLOR(parent, field) = RB_BLACK; \ |
|
+ if (RB_RIGHT(tmp, field)) \ |
|
+ RB_COLOR(RB_RIGHT(tmp, field), field) = RB_BLACK; \ |
|
+ RB_ROTATE_LEFT(head, parent, tmp, field); \ |
|
+ elm = RB_ROOT(head); \ |
|
+ break; \ |
|
+ } \ |
|
+ } else { \ |
|
+ tmp = RB_LEFT(parent, field); \ |
|
+ if (RB_COLOR(tmp, field) == RB_RED) { \ |
|
+ RB_SET_BLACKRED(tmp, parent, field); \ |
|
+ RB_ROTATE_RIGHT(head, parent, tmp, field); \ |
|
+ tmp = RB_LEFT(parent, field); \ |
|
+ } \ |
|
+ if ((RB_LEFT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) && \ |
|
+ (RB_RIGHT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_RIGHT(tmp, field), field) == RB_BLACK)) { \ |
|
+ RB_COLOR(tmp, field) = RB_RED; \ |
|
+ elm = parent; \ |
|
+ parent = RB_PARENT(elm, field); \ |
|
+ } else { \ |
|
+ if (RB_LEFT(tmp, field) == NULL || \ |
|
+ RB_COLOR(RB_LEFT(tmp, field), field) == RB_BLACK) { \ |
|
+ struct type *oright; \ |
|
+ if ((oright = RB_RIGHT(tmp, field)) \ |
|
+ != NULL) \ |
|
+ RB_COLOR(oright, field) = RB_BLACK; \ |
|
+ RB_COLOR(tmp, field) = RB_RED; \ |
|
+ RB_ROTATE_LEFT(head, tmp, oright, field); \ |
|
+ tmp = RB_LEFT(parent, field); \ |
|
+ } \ |
|
+ RB_COLOR(tmp, field) = RB_COLOR(parent, field); \ |
|
+ RB_COLOR(parent, field) = RB_BLACK; \ |
|
+ if (RB_LEFT(tmp, field)) \ |
|
+ RB_COLOR(RB_LEFT(tmp, field), field) = RB_BLACK; \ |
|
+ RB_ROTATE_RIGHT(head, parent, tmp, field); \ |
|
+ elm = RB_ROOT(head); \ |
|
+ break; \ |
|
+ } \ |
|
+ } \ |
|
+ } \ |
|
+ if (elm) \ |
|
+ RB_COLOR(elm, field) = RB_BLACK; \ |
|
+} \ |
|
+ \ |
|
+attr struct type * \ |
|
+name##_RB_REMOVE(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *child, *parent, *old = elm; \ |
|
+ int color; \ |
|
+ if (RB_LEFT(elm, field) == NULL) \ |
|
+ child = RB_RIGHT(elm, field); \ |
|
+ else if (RB_RIGHT(elm, field) == NULL) \ |
|
+ child = RB_LEFT(elm, field); \ |
|
+ else { \ |
|
+ struct type *left; \ |
|
+ elm = RB_RIGHT(elm, field); \ |
|
+ while ((left = RB_LEFT(elm, field)) != NULL) \ |
|
+ elm = left; \ |
|
+ child = RB_RIGHT(elm, field); \ |
|
+ parent = RB_PARENT(elm, field); \ |
|
+ color = RB_COLOR(elm, field); \ |
|
+ if (child) \ |
|
+ RB_PARENT(child, field) = parent; \ |
|
+ if (parent) { \ |
|
+ if (RB_LEFT(parent, field) == elm) \ |
|
+ RB_LEFT(parent, field) = child; \ |
|
+ else \ |
|
+ RB_RIGHT(parent, field) = child; \ |
|
+ RB_AUGMENT(parent); \ |
|
+ } else \ |
|
+ RB_ROOT(head) = child; \ |
|
+ if (RB_PARENT(elm, field) == old) \ |
|
+ parent = elm; \ |
|
+ (elm)->field = (old)->field; \ |
|
+ if (RB_PARENT(old, field)) { \ |
|
+ if (RB_LEFT(RB_PARENT(old, field), field) == old) \ |
|
+ RB_LEFT(RB_PARENT(old, field), field) = elm; \ |
|
+ else \ |
|
+ RB_RIGHT(RB_PARENT(old, field), field) = elm; \ |
|
+ RB_AUGMENT(RB_PARENT(old, field)); \ |
|
+ } else \ |
|
+ RB_ROOT(head) = elm; \ |
|
+ RB_PARENT(RB_LEFT(old, field), field) = elm; \ |
|
+ if (RB_RIGHT(old, field)) \ |
|
+ RB_PARENT(RB_RIGHT(old, field), field) = elm; \ |
|
+ if (parent) { \ |
|
+ left = parent; \ |
|
+ do { \ |
|
+ RB_AUGMENT(left); \ |
|
+ } while ((left = RB_PARENT(left, field)) != NULL); \ |
|
+ } \ |
|
+ goto color; \ |
|
+ } \ |
|
+ parent = RB_PARENT(elm, field); \ |
|
+ color = RB_COLOR(elm, field); \ |
|
+ if (child) \ |
|
+ RB_PARENT(child, field) = parent; \ |
|
+ if (parent) { \ |
|
+ if (RB_LEFT(parent, field) == elm) \ |
|
+ RB_LEFT(parent, field) = child; \ |
|
+ else \ |
|
+ RB_RIGHT(parent, field) = child; \ |
|
+ RB_AUGMENT(parent); \ |
|
+ } else \ |
|
+ RB_ROOT(head) = child; \ |
|
+color: \ |
|
+ if (color == RB_BLACK) \ |
|
+ name##_RB_REMOVE_COLOR(head, parent, child); \ |
|
+ return (old); \ |
|
+} \ |
|
+ \ |
|
+/* Inserts a node into the RB tree */ \ |
|
+attr struct type * \ |
|
+name##_RB_INSERT(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *tmp; \ |
|
+ struct type *parent = NULL; \ |
|
+ int comp = 0; \ |
|
+ tmp = RB_ROOT(head); \ |
|
+ while (tmp) { \ |
|
+ parent = tmp; \ |
|
+ comp = (cmp)(elm, parent); \ |
|
+ if (comp < 0) \ |
|
+ tmp = RB_LEFT(tmp, field); \ |
|
+ else if (comp > 0) \ |
|
+ tmp = RB_RIGHT(tmp, field); \ |
|
+ else \ |
|
+ return (tmp); \ |
|
+ } \ |
|
+ RB_SET(elm, parent, field); \ |
|
+ if (parent != NULL) { \ |
|
+ if (comp < 0) \ |
|
+ RB_LEFT(parent, field) = elm; \ |
|
+ else \ |
|
+ RB_RIGHT(parent, field) = elm; \ |
|
+ RB_AUGMENT(parent); \ |
|
+ } else \ |
|
+ RB_ROOT(head) = elm; \ |
|
+ name##_RB_INSERT_COLOR(head, elm); \ |
|
+ return (NULL); \ |
|
+} \ |
|
+ \ |
|
+/* Finds the node with the same key as elm */ \ |
|
+attr struct type * \ |
|
+name##_RB_FIND(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *tmp = RB_ROOT(head); \ |
|
+ int comp; \ |
|
+ while (tmp) { \ |
|
+ comp = cmp(elm, tmp); \ |
|
+ if (comp < 0) \ |
|
+ tmp = RB_LEFT(tmp, field); \ |
|
+ else if (comp > 0) \ |
|
+ tmp = RB_RIGHT(tmp, field); \ |
|
+ else \ |
|
+ return (tmp); \ |
|
+ } \ |
|
+ return (NULL); \ |
|
+} \ |
|
+ \ |
|
+/* Finds the first node greater than or equal to the search key */ \ |
|
+attr struct type * \ |
|
+name##_RB_NFIND(struct name *head, struct type *elm) \ |
|
+{ \ |
|
+ struct type *tmp = RB_ROOT(head); \ |
|
+ struct type *res = NULL; \ |
|
+ int comp; \ |
|
+ while (tmp) { \ |
|
+ comp = cmp(elm, tmp); \ |
|
+ if (comp < 0) { \ |
|
+ res = tmp; \ |
|
+ tmp = RB_LEFT(tmp, field); \ |
|
+ } \ |
|
+ else if (comp > 0) \ |
|
+ tmp = RB_RIGHT(tmp, field); \ |
|
+ else \ |
|
+ return (tmp); \ |
|
+ } \ |
|
+ return (res); \ |
|
+} \ |
|
+ \ |
|
+/* ARGSUSED */ \ |
|
+attr struct type * \ |
|
+name##_RB_NEXT(struct type *elm) \ |
|
+{ \ |
|
+ if (RB_RIGHT(elm, field)) { \ |
|
+ elm = RB_RIGHT(elm, field); \ |
|
+ while (RB_LEFT(elm, field)) \ |
|
+ elm = RB_LEFT(elm, field); \ |
|
+ } else { \ |
|
+ if (RB_PARENT(elm, field) && \ |
|
+ (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ else { \ |
|
+ while (RB_PARENT(elm, field) && \ |
|
+ (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ } \ |
|
+ } \ |
|
+ return (elm); \ |
|
+} \ |
|
+ \ |
|
+/* ARGSUSED */ \ |
|
+attr struct type * \ |
|
+name##_RB_PREV(struct type *elm) \ |
|
+{ \ |
|
+ if (RB_LEFT(elm, field)) { \ |
|
+ elm = RB_LEFT(elm, field); \ |
|
+ while (RB_RIGHT(elm, field)) \ |
|
+ elm = RB_RIGHT(elm, field); \ |
|
+ } else { \ |
|
+ if (RB_PARENT(elm, field) && \ |
|
+ (elm == RB_RIGHT(RB_PARENT(elm, field), field))) \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ else { \ |
|
+ while (RB_PARENT(elm, field) && \ |
|
+ (elm == RB_LEFT(RB_PARENT(elm, field), field))) \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ elm = RB_PARENT(elm, field); \ |
|
+ } \ |
|
+ } \ |
|
+ return (elm); \ |
|
+} \ |
|
+ \ |
|
+attr struct type * \ |
|
+name##_RB_MINMAX(struct name *head, int val) \ |
|
+{ \ |
|
+ struct type *tmp = RB_ROOT(head); \ |
|
+ struct type *parent = NULL; \ |
|
+ while (tmp) { \ |
|
+ parent = tmp; \ |
|
+ if (val < 0) \ |
|
+ tmp = RB_LEFT(tmp, field); \ |
|
+ else \ |
|
+ tmp = RB_RIGHT(tmp, field); \ |
|
+ } \ |
|
+ return (parent); \ |
|
+} |
|
+ |
|
+#define RB_NEGINF -1 |
|
+#define RB_INF 1 |
|
+ |
|
+#define RB_INSERT(name, x, y) name##_RB_INSERT(x, y) |
|
+#define RB_REMOVE(name, x, y) name##_RB_REMOVE(x, y) |
|
+#define RB_FIND(name, x, y) name##_RB_FIND(x, y) |
|
+#define RB_NFIND(name, x, y) name##_RB_NFIND(x, y) |
|
+#define RB_NEXT(name, x, y) name##_RB_NEXT(y) |
|
+#define RB_PREV(name, x, y) name##_RB_PREV(y) |
|
+#define RB_MIN(name, x) name##_RB_MINMAX(x, RB_NEGINF) |
|
+#define RB_MAX(name, x) name##_RB_MINMAX(x, RB_INF) |
|
+ |
|
+#define RB_FOREACH(x, name, head) \ |
|
+ for ((x) = RB_MIN(name, head); \ |
|
+ (x) != NULL; \ |
|
+ (x) = name##_RB_NEXT(x)) |
|
+ |
|
+#define RB_FOREACH_FROM(x, name, y) \ |
|
+ for ((x) = (y); \ |
|
+ ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ |
|
+ (x) = (y)) |
|
+ |
|
+#define RB_FOREACH_SAFE(x, name, head, y) \ |
|
+ for ((x) = RB_MIN(name, head); \ |
|
+ ((x) != NULL) && ((y) = name##_RB_NEXT(x), (x) != NULL); \ |
|
+ (x) = (y)) |
|
+ |
|
+#define RB_FOREACH_REVERSE(x, name, head) \ |
|
+ for ((x) = RB_MAX(name, head); \ |
|
+ (x) != NULL; \ |
|
+ (x) = name##_RB_PREV(x)) |
|
+ |
|
+#define RB_FOREACH_REVERSE_FROM(x, name, y) \ |
|
+ for ((x) = (y); \ |
|
+ ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ |
|
+ (x) = (y)) |
|
+ |
|
+#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \ |
|
+ for ((x) = RB_MAX(name, head); \ |
|
+ ((x) != NULL) && ((y) = name##_RB_PREV(x), (x) != NULL); \ |
|
+ (x) = (y)) |
|
+ |
|
+#endif /* _UV_TREE_H_ */ |
|
diff --git a/deps/libuv/include/uv-private/uv-unix.h b/deps/libuv/include/uv-private/uv-unix.h |
|
new file mode 100644 |
|
index 0000000..21078fe |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/uv-unix.h |
|
@@ -0,0 +1,223 @@ |
|
+/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+ * |
|
+ * Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+ * of this software and associated documentation files (the "Software"), to |
|
+ * deal in the Software without restriction, including without limitation the |
|
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+ * sell copies of the Software, and to permit persons to whom the Software is |
|
+ * furnished to do so, subject to the following conditions: |
|
+ * |
|
+ * The above copyright notice and this permission notice shall be included in |
|
+ * all copies or substantial portions of the Software. |
|
+ * |
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+ * IN THE SOFTWARE. |
|
+ */ |
|
+ |
|
+#ifndef UV_UNIX_H |
|
+#define UV_UNIX_H |
|
+ |
|
+#include "ngx-queue.h" |
|
+ |
|
+#include "ev.h" |
|
+#include "eio.h" |
|
+ |
|
+#include <sys/types.h> |
|
+#include <sys/socket.h> |
|
+#include <netinet/in.h> |
|
+#include <netinet/tcp.h> |
|
+#include <arpa/inet.h> |
|
+#include <netdb.h> |
|
+#include <termios.h> |
|
+ |
|
+/* Note: May be cast to struct iovec. See writev(2). */ |
|
+typedef struct { |
|
+ char* base; |
|
+ size_t len; |
|
+} uv_buf_t; |
|
+ |
|
+typedef int uv_file; |
|
+ |
|
+/* Platform-specific definitions for uv_dlopen support. */ |
|
+typedef void* uv_lib_t; |
|
+#define UV_DYNAMIC /* empty */ |
|
+ |
|
+#define UV_LOOP_PRIVATE_FIELDS \ |
|
+ ares_channel channel; \ |
|
+ /* \ |
|
+ * While the channel is active this timer is called once per second to be \ |
|
+ * sure that we're always calling ares_process. See the warning above the \ |
|
+ * definition of ares_timeout(). \ |
|
+ */ \ |
|
+ ev_timer timer; \ |
|
+ struct ev_loop* ev; |
|
+ |
|
+#define UV_REQ_BUFSML_SIZE (4) |
|
+ |
|
+#define UV_REQ_PRIVATE_FIELDS /* empty */ |
|
+ |
|
+#define UV_WRITE_PRIVATE_FIELDS \ |
|
+ ngx_queue_t queue; \ |
|
+ int write_index; \ |
|
+ uv_buf_t* bufs; \ |
|
+ int bufcnt; \ |
|
+ int error; \ |
|
+ uv_buf_t bufsml[UV_REQ_BUFSML_SIZE]; |
|
+ |
|
+#define UV_SHUTDOWN_PRIVATE_FIELDS /* empty */ |
|
+ |
|
+#define UV_CONNECT_PRIVATE_FIELDS \ |
|
+ ngx_queue_t queue; |
|
+ |
|
+#define UV_UDP_SEND_PRIVATE_FIELDS \ |
|
+ ngx_queue_t queue; \ |
|
+ struct sockaddr_storage addr; \ |
|
+ socklen_t addrlen; \ |
|
+ uv_buf_t* bufs; \ |
|
+ int bufcnt; \ |
|
+ ssize_t status; \ |
|
+ uv_udp_send_cb send_cb; \ |
|
+ uv_buf_t bufsml[UV_REQ_BUFSML_SIZE]; \ |
|
+ |
|
+#define UV_PRIVATE_REQ_TYPES /* empty */ |
|
+ |
|
+ |
|
+/* TODO: union or classes please! */ |
|
+#define UV_HANDLE_PRIVATE_FIELDS \ |
|
+ int fd; \ |
|
+ int flags; \ |
|
+ ev_idle next_watcher; |
|
+ |
|
+ |
|
+#define UV_STREAM_PRIVATE_FIELDS \ |
|
+ uv_connect_t *connect_req; \ |
|
+ uv_shutdown_t *shutdown_req; \ |
|
+ ev_io read_watcher; \ |
|
+ ev_io write_watcher; \ |
|
+ ngx_queue_t write_queue; \ |
|
+ ngx_queue_t write_completed_queue; \ |
|
+ int delayed_error; \ |
|
+ uv_connection_cb connection_cb; \ |
|
+ int accepted_fd; \ |
|
+ int blocking; |
|
+ |
|
+ |
|
+/* UV_TCP */ |
|
+#define UV_TCP_PRIVATE_FIELDS |
|
+ |
|
+ |
|
+/* UV_UDP */ |
|
+#define UV_UDP_PRIVATE_FIELDS \ |
|
+ uv_alloc_cb alloc_cb; \ |
|
+ uv_udp_recv_cb recv_cb; \ |
|
+ ev_io read_watcher; \ |
|
+ ev_io write_watcher; \ |
|
+ ngx_queue_t write_queue; \ |
|
+ ngx_queue_t write_completed_queue; \ |
|
+ |
|
+ |
|
+/* UV_NAMED_PIPE */ |
|
+#define UV_PIPE_PRIVATE_FIELDS \ |
|
+ const char* pipe_fname; /* strdup'ed */ |
|
+ |
|
+ |
|
+/* UV_PREPARE */ \ |
|
+#define UV_PREPARE_PRIVATE_FIELDS \ |
|
+ ev_prepare prepare_watcher; \ |
|
+ uv_prepare_cb prepare_cb; |
|
+ |
|
+ |
|
+/* UV_CHECK */ |
|
+#define UV_CHECK_PRIVATE_FIELDS \ |
|
+ ev_check check_watcher; \ |
|
+ uv_check_cb check_cb; |
|
+ |
|
+ |
|
+/* UV_IDLE */ |
|
+#define UV_IDLE_PRIVATE_FIELDS \ |
|
+ ev_idle idle_watcher; \ |
|
+ uv_idle_cb idle_cb; |
|
+ |
|
+ |
|
+/* UV_ASYNC */ |
|
+#define UV_ASYNC_PRIVATE_FIELDS \ |
|
+ ev_async async_watcher; \ |
|
+ uv_async_cb async_cb; |
|
+ |
|
+ |
|
+/* UV_TIMER */ |
|
+#define UV_TIMER_PRIVATE_FIELDS \ |
|
+ ev_timer timer_watcher; \ |
|
+ uv_timer_cb timer_cb; |
|
+ |
|
+#define UV_ARES_TASK_PRIVATE_FIELDS \ |
|
+ int sock; \ |
|
+ ev_io read_watcher; \ |
|
+ ev_io write_watcher; |
|
+ |
|
+#define UV_GETADDRINFO_PRIVATE_FIELDS \ |
|
+ uv_getaddrinfo_cb cb; \ |
|
+ struct addrinfo* hints; \ |
|
+ char* hostname; \ |
|
+ char* service; \ |
|
+ struct addrinfo* res; \ |
|
+ int retcode; |
|
+ |
|
+#define UV_PROCESS_PRIVATE_FIELDS \ |
|
+ ev_child child_watcher; |
|
+ |
|
+#define UV_FS_PRIVATE_FIELDS \ |
|
+ struct stat statbuf; \ |
|
+ eio_req* eio; |
|
+ |
|
+#define UV_WORK_PRIVATE_FIELDS \ |
|
+ eio_req* eio; |
|
+ |
|
+#define UV_TTY_PRIVATE_FIELDS \ |
|
+ struct termios orig_termios; \ |
|
+ int mode; |
|
+ |
|
+/* UV_FS_EVENT_PRIVATE_FIELDS */ |
|
+#if defined(__linux__) |
|
+ |
|
+#define UV_FS_EVENT_PRIVATE_FIELDS \ |
|
+ ev_io read_watcher; \ |
|
+ uv_fs_event_cb cb; \ |
|
+ |
|
+#elif (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060) \ |
|
+ || defined(__FreeBSD__) \ |
|
+ || defined(__OpenBSD__) \ |
|
+ || defined(__NetBSD__) |
|
+ |
|
+#define UV_FS_EVENT_PRIVATE_FIELDS \ |
|
+ ev_io event_watcher; \ |
|
+ uv_fs_event_cb cb; \ |
|
+ int fflags; \ |
|
+ |
|
+#elif defined(__sun) |
|
+ |
|
+#include <sys/port.h> |
|
+#include <port.h> |
|
+ |
|
+#ifdef PORT_SOURCE_FILE |
|
+# define UV_FS_EVENT_PRIVATE_FIELDS \ |
|
+ ev_io event_watcher; \ |
|
+ uv_fs_event_cb cb; \ |
|
+ file_obj_t fo; |
|
+#else /* !PORT_SOURCE_FILE */ |
|
+# define UV_FS_EVENT_PRIVATE_FIELDS |
|
+#endif |
|
+ |
|
+#else |
|
+ |
|
+/* Stub for platforms where the file watcher isn't implemented yet. */ |
|
+#define UV_FS_EVENT_PRIVATE_FIELDS |
|
+ |
|
+#endif |
|
+ |
|
+#endif /* UV_UNIX_H */ |
|
diff --git a/deps/libuv/include/uv-private/uv-win.h b/deps/libuv/include/uv-private/uv-win.h |
|
new file mode 100644 |
|
index 0000000..5d46109 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv-private/uv-win.h |
|
@@ -0,0 +1,422 @@ |
|
+/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+ * |
|
+ * Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+ * of this software and associated documentation files (the "Software"), to |
|
+ * deal in the Software without restriction, including without limitation the |
|
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+ * sell copies of the Software, and to permit persons to whom the Software is |
|
+ * furnished to do so, subject to the following conditions: |
|
+ * |
|
+ * The above copyright notice and this permission notice shall be included in |
|
+ * all copies or substantial portions of the Software. |
|
+ * |
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+ * IN THE SOFTWARE. |
|
+ */ |
|
+ |
|
+#ifndef _WIN32_WINNT |
|
+# define _WIN32_WINNT 0x0502 |
|
+#endif |
|
+ |
|
+#include <stdint.h> |
|
+#include <winsock2.h> |
|
+#include <mswsock.h> |
|
+#include <ws2tcpip.h> |
|
+#include <windows.h> |
|
+#include <sys/stat.h> |
|
+ |
|
+#include "tree.h" |
|
+ |
|
+#define MAX_PIPENAME_LEN 256 |
|
+ |
|
+/* |
|
+ * Guids and typedefs for winsock extension functions |
|
+ * Mingw32 doesn't have these :-( |
|
+ */ |
|
+#ifndef WSAID_ACCEPTEX |
|
+# define WSAID_ACCEPTEX \ |
|
+ {0xb5367df1, 0xcbac, 0x11cf, \ |
|
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} |
|
+ |
|
+# define WSAID_CONNECTEX \ |
|
+ {0x25a207b9, 0xddf3, 0x4660, \ |
|
+ {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} |
|
+ |
|
+# define WSAID_GETACCEPTEXSOCKADDRS \ |
|
+ {0xb5367df2, 0xcbac, 0x11cf, \ |
|
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} |
|
+ |
|
+# define WSAID_DISCONNECTEX \ |
|
+ {0x7fda2e11, 0x8630, 0x436f, \ |
|
+ {0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}} |
|
+ |
|
+# define WSAID_TRANSMITFILE \ |
|
+ {0xb5367df0, 0xcbac, 0x11cf, \ |
|
+ {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} |
|
+ |
|
+ typedef BOOL PASCAL (*LPFN_ACCEPTEX) |
|
+ (SOCKET sListenSocket, |
|
+ SOCKET sAcceptSocket, |
|
+ PVOID lpOutputBuffer, |
|
+ DWORD dwReceiveDataLength, |
|
+ DWORD dwLocalAddressLength, |
|
+ DWORD dwRemoteAddressLength, |
|
+ LPDWORD lpdwBytesReceived, |
|
+ LPOVERLAPPED lpOverlapped); |
|
+ |
|
+ typedef BOOL PASCAL (*LPFN_CONNECTEX) |
|
+ (SOCKET s, |
|
+ const struct sockaddr* name, |
|
+ int namelen, |
|
+ PVOID lpSendBuffer, |
|
+ DWORD dwSendDataLength, |
|
+ LPDWORD lpdwBytesSent, |
|
+ LPOVERLAPPED lpOverlapped); |
|
+ |
|
+ typedef void PASCAL (*LPFN_GETACCEPTEXSOCKADDRS) |
|
+ (PVOID lpOutputBuffer, |
|
+ DWORD dwReceiveDataLength, |
|
+ DWORD dwLocalAddressLength, |
|
+ DWORD dwRemoteAddressLength, |
|
+ LPSOCKADDR* LocalSockaddr, |
|
+ LPINT LocalSockaddrLength, |
|
+ LPSOCKADDR* RemoteSockaddr, |
|
+ LPINT RemoteSockaddrLength); |
|
+ |
|
+ typedef BOOL PASCAL (*LPFN_DISCONNECTEX) |
|
+ (SOCKET hSocket, |
|
+ LPOVERLAPPED lpOverlapped, |
|
+ DWORD dwFlags, |
|
+ DWORD reserved); |
|
+ |
|
+ typedef BOOL PASCAL (*LPFN_TRANSMITFILE) |
|
+ (SOCKET hSocket, |
|
+ HANDLE hFile, |
|
+ DWORD nNumberOfBytesToWrite, |
|
+ DWORD nNumberOfBytesPerSend, |
|
+ LPOVERLAPPED lpOverlapped, |
|
+ LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, |
|
+ DWORD dwFlags); |
|
+#endif |
|
+ |
|
+typedef int (WSAAPI* LPFN_WSARECV) |
|
+ (SOCKET socket, |
|
+ LPWSABUF buffers, |
|
+ DWORD buffer_count, |
|
+ LPDWORD bytes, |
|
+ LPDWORD flags, |
|
+ LPWSAOVERLAPPED overlapped, |
|
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE |
|
+ completion_routine); |
|
+ |
|
+typedef int (WSAAPI* LPFN_WSARECVFROM) |
|
+ (SOCKET socket, |
|
+ LPWSABUF buffers, |
|
+ DWORD buffer_count, |
|
+ LPDWORD bytes, |
|
+ LPDWORD flags, |
|
+ struct sockaddr* addr, |
|
+ LPINT addr_len, |
|
+ LPWSAOVERLAPPED overlapped, |
|
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); |
|
+ |
|
+ |
|
+/** |
|
+ * It should be possible to cast uv_buf_t[] to WSABUF[] |
|
+ * see http://msdn.microsoft.com/en-us/library/ms741542(v=vs.85).aspx |
|
+ */ |
|
+typedef struct uv_buf_t { |
|
+ ULONG len; |
|
+ char* base; |
|
+} uv_buf_t; |
|
+ |
|
+typedef int uv_file; |
|
+ |
|
+/* Platform-specific definitions for uv_dlopen support. */ |
|
+typedef HMODULE uv_lib_t; |
|
+#define UV_DYNAMIC FAR WINAPI |
|
+ |
|
+RB_HEAD(uv_timer_tree_s, uv_timer_s); |
|
+ |
|
+#define UV_LOOP_PRIVATE_FIELDS \ |
|
+ /* The loop's I/O completion port */ \ |
|
+ HANDLE iocp; \ |
|
+ /* Reference count that keeps the event loop alive */ \ |
|
+ int refs; \ |
|
+ /* The current time according to the event loop. in msecs. */ \ |
|
+ int64_t time; \ |
|
+ /* Tail of a single-linked circular queue of pending reqs. If the queue */ \ |
|
+ /* is empty, tail_ is NULL. If there is only one item, */ \ |
|
+ /* tail_->next_req == tail_ */ \ |
|
+ uv_req_t* pending_reqs_tail; \ |
|
+ /* Head of a single-linked list of closed handles */ \ |
|
+ uv_handle_t* endgame_handles; \ |
|
+ /* The head of the timers tree */ \ |
|
+ struct uv_timer_tree_s timers; \ |
|
+ /* Lists of active loop (prepare / check / idle) watchers */ \ |
|
+ uv_prepare_t* prepare_handles; \ |
|
+ uv_check_t* check_handles; \ |
|
+ uv_idle_t* idle_handles; \ |
|
+ /* This pointer will refer to the prepare/check/idle handle whose */ \ |
|
+ /* callback is scheduled to be called next. This is needed to allow */ \ |
|
+ /* safe removal from one of the lists above while that list being */ \ |
|
+ /* iterated over. */ \ |
|
+ uv_prepare_t* next_prepare_handle; \ |
|
+ uv_check_t* next_check_handle; \ |
|
+ uv_idle_t* next_idle_handle; \ |
|
+ ares_channel ares_chan; \ |
|
+ int ares_active_sockets; \ |
|
+ uv_timer_t ares_polling_timer; |
|
+ |
|
+#define UV_REQ_TYPE_PRIVATE \ |
|
+ /* TODO: remove the req suffix */ \ |
|
+ UV_ARES_EVENT_REQ, \ |
|
+ UV_ARES_CLEANUP_REQ, \ |
|
+ UV_GETADDRINFO_REQ, \ |
|
+ UV_PROCESS_EXIT, \ |
|
+ UV_PROCESS_CLOSE, \ |
|
+ UV_UDP_RECV, \ |
|
+ UV_FS_EVENT_REQ |
|
+ |
|
+#define UV_REQ_PRIVATE_FIELDS \ |
|
+ union { \ |
|
+ /* Used by I/O operations */ \ |
|
+ struct { \ |
|
+ OVERLAPPED overlapped; \ |
|
+ size_t queued_bytes; \ |
|
+ }; \ |
|
+ }; \ |
|
+ struct uv_req_s* next_req; |
|
+ |
|
+#define UV_WRITE_PRIVATE_FIELDS \ |
|
+ int ipc_header; \ |
|
+ uv_buf_t write_buffer; \ |
|
+ HANDLE event_handle; \ |
|
+ HANDLE wait_handle; |
|
+ |
|
+#define UV_CONNECT_PRIVATE_FIELDS \ |
|
+ /* empty */ |
|
+ |
|
+#define UV_SHUTDOWN_PRIVATE_FIELDS \ |
|
+ /* empty */ |
|
+ |
|
+#define UV_UDP_SEND_PRIVATE_FIELDS \ |
|
+ /* empty */ |
|
+ |
|
+#define UV_PRIVATE_REQ_TYPES \ |
|
+ typedef struct uv_pipe_accept_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ HANDLE pipeHandle; \ |
|
+ struct uv_pipe_accept_s* next_pending; \ |
|
+ } uv_pipe_accept_t; \ |
|
+ \ |
|
+ typedef struct uv_tcp_accept_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ SOCKET accept_socket; \ |
|
+ char accept_buffer[sizeof(struct sockaddr_storage) * 2 + 32]; \ |
|
+ HANDLE event_handle; \ |
|
+ HANDLE wait_handle; \ |
|
+ struct uv_tcp_accept_s* next_pending; \ |
|
+ } uv_tcp_accept_t; \ |
|
+ \ |
|
+ typedef struct uv_read_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ HANDLE event_handle; \ |
|
+ HANDLE wait_handle; \ |
|
+ } uv_read_t; |
|
+ |
|
+#define uv_stream_connection_fields \ |
|
+ unsigned int write_reqs_pending; \ |
|
+ uv_shutdown_t* shutdown_req; |
|
+ |
|
+#define uv_stream_server_fields \ |
|
+ uv_connection_cb connection_cb; |
|
+ |
|
+#define UV_STREAM_PRIVATE_FIELDS \ |
|
+ unsigned int reqs_pending; \ |
|
+ uv_read_t read_req; \ |
|
+ union { \ |
|
+ struct { uv_stream_connection_fields }; \ |
|
+ struct { uv_stream_server_fields }; \ |
|
+ }; |
|
+ |
|
+#define uv_tcp_server_fields \ |
|
+ uv_tcp_accept_t* accept_reqs; \ |
|
+ unsigned int processed_accepts; \ |
|
+ uv_tcp_accept_t* pending_accepts; \ |
|
+ LPFN_ACCEPTEX func_acceptex; |
|
+ |
|
+#define uv_tcp_connection_fields \ |
|
+ uv_buf_t read_buffer; \ |
|
+ LPFN_CONNECTEX func_connectex; |
|
+ |
|
+#define UV_TCP_PRIVATE_FIELDS \ |
|
+ SOCKET socket; \ |
|
+ int bind_error; \ |
|
+ union { \ |
|
+ struct { uv_tcp_server_fields }; \ |
|
+ struct { uv_tcp_connection_fields }; \ |
|
+ }; |
|
+ |
|
+#define UV_UDP_PRIVATE_FIELDS \ |
|
+ SOCKET socket; \ |
|
+ unsigned int reqs_pending; \ |
|
+ uv_req_t recv_req; \ |
|
+ uv_buf_t recv_buffer; \ |
|
+ struct sockaddr_storage recv_from; \ |
|
+ int recv_from_len; \ |
|
+ uv_udp_recv_cb recv_cb; \ |
|
+ uv_alloc_cb alloc_cb; \ |
|
+ LPFN_WSARECV func_wsarecv; \ |
|
+ LPFN_WSARECVFROM func_wsarecvfrom; |
|
+ |
|
+#define uv_pipe_server_fields \ |
|
+ uv_pipe_accept_t accept_reqs[4]; \ |
|
+ uv_pipe_accept_t* pending_accepts; |
|
+ |
|
+#define uv_pipe_connection_fields \ |
|
+ uv_timer_t* eof_timer; \ |
|
+ uv_write_t ipc_header_write_req; \ |
|
+ int ipc_pid; \ |
|
+ uint64_t remaining_ipc_rawdata_bytes; \ |
|
+ WSAPROTOCOL_INFOW* pending_socket_info; \ |
|
+ uv_write_t* non_overlapped_writes_tail; |
|
+ |
|
+#define UV_PIPE_PRIVATE_FIELDS \ |
|
+ HANDLE handle; \ |
|
+ wchar_t* name; \ |
|
+ union { \ |
|
+ struct { uv_pipe_server_fields }; \ |
|
+ struct { uv_pipe_connection_fields }; \ |
|
+ }; |
|
+ |
|
+/* TODO: put the parser states in an union - TTY handles are always */ |
|
+/* half-duplex so read-state can safely overlap write-state. */ |
|
+#define UV_TTY_PRIVATE_FIELDS \ |
|
+ HANDLE handle; \ |
|
+ HANDLE read_line_handle; \ |
|
+ uv_buf_t read_line_buffer; \ |
|
+ HANDLE read_raw_wait; \ |
|
+ DWORD original_console_mode; \ |
|
+ /* Fields used for translating win */ \ |
|
+ /* keystrokes into vt100 characters */ \ |
|
+ char last_key[8]; \ |
|
+ unsigned char last_key_offset; \ |
|
+ unsigned char last_key_len; \ |
|
+ INPUT_RECORD last_input_record; \ |
|
+ WCHAR last_utf16_high_surrogate; \ |
|
+ /* utf8-to-utf16 conversion state */ \ |
|
+ unsigned char utf8_bytes_left; \ |
|
+ unsigned int utf8_codepoint; \ |
|
+ /* eol conversion state */ \ |
|
+ unsigned char previous_eol; \ |
|
+ /* ansi parser state */ \ |
|
+ unsigned char ansi_parser_state; \ |
|
+ unsigned char ansi_csi_argc; \ |
|
+ unsigned short ansi_csi_argv[4]; \ |
|
+ COORD saved_position; \ |
|
+ WORD saved_attributes; |
|
+ |
|
+#define UV_TIMER_PRIVATE_FIELDS \ |
|
+ RB_ENTRY(uv_timer_s) tree_entry; \ |
|
+ int64_t due; \ |
|
+ int64_t repeat; \ |
|
+ uv_timer_cb timer_cb; |
|
+ |
|
+#define UV_ASYNC_PRIVATE_FIELDS \ |
|
+ struct uv_req_s async_req; \ |
|
+ uv_async_cb async_cb; \ |
|
+ /* char to avoid alignment issues */ \ |
|
+ char volatile async_sent; |
|
+ |
|
+#define UV_PREPARE_PRIVATE_FIELDS \ |
|
+ uv_prepare_t* prepare_prev; \ |
|
+ uv_prepare_t* prepare_next; \ |
|
+ uv_prepare_cb prepare_cb; |
|
+ |
|
+#define UV_CHECK_PRIVATE_FIELDS \ |
|
+ uv_check_t* check_prev; \ |
|
+ uv_check_t* check_next; \ |
|
+ uv_check_cb check_cb; |
|
+ |
|
+#define UV_IDLE_PRIVATE_FIELDS \ |
|
+ uv_idle_t* idle_prev; \ |
|
+ uv_idle_t* idle_next; \ |
|
+ uv_idle_cb idle_cb; |
|
+ |
|
+#define UV_HANDLE_PRIVATE_FIELDS \ |
|
+ uv_handle_t* endgame_next; \ |
|
+ unsigned int flags; |
|
+ |
|
+#define UV_ARES_TASK_PRIVATE_FIELDS \ |
|
+ struct uv_req_s ares_req; \ |
|
+ SOCKET sock; \ |
|
+ HANDLE h_wait; \ |
|
+ WSAEVENT h_event; \ |
|
+ HANDLE h_close_event; |
|
+ |
|
+#define UV_GETADDRINFO_PRIVATE_FIELDS \ |
|
+ struct uv_req_s getadddrinfo_req; \ |
|
+ uv_getaddrinfo_cb getaddrinfo_cb; \ |
|
+ void* alloc; \ |
|
+ wchar_t* node; \ |
|
+ wchar_t* service; \ |
|
+ struct addrinfoW* hints; \ |
|
+ struct addrinfoW* res; \ |
|
+ int retcode; |
|
+ |
|
+#define UV_PROCESS_PRIVATE_FIELDS \ |
|
+ struct uv_process_exit_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ } exit_req; \ |
|
+ struct uv_process_close_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ } close_req; \ |
|
+ HANDLE child_stdio[3]; \ |
|
+ int exit_signal; \ |
|
+ DWORD spawn_errno; \ |
|
+ HANDLE wait_handle; \ |
|
+ HANDLE process_handle; \ |
|
+ HANDLE close_handle; |
|
+ |
|
+#define UV_FS_PRIVATE_FIELDS \ |
|
+ wchar_t* pathw; \ |
|
+ int flags; \ |
|
+ int last_error; \ |
|
+ struct _stati64 stat; \ |
|
+ void* arg0; \ |
|
+ union { \ |
|
+ struct { \ |
|
+ void* arg1; \ |
|
+ void* arg2; \ |
|
+ void* arg3; \ |
|
+ }; \ |
|
+ struct { \ |
|
+ ssize_t arg4; \ |
|
+ ssize_t arg5; \ |
|
+ }; \ |
|
+ }; |
|
+ |
|
+#define UV_WORK_PRIVATE_FIELDS \ |
|
+ |
|
+#define UV_FS_EVENT_PRIVATE_FIELDS \ |
|
+ struct uv_fs_event_req_s { \ |
|
+ UV_REQ_FIELDS \ |
|
+ } req; \ |
|
+ HANDLE dir_handle; \ |
|
+ int req_pending; \ |
|
+ uv_fs_event_cb cb; \ |
|
+ wchar_t* filew; \ |
|
+ wchar_t* short_filew; \ |
|
+ int is_path_dir; \ |
|
+ char* buffer; |
|
+ |
|
+int uv_utf16_to_utf8(const wchar_t* utf16Buffer, size_t utf16Size, |
|
+ char* utf8Buffer, size_t utf8Size); |
|
+int uv_utf8_to_utf16(const char* utf8Buffer, wchar_t* utf16Buffer, |
|
+ size_t utf16Size); |
|
diff --git a/deps/libuv/include/uv.h b/deps/libuv/include/uv.h |
|
new file mode 100644 |
|
index 0000000..7da3dc4 |
|
--- /dev/null |
|
+++ b/deps/libuv/include/uv.h |
|
@@ -0,0 +1,1325 @@ |
|
+/* Copyright Joyent, Inc. and other Node contributors. All rights reserved. |
|
+ * |
|
+ * Permission is hereby granted, free of charge, to any person obtaining a copy |
|
+ * of this software and associated documentation files (the "Software"), to |
|
+ * deal in the Software without restriction, including without limitation the |
|
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
|
+ * sell copies of the Software, and to permit persons to whom the Software is |
|
+ * furnished to do so, subject to the following conditions: |
|
+ * |
|
+ * The above copyright notice and this permission notice shall be included in |
|
+ * all copies or substantial portions of the Software. |
|
+ * |
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
|
+ * IN THE SOFTWARE. |
|
+ */ |
|
+ |
|
+/* See uv_loop_new for an introduction. */ |
|
+ |
|
+#ifndef UV_H |
|
+#define UV_H |
|
+#ifdef __cplusplus |
|
+extern "C" { |
|
+#endif |
|
+ |
|
+#ifdef _WIN32 |
|
+ /* Windows - set up dll import/export decorators. */ |
|
+# if defined(BUILDING_UV_SHARED) |
|
+ /* Building shared library. Export everything from c-ares as well. */ |
|
+# define UV_EXTERN __declspec(dllexport) |
|
+# define CARES_BUILDING_LIBRARY 1 |
|
+# elif defined(USING_UV_SHARED) |
|
+ /* Using shared library. Use shared c-ares as well. */ |
|
+# define UV_EXTERN __declspec(dllimport) |
|
+# else |
|
+ /* Building static library. Build c-ares statically as well. */ |
|
+# define UV_EXTERN /* nothing */ |
|
+# define CARES_STATICLIB 1 |
|
+# endif |
|
+#else |
|
+ /* Unix. TODO: symbol hiding */ |
|
+# define UV_EXTERN /* nothing */ |
|
+#endif |
|
+ |
|
+ |
|
+#define UV_VERSION_MAJOR 0 |
|
+#define UV_VERSION_MINOR 1 |
|
+ |
|
+ |
|
+#include <stdint.h> /* int64_t */ |
|
+#include <sys/types.h> /* size_t */ |
|
+ |
|
+#include "ares.h" |
|
+ |
|
+#ifndef _SSIZE_T_ |
|
+typedef intptr_t ssize_t; |
|
+#endif |
|
+ |
|
+#if defined(__unix__) || defined(__POSIX__) || defined(__APPLE__) |
|
+# include "uv-private/uv-unix.h" |
|
+#else |
|
+# include "uv-private/uv-win.h" |
|
+#endif |
|
+ |
|
+/* Expand this list if necessary. */ |
|
+#define UV_ERRNO_MAP(XX) \ |
|
+ XX( -1, UNKNOWN, "unknown error") \ |
|
+ XX( 0, OK, "success") \ |
|
+ XX( 1, EOF, "end of file") \ |
|
+ XX( 2, EADDRINFO, "getaddrinfo error") \ |
|
+ XX( 3, EACCES, "permission denied") \ |
|
+ XX( 4, EAGAIN, "no more processes") \ |
|
+ XX( 5, EADDRINUSE, "address already in use") \ |
|
+ XX( 6, EADDRNOTAVAIL, "") \ |
|
+ XX( 7, EAFNOSUPPORT, "") \ |
|
+ XX( 8, EALREADY, "") \ |
|
+ XX( 9, EBADF, "bad file descriptor") \ |
|
+ XX( 10, EBUSY, "mount device busy") \ |
|
+ XX( 11, ECONNABORTED, "software caused connection abort") \ |
|
+ XX( 12, ECONNREFUSED, "connection refused") \ |
|
+ XX( 13, ECONNRESET, "connection reset by peer") \ |
|
+ XX( 14, EDESTADDRREQ, "destination address required") \ |
|
+ XX( 15, EFAULT, "bad address in system call argument") \ |
|
+ XX( 16, EHOSTUNREACH, "host is unreachable") \ |
|
+ XX( 17, EINTR, "interrupted system call") \ |
|
+ XX( 18, EINVAL, "invalid argument") \ |
|
+ XX( 19, EISCONN, "socket is already connected") \ |
|
+ XX( 20, EMFILE, "too many open files") \ |
|
+ XX( 21, EMSGSIZE, "message too long") \ |
|
+ XX( 22, ENETDOWN, "network is down") \ |
|
+ XX( 23, ENETUNREACH, "network is unreachable") \ |
|
+ XX( 24, ENFILE, "file table overflow") \ |
|
+ XX( 25, ENOBUFS, "no buffer space available") \ |
|
+ XX( 26, ENOMEM, "not enough memory") \ |
|
+ XX( 27, ENOTDIR, "not a directory") \ |
|
+ XX( 28, EISDIR, "illegal operation on a directory") \ |
|
+ XX( 29, ENONET, "machine is not on the network") \ |
|
+ XX( 31, ENOTCONN, "socket is not connected") \ |
|
+ XX( 32, ENOTSOCK, "socket operation on non-socket") \ |
|
+ XX( 33, ENOTSUP, "operation not supported on socket") \ |
|
+ XX( 34, ENOENT, "no such file or directory") \ |
|
+ XX( 35, ENOSYS, "function not implemented") \ |
|
+ XX( 36, EPIPE, "broken pipe") \ |
|
+ XX( 37, EPROTO, "protocol error") \ |
|
+ XX( 38, EPROTONOSUPPORT, "protocol not suppored") \ |
|
+ XX( 39, EPROTOTYPE, "protocol wrong type for socket") \ |
|
+ XX( 40, ETIMEDOUT, "connection timed out") \ |
|
+ XX( 41, ECHARSET, "") \ |
|
+ XX( 42, EAIFAMNOSUPPORT, "") \ |
|
+ XX( 43, EAINONAME, "") \ |
|
+ XX( 44, EAISERVICE, "") \ |
|
+ XX( 45, EAISOCKTYPE, "") \ |
|
+ XX( 46, ESHUTDOWN, "") \ |
|
+ XX( 47, EEXIST, "file already exists") \ |
|
+ XX( 48, ESRCH, "no such process") |
|
+ |
|
+ |
|
+#define UV_ERRNO_GEN(val, name, s) UV_##name = val, |
|
+typedef enum { |
|
+ UV_ERRNO_MAP(UV_ERRNO_GEN) |
|
+ UV_MAX_ERRORS |
|
+} uv_err_code; |
|
+#undef UV_ERRNO_GEN |
|
+ |
|
+typedef enum { |
|
+ UV_UNKNOWN_HANDLE = 0, |
|
+ UV_TCP, |
|
+ UV_UDP, |
|
+ UV_NAMED_PIPE, |
|
+ UV_TTY, |
|
+ UV_FILE, |
|
+ UV_TIMER, |
|
+ UV_PREPARE, |
|
+ UV_CHECK, |
|
+ UV_IDLE, |
|
+ UV_ASYNC, |
|
+ UV_ARES_TASK, |
|
+ UV_ARES_EVENT, |
|
+ UV_PROCESS, |
|
+ UV_FS_EVENT |
|
+} uv_handle_type; |
|
+ |
|
+typedef enum { |
|
+ UV_UNKNOWN_REQ = 0, |
|
+ UV_CONNECT, |
|
+ UV_ACCEPT, |
|
+ UV_READ, |
|
+ UV_WRITE, |
|
+ UV_SHUTDOWN, |
|
+ UV_WAKEUP, |
|
+ UV_UDP_SEND, |
|
+ UV_FS, |
|
+ UV_WORK, |
|
+ UV_GETADDRINFO, |
|
+ UV_REQ_TYPE_PRIVATE |
|
+} uv_req_type; |
|
+ |
|
+ |
|
+ |
|
+typedef struct uv_loop_s uv_loop_t; |
|
+typedef struct uv_ares_task_s uv_ares_task_t; |
|
+typedef struct uv_err_s uv_err_t; |
|
+typedef struct uv_handle_s uv_handle_t; |
|
+typedef struct uv_stream_s uv_stream_t; |
|
+typedef struct uv_tcp_s uv_tcp_t; |
|
+typedef struct uv_udp_s uv_udp_t; |
|
+typedef struct uv_pipe_s uv_pipe_t; |
|
+typedef struct uv_tty_s uv_tty_t; |
|
+typedef struct uv_timer_s uv_timer_t; |
|
+typedef struct uv_prepare_s uv_prepare_t; |
|
+typedef struct uv_check_s uv_check_t; |
|
+typedef struct uv_idle_s uv_idle_t; |
|
+typedef struct uv_async_s uv_async_t; |
|
+typedef struct uv_getaddrinfo_s uv_getaddrinfo_t; |
|
+typedef struct uv_process_s uv_process_t; |
|
+typedef struct uv_counters_s uv_counters_t; |
|
+/* Request types */ |
|
+typedef struct uv_req_s uv_req_t; |
|
+typedef struct uv_shutdown_s uv_shutdown_t; |
|
+typedef struct uv_write_s uv_write_t; |
|
+typedef struct uv_connect_s uv_connect_t; |
|
+typedef struct uv_udp_send_s uv_udp_send_t; |
|
+typedef struct uv_fs_s uv_fs_t; |
|
+/* uv_fs_event_t is a subclass of uv_handle_t. */ |
|
+typedef struct uv_fs_event_s uv_fs_event_t; |
|
+typedef struct uv_work_s uv_work_t; |
|
+ |
|
+ |
|
+/* |
|
+ * This function must be called before any other functions in libuv. |
|
+ * |
|
+ * All functions besides uv_run() are non-blocking. |
|
+ * |
|
+ * All callbacks in libuv are made asynchronously. That is they are never |
|
+ * made by the function that takes them as a parameter. |
|
+ */ |
|
+UV_EXTERN uv_loop_t* uv_loop_new(void); |
|
+UV_EXTERN void uv_loop_delete(uv_loop_t*); |
|
+ |
|
+ |
|
+/* |
|
+ * Returns the default loop. |
|
+ */ |
|
+UV_EXTERN uv_loop_t* uv_default_loop(void); |
|
+ |
|
+/* |
|
+ * This function starts the event loop. It blocks until the reference count |
|
+ * of the loop drops to zero. |
|
+ */ |
|
+UV_EXTERN int uv_run (uv_loop_t*); |
|
+ |
|
+/* |
|
+ * Manually modify the event loop's reference count. Useful if the user wants |
|
+ * to have a handle or timeout that doesn't keep the loop alive. |
|
+ */ |
|
+UV_EXTERN void uv_ref(uv_loop_t*); |
|
+UV_EXTERN void uv_unref(uv_loop_t*); |
|
+ |
|
+UV_EXTERN void uv_update_time(uv_loop_t*); |
|
+UV_EXTERN int64_t uv_now(uv_loop_t*); |
|
+ |
|
+ |
|
+/* |
|
+ * The status parameter is 0 if the request completed successfully, |
|
+ * and should be -1 if the request was cancelled or failed. |
|
+ * For uv_close_cb, -1 means that the handle was closed due to an error. |
|
+ * Error details can be obtained by calling uv_last_error(). |
|
+ * |
|
+ * In the case of uv_read_cb the uv_buf_t returned should be freed by the |
|
+ * user. |
|
+ */ |
|
+typedef uv_buf_t (*uv_alloc_cb)(uv_handle_t* handle, size_t suggested_size); |
|
+typedef void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, uv_buf_t buf); |
|
+/* |
|
+ * Just like the uv_read_cb except that if the pending parameter is true |
|
+ * then you can use uv_accept() to pull the new handle into the process. |
|
+ * If no handle is pending then pending will be UV_UNKNOWN_HANDLE. |
|
+ */ |
|
+typedef void (*uv_read2_cb)(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, |
|
+ uv_handle_type pending); |
|
+typedef void (*uv_write_cb)(uv_write_t* req, int status); |
|
+typedef void (*uv_connect_cb)(uv_connect_t* req, int status); |
|
+typedef void (*uv_shutdown_cb)(uv_shutdown_t* req, int status); |
|
+typedef void (*uv_connection_cb)(uv_stream_t* server, int status); |
|
+typedef void (*uv_close_cb)(uv_handle_t* handle); |
|
+typedef void (*uv_timer_cb)(uv_timer_t* handle, int status); |
|
+/* TODO: do these really need a status argument? */ |
|
+typedef void (*uv_async_cb)(uv_async_t* handle, int status); |
|
+typedef void (*uv_prepare_cb)(uv_prepare_t* handle, int status); |
|
+typedef void (*uv_check_cb)(uv_check_t* handle, int status); |
|
+typedef void (*uv_idle_cb)(uv_idle_t* handle, int status); |
|
+typedef void (*uv_getaddrinfo_cb)(uv_getaddrinfo_t* handle, int status, |
|
+ struct addrinfo* res); |
|
+typedef void (*uv_exit_cb)(uv_process_t*, int exit_status, int term_signal); |
|
+typedef void (*uv_fs_cb)(uv_fs_t* req); |
|
+typedef void (*uv_work_cb)(uv_work_t* req); |
|
+typedef void (*uv_after_work_cb)(uv_work_t* req); |
|
+ |
|
+/* |
|
+* This will be called repeatedly after the uv_fs_event_t is initialized. |
|
+* If uv_fs_event_t was initialized with a directory the filename parameter |
|
+* will be a relative path to a file contained in the directory. |
|
+* The events paramenter is an ORed mask of enum uv_fs_event elements. |
|
+*/ |
|
+typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, const char* filename, |
|
+ int events, int status); |
|
+ |
|
+typedef enum { |
|
+ UV_LEAVE_GROUP = 0, |
|
+ UV_JOIN_GROUP |
|
+} uv_membership; |
|
+ |
|
+ |
|
+struct uv_err_s { |
|
+ /* read-only */ |
|
+ uv_err_code code; |
|
+ /* private */ |
|
+ int sys_errno_; |
|
+}; |
|
+ |
|
+ |
|
+/* |
|
+ * Most functions return boolean: 0 for success and -1 for failure. |
|
+ * On error the user should then call uv_last_error() to determine |
|
+ * the error code. |
|
+ */ |
|
+UV_EXTERN uv_err_t uv_last_error(uv_loop_t*); |
|
+UV_EXTERN const char* uv_strerror(uv_err_t err); |
|
+UV_EXTERN const char* uv_err_name(uv_err_t err); |
|
+ |
|
+ |
|
+#define UV_REQ_FIELDS \ |
|
+ /* read-only */ \ |
|
+ uv_req_type type; \ |
|
+ /* public */ \ |
|
+ void* data; \ |
|
+ /* private */ \ |
|
+ UV_REQ_PRIVATE_FIELDS |
|
+ |
|
+/* Abstract base class of all requests. */ |
|
+struct uv_req_s { |
|
+ UV_REQ_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+/* Platform-specific request types */ |
|
+UV_PRIVATE_REQ_TYPES |
|
+ |
|
+ |
|
+/* |
|
+ * uv_shutdown_t is a subclass of uv_req_t |
|
+ * |
|
+ * Shutdown the outgoing (write) side of a duplex stream. It waits for |
|
+ * pending write requests to complete. The handle should refer to a |
|
+ * initialized stream. req should be an uninitalized shutdown request |
|
+ * struct. The cb is a called after shutdown is complete. |
|
+ */ |
|
+UV_EXTERN int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, |
|
+ uv_shutdown_cb cb); |
|
+ |
|
+struct uv_shutdown_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_stream_t* handle; |
|
+ uv_shutdown_cb cb; |
|
+ UV_SHUTDOWN_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+#define UV_HANDLE_FIELDS \ |
|
+ /* read-only */ \ |
|
+ uv_loop_t* loop; \ |
|
+ uv_handle_type type; \ |
|
+ /* public */ \ |
|
+ uv_close_cb close_cb; \ |
|
+ void* data; \ |
|
+ /* private */ \ |
|
+ UV_HANDLE_PRIVATE_FIELDS |
|
+ |
|
+/* The abstract base class of all handles. */ |
|
+struct uv_handle_s { |
|
+ UV_HANDLE_FIELDS |
|
+}; |
|
+ |
|
+/* |
|
+ * Returns 1 if the prepare/check/idle handle has been started, 0 otherwise. |
|
+ * For other handle types this always returns 1. |
|
+ */ |
|
+UV_EXTERN int uv_is_active(uv_handle_t* handle); |
|
+ |
|
+/* |
|
+ * Request handle to be closed. close_cb will be called asynchronously after |
|
+ * this call. This MUST be called on each handle before memory is released. |
|
+ * |
|
+ * Note that handles that wrap file descriptors are closed immediately but |
|
+ * close_cb will still be deferred to the next iteration of the event loop. |
|
+ * It gives you a chance to free up any resources associated with the handle. |
|
+ */ |
|
+UV_EXTERN void uv_close(uv_handle_t* handle, uv_close_cb close_cb); |
|
+ |
|
+ |
|
+/* |
|
+ * Constructor for uv_buf_t. |
|
+ * Due to platform differences the user cannot rely on the ordering of the |
|
+ * base and len members of the uv_buf_t struct. The user is responsible for |
|
+ * freeing base after the uv_buf_t is done. Return struct passed by value. |
|
+ */ |
|
+UV_EXTERN uv_buf_t uv_buf_init(char* base, size_t len); |
|
+ |
|
+ |
|
+#define UV_STREAM_FIELDS \ |
|
+ /* number of bytes queued for writing */ \ |
|
+ size_t write_queue_size; \ |
|
+ uv_alloc_cb alloc_cb; \ |
|
+ uv_read_cb read_cb; \ |
|
+ uv_read2_cb read2_cb; \ |
|
+ /* private */ \ |
|
+ UV_STREAM_PRIVATE_FIELDS |
|
+ |
|
+/* |
|
+ * uv_stream_t is a subclass of uv_handle_t |
|
+ * |
|
+ * uv_stream is an abstract class. |
|
+ * |
|
+ * uv_stream_t is the parent class of uv_tcp_t, uv_pipe_t, uv_tty_t, and |
|
+ * soon uv_file_t. |
|
+ */ |
|
+struct uv_stream_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_STREAM_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb); |
|
+ |
|
+/* |
|
+ * This call is used in conjunction with uv_listen() to accept incoming |
|
+ * connections. Call uv_accept after receiving a uv_connection_cb to accept |
|
+ * the connection. Before calling uv_accept use uv_*_init() must be |
|
+ * called on the client. Non-zero return value indicates an error. |
|
+ * |
|
+ * When the uv_connection_cb is called it is guaranteed that uv_accept will |
|
+ * complete successfully the first time. If you attempt to use it more than |
|
+ * once, it may fail. It is suggested to only call uv_accept once per |
|
+ * uv_connection_cb call. |
|
+ */ |
|
+UV_EXTERN int uv_accept(uv_stream_t* server, uv_stream_t* client); |
|
+ |
|
+/* |
|
+ * Read data from an incoming stream. The callback will be made several |
|
+ * several times until there is no more data to read or uv_read_stop is |
|
+ * called. When we've reached EOF nread will be set to -1 and the error is |
|
+ * set to UV_EOF. When nread == -1 the buf parameter might not point to a |
|
+ * valid buffer; in that case buf.len and buf.base are both set to 0. |
|
+ * Note that nread might also be 0, which does *not* indicate an error or |
|
+ * eof; it happens when libuv requested a buffer through the alloc callback |
|
+ * but then decided that it didn't need that buffer. |
|
+ */ |
|
+UV_EXTERN int uv_read_start(uv_stream_t*, uv_alloc_cb alloc_cb, |
|
+ uv_read_cb read_cb); |
|
+ |
|
+UV_EXTERN int uv_read_stop(uv_stream_t*); |
|
+ |
|
+/* |
|
+ * Extended read methods for receiving handles over a pipe. The pipe must be |
|
+ * initialized with ipc == 1. |
|
+ */ |
|
+UV_EXTERN int uv_read2_start(uv_stream_t*, uv_alloc_cb alloc_cb, |
|
+ uv_read2_cb read_cb); |
|
+ |
|
+ |
|
+/* |
|
+ * Write data to stream. Buffers are written in order. Example: |
|
+ * |
|
+ * uv_buf_t a[] = { |
|
+ * { .base = "1", .len = 1 }, |
|
+ * { .base = "2", .len = 1 } |
|
+ * }; |
|
+ * |
|
+ * uv_buf_t b[] = { |
|
+ * { .base = "3", .len = 1 }, |
|
+ * { .base = "4", .len = 1 } |
|
+ * }; |
|
+ * |
|
+ * // writes "1234" |
|
+ * uv_write(req, stream, a, 2); |
|
+ * uv_write(req, stream, b, 2); |
|
+ * |
|
+ */ |
|
+UV_EXTERN int uv_write(uv_write_t* req, uv_stream_t* handle, |
|
+ uv_buf_t bufs[], int bufcnt, uv_write_cb cb); |
|
+ |
|
+UV_EXTERN int uv_write2(uv_write_t* req, uv_stream_t* handle, uv_buf_t bufs[], |
|
+ int bufcnt, uv_stream_t* send_handle, uv_write_cb cb); |
|
+ |
|
+/* uv_write_t is a subclass of uv_req_t */ |
|
+struct uv_write_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_write_cb cb; |
|
+ uv_stream_t* send_handle; |
|
+ uv_stream_t* handle; |
|
+ UV_WRITE_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+ |
|
+/* |
|
+ * uv_tcp_t is a subclass of uv_stream_t |
|
+ * |
|
+ * Represents a TCP stream or TCP server. |
|
+ */ |
|
+struct uv_tcp_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_STREAM_FIELDS |
|
+ UV_TCP_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); |
|
+ |
|
+/* Enable/disable Nagle's algorithm. */ |
|
+UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable); |
|
+ |
|
+/* Enable/disable TCP keep-alive. |
|
+ * |
|
+ * `ms` is the initial delay in seconds, ignored when `enable` is zero. |
|
+ */ |
|
+UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle, int enable, |
|
+ unsigned int delay); |
|
+ |
|
+/* |
|
+ * This setting applies to Windows only. |
|
+ * Enable/disable simultaneous asynchronous accept requests that are |
|
+ * queued by the operating system when listening for new tcp connections. |
|
+ * This setting is used to tune a tcp server for the desired performance. |
|
+ * Having simultaneous accepts can significantly improve the rate of |
|
+ * accepting connections (which is why it is enabled by default). |
|
+ */ |
|
+UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable); |
|
+ |
|
+UV_EXTERN int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in); |
|
+UV_EXTERN int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6); |
|
+UV_EXTERN int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, |
|
+ int* namelen); |
|
+UV_EXTERN int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, |
|
+ int* namelen); |
|
+UV_EXTERN int uv_tcp_getsocket(uv_tcp_t* handle, int* fd); |
|
+ |
|
+/* |
|
+ * uv_tcp_connect, uv_tcp_connect6 |
|
+ * These functions establish IPv4 and IPv6 TCP connections. Provide an |
|
+ * initialized TCP handle and an uninitialized uv_connect_t*. The callback |
|
+ * will be made when the connection is estabished. |
|
+ */ |
|
+UV_EXTERN int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, |
|
+ struct sockaddr_in address, uv_connect_cb cb); |
|
+UV_EXTERN int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle, |
|
+ struct sockaddr_in6 address, uv_connect_cb cb); |
|
+ |
|
+/* uv_connect_t is a subclass of uv_req_t */ |
|
+struct uv_connect_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_connect_cb cb; |
|
+ uv_stream_t* handle; |
|
+ UV_CONNECT_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+/* |
|
+ * UDP support. |
|
+ */ |
|
+ |
|
+enum uv_udp_flags { |
|
+ /* Disables dual stack mode. Used with uv_udp_bind6(). */ |
|
+ UV_UDP_IPV6ONLY = 1, |
|
+ /* |
|
+ * Indicates message was truncated because read buffer was too small. The |
|
+ * remainder was discarded by the OS. Used in uv_udp_recv_cb. |
|
+ */ |
|
+ UV_UDP_PARTIAL = 2 |
|
+}; |
|
+ |
|
+/* |
|
+ * Called after a uv_udp_send() or uv_udp_send6(). status 0 indicates |
|
+ * success otherwise error. |
|
+ */ |
|
+typedef void (*uv_udp_send_cb)(uv_udp_send_t* req, int status); |
|
+ |
|
+/* |
|
+ * Callback that is invoked when a new UDP datagram is received. |
|
+ * |
|
+ * handle UDP handle. |
|
+ * nread Number of bytes that have been received. |
|
+ * 0 if there is no more data to read. You may |
|
+ * discard or repurpose the read buffer. |
|
+ * -1 if a transmission error was detected. |
|
+ * buf uv_buf_t with the received data. |
|
+ * addr struct sockaddr_in or struct sockaddr_in6. |
|
+ * Valid for the duration of the callback only. |
|
+ * flags One or more OR'ed UV_UDP_* constants. |
|
+ * Right now only UV_UDP_PARTIAL is used. |
|
+ */ |
|
+typedef void (*uv_udp_recv_cb)(uv_udp_t* handle, ssize_t nread, uv_buf_t buf, |
|
+ struct sockaddr* addr, unsigned flags); |
|
+ |
|
+/* uv_udp_t is a subclass of uv_handle_t */ |
|
+struct uv_udp_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_UDP_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+/* uv_udp_send_t is a subclass of uv_req_t */ |
|
+struct uv_udp_send_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_udp_t* handle; |
|
+ uv_udp_send_cb cb; |
|
+ UV_UDP_SEND_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+/* |
|
+ * Initialize a new UDP handle. The actual socket is created lazily. |
|
+ * Returns 0 on success. |
|
+ */ |
|
+UV_EXTERN int uv_udp_init(uv_loop_t*, uv_udp_t* handle); |
|
+ |
|
+/* |
|
+ * Bind to a IPv4 address and port. |
|
+ * |
|
+ * Arguments: |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * addr struct sockaddr_in with the address and port to bind to. |
|
+ * flags Unused. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, |
|
+ unsigned flags); |
|
+ |
|
+/* |
|
+ * Bind to a IPv6 address and port. |
|
+ * |
|
+ * Arguments: |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * addr struct sockaddr_in with the address and port to bind to. |
|
+ * flags Should be 0 or UV_UDP_IPV6ONLY. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, |
|
+ unsigned flags); |
|
+UV_EXTERN int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, |
|
+ int* namelen); |
|
+ |
|
+/* |
|
+ * Set membership for a multicast address |
|
+ * |
|
+ * Arguments: |
|
+ * handle UDP handle. Should have been initialized with |
|
+ * `uv_udp_init`. |
|
+ * multicast_addr multicast address to set membership for |
|
+ * interface_addr interface address |
|
+ * membership Should be UV_JOIN_GROUP or UV_LEAVE_GROUP |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_set_membership(uv_udp_t* handle, |
|
+ const char* multicast_addr, const char* interface_addr, |
|
+ uv_membership membership); |
|
+ |
|
+/* |
|
+ * Send data. If the socket has not previously been bound with `uv_udp_bind` |
|
+ * or `uv_udp_bind6`, it is bound to 0.0.0.0 (the "all interfaces" address) |
|
+ * and a random port number. |
|
+ * |
|
+ * Arguments: |
|
+ * req UDP request handle. Need not be initialized. |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * bufs List of buffers to send. |
|
+ * bufcnt Number of buffers in `bufs`. |
|
+ * addr Address of the remote peer. See `uv_ip4_addr`. |
|
+ * send_cb Callback to invoke when the data has been sent out. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_send(uv_udp_send_t* req, uv_udp_t* handle, |
|
+ uv_buf_t bufs[], int bufcnt, struct sockaddr_in addr, |
|
+ uv_udp_send_cb send_cb); |
|
+ |
|
+/* |
|
+ * Send data. If the socket has not previously been bound with `uv_udp_bind6`, |
|
+ * it is bound to ::0 (the "all interfaces" address) and a random port number. |
|
+ * |
|
+ * Arguments: |
|
+ * req UDP request handle. Need not be initialized. |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * bufs List of buffers to send. |
|
+ * bufcnt Number of buffers in `bufs`. |
|
+ * addr Address of the remote peer. See `uv_ip6_addr`. |
|
+ * send_cb Callback to invoke when the data has been sent out. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_send6(uv_udp_send_t* req, uv_udp_t* handle, |
|
+ uv_buf_t bufs[], int bufcnt, struct sockaddr_in6 addr, |
|
+ uv_udp_send_cb send_cb); |
|
+ |
|
+/* |
|
+ * Receive data. If the socket has not previously been bound with `uv_udp_bind` |
|
+ * or `uv_udp_bind6`, it is bound to 0.0.0.0 (the "all interfaces" address) |
|
+ * and a random port number. |
|
+ * |
|
+ * Arguments: |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * alloc_cb Callback to invoke when temporary storage is needed. |
|
+ * recv_cb Callback to invoke with received data. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, |
|
+ uv_udp_recv_cb recv_cb); |
|
+ |
|
+/* |
|
+ * Stop listening for incoming datagrams. |
|
+ * |
|
+ * Arguments: |
|
+ * handle UDP handle. Should have been initialized with `uv_udp_init`. |
|
+ * |
|
+ * Returns: |
|
+ * 0 on success, -1 on error. |
|
+ */ |
|
+UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_tty_t is a subclass of uv_stream_t |
|
+ * |
|
+ * Representing a stream for the console. |
|
+ */ |
|
+struct uv_tty_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_STREAM_FIELDS |
|
+ UV_TTY_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+/* |
|
+ * Initialize a new TTY stream with the given file descriptor. Usually the |
|
+ * file descriptor will be |
|
+ * 0 = stdin |
|
+ * 1 = stdout |
|
+ * 2 = stderr |
|
+ * The last argument, readable, specifies if you plan on calling |
|
+ * uv_read_start with this stream. stdin is readable, stdout is not. |
|
+ * |
|
+ * TTY streams which are not readable have blocking writes. |
|
+ */ |
|
+UV_EXTERN int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); |
|
+ |
|
+/* |
|
+ * Set mode. 0 for normal, 1 for raw. |
|
+ */ |
|
+UV_EXTERN int uv_tty_set_mode(uv_tty_t*, int mode); |
|
+ |
|
+/* |
|
+ * To be called when the program exits. Resets TTY settings to default |
|
+ * values for the next process to take over. |
|
+ */ |
|
+UV_EXTERN void uv_tty_reset_mode(void); |
|
+ |
|
+/* |
|
+ * Gets the current Window size. On success zero is returned. |
|
+ */ |
|
+UV_EXTERN int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); |
|
+ |
|
+/* |
|
+ * Used to detect what type of stream should be used with a given file |
|
+ * descriptor. Usually this will be used during initialization to guess the |
|
+ * type of the stdio streams. |
|
+ * For isatty() functionality use this function and test for UV_TTY. |
|
+ */ |
|
+UV_EXTERN uv_handle_type uv_guess_handle(uv_file file); |
|
+ |
|
+/* |
|
+ * uv_pipe_t is a subclass of uv_stream_t |
|
+ * |
|
+ * Representing a pipe stream or pipe server. On Windows this is a Named |
|
+ * Pipe. On Unix this is a UNIX domain socket. |
|
+ */ |
|
+struct uv_pipe_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_STREAM_FIELDS |
|
+ UV_PIPE_PRIVATE_FIELDS |
|
+ int ipc; /* non-zero if this pipe is used for passing handles */ |
|
+}; |
|
+ |
|
+/* |
|
+ * Initialize a pipe. The last argument is a boolean to indicate if |
|
+ * this pipe will be used for handle passing between processes. |
|
+ */ |
|
+UV_EXTERN int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); |
|
+ |
|
+/* |
|
+ * Opens an existing file descriptor or HANDLE as a pipe. |
|
+ */ |
|
+UV_EXTERN void uv_pipe_open(uv_pipe_t*, uv_file file); |
|
+ |
|
+UV_EXTERN int uv_pipe_bind(uv_pipe_t* handle, const char* name); |
|
+ |
|
+UV_EXTERN void uv_pipe_connect(uv_connect_t* req, uv_pipe_t* handle, |
|
+ const char* name, uv_connect_cb cb); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_prepare_t is a subclass of uv_handle_t. |
|
+ * |
|
+ * libev wrapper. Every active prepare handle gets its callback called |
|
+ * exactly once per loop iteration, just before the system blocks to wait |
|
+ * for completed i/o. |
|
+ */ |
|
+struct uv_prepare_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_PREPARE_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_prepare_init(uv_loop_t*, uv_prepare_t* prepare); |
|
+ |
|
+UV_EXTERN int uv_prepare_start(uv_prepare_t* prepare, uv_prepare_cb cb); |
|
+ |
|
+UV_EXTERN int uv_prepare_stop(uv_prepare_t* prepare); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_check_t is a subclass of uv_handle_t. |
|
+ * |
|
+ * libev wrapper. Every active check handle gets its callback called exactly |
|
+ * once per loop iteration, just after the system returns from blocking. |
|
+ */ |
|
+struct uv_check_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_CHECK_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_check_init(uv_loop_t*, uv_check_t* check); |
|
+ |
|
+UV_EXTERN int uv_check_start(uv_check_t* check, uv_check_cb cb); |
|
+ |
|
+UV_EXTERN int uv_check_stop(uv_check_t* check); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_idle_t is a subclass of uv_handle_t. |
|
+ * |
|
+ * libev wrapper. Every active idle handle gets its callback called |
|
+ * repeatedly until it is stopped. This happens after all other types of |
|
+ * callbacks are processed. When there are multiple "idle" handles active, |
|
+ * their callbacks are called in turn. |
|
+ */ |
|
+struct uv_idle_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_IDLE_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_idle_init(uv_loop_t*, uv_idle_t* idle); |
|
+ |
|
+UV_EXTERN int uv_idle_start(uv_idle_t* idle, uv_idle_cb cb); |
|
+ |
|
+UV_EXTERN int uv_idle_stop(uv_idle_t* idle); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_async_t is a subclass of uv_handle_t. |
|
+ * |
|
+ * libev wrapper. uv_async_send wakes up the event |
|
+ * loop and calls the async handle's callback There is no guarantee that |
|
+ * every uv_async_send call leads to exactly one invocation of the callback; |
|
+ * The only guarantee is that the callback function is called at least once |
|
+ * after the call to async_send. Unlike all other libuv functions, |
|
+ * uv_async_send can be called from another thread. |
|
+ */ |
|
+struct uv_async_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_ASYNC_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_async_init(uv_loop_t*, uv_async_t* async, |
|
+ uv_async_cb async_cb); |
|
+ |
|
+/* |
|
+ * This can be called from other threads to wake up a libuv thread. |
|
+ * |
|
+ * libuv is single threaded at the moment. |
|
+ */ |
|
+UV_EXTERN int uv_async_send(uv_async_t* async); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_timer_t is a subclass of uv_handle_t. |
|
+ * |
|
+ * Wraps libev's ev_timer watcher. Used to get woken up at a specified time |
|
+ * in the future. |
|
+ */ |
|
+struct uv_timer_s { |
|
+ UV_HANDLE_FIELDS |
|
+ UV_TIMER_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN int uv_timer_init(uv_loop_t*, uv_timer_t* timer); |
|
+ |
|
+UV_EXTERN int uv_timer_start(uv_timer_t* timer, uv_timer_cb cb, |
|
+ int64_t timeout, int64_t repeat); |
|
+ |
|
+UV_EXTERN int uv_timer_stop(uv_timer_t* timer); |
|
+ |
|
+/* |
|
+ * Stop the timer, and if it is repeating restart it using the repeat value |
|
+ * as the timeout. If the timer has never been started before it returns -1 and |
|
+ * sets the error to UV_EINVAL. |
|
+ */ |
|
+UV_EXTERN int uv_timer_again(uv_timer_t* timer); |
|
+ |
|
+/* |
|
+ * Set the repeat value. Note that if the repeat value is set from a timer |
|
+ * callback it does not immediately take effect. If the timer was nonrepeating |
|
+ * before, it will have been stopped. If it was repeating, then the old repeat |
|
+ * value will have been used to schedule the next timeout. |
|
+ */ |
|
+UV_EXTERN void uv_timer_set_repeat(uv_timer_t* timer, int64_t repeat); |
|
+ |
|
+UV_EXTERN int64_t uv_timer_get_repeat(uv_timer_t* timer); |
|
+ |
|
+ |
|
+/* c-ares integration initialize and terminate */ |
|
+UV_EXTERN int uv_ares_init_options(uv_loop_t*, |
|
+ ares_channel *channelptr, struct ares_options *options, int optmask); |
|
+ |
|
+/* TODO remove the loop argument from this function? */ |
|
+UV_EXTERN void uv_ares_destroy(uv_loop_t*, ares_channel channel); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_getaddrinfo_t is a subclass of uv_req_t |
|
+ * |
|
+ * Request object for uv_getaddrinfo. |
|
+ */ |
|
+struct uv_getaddrinfo_s { |
|
+ UV_REQ_FIELDS |
|
+ /* read-only */ |
|
+ uv_loop_t* loop; \ |
|
+ UV_GETADDRINFO_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+/* |
|
+ * Asynchronous getaddrinfo(3). |
|
+ * |
|
+ * Return code 0 means that request is accepted and callback will be called |
|
+ * with result. Other return codes mean that there will not be a callback. |
|
+ * Input arguments may be released after return from this call. |
|
+ * |
|
+ * uv_freeaddrinfo() must be called after completion to free the addrinfo |
|
+ * structure. |
|
+ * |
|
+ * On error NXDOMAIN the status code will be non-zero and UV_ENOENT returned. |
|
+ */ |
|
+UV_EXTERN int uv_getaddrinfo(uv_loop_t*, uv_getaddrinfo_t* handle, |
|
+ uv_getaddrinfo_cb getaddrinfo_cb, const char* node, const char* service, |
|
+ const struct addrinfo* hints); |
|
+ |
|
+UV_EXTERN void uv_freeaddrinfo(struct addrinfo* ai); |
|
+ |
|
+/* uv_spawn() options */ |
|
+typedef struct uv_process_options_s { |
|
+ uv_exit_cb exit_cb; /* Called after the process exits. */ |
|
+ const char* file; /* Path to program to execute. */ |
|
+ /* |
|
+ * Command line arguments. args[0] should be the path to the program. On |
|
+ * Windows this uses CreateProcess which concatinates the arguments into a |
|
+ * string this can cause some strange errors. See the note at |
|
+ * windows_verbatim_arguments. |
|
+ */ |
|
+ char** args; |
|
+ /* |
|
+ * This will be set as the environ variable in the subprocess. If this is |
|
+ * NULL then the parents environ will be used. |
|
+ */ |
|
+ char** env; |
|
+ /* |
|
+ * If non-null this represents a directory the subprocess should execute |
|
+ * in. Stands for current working directory. |
|
+ */ |
|
+ char* cwd; |
|
+ |
|
+ /* |
|
+ * TODO describe how this works. |
|
+ */ |
|
+ int windows_verbatim_arguments; |
|
+ |
|
+ /* |
|
+ * The user should supply pointers to initialized uv_pipe_t structs for |
|
+ * stdio. This is used to to send or receive input from the subprocess. |
|
+ * The user is reponsible for calling uv_close on them. |
|
+ */ |
|
+ uv_pipe_t* stdin_stream; |
|
+ uv_pipe_t* stdout_stream; |
|
+ uv_pipe_t* stderr_stream; |
|
+} uv_process_options_t; |
|
+ |
|
+/* |
|
+ * uv_process_t is a subclass of uv_handle_t |
|
+ */ |
|
+struct uv_process_s { |
|
+ UV_HANDLE_FIELDS |
|
+ uv_exit_cb exit_cb; |
|
+ int pid; |
|
+ UV_PROCESS_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+/* Initializes uv_process_t and starts the process. */ |
|
+UV_EXTERN int uv_spawn(uv_loop_t*, uv_process_t*, |
|
+ uv_process_options_t options); |
|
+ |
|
+/* |
|
+ * Kills the process with the specified signal. The user must still |
|
+ * call uv_close on the process. |
|
+ */ |
|
+UV_EXTERN int uv_process_kill(uv_process_t*, int signum); |
|
+ |
|
+ |
|
+/* Kills the process with the specified signal. */ |
|
+UV_EXTERN uv_err_t uv_kill(int pid, int signum); |
|
+ |
|
+ |
|
+/* |
|
+ * uv_work_t is a subclass of uv_req_t |
|
+ */ |
|
+struct uv_work_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_loop_t* loop; |
|
+ uv_work_cb work_cb; |
|
+ uv_after_work_cb after_work_cb; |
|
+ UV_WORK_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+/* Queues a work request to execute asynchronously on the thread pool. */ |
|
+UV_EXTERN int uv_queue_work(uv_loop_t* loop, uv_work_t* req, |
|
+ uv_work_cb work_cb, uv_after_work_cb after_work_cb); |
|
+ |
|
+ |
|
+ |
|
+ |
|
+/* |
|
+ * File System Methods. |
|
+ * |
|
+ * The uv_fs_* functions execute a blocking system call asynchronously (in a |
|
+ * thread pool) and call the specified callback in the specified loop after |
|
+ * completion. If the user gives NULL as the callback the blocking system |
|
+ * call will be called synchronously. req should be a pointer to an |
|
+ * uninitialized uv_fs_t object. |
|
+ * |
|
+ * uv_fs_req_cleanup() must be called after completion of the uv_fs_ |
|
+ * function to free any internal memory allocations associted with the |
|
+ * request. |
|
+ */ |
|
+ |
|
+typedef enum { |
|
+ UV_FS_UNKNOWN = -1, |
|
+ UV_FS_CUSTOM, |
|
+ UV_FS_OPEN, |
|
+ UV_FS_CLOSE, |
|
+ UV_FS_READ, |
|
+ UV_FS_WRITE, |
|
+ UV_FS_SENDFILE, |
|
+ UV_FS_STAT, |
|
+ UV_FS_LSTAT, |
|
+ UV_FS_FSTAT, |
|
+ UV_FS_FTRUNCATE, |
|
+ UV_FS_UTIME, |
|
+ UV_FS_FUTIME, |
|
+ UV_FS_CHMOD, |
|
+ UV_FS_FCHMOD, |
|
+ UV_FS_FSYNC, |
|
+ UV_FS_FDATASYNC, |
|
+ UV_FS_UNLINK, |
|
+ UV_FS_RMDIR, |
|
+ UV_FS_MKDIR, |
|
+ UV_FS_RENAME, |
|
+ UV_FS_READDIR, |
|
+ UV_FS_LINK, |
|
+ UV_FS_SYMLINK, |
|
+ UV_FS_READLINK, |
|
+ UV_FS_CHOWN, |
|
+ UV_FS_FCHOWN |
|
+} uv_fs_type; |
|
+ |
|
+/* uv_fs_t is a subclass of uv_req_t */ |
|
+struct uv_fs_s { |
|
+ UV_REQ_FIELDS |
|
+ uv_loop_t* loop; |
|
+ uv_fs_type fs_type; |
|
+ uv_fs_cb cb; |
|
+ ssize_t result; |
|
+ void* ptr; |
|
+ char* path; |
|
+ int errorno; |
|
+ UV_FS_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+UV_EXTERN void uv_fs_req_cleanup(uv_fs_t* req); |
|
+ |
|
+UV_EXTERN int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ int flags, int mode, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ void* buf, size_t length, off_t offset, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ void* buf, size_t length, off_t offset, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ int mode, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, |
|
+ const char* path, int flags, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ const char* new_path, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ off_t offset, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, |
|
+ uv_file in_fd, off_t in_offset, size_t length, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ int mode, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ double atime, double mtime, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ double atime, double mtime, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ const char* new_path, uv_fs_cb cb); |
|
+ |
|
+/* |
|
+ * This flag can be used with uv_fs_symlink on Windows |
|
+ * to specify whether path argument points to a directory. |
|
+ */ |
|
+#define UV_FS_SYMLINK_DIR 0x0001 |
|
+ |
|
+UV_EXTERN int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ const char* new_path, int flags, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ int mode, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, |
|
+ int uid, int gid, uv_fs_cb cb); |
|
+ |
|
+UV_EXTERN int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, |
|
+ int uid, int gid, uv_fs_cb cb); |
|
+ |
|
+ |
|
+enum uv_fs_event { |
|
+ UV_RENAME = 1, |
|
+ UV_CHANGE = 2 |
|
+}; |
|
+ |
|
+ |
|
+struct uv_fs_event_s { |
|
+ UV_HANDLE_FIELDS |
|
+ char* filename; |
|
+ UV_FS_EVENT_PRIVATE_FIELDS |
|
+}; |
|
+ |
|
+ |
|
+/* |
|
+ * Gets load avg |
|
+ * See: http://en.wikipedia.org/wiki/Load_(computing) |
|
+ * (Returns [0,0,0] for windows and cygwin) |
|
+ */ |
|
+UV_EXTERN void uv_loadavg(double avg[3]); |
|
+ |
|
+ |
|
+/* |
|
+ * Flags to be passed to uv_fs_event_init. |
|
+ */ |
|
+enum uv_fs_event_flags { |
|
+ /* |
|
+ * By default, if the fs event watcher is given a directory name, we will |
|
+ * watch for all events in that directory. This flags overrides this behavior |
|
+ * and makes fs_event report only changes to the directory entry itself. This |
|
+ * flag does not affect individual files watched. |
|
+ * This flag is currently not implemented yet on any backend. |
|
+ */ |
|
+ UV_FS_EVENT_WATCH_ENTRY = 1, |
|
+ |
|
+ /* |
|
+ * By default uv_fs_event will try to use a kernel interface such as inotify |
|
+ * or kqueue to detect events. This may not work on remote filesystems such |
|
+ * as NFS mounts. This flag makes fs_event fall back to calling stat() on a |
|
+ * regular interval. |
|
+ * This flag is currently not implemented yet on any backend. |
|
+ */ |
|
+ UV_FS_EVENT_STAT = 2 |
|
+}; |
|
+ |
|
+ |
|
+UV_EXTERN int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, |
|
+ const char* filename, uv_fs_event_cb cb, int flags); |
|
+ |
|
+/* Utility */ |
|
+ |
|
+/* Convert string ip addresses to binary structures */ |
|
+UV_EXTERN struct sockaddr_in uv_ip4_addr(const char* ip, int port); |
|
+UV_EXTERN struct sockaddr_in6 uv_ip6_addr(const char* ip, int port); |
|
+ |
|
+/* Convert binary addresses to strings */ |
|
+UV_EXTERN int uv_ip4_name(struct sockaddr_in* src, char* dst, size_t size); |
|
+UV_EXTERN int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size); |
|
+ |
|
+/* Gets the executable path */ |
|
+UV_EXTERN int uv_exepath(char* buffer, size_t* size); |
|
+ |
|
+/* Gets memory info in bytes */ |
|
+UV_EXTERN uint64_t uv_get_free_memory(void); |
|
+UV_EXTERN uint64_t uv_get_total_memory(void); |
|
+ |
|
+/* |
|
+ * Returns the current high-resolution real time. This is expressed in |
|
+ * nanoseconds. It is relative to an arbitrary time in the past. It is not |
|
+ * related to the time of day and therefore not subject to clock drift. The |
|
+ * primary use is for measuring performance between intervals. |
|
+ * |
|
+ * Note not every platform can support nanosecond resolution; however, this |
|
+ * value will always be in nanoseconds. |
|
+ */ |
|
+UV_EXTERN extern uint64_t uv_hrtime(void); |
|
+ |
|
+ |
|
+/* |
|
+ * Opens a shared library. The filename is in utf-8. On success, -1 is |
|
+ * and the variable pointed by library receives a handle to the library. |
|
+ */ |
|
+UV_EXTERN uv_err_t uv_dlopen(const char* filename, uv_lib_t* library); |
|
+UV_EXTERN uv_err_t uv_dlclose(uv_lib_t library); |
|
+ |
|
+/* |
|
+ * Retrieves a data pointer from a dynamic library. |
|
+ */ |
|
+UV_EXTERN uv_err_t uv_dlsym(uv_lib_t library, const char* name, void** ptr); |
|
+ |
|
+ |
|
+/* the presence of these unions force similar struct layout */ |
|
+union uv_any_handle { |
|
+ uv_tcp_t tcp; |
|
+ uv_pipe_t pipe; |
|
+ uv_prepare_t prepare; |
|
+ uv_check_t check; |
|
+ uv_idle_t idle; |
|
+ uv_async_t async; |
|
+ uv_timer_t timer; |
|
+ uv_getaddrinfo_t getaddrinfo; |
|
+ uv_fs_event_t fs_event; |
|
+}; |
|
+ |
|
+union uv_any_req { |
|
+ uv_req_t req; |
|
+ uv_write_t write; |
|
+ uv_connect_t connect; |
|
+ uv_shutdown_t shutdown; |
|
+ uv_fs_t fs_req; |
|
+ uv_work_t work_req; |
|
+}; |
|
+ |
|
+ |
|
+struct uv_counters_s { |
|
+ uint64_t eio_init; |
|
+ uint64_t req_init; |
|
+ uint64_t handle_init; |
|
+ uint64_t stream_init; |
|
+ uint64_t tcp_init; |
|
+ uint64_t udp_init; |
|
+ uint64_t pipe_init; |
|
+ uint64_t tty_init; |
|
+ uint64_t prepare_init; |
|
+ uint64_t check_init; |
|
+ uint64_t idle_init; |
|
+ uint64_t async_init; |
|
+ uint64_t timer_init; |
|
+ uint64_t process_init; |
|
+ uint64_t fs_event_init; |
|
+}; |
|
+ |
|
+ |
|
+struct uv_loop_s { |
|
+ UV_LOOP_PRIVATE_FIELDS |
|
+ /* list used for ares task handles */ |
|
+ uv_ares_task_t* uv_ares_handles_; |
|
+ /* Various thing for libeio. */ |
|
+ uv_async_t uv_eio_want_poll_notifier; |
|
+ uv_async_t uv_eio_done_poll_notifier; |
|
+ uv_idle_t uv_eio_poller; |
|
+ /* Diagnostic counters */ |
|
+ uv_counters_t counters; |
|
+ /* The last error */ |
|
+ uv_err_t last_err; |
|
+ /* User data - use this for whatever. */ |
|
+ void* data; |
|
+}; |
|
+ |
|
+ |
|
+/* Don't export the private CPP symbols. */ |
|
+#undef UV_REQ_TYPE_PRIVATE |
|
+#undef UV_REQ_PRIVATE_FIELDS |
|
+#undef UV_STREAM_PRIVATE_FIELDS |
|
+#undef UV_TCP_PRIVATE_FIELDS |
|
+#undef UV_PREPARE_PRIVATE_FIELDS |
|
+#undef UV_CHECK_PRIVATE_FIELDS |
|
+#undef UV_IDLE_PRIVATE_FIELDS |
|
+#undef UV_ASYNC_PRIVATE_FIELDS |
|
+#undef UV_TIMER_PRIVATE_FIELDS |
|
+#undef UV_GETADDRINFO_PRIVATE_FIELDS |
|
+#undef UV_FS_REQ_PRIVATE_FIELDS |
|
+#undef UV_WORK_PRIVATE_FIELDS |
|
+#undef UV_FS_EVENT_PRIVATE_FIELDS |
|
+ |
|
+#ifdef __cplusplus |
|
+} |
|
+#endif |
|
+#endif /* UV_H */ |
|
diff --git a/deps/libuv/src/ares/AUTHORS b/deps/libuv/src/ares/AUTHORS |
|
new file mode 100644 |
|
index 0000000..e197a74 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/AUTHORS |
|
@@ -0,0 +1,37 @@ |
|
+c-ares is based on ares, and these are the people that have worked on it since |
|
+the fork was made: |
|
+ |
|
+Alexander Lazic |
|
+Alexey Simak |
|
+Andreas Rieke |
|
+Ashish Sharma |
|
+Brad House |
|
+Brad Spencer |
|
+Bram Matthys |
|
+Dan Fandrich |
|
+Daniel Stenberg |
|
+Dirk Manske |
|
+Dominick Meglio |
|
+Doug Goldstein |
|
+Duncan Wilcox |
|
+Eino Tuominen |
|
+Erik Kline |
|
+George Neill |
|
+Gisle Vanem |
|
+Guilherme Balena Versiani |
|
+Gunter Knauf |
|
+Henrik Stoerner |
|
+James Bursa |
|
+Michael Wallner |
|
+Nick Mathewson |
|
+Phil Blundell |
|
+Ravi Pratap |
|
+Robin Cornelius |
|
+Sebastian at basti79.de |
|
+Shmulik Regev |
|
+Steinar H. Gunderson |
|
+Tofu Linden |
|
+Vlad Dinulescu |
|
+William Ahern |
|
+Yang Tse |
|
+liren at vivisimo.com |
|
diff --git a/deps/libuv/src/ares/CHANGES b/deps/libuv/src/ares/CHANGES |
|
new file mode 100644 |
|
index 0000000..73fe8c7 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/CHANGES |
|
@@ -0,0 +1,1218 @@ |
|
+ Changelog for the c-ares project |
|
+ |
|
+Version 1.7.5 (August 16, 2011) |
|
+ |
|
+Fixed: |
|
+ |
|
+ o detection of semicolon comments in resolv.conf |
|
+ o avoid using system's inet_net_pton affected by the WLB-2008080064 advisory |
|
+ o replacement ares_inet_net_pton affected by the WLB-2008080064 advisory |
|
+ o replacement ares_inet_ntop affected by potential out of bounds write |
|
+ o added install target to Makefile.msvc |
|
+ o only fall back to AF_INET searches when looking for AF_UNSPEC addresses |
|
+ o fixed ares_parse_*_reply memory leaks |
|
+ o Use correct sizeof in ares_getnameinfo() |
|
+ o IPv6-on-windows: find DNS servers correctly |
|
+ o man pages: docs for the c-ares utility programs |
|
+ o getservbyport replacement for Win CE |
|
+ o config_sortlist: (win32) missing else |
|
+ o advance_tcp_send_queue: avoid NULL ptr dereference |
|
+ o configure: fix a bashism |
|
+ o ares_expand_name: Fix encoded length for indirect root |
|
+ |
|
+Version 1.7.4 (December 9, 2010) |
|
+ |
|
+Changed: |
|
+ |
|
+ o local-bind: Support binding to local interface/IPs, see |
|
+ ares_set_local_ip4, ares_set_local_ip6, ares_set_local_dev |
|
+ |
|
+Fixed: |
|
+ |
|
+ o memory leak in ares_getnameinfo |
|
+ o add missing break that caused get_ares_servers to fail |
|
+ o ares_parse_a_reply: fix CNAME response parsing |
|
+ o init_by_options: don't copy an empty sortlist |
|
+ o Replaced uint32_t with unsigned int to fix broken builds |
|
+ on a couple of platforms |
|
+ o Fix lookup with HOSTALIASES set |
|
+ o adig: fix NAPTR parsing |
|
+ o compiler warning cleanups |
|
+ |
|
+Version 1.7.3 (June 11, 2010) |
|
+ |
|
+Fixed: |
|
+ |
|
+ o builds on Android |
|
+ o now includes all files necessary to build it (1.7.2 lacked a file) |
|
+ |
|
+Version 1.7.2 (June 10, 2010) |
|
+ |
|
+Changed: |
|
+ |
|
+ o Added ares_parse_mx_reply() |
|
+ |
|
+Fixed: |
|
+ |
|
+ o ares_init: Last, not first instance of domain or search should win |
|
+ o improve alternative definition of bool |
|
+ o fix VS2010 compiler warnings |
|
+ |
|
+ |
|
+Version 1.7.1 (Mar 23, 2010) |
|
+ |
|
+* May 31, 2010 (Jakub Hrozek) |
|
+- Use the last instance of domain/search, not the first one |
|
+ |
|
+* March 23, 2010 (Daniel Stenberg) |
|
+- We switched from CVS to git. See http://github.com/bagder/c-ares |
|
+ |
|
+* March 5, 2010 (Daniel Stenberg) |
|
+- Daniel Johnson provided fixes for building with the clang compiler. |
|
+ |
|
+* March 5, 2010 (Yang Tse) |
|
+- Added IPv6 name servers support. Implementation has been based on code, |
|
+ comments and feedback provided November and December of 2008 by Daniel |
|
+ Stenberg, Gregor Jasny, Phil Blundell and myself, December 2009 by Cedric |
|
+ Bail, and February 2010 by Jakub Hrozek on the c-ares mailing list. On |
|
+ March I reviewed all that, selected the best of each, and adjusted or |
|
+ extended parts of it to make the best fit. |
|
+ |
|
+ The external and visible result of all this is that two new functions are |
|
+ added to the external API, ares_get_servers() and ares_set_servers(), which |
|
+ becomes now the preferred way of getting and setting name servers for any |
|
+ ares channel as these support both IPv4 and IPv6 name servers. |
|
+ |
|
+ In order to not break ABI compatibility, ares_init_options() with option |
|
+ mask ARES_OPT_SERVERS and ares_save_options() may still be used in code |
|
+ which is intended to run on IPv4-only stacks. But remember that these |
|
+ functions do not support IPv6 name servers. This implies that if the user |
|
+ is capable of defining or providing an IPv6 name server, and the app is |
|
+ using ares_init_options() or ares_save_options() at some point to handle |
|
+ the name servers, the app will likely lose IPv6 name servers. |
|
+ |
|
+* January 28, 2010 (Daniel Stenberg) |
|
+- Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't |
|
+ check for broken connections like ares_process() did. Based on that, I |
|
+ merged the two functions into a single generic one with two front-ends. |
|
+ |
|
+* December 29, 2009 (Yang Tse) |
|
+- Laszlo Tamas Szabo adjusted Makefile.msvc compiler options so that where |
|
+ run-time error checks enabling compiler option /GZ was used it is replaced |
|
+ with equivalent /RTCsu for Visual Studio 2003 and newer versions. Option |
|
+ /GX is replaced with equivalent /EHsc for all versions. Also fixed socket |
|
+ data type for internal configure_socket function. |
|
+ |
|
+* December 21, 2009 (Yang Tse) |
|
+- Ingmar Runge noticed that Windows config-win32.h configuration file |
|
+ did not include a definition for HAVE_CLOSESOCKET which resulted in |
|
+ function close() being inappropriately used to close sockets. |
|
+ |
|
+Version 1.7.0 (Nov 30, 2009) |
|
+ |
|
+* November 26, 2009 (Yang Tse) |
|
+- Larry Lansing fixed ares_parse_srv_reply to properly parse replies |
|
+ which might contain non-SRV answers, skipping over potential non-SRV |
|
+ ones such as CNAMEs. |
|
+ |
|
+* November 23, 2009 (Yang Tse) |
|
+- Changed naming convention for c-ares libraries built with MSVC, details |
|
+ and build instructions provided in README.msvc file. |
|
+ |
|
+* November 22, 2009 (Yang Tse) |
|
+- Jakub Hrozek fixed more function prototypes in man pages to sync them |
|
+ with the ones declared in ares.h |
|
+ |
|
+- Jakub Hrozek renamed addrttl and addr6ttl structs to ares_addrttl and |
|
+ ares_addr6ttl in order to prevent name space pollution, along with |
|
+ necessary changes to code base and man pages.This change does not break |
|
+ ABI, there is no need to recompile existing applications. But existing |
|
+ applications using these structs with the old name will need source code |
|
+ adjustments when recompiled using c-ares 1.7.0. |
|
+ |
|
+* November 21, 2009 (Yang Tse) |
|
+- Added manifest stuff to Makefile.msvc. |
|
+ |
|
+* November 20, 2009 (Yang Tse) |
|
+- Fixed several function prototypes in man pages that were out of sync |
|
+ with the ones declared in ares.h. Added ares_free_data() along with |
|
+ man page. Updated ares_parse_srv_reply() and ares_parse_txt_reply() |
|
+ with changes from Jakub Hrozek making these now return linked lists |
|
+ instead of arrays, and merging the ares_free_data() adjustments. |
|
+ |
|
+* November 10, 2009 (Yang Tse) |
|
+- Updated MSVC 6.0 project files to match settings from Makefile.msvc. |
|
+ |
|
+* November 9, 2009 (Yang Tse) |
|
+- Makefile.msvc is now the reference method to build c-ares and sample |
|
+ programs with any MSVC compiler or MS Visual Studio version. If no |
|
+ option or target are specified it builds dynamic and static c-ares |
|
+ libraries in debug and release flavours and also builds all sample |
|
+ programs using each of the different c-ares libraries. |
|
+ |
|
+* November 2, 2009 (Yang Tse) |
|
+- Renamed c-ares setup.h to ares_setup.h |
|
+ |
|
+* October 31, 2009 (Yang Tse) |
|
+- Symbol hiding configure options are named now --enable-symbol-hiding |
|
+ and --disable-symbol-hiding in an attempt to make them less ambiguous. |
|
+ |
|
+* October 30, 2009 (Yang Tse) |
|
+- Many fixes for ares_parse_txt_reply() |
|
+ |
|
+* October 29, 2009 (Daniel Stenberg) |
|
+- Jakub Hrozek added ares_parse_txt_reply() for TXT parsing |
|
+ |
|
+* October 29, 2009 (Yang Tse) |
|
+- Updated MSVC 6.0 workspace and project files that allows building |
|
+ dynamic and static c-ares libraries in debug and release flavours. |
|
+ Additionally each of the three sample programs is built against |
|
+ each of the four possible c-ares libraries, generating all this |
|
+ a total number of 12 executables and 4 libraries. |
|
+ |
|
+* October 28, 2009 (Yang Tse) |
|
+- Initial step towards the ability to reduce c-ares exported symbols |
|
+ when built as a shared library based on the 'visibility' attribute |
|
+ for GNUC and Intel compilers and based on __global for Sun compilers, |
|
+ taking also in account __declspec function decoration for Win32 and |
|
+ Symbian DLL's. |
|
+ |
|
+* October 27, 2009 (Yang Tse) |
|
+- Fixed Pelles C Win32 target compilation issues. |
|
+ |
|
+* October 23, 2009 (Yang Tse) |
|
+- John Engelhart noticed an unreleased problem relative to a duplicate |
|
+ ARES_ECANCELLED error code value and missing error code description. |
|
+ |
|
+* October 7, 2009 (Yang Tse) |
|
+- Overhauled ares__get_hostent() Fixing out of bounds memory overwrite |
|
+ triggered with malformed /etc/hosts file. Improving parsing of /etc/hosts |
|
+ file. Validating requested address family. Ensuring that failures always |
|
+ return a NULL pointer. Adjusting header inclusions. |
|
+ |
|
+* October 6, 2009 (Yang Tse) |
|
+- Fix ssize_t redefinition errors on WIN64 reported by Alexey Simak. |
|
+ |
|
+* September 29, 2009 (Yang Tse) |
|
+- Make configure script also check if _REENTRANT definition is required to |
|
+ make errno available as a preprocessor macro. |
|
+ |
|
+* September 7, 2009 (Yang Tse) |
|
+- Add T_SRV portability check to ares_parse_srv_reply.c |
|
+ |
|
+* 4 Sep 2009 (Daniel Stenberg) |
|
+- Jakub Hrozek added ares_parse_srv_reply() for SRV parsing |
|
+ |
|
+* 3 Aug 2009 (Daniel Stenberg) |
|
+- Joshua Kwan fixed the init routine to fill in the defaults for stuff that |
|
+ fails to get inited by other means. This fixes a case of when the c-ares |
|
+ init fails when internet access is fone. |
|
+ |
|
+- Timo Teras changed the reason code used in the resolve callback done when |
|
+ ares_cancel() is used, to be ARES_ECANCELLED instead of ARES_ETIMEOUT to |
|
+ better allow the callback to know what's happening. |
|
+ |
|
+* 14 Jul 2009 (Guenter Knauf) |
|
+- renamed generated config.h to ares_config.h to avoid any future clashes |
|
+ with config.h from other projects. |
|
+ |
|
+* June 20 2009 (Yang Tse) |
|
+- Refactor how libraries are checked for connect() function in configure |
|
+ script and check for connect() as it is done for other functions. |
|
+ |
|
+* June 19 2009 (Yang Tse) |
|
+- Make sclose() function-like macro definition used to close a socket, |
|
+ now solely based on HAVE_CLOSESOCKET and HAVE_CLOSESOCKET_CAMEL |
|
+ config file preprocessor definitions |
|
+ |
|
+* June 18 2009 (Yang Tse) |
|
+- Add CloseSocket camel case function check for configure script. |
|
+ |
|
+* June 17 2009 (Yang Tse) |
|
+- Check for socket() and closesocket() as it is done for other functions |
|
+ in configure script. |
|
+ |
|
+* June 11 2009 (Yang Tse) |
|
+- Modified buildconf so that when automake runs it copies missing files |
|
+ instead of symlinking them. |
|
+ |
|
+* June 8 2009 (Yang Tse) |
|
+- Removed buildconf.bat from release and daily snapshot archives. This |
|
+ file is only for CVS tree checkout builds. |
|
+ |
|
+* May 26 2009 (Yang Tse) |
|
+- Added --enable-curldebug configure option to enable and disable building |
|
+ with the low-level curl debug memory tracking 'feature' to allow decoupled |
|
+ setting from --enable-debug, allowing again to build c-ares independently |
|
+ out of the CVS tree. |
|
+ |
|
+ For the c-ares library option --enable-debug enables debug build features |
|
+ which are _not_ related with memory tracking. For the c-ares library when |
|
+ --enable-debug is given it does not enable the memory tracking feature. If |
|
+ you wish to enable the curl debug memory tracking you must use configure |
|
+ option --enable-curldebug explicitily to do so. |
|
+ |
|
+ Internally, definition of preprocessor symbol DEBUGBUILD restricts code |
|
+ which is only compiled for debug enabled builds. And symbol CURLDEBUG is |
|
+ used to differentiate code which is _only_ used for memory tracking. |
|
+ |
|
+ Make ares_init(), ares_dup() and ares_init_options() fail returning |
|
+ ARES_ENOTINITIALIZED if library initialization has not been performed |
|
+ calling ares_library_init(). |
|
+ |
|
+* May 20 2009 (Yang Tse) |
|
+- Added ares_library_init() and ares_library_cleanup() man pages. |
|
+ |
|
+* May 19 2009 (Yang Tse) |
|
+- Introduced ares_library_init() and ares_library_cleanup() functions. |
|
+ |
|
+ This is an API and ABI break for Win32/64 systems. Non-Win32/64 build targets |
|
+ using c-ares 1.7.0 can still survive without calling these functions. Read all |
|
+ the details on ares_library_init(3) and ares_library_cleanup(3) man pages that |
|
+ are included. |
|
+ |
|
+ curl/libcurl 7.19.5 is fully compatible with c-ares 1.7.0 on all systems. |
|
+ |
|
+ In order to use c-ares 1.7.0 with curl/libcurl on Win32/64 systems it is |
|
+ required that curl/libcurl is 7.19.5 or newer. In other words, it is not |
|
+ possible on Win32/64 to use c-ares 1.7.0 with a curl/libcurl version less |
|
+ than 7.19.5 |
|
+ |
|
+* May 11 2009 (Daniel Stenberg) |
|
+- Gregor Jasny made c-ares link with libtool 's -export-symbols-regex option to |
|
+ only expose functions starting with ares_. |
|
+ |
|
+* May 7 2009 (Yang Tse) |
|
+- Fix an m4 overquoting triggering a spurious 'AS_TR_CPP' symbol definition |
|
+ attempt in generated config.h |
|
+ |
|
+* May 2 2009 (Yang Tse) |
|
+- Use a build-time configured ares_socklen_t data type instead of socklen_t. |
|
+ |
|
+* April 21 2009 (Yang Tse) |
|
+- Moved potential inclusion of system's malloc.h and memory.h header files to |
|
+ setup_once.h. Inclusion of each header file is based on the definition of |
|
+ NEED_MALLOC_H and NEED_MEMORY_H respectively. |
|
+ |
|
+* March 11 2009 (Yang Tse) |
|
+- Japheth Cleaver fixed acountry.c replacing u_long with unsigned long. |
|
+ |
|
+* February 20 2009 (Yang Tse) |
|
+- Do not halt compilation when using VS2008 to build a Windows 2000 target. |
|
+ |
|
+* February 3 2009 (Phil Blundell) |
|
+- If the server returns garbage or nothing at all in response to an AAAA query, |
|
+ go on and ask for A records anyway. |
|
+ |
|
+* January 31 2009 (Daniel Stenberg) |
|
+- ares_gethostbyname() now accepts 'AF_UNSPEC' as a family for resolving |
|
+ either AF_INET6 or AF_INET. It works by accepting any of the looksups in the |
|
+ hosts file, and it resolves the AAAA field with a fallback to A. |
|
+ |
|
+* January 14 2009 (Daniel Stenberg) |
|
+- ares.h no longer uses the HAVE_STRUCT_IN6_ADDR define check, but instead it |
|
+ now declares the private struct ares_in6_addr for all systems instead of |
|
+ relying on one possibly not present in the system. |
|
+ |
|
+* January 13 2009 (Phil Blundell) |
|
+- ares__send_query() now varies the retry timeout pseudo-randomly to avoid |
|
+ packet storms when several queries were started at the same time. |
|
+ |
|
+* January 11 2009 (Daniel Stenberg) |
|
+- Phil Blundell added the internal function ares__expand_name_for_response() |
|
+ that is now used by the ares_parse_*_reply() functions instead of the |
|
+ ares_expand_name() simply to easier return ARES_EBADRESP for the cases where |
|
+ the name expansion fails as in responses that really isn't expected. |
|
+ |
|
+Version 1.6.0 (Dec 9, 2008) |
|
+ |
|
+* December 9 2008 (Gisle Vanem) |
|
+ |
|
+ Fixes for Win32 targets using the Watt-32 tcp/ip stack. |
|
+ |
|
+* Dec 4 2008 (Daniel Stenberg) |
|
+ |
|
+ Gregor Jasny provided the patch that introduces ares_set_socket_callback(), |
|
+ and I edited it to also get duped by ares_dup(). |
|
+ |
|
+* Dec 3 2008 (Daniel Stenberg) |
|
+ |
|
+ API changes: |
|
+ |
|
+ I made sure the public ares_config struct looks like before and yet it |
|
+ supports the ROTATE option thanks to c-ares now storing the "optmask" |
|
+ internally. Thus we should be ABI compatible with the past release(s) |
|
+ now. My efforts mentioned below should not break backwards ABI compliance. |
|
+ |
|
+ Here's how I suggest we proceed with the API: |
|
+ |
|
+ ares_init() will be primary "channel creator" function. |
|
+ |
|
+ ares_init_options() will continue to work exactly like now and before. For |
|
+ starters, it will be the (only) way to set the existing options. |
|
+ |
|
+ ares_save_options() will continue to work like today, but will ONLY save |
|
+ options that you can set today (including ARES_OPT_ROTATE actually) but new |
|
+ options that we add may not be saved with this. |
|
+ |
|
+ Instead we introduce: |
|
+ |
|
+ ares_dup() that instead can make a new channel and clone the config used |
|
+ from an existing channel. It will then clone all config options, including |
|
+ future new things we add. |
|
+ |
|
+ ares_set_*() style functions that set (new) config options. As a start we |
|
+ simply add these for new functionality, but over time we can also introduce |
|
+ them for existing "struct ares_options" so that we can eventually deprecate |
|
+ the two ares_*_options() functions. |
|
+ |
|
+ ares_get_*() style functions for extracting info from a channel handle that |
|
+ should be used instead of ares_save_options(). |
|
+ |
|
+* Nov 26 2008 (Yang Tse) |
|
+- Brad Spencer provided changes to allow buildconf to work on OS X. |
|
+ |
|
+- Gerald Combs fixed a bug in ares_parse_ptr_reply() which would cause a |
|
+ buffer to shrink instead of expand if a reply contained 8 or more records. |
|
+ |
|
+* Nov 25 2008 (Yang Tse) |
|
+- In preparation for the upcomming IPv6 nameservers patch, the internal |
|
+ ares_addr union is now changed into an internal struct which also holds |
|
+ the address family. |
|
+ |
|
+* Nov 19 2008 (Daniel Stenberg) |
|
+- Brad Spencer brought the new function ares_gethostbyname_file() which simply |
|
+ resolves a host name from the given file, using the regular hosts syntax. |
|
+ |
|
+* Nov 1 2008 (Daniel Stenberg) |
|
+- Carlo Contavalli added support for the glibc "rotate" option, as documented |
|
+ in man resolv.conf: |
|
+ |
|
+ causes round robin selection of nameservers from among those listed. This |
|
+ has the effect of spreading the query load among all listed servers, rather |
|
+ than having all clients try the first listed server first every time. |
|
+ |
|
+ You can enable it with ARES_OPT_ROTATE |
|
+ |
|
+* Oct 21 2008 (Yang Tse) |
|
+ Charles Hardin added handling of EINPROGRESS for UDP connects. |
|
+ |
|
+* Oct 18 2008 (Daniel Stenberg) |
|
+ Charles Hardin made adig support a regular numerical dotted IP address for the |
|
+ -s option as well. |
|
+ |
|
+* Oct 7 2008 (Yang Tse) |
|
+- Added --enable-optimize configure option to enable and disable compiler |
|
+ optimizations to allow decoupled setting from --enable-debug. |
|
+ |
|
+* Oct 2 2008 (Yang Tse) |
|
+- Added --enable-warnings configure option to enable and disable strict |
|
+ compiler warnings to allow decoupled setting from --enable-debug. |
|
+ |
|
+* Sep 17 2008 (Yang Tse) |
|
+- Code reorganization to allow internal/private use of "nameser.h" to any |
|
+ system that lacks arpa/nameser.h or arpa/nameser_compat.h header files. |
|
+ |
|
+* Sep 16 2008 (Yang Tse) |
|
+- Code reorganization to allow internal/private use of ares_writev to any |
|
+ system that lacks the writev function. |
|
+ |
|
+* Sep 15 2008 (Yang Tse) |
|
+- Code reorganization to allow internal/private use of ares_strcasecmp to any |
|
+ system that lacks the strcasecmp function. |
|
+ |
|
+- Improve configure detection of some string functions. |
|
+ |
|
+* Sep 11 2008 (Yang Tse) |
|
+- Code reorganization to allow internal/private use of ares_strdup to any |
|
+ system that lacks the strdup function. |
|
+ |
|
+Version 1.5.3 (Aug 29, 2008) |
|
+ |
|
+* Aug 25 2008 (Yang Tse) |
|
+- Improvement by Brad House: |
|
+ |
|
+ This patch addresses an issue in which a response could be sent back to the |
|
+ source port of a client from a different address than the request was made to. |
|
+ This is one form of a DNS cache poisoning attack. |
|
+ |
|
+ The patch simply uses recvfrom() rather than recv() and validates that the |
|
+ address returned from recvfrom() matches the address of the server we have |
|
+ connected to. Only necessary on UDP sockets as they are connection-less, TCP |
|
+ is unaffected. |
|
+ |
|
+- Fix by George Neill: |
|
+ Fixed compilation of acountry sample application failure on some systems. |
|
+ |
|
+* Aug 4 2008 (Daniel Stenberg) |
|
+- Fix by Tofu Linden: |
|
+ |
|
+ The symptom: |
|
+ * Users (usually, but not always) on 2-Wire routers and the Comcast service |
|
+ and a wired connection to their router would find that the second and |
|
+ subsequent DNS lookups from fresh processes using c-ares to resolve the same |
|
+ address would cause the process to never see a reply (it keeps polling for |
|
+ around 1m15s before giving up). |
|
+ |
|
+ The repro: |
|
+ * On such a machine (and yeah, it took us a lot of QA to find the systems |
|
+ that reproduce such a specific problem!), do 'ahost www.secondlife.com', |
|
+ then do it again. The first process's lookup will work, subsequent lookups |
|
+ will time-out and fail. |
|
+ |
|
+ The cause: |
|
+ * init_id_key() was calling randomize_key() *before* it initialized |
|
+ key->state, meaning that the randomness generated by randomize_key() is |
|
+ immediately overwritten with deterministic values. (/dev/urandom was also |
|
+ being read incorrectly in the c-ares version we were using, but this was |
|
+ fixed in a later version.) |
|
+ * This makes the stream of generated query-IDs from any new c-ares process |
|
+ be an identical and predictable sequence of IDs. |
|
+ * This makes the 2-Wire's default built-in DNS server detect these queries |
|
+ as probable-duplicates and (erroneously) not respond at all. |
|
+ |
|
+ |
|
+* Aug 4 2008 (Yang Tse) |
|
+- Autoconf 2.62 has changed the behaviour of the AC_AIX macro which we use. |
|
+ Prior versions of autoconf defined _ALL_SOURCE if _AIX was defined. 2.62 |
|
+ version of AC_AIX defines _ALL_SOURCE and other four preprocessor symbols |
|
+ no matter if the system is AIX or not. To keep the traditional behaviour, |
|
+ and an uniform one across autoconf versions AC_AIX is replaced with our |
|
+ own internal macro CARES_CHECK_AIX_ALL_SOURCE. |
|
+ |
|
+* Aug 1 2008 (Yang Tse) |
|
+- Configure process now checks if the preprocessor _REENTRANT symbol is already |
|
+ defined. If it isn't currently defined a set of checks are performed to test |
|
+ if its definition is required to make visible to the compiler a set of *_r |
|
+ functions. Finally, if _REENTRANT is already defined or needed it takes care |
|
+ of making adjustments necessary to ensure that it is defined equally for the |
|
+ configure process tests and generated config file. |
|
+ |
|
+* Jul 20 2008 (Yang Tse) |
|
+- When recvfrom prototype uses a void pointer for arguments 2, 5 or 6 this will |
|
+ now cause the definition, as appropriate, of RECVFROM_TYPE_ARG2_IS_VOID, |
|
+ RECVFROM_TYPE_ARG5_IS_VOID or RECVFROM_TYPE_ARG6_IS_VOID. |
|
+ |
|
+* Jul 17 2008 (Yang Tse) |
|
+- RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined |
|
+ to the data type pointed by its respective argument and not the pointer type. |
|
+ |
|
+* Jul 16 2008 (Yang Tse) |
|
+- Improved configure detection of number of arguments for getservbyport_r. |
|
+ Detection is now based on compilation checks instead of linker ones. |
|
+ |
|
+- Configure process now checks availability of recvfrom() socket function and |
|
+ finds out its return type and the types of its arguments. Added definitions |
|
+ for non-configure systems config files, and introduced macro sreadfrom which |
|
+ will be used on udp sockets as a recvfrom() wrapper in the future. |
|
+ |
|
+* Jul 15 2008 (Yang Tse) |
|
+- Introduce definition of _REENTRANT symbol in setup.h to improve library |
|
+ usability. Previously the configure process only used the AC_SYS_LARGEFILE |
|
+ macro for debug builds, now it is also used for non-debug ones enabling the |
|
+ use of configure options --enable-largefile and --disable-largefile which |
|
+ might be needed for library compatibility. Remove checking the size of |
|
+ curl_off_t, it is no longer needed. |
|
+ |
|
+* Jul 3 2008 (Daniel Stenberg) |
|
+- Phil Blundell: If you ask ares_gethostbyname() to do an AF_INET6 lookup and |
|
+ the target host has only A records, it automatically falls back to an |
|
+ AF_INET lookup and gives you the A results. However, if the target host has |
|
+ a CNAME record, this behaviour is defeated since the original query does |
|
+ return some data even though ares_parse_aaa_reply() doesn't consider it |
|
+ relevant. Here's a small patch to make it behave the same with and without |
|
+ the CNAME. |
|
+ |
|
+* Jul 2 2008 (Yang Tse) |
|
+- Fallback to gettimeofday when monotonic clock is unavailable at run-time. |
|
+ |
|
+* Jun 30 2008 (Daniel Stenberg) |
|
+ |
|
+- As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is |
|
+ not posix or anything and thus c-ares failed to build on hurd (and possibly |
|
+ elsewhere). The define was also somewhat artificially used in the windows |
|
+ port. Now, I instead rewrote the use of gethostbyname to enlarge the host |
|
+ name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN |
|
+ define. I thus also removed the defien from the namser.h file where it was |
|
+ once added for the windows build. |
|
+ |
|
+ I also fixed init_by_defaults() function to not leak memory in case if |
|
+ error. |
|
+ |
|
+* Jun 9 2008 (Yang Tse) |
|
+ |
|
+- Make libcares.pc generated file for pkg-config include information relative |
|
+ to the libraries needed for the static linking of c-ares. |
|
+ |
|
+* May 30 2008 (Yang Tse) |
|
+ |
|
+- Brad House fixed a missing header file inclusion in adig sample program. |
|
+ |
|
+Version 1.5.2 (May 29, 2008) |
|
+ |
|
+* May 13 2008 (Daniel Stenberg) |
|
+ |
|
+- Introducing millisecond resolution support for the timeout option. See |
|
+ ares_init_options()'s ARES_OPT_TIMEOUTMS. |
|
+ |
|
+* May 9 2008 (Yang Tse) |
|
+ |
|
+- Use monotonic time source if available, for private function ares__tvnow() |
|
+ |
|
+* May 7 2008 (Daniel Stenberg) |
|
+ |
|
+- Sebastian made c-ares able to return all PTR-records when doing reverse |
|
+ lookups. It is not common practice to have multiple PTR-Records for a single |
|
+ IP, but its perfectly legal and some sites have those. |
|
+ |
|
+- Doug Goldstein provided a configure patch: updates autoconf 2.13 usage to |
|
+ autoconf 2.57 usage (which is the version you have specified as the minimum |
|
+ version). It's a minor change but it does clean up some warnings with newer |
|
+ autoconf (specifically 2.62). |
|
+ |
|
+* May 5 2008 (Yang Tse) |
|
+ |
|
+- Improved parsing of resolver configuration files. |
|
+ |
|
+* April 4 2008 (Daniel Stenberg) |
|
+ |
|
+- Eino Tuominen improved the code when a file is used to seed the randomizer. |
|
+ |
|
+- Alexey Simak made adig support NAPTR records |
|
+ |
|
+- Alexey Simak fixed the VC dsp file by adding the missing source file |
|
+ ares_expand_string.c |
|
+ |
|
+* December 11 2007 (Gisle Vanem) |
|
+ |
|
+- Added another sample application; acountry.c which converts an |
|
+ IPv4-address(es) and/or host-name(s) to country-name and country-code. |
|
+ This uses the service of the DNSBL at countries.nerd.dk. |
|
+ |
|
+* December 3 2007 (Daniel Stenberg) |
|
+ |
|
+- Brad Spencer fixed the configure script to assume that there's no |
|
+ /dev/urandom when built cross-compiled as then the script cannot check for |
|
+ it. |
|
+ |
|
+- Erik Kline cleaned up ares_gethostbyaddr.c:next_lookup() somewhat |
|
+ |
|
+Version 1.5.1 (Nov 21, 2007) |
|
+ |
|
+* November 21 2007 (Daniel Stenberg) |
|
+ |
|
+- Robin Cornelius pointed out that ares_llist.h was missing in the release |
|
+ archive for 1.5.0 |
|
+ |
|
+Version 1.5.0 (Nov 21, 2007) |
|
+ |
|
+* October 2 2007 (Daniel Stenberg) |
|
+ |
|
+- ares_strerror() segfaulted if the input error number was out of the currently |
|
+ supported range. |
|
+ |
|
+- Yang Tse: Avoid a segfault when generating a DNS "Transaction ID" in |
|
+ internal function init_id_key() under low memory conditions. |
|
+ |
|
+* September 28 2007 (Daniel Stenberg) |
|
+ |
|
+- Bumped version to 1.5.0 for next release and soname bumped to 2 due to ABI |
|
+ and API changes in the progress callback (and possibly more coming up from |
|
+ Steinar) |
|
+ |
|
+* September 28 2007 (Steinar H. Gunderson) |
|
+ |
|
+- Don't skip a server if it's the only one. (Bugfix from the Google tree.) |
|
+ |
|
+- Made the query callbacks receive the number of timeouts that happened during |
|
+ the execution of a query, and updated documentation accordingly. (Patch from |
|
+ the Google tree.) |
|
+ |
|
+- Support a few more socket options: ARES_OPT_SOCK_SNDBUF and |
|
+ ARES_OPT_SOCK_RCVBUF |
|
+ |
|
+- Always register for TCP events even if there are no outstanding queries, as |
|
+ the other side could always close the connection, which is a valid event |
|
+ which should be responded to. |
|
+ |
|
+* September 22 2007 (Daniel Stenberg) |
|
+ |
|
+- Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in |
|
+ several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that |
|
+ if it fails and the socket is closed the following code doesn't try to use |
|
+ the file descriptor. |
|
+ |
|
+- Steinar H. Gunderson modified c-ares to now also do to DNS retries even when |
|
+ TCP is used since there are several edge cases where it still makes sense. |
|
+ |
|
+- Brad House provided a fix for ares_save_options(): |
|
+ |
|
+ Apparently I overlooked something with the ares_save_options() where it |
|
+ would try to do a malloc(0) when no options of that type needed to be saved. |
|
+ On most platforms, this was fine because malloc(0) doesn't actually return |
|
+ NULL, but on AIX it does, so ares_save_options would return ARES_ENOMEM. |
|
+ |
|
+* July 14 2007 (Daniel Stenberg) |
|
+ |
|
+- Vlad Dinulescu fixed two outstanding valgrind reports: |
|
+ |
|
+ 1. In ares_query.c , in find_query_by_id we compare q->qid (which is a short |
|
+ int variable) with qid, which is declared as an int variable. Moreover, |
|
+ DNS_HEADER_SET_QID is used to set the value of qid, but DNS_HEADER_SET_QID |
|
+ sets only the first two bytes of qid. I think that qid should be declared as |
|
+ "unsigned short" in this function. |
|
+ |
|
+ 2. The same problem occurs in ares_process.c, process_answer() . query->qid |
|
+ (an unsigned short integer variable) is compared with id, which is an |
|
+ integer variable. Moreover, id is initialized from DNS_HEADER_QID which sets |
|
+ only the first two bytes of id. I think that the id variable should be |
|
+ declared as "unsigned short" in this function. |
|
+ |
|
+ Even after declaring these variables as "unsigned short", the valgrind |
|
+ errors are still there. Which brings us to the third problem. |
|
+ |
|
+ 3. The third problem is that Valgrind assumes that query->qid is not |
|
+ initialised correctly. And it does that because query->qid is set from |
|
+ DNS_HEADER_QID(qbuf); Valgrind says that qbuf has unitialised bytes. And |
|
+ qbuf has uninitialised bytes because of channel->next_id . And next_id is |
|
+ set by ares_init.c:ares__generate_new_id() . I found that putting short r=0 |
|
+ in this function (instead of short r) makes all Valgrind warnings go away. |
|
+ I have studied ares__rc4() too, and this is the offending line: |
|
+ |
|
+ buffer_ptr[counter] ^= state[xorIndex]; (ares_query.c:62) |
|
+ |
|
+ This is what triggers Valgrind.. buffer_ptr is unitialised in this function, |
|
+ and by applying ^= on it, it remains unitialised. |
|
+ |
|
+Version 1.4.0 (June 8, 2007) |
|
+ |
|
+* June 4 2007 (Daniel Stenberg) |
|
+ |
|
+- James Bursa reported a major memory problem when resolving multi-IP names |
|
+ and I found and fixed the problem. It was added by Ashish Sharma's patch |
|
+ two days ago. |
|
+ |
|
+ When I then tried to verify multiple entries in /etc/hosts after my fix, I |
|
+ got another segfault and decided this code was not ripe for inclusion and I |
|
+ reverted the patch. |
|
+ |
|
+* June 2 2007 |
|
+ |
|
+- Brad Spencer found and fixed three flaws in the code, found with the new |
|
+ gcc 4.2.0 warning: -Waddress |
|
+ |
|
+- Brad House fixed VS2005 compiler warnings due to time_t being 64bit. |
|
+ He also made recent Microsoft compilers use _strdup() instead of strdup(). |
|
+ |
|
+- Brad House's man pages for ares_save_options() and ares_destroy_options() |
|
+ were added. |
|
+ |
|
+- Ashish Sharma provided a patch for supporting multiple entries in the |
|
+ /etc/hosts file. Patch edited for coding style and functionality by me |
|
+ (Daniel). |
|
+ |
|
+* May 30 2007 |
|
+ |
|
+- Shmulik Regev brought cryptographically secure transaction IDs: |
|
+ |
|
+ The c-ares library implementation uses a DNS "Transaction ID" field that is |
|
+ seeded with a pseudo random number (based on gettimeofday) which is |
|
+ incremented (++) between consecutive calls and is therefore rather |
|
+ predictable. In general, predictability of DNS Transaction ID is a well |
|
+ known security problem (e.g. |
|
+ http://bak.spc.org/dms/archive/dns_id_attack.txt) and makes a c-ares based |
|
+ implementation vulnerable to DNS poisoning. Credit goes to Amit Klein |
|
+ (Trusteer) for identifying this problem. |
|
+ |
|
+ The patch I wrote changes the implementation to use a more secure way of |
|
+ generating unique IDs. It starts by obtaining a key with reasonable entropy |
|
+ which is used with an RC4 stream to generate the cryptographically secure |
|
+ transaction IDs. |
|
+ |
|
+ Note that the key generation code (in ares_init:randomize_key) has two |
|
+ versions, the Windows specific one uses a cryptographically safe function |
|
+ provided (but undocumented :) by the operating system (described at |
|
+ http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx). The |
|
+ default implementation is a bit naive and uses the standard 'rand' |
|
+ function. Surely a better way to generate random keys exists for other |
|
+ platforms. |
|
+ |
|
+ The patch can be tested by using the adig utility and using the '-s' option. |
|
+ |
|
+- Brad House added ares_save_options() and ares_destroy_options() that can be |
|
+ used to keep options for later re-usal when ares_init_options() is used. |
|
+ |
|
+ Problem: Calling ares_init() for each lookup can be unnecessarily resource |
|
+ intensive. On windows, it must LoadLibrary() or search the registry |
|
+ on each call to ares_init(). On unix, it must read and parse |
|
+ multiple files to obtain the necessary configuration information. In |
|
+ a single-threaded environment, it would make sense to only |
|
+ ares_init() once, but in a heavily multi-threaded environment, it is |
|
+ undesirable to ares_init() and ares_destroy() for each thread created |
|
+ and track that. |
|
+ |
|
+ Solution: Create ares_save_options() and ares_destroy_options() functions to |
|
+ retrieve and free options obtained from an initialized channel. The |
|
+ options populated can be used to pass back into ares_init_options(), |
|
+ it should populate all needed fields and not retrieve any information |
|
+ from the system. Probably wise to destroy the cache every minute or |
|
+ so to prevent the data from becoming stale. |
|
+ |
|
+- Daniel S added ares_process_fd() to allow applications to ask for processing |
|
+ on specific sockets and thus avoiding select() and associated |
|
+ functions/macros. This function will be used by upcoming libcurl releases |
|
+ for this very reason. It also made me export the ares_socket_t type in the |
|
+ public ares.h header file, since ares_process_fd() uses that type for two of |
|
+ the arguments. |
|
+ |
|
+* May 25 2007 |
|
+ |
|
+- Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows |
|
+ that could cause it to return a bad return code. |
|
+ |
|
+* April 16 2007 |
|
+ |
|
+- Yang Tse: Provide ares_getopt() command-line parser function as a source |
|
+ code helper function, not belonging to the actual c-ares library. |
|
+ |
|
+* February 19 2007 |
|
+ |
|
+- Vlad Dinulescu added ares_parse_ns_reply(). |
|
+ |
|
+* February 13 2007 |
|
+ |
|
+- Yang Tse: Fix failure to get the search sequence of /etc/hosts and |
|
+ DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when |
|
+ /etc/resolv.conf did not exist or was unable to read it. |
|
+ |
|
+* November 22 2006 |
|
+ |
|
+- Install ares_dns.h too |
|
+ |
|
+- Michael Wallner fixed this problem: When I set domains in the options |
|
+ struct, and there are domain/search entries in /etc/resolv.conf, the domains |
|
+ of the options struct will be overridden. |
|
+ |
|
+* November 6 2006 |
|
+ |
|
+- Yang Tse removed a couple of potential zero size memory allocations. |
|
+ |
|
+- Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel) |
|
+ broke in the 1.3.2 release. We should switch to a system where that file is |
|
+ auto-generated. We could rip some code for that from curl... |
|
+ |
|
+Version 1.3.2 (November 3, 2006) |
|
+ |
|
+* October 12 2006 |
|
+ |
|
+- Prevent ares_getsock() to overflow if more than 16 sockets are used. |
|
+ |
|
+* September 11 2006 |
|
+ |
|
+- Guilherme Balena Versiani: I noted a strange BUG in Win32 port |
|
+ (ares_init.c/get_iphlpapi_dns_info() function): when I disable the network |
|
+ by hand or disconnect the network cable in Windows 2000 or Windows XP, my |
|
+ application gets 127.0.0.1 as the only name server. The problem comes from |
|
+ 'GetNetworkParams' function, that returns the empty string "" as the only |
|
+ name server in that case. Moreover, the Windows implementation of |
|
+ inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE. |
|
+ |
|
+* August 29 2006 |
|
+ |
|
+- Brad Spencer did |
|
+ |
|
+ o made ares_version.h use extern "C" for c++ compilers |
|
+ o fixed compiler warnings in ares_getnameinfo.c |
|
+ o fixed a buffer position init for TCP reads |
|
+ |
|
+* August 3 2006 |
|
+ |
|
+- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and |
|
+ not always zero! |
|
+ |
|
+Version 1.3.1 (June 24, 2006) |
|
+ |
|
+* July 23, 2006 |
|
+ |
|
+- Gisle Vanem added getopt() to the ahost program. Currently accepts |
|
+ only [-t {a|aaaa}] to specify address family in ares_gethostbyname(). |
|
+ |
|
+* June 19, 2006 |
|
+ |
|
+- (wahern) Removed "big endian" DNS section and RR data integer parser |
|
+ macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise |
|
+ operations in C operate on logical values. And in any event the octets are |
|
+ already in big-endian (aka network) byte order so they're being reversed |
|
+ (thus the source of the breakage). |
|
+ |
|
+* June 18, 2006 |
|
+ |
|
+- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls |
|
+ from area_process.c. |
|
+ |
|
+ TODO: Handle one last EAGAIN for a UDP socket send(2) in |
|
+ ares__send_query(). |
|
+ |
|
+* May 10, 2006 |
|
+ |
|
+- Bram Matthys brought my attention to a libtool peculiarity where detecting |
|
+ things such as C++ compiler actually is a bad thing and since we don't need |
|
+ that detection I added a work-around, much inspired by a previous patch by |
|
+ Paolo Bonzini. This also shortens the configure script quite a lot. |
|
+ |
|
+* May 3, 2006 |
|
+ |
|
+- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes |
|
+ c-ares call a callback on socket state changes. A better way than the |
|
+ ares_getsock() to get full control over the socket state. |
|
+ |
|
+* January 9, 2006 |
|
+ |
|
+- Alexander Lazic improved the getservbyport_r() configure check. |
|
+ |
|
+* January 6, 2006 |
|
+ |
|
+- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS |
|
+ variable for easier controlling what it does and how it runs. |
|
+ |
|
+* January 5, 2006 |
|
+ |
|
+- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it |
|
+ build with newer gcc versions that no longer defines "riscos". |
|
+ |
|
+* December 22 |
|
+ |
|
+- Daniel Stenberg added ares_getsock() that extracts the set of sockets to |
|
+ wait for action on. Similar to ares_fds() but not restricted to using |
|
+ select() for the waiting. |
|
+ |
|
+* November 25 |
|
+ |
|
+- Yang Tse fixed some send() / recv() compiler warnings |
|
+ |
|
+* September 18 |
|
+ |
|
+- Added constants that will be used by ares_getaddrinfo |
|
+ |
|
+- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it |
|
+ is available to ensure it works properly in a threaded environment. |
|
+ |
|
+* September 10 |
|
+ |
|
+- configure fix for detecting a member in the sockaddr_in6 struct which failed |
|
+ on ipv6-enabled HP-UX 11.00 |
|
+ |
|
+Version 1.3.0 (August 29, 2005) |
|
+ |
|
+* August 21 |
|
+ |
|
+- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info() |
|
+ when getting the DNS server etc. |
|
+ |
|
+* June 19 |
|
+ |
|
+- Added some checks for the addrinfo structure. |
|
+ |
|
+* June 2 |
|
+ |
|
+- William Ahern: |
|
+ |
|
+ Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a |
|
+ read event can come back from poll() on a valid SOCK_DGRAM socket but |
|
+ recv(2) will still block. This patch doesn't ignore EAGAIN in |
|
+ read_udp_packets(), though maybe it should. (This patch was edited by Daniel |
|
+ Stenberg and a new configure test was added (imported from curl's configure) |
|
+ to properly detect what non-blocking socket approach to use.) |
|
+ |
|
+ I'm not quite sure how this was happening, but I've been seeing PTR queries |
|
+ which seem to return empty responses. At least, they were empty when calling |
|
+ ares_expand_name() on the record. Here's a patch which guarantees to |
|
+ NUL-terminate the expanded name. The old behavior failed to NUL-terminate if |
|
+ len was 0, and this was causing strlen() to run past the end of the buffer |
|
+ after calling ares_expand_name() and getting ARES_SUCCESS as the return |
|
+ value. If q is not greater than *s then it's equal and *s is always |
|
+ allocated with at least one byte. |
|
+ |
|
+* May 16 |
|
+ |
|
+- Added ares_getnameinfo which mimics the getnameinfo API (another feature |
|
+ that could use testing). |
|
+ |
|
+* May 14 |
|
+ |
|
+- Added an inet_ntop function from BIND for systems that do not have it. |
|
+ |
|
+* April 9 |
|
+ |
|
+- Made sortlist support IPv6 (this can probably use some testing). |
|
+ |
|
+- Made sortlist support CIDR matching for IPv4. |
|
+ |
|
+* April 8 |
|
+ |
|
+- Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist |
|
+ does not work with IPv6. Also provided an implementation of bitncmp from |
|
+ BIND for systems that do not supply this function. This will be used to add |
|
+ IPv6 support to sortlist. |
|
+ |
|
+- Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family. |
|
+ The function can lookup IPv6 addresses both from files (/etc/hosts) and |
|
+ DNS lookups. |
|
+ |
|
+* April 7 |
|
+ |
|
+- Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac |
|
+ OS X. |
|
+ |
|
+* April 5 |
|
+ |
|
+- Dominick Meglio: Provided implementations of inet_net_pton and inet_pton |
|
+ from BIND for systems that do not include these functions. |
|
+ |
|
+* March 11, 2005 |
|
+ |
|
+- Dominick Meglio added ares_parse_aaaa_reply.c and did various |
|
+ adjustments. The first little steps towards IPv6 support! |
|
+ |
|
+* November 7 |
|
+ |
|
+- Fixed the VC project and makefile to use ares_cancel and ares_version |
|
+ |
|
+* October 24 |
|
+ |
|
+- The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw. |
|
+ This is now fixed. |
|
+ |
|
+Version 1.2.1 (October 20, 2004) |
|
+ |
|
+* September 29 |
|
+ |
|
+- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital |
|
+ when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for |
|
+ other OSes. He made c-ares check for and understand it if present. |
|
+ |
|
+- Now c-ares will use local host name lookup _before_ DNS resolving by default |
|
+ if nothing else is told. |
|
+ |
|
+* September 26 |
|
+ |
|
+- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf |
|
+ file to determine the sequence in which to search /etc/hosts and DNS. So on |
|
+ systems where this order is defined by /etc/host.conf instead of a "lookup" |
|
+ entry in /etc/resolv.conf, c-ares will always default to looking in DNS |
|
+ first, and /etc/hosts second. |
|
+ |
|
+ c-ares now looks at |
|
+ |
|
+ 1) resolv.conf (for the "lookup" line); |
|
+ 2) nsswitch.fon (for the "hosts:" line); |
|
+ 3) host.conf (for the "order" line). |
|
+ |
|
+ First match wins. |
|
+ |
|
+- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is |
|
+ located in a static location. It assumed |
|
+ C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact, |
|
+ the location of the HOSTS file can be changed via a registry setting. |
|
+ |
|
+ There is a key called DatabasePath which specifies the path to the HOSTS |
|
+ file: |
|
+ http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx |
|
+ |
|
+ The patch will make c-ares correctly consult the registry for the location |
|
+ of this file. |
|
+ |
|
+* August 29 |
|
+ |
|
+- Gisle Vanem fixed the MSVC build files. |
|
+ |
|
+* August 20 |
|
+ |
|
+- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack. |
|
+ |
|
+* August 13 |
|
+ |
|
+- Harshal Pradhan made a minor syntax change in ares_init.c to make it build |
|
+ fine with MSVC 7.1 |
|
+ |
|
+* July 24 |
|
+ |
|
+- Made the lib get built static only if --enable-debug is used. |
|
+ |
|
+- Gisle Vanem fixed: |
|
+ |
|
+ Basically in loops like handle_errors(), 'query->next' was assigned a local |
|
+ variable and then query was referenced after the memory was freed by |
|
+ next_server(). I've changed that so next_server() and end_query() returns |
|
+ the next query. So callers should use this ret-value. |
|
+ |
|
+ The next problem was that 'server->tcp_buffer_pos' had a random value at |
|
+ entry to 1st recv() (luckily causing Winsock to return ENOBUFS). |
|
+ |
|
+ I've also added a ares_writev() for Windows to streamline the code a bit |
|
+ more. |
|
+ |
|
+* July 20 |
|
+- Fixed a few variable return types for some system calls. Made configure |
|
+ check for ssize_t to make it possible to use that when receiving the send() |
|
+ error code. This is necessary to prevent compiler warnings on some systems. |
|
+ |
|
+- Made configure create config.h, and all source files now include setup.h that |
|
+ might include the proper config.h (or a handicrafted alternative). |
|
+ |
|
+- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't |
|
+ use 'int' for that. |
|
+ |
|
+- automake-ified and libool-ified c-ares. Now it builds libcares as a shared |
|
+ lib on most platforms if wanted. (This bloated the size of the release |
|
+ archive with another 200K!) |
|
+ |
|
+- Makefile.am now uses Makefile.inc for the c sources, h headers and man |
|
+ pages, to make it easier for other makefiles to use the exact same set of |
|
+ files. |
|
+ |
|
+- Adjusted 'maketgz' to use the new automake magic when building distribution |
|
+ archives. |
|
+ |
|
+- Anyone desires HTML and/or PDF versions of the man pages in the release |
|
+ archives? |
|
+ |
|
+* July 3 |
|
+- Günter Knauf made c-ares build and run on Novell Netware. |
|
+ |
|
+* July 1 |
|
+- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp |
|
+ fixes and made ares not use 'errno' to provide further info on Windows. |
|
+ |
|
+* June 30 |
|
+- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack. |
|
+ |
|
+* June 10 |
|
+- Gisle Vanem's init patch for Windows: |
|
+ |
|
+ The init_by_resolv_conf() function fetches the DNS-server(s) |
|
+ from a series of registry branches. |
|
+ |
|
+ This can be wrong in the case where DHCP has assigned nameservers, but the |
|
+ user has overridden these servers with other prefered settings. Then it's |
|
+ wrong to use the DHCPNAMESERVER setting in registry. |
|
+ |
|
+ In the case of no global DHCP-assigned or fixed servers, but DNS server(s) |
|
+ per adapter, one has to query the adapter branches. But how can c-ares know |
|
+ which adapter is valid for use? AFAICS it can't. There could be one adapter |
|
+ that is down (e.g. a VPN adapter). |
|
+ |
|
+ So it's better to leave this to the IP Helper API (iphlapi) available in |
|
+ Win-98/2000 and later. My patch falls-back to the old way if not available. |
|
+ |
|
+* June 8 |
|
+- James Bursa fixed an init issue for RISC OS. |
|
+ |
|
+* May 11 |
|
+- Nico Stappenbelt reported that when processing domain and search lines in |
|
+ the resolv.conf file, the first entry encountered is processed and used as |
|
+ the search list. According to the manual pages for both Linux, Solaris and |
|
+ Tru64, the last entry of either a domain or a search field is used. |
|
+ |
|
+ This is now adjusted in the code |
|
+ |
|
+Version 1.2.0 (April 13, 2004) |
|
+ |
|
+* April 2, 2004 |
|
+- Updated various man pages to look nicer when converted to HTML on the web |
|
+ site. |
|
+ |
|
+* April 1, 2004 |
|
+- Dirk Manske provided a new function that is now named ares_cancel(). It is |
|
+ used to cancel/cleanup a resolve/request made using ares functions on the |
|
+ given ares channel. It does not destroy/kill the ares channel itself. |
|
+ |
|
+- Dominick Meglio cleaned up the formatting in several man pages. |
|
+ |
|
+* March 30, 2004 |
|
+- Dominick Meglio's new ares_expand_string. A helper function when decoding |
|
+ incoming DNS packages. |
|
+ |
|
+- Daniel Stenberg modified the Makefile.in to use a for loop for the man page |
|
+ installation to improve overview and make it easier to add man pages. |
|
+ |
|
+Version 1.1.0 (March 11, 2004) |
|
+ |
|
+* March 9, 2004 |
|
+- Gisle Vanem improved build on Windows. |
|
+ |
|
+* February 25, 2004 |
|
+- Dan Fandrich found a flaw in the Feb 22 fix. |
|
+ |
|
+- Added better configure --enable-debug logic (taken from the curl configure |
|
+ script). Added acinclude.m4 to the tarball. |
|
+ |
|
+* February 23, 2004 |
|
+- Removed ares_free_errmem(), the function, the file and the man page. It was |
|
+ not used and it did nothing. |
|
+ |
|
+- Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of |
|
+ compiler warnings on picky compilers. |
|
+ |
|
+* February 22, 2004 |
|
+- Dominick Meglio made ares init support multiple name servers in the |
|
+ NameServer key on Windows. |
|
+ |
|
+* February 16, 2004 |
|
+- Modified ares_private.h to include libcurl's memory debug header if |
|
+ CURLDEBUG is set. This makes all the ares-functions supervised properly by |
|
+ the curl test suite. This also forced me to add inclusion of the |
|
+ ares_private.h header in a few more files that are using some kind of |
|
+ memory-related resources. |
|
+ |
|
+- Made the makefile only build ahost and adig if 'make demos' is used. |
|
+ |
|
+* February 10, 2004 |
|
+- Dirk Manske made ares_version.h installed with 'make install' |
|
+ |
|
+* February 4, 2004 |
|
+- ares_free_errmem() is subject for removal, it is simply present for future |
|
+ purposes, and since we removed the extra parameter in strerror() it won't |
|
+ be used by c-ares! |
|
+- configure --enable-debug now enables picky compiler options if gcc is used |
|
+- fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk |
|
+ reported |
|
+ |
|
+Version 1.0.0 (February 3, 2004) |
|
+ |
|
+* February 3, 2004 |
|
+- now we produce the libcares.a library instead of the previous libares.a |
|
+ since we are no longer compatible |
|
+ |
|
+* February 2, 2004 |
|
+ |
|
+- ares_strerror() has one argument less. This is the first official |
|
+ modification of the existing provided ares API. |
|
+ |
|
+* January 29, 2004 |
|
+ |
|
+- Dirk Manske fixed how the socket is set non-blocking. |
|
+ |
|
+* January 4, 2004 |
|
+ |
|
+- Dominick Meglio made the private gettimeofday() become ares_gettimeofday() |
|
+ instead in order to not pollute the name space and risk colliding with |
|
+ other libraries' versions of this function. |
|
+ |
|
+* October 24, 2003. Daniel Stenberg |
|
+ |
|
+ Added ares_version(). |
|
+ |
|
+Version 1.0-pre1 (8 October 2003) |
|
+ |
|
+- James Bursa made it run on RISC OS |
|
+ |
|
+- Dominick Meglio made it run fine on NT4 |
|
+ |
|
+- Duncan Wilcox made it work fine on Mac OS X |
|
+ |
|
+- Daniel Stenberg adjusted the windows port |
|
+ |
|
+- liren at vivisimo.com made the initial windows port |
|
+ |
|
+* Imported the sources from ares 1.1.1 |
|
diff --git a/deps/libuv/src/ares/CMakeLists.txt b/deps/libuv/src/ares/CMakeLists.txt |
|
new file mode 100644 |
|
index 0000000..7bbb95b |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/CMakeLists.txt |
|
@@ -0,0 +1,22 @@ |
|
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}) |
|
+include_directories(${node_platform}-${cares_arch}) |
|
+add_definitions(-DHAVE_CONFIG_H=1) |
|
+ |
|
+include(CheckLibraryExists) |
|
+check_library_exists(socket socket "" HAVE_SOCKET_LIB) |
|
+check_library_exists(nsl gethostbyname "" HAVE_NSL_LIB) |
|
+ |
|
+file(GLOB lib_sources *.c) |
|
+add_library(cares ${lib_sources}) |
|
+ |
|
+if(${HAVE_SOCKET_LIB}) |
|
+ set(cares_libs ${cares_libs} socket) |
|
+endif() |
|
+ |
|
+if(${HAVE_NSL_LIB}) |
|
+ set(cares_libs ${cares_libs} nsl) |
|
+endif() |
|
+ |
|
+if(cares_libs) |
|
+ target_link_libraries(cares ${cares_libs}) |
|
+endif() |
|
diff --git a/deps/libuv/src/ares/NEWS b/deps/libuv/src/ares/NEWS |
|
new file mode 100644 |
|
index 0000000..95a2eee |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/NEWS |
|
@@ -0,0 +1,21 @@ |
|
+Major changes since: |
|
+* see the CHANGES file |
|
+ |
|
+Major changes in release 1.1.1: |
|
+* ares should now compile as C++ code (no longer uses reserved word |
|
+ "class"). |
|
+* Added SRV support to adig test program. |
|
+* Fixed a few error handling bugs in query processing. |
|
+ |
|
+Major changes in release 1.1.0: |
|
+* Added ares_free_string() function so that memory can be freed in the |
|
+ same layer as it is allocated, a desirable feature in some |
|
+ environments. |
|
+* A few of the ares_dns.h macros are fixed to use the proper bitwise |
|
+ operator. |
|
+* Fixed a couple of fenceposts fixed in ares_expand_name()'s |
|
+ bounds-checking. |
|
+* In process_timeouts(), extract query->next before calling |
|
+ next_server() and possibly freeing the query structure. |
|
+* Casted arguments to ctype macros casted to unsigned char, since not |
|
+ all char values are valid inputs to those macros according to ANSI. |
|
diff --git a/deps/libuv/src/ares/README b/deps/libuv/src/ares/README |
|
new file mode 100644 |
|
index 0000000..56a43c5 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/README |
|
@@ -0,0 +1,60 @@ |
|
+c-ares |
|
+====== |
|
+ |
|
+This is c-ares, an asynchronous resolver library. It is intended for |
|
+applications which need to perform DNS queries without blocking, or need to |
|
+perform multiple DNS queries in parallel. The primary examples of such |
|
+applications are servers which communicate with multiple clients and programs |
|
+with graphical user interfaces. |
|
+ |
|
+The full source code is available in the 'c-ares' release archives, and in a |
|
+git repository: http://github.com/bagder/c-ares |
|
+ |
|
+If you find bugs, correct flaws, have questions or have comments in general in |
|
+regard to c-ares (or by all means the original ares too), get in touch with us |
|
+on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares |
|
+ |
|
+c-ares is of course distributed under the same MIT-style license as the |
|
+original ares. |
|
+ |
|
+You'll find all c-ares details and news here: |
|
+ |
|
+ http://c-ares.haxx.se/ |
|
+ |
|
+ |
|
+NOTES FOR C-ARES HACKERS |
|
+ |
|
+The following notes apply to c-ares version 1.7.0 and later. |
|
+ |
|
+* The distributed ares_build.h file is only intended to be used on systems |
|
+ which can not run the also distributed configure script. |
|
+ |
|
+* The distributed ares_build.h file is generated as a copy of ares_build.h.dist |
|
+ when the c-ares source code distribution archive file is originally created. |
|
+ |
|
+* If you check out from git on a non-configure platform, you must run the |
|
+ appropriate buildconf* script to set up ares_build.h and other local files |
|
+ before being able of compiling the library. |
|
+ |
|
+* On systems capable of running the configure script, the configure process |
|
+ will overwrite the distributed ares_build.h file with one that is suitable |
|
+ and specific to the library being configured and built, this new file is |
|
+ generated from the ares_build.h.in template file. |
|
+ |
|
+* If you intend to distribute an already compiled c-ares library you _MUST_ |
|
+ also distribute along with it the generated ares_build.h which has been |
|
+ used to compile it. Otherwise the library will be of no use for the users of |
|
+ the library that you have built. It is _your_ responsibility to provide this |
|
+ file. No one at the c-ares project can know how you have built the library. |
|
+ |
|
+* File ares_build.h includes platform and configuration dependent info, |
|
+ and must not be modified by anyone. Configure script generates it for you. |
|
+ |
|
+* We cannot assume anything else but very basic compiler features being |
|
+ present. While c-ares requires an ANSI C compiler to build, some of the |
|
+ earlier ANSI compilers clearly can't deal with some preprocessor operators. |
|
+ |
|
+* Newlines must remain unix-style for older compilers' sake. |
|
+ |
|
+* Comments must be written in the old-style /* unnested C-fashion */ |
|
+ |
|
diff --git a/deps/libuv/src/ares/README.cares b/deps/libuv/src/ares/README.cares |
|
new file mode 100644 |
|
index 0000000..aca54c8 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/README.cares |
|
@@ -0,0 +1,13 @@ |
|
+c-ares |
|
+====== |
|
+ |
|
+This package is based on ares 1.1.1 (written by Greg Hudson). I decided to |
|
+fork and release a separate project since the ares author didn't want the |
|
+improvements that were vital for our use of it. |
|
+ |
|
+This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use |
|
+within the curl project (hence the letter C) and it makes a nice pun. Also, |
|
+c-ares is not API compatible with ares: a new name makes that more obvious to |
|
+the public. |
|
+ |
|
+The original libares was distributed at athena-dist.mit.edu:pub/ATHENA/ares. |
|
diff --git a/deps/libuv/src/ares/README.msvc b/deps/libuv/src/ares/README.msvc |
|
new file mode 100644 |
|
index 0000000..4ff8700 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/README.msvc |
|
@@ -0,0 +1,142 @@ |
|
+ |
|
+ |
|
+ ___ __ _ _ __ ___ ___ |
|
+ / __| ___ / _` | '__/ _ \/ __| |
|
+ | (_ |___| (_| | | | __/\__ \ |
|
+ \___| \__,_|_| \___||___/ |
|
+ |
|
+ |
|
+ How to build c-ares using MSVC or Visual Studio |
|
+ ================================================= |
|
+ |
|
+ |
|
+ |
|
+ How to build using MSVC from the command line |
|
+ --------------------------------------------- |
|
+ |
|
+ Open a command prompt window and ensure that the environment is properly |
|
+ set up in order to use MSVC or Visual Studio compiler tools. |
|
+ |
|
+ Change to c-ares source folder where Makefile.msvc file is located and run: |
|
+ |
|
+ > nmake -f Makefile.msvc |
|
+ |
|
+ This will build all c-ares libraries as well as three sample programs. |
|
+ |
|
+ Once the above command has finished a new folder named MSVCXX will exist |
|
+ below the folder where makefile.msvc is found. The name of the folder |
|
+ depends on the MSVC compiler version being used to build c-ares. |
|
+ |
|
+ Below the MSVCXX folder there will exist four folders named 'cares', |
|
+ 'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that |
|
+ holds the c-ares libraries you have just generated, the other three |
|
+ hold sample programs that use the libraries. |
|
+ |
|
+ The above command builds four versions of the c-ares library, dynamic |
|
+ and static versions and each one in release and debug flavours. Each |
|
+ of these is found in folders named dll-release, dll-debug, lib-release, |
|
+ and lib-debug, which hang from the 'cares' folder mentioned above. Each |
|
+ sample program also has folders with the same names to reflect which |
|
+ library version it is using. |
|
+ |
|
+ |
|
+ How to install using MSVC from the command line |
|
+ ----------------------------------------------- |
|
+ |
|
+ In order to allow easy usage of c-ares libraries it may be convenient to |
|
+ install c-ares libraries and header files to a common subdirectory tree. |
|
+ |
|
+ Once that c-ares libraries have been built using procedure described above, |
|
+ use same command prompt window to define environment variable INSTALL_DIR |
|
+ to designate the top subdirectory where installation of c-ares libraries and |
|
+ header files will be done. |
|
+ |
|
+ > set INSTALL_DIR=c:\c-ares |
|
+ |
|
+ Afterwards, run following command to actually perform the installation: |
|
+ |
|
+ > nmake -f Makefile.msvc install |
|
+ |
|
+ Installation procedure will copy c-ares libraries to subdirectory 'lib' and |
|
+ c-ares header files to subdirectory 'include' below the INSTALL_DIR subdir. |
|
+ |
|
+ When environment variable INSTALL_DIR is not defined, installation is done |
|
+ to c-ares source folder where Makefile.msvc file is located. |
|
+ |
|
+ |
|
+ How to build using Visual Studio 6 IDE |
|
+ -------------------------------------- |
|
+ |
|
+ A VC++ 6.0 reference workspace (vc6aws.dsw) is available within the 'vc' |
|
+ folder to allow proper building of the library and sample programs. |
|
+ |
|
+ 1) Open the vc6aws.dsw workspace with MSVC6's IDE. |
|
+ 2) Select 'Build' from top menu. |
|
+ 3) Select 'Batch Build' from dropdown menu. |
|
+ 4) Make sure that the sixteen project configurations are 'checked'. |
|
+ 5) Click on the 'Build' button. |
|
+ 6) Once the sixteen project configurations are built you are done. |
|
+ |
|
+ Dynamic and static c-ares libraries are built in debug and release flavours, |
|
+ and can be located each one in its own subdirectory, dll-debug, dll-release, |
|
+ lib-debug and lib-release, all of them below the 'vc\cares' subdirectory. |
|
+ |
|
+ In the same way four executable versions of each sample program are built, |
|
+ each using its respective library. The resulting sample executables are |
|
+ located in its own subdirectory, dll-debug, dll-release, lib-debug and |
|
+ lib-release, below the 'vc\acountry', 'vc\adig' and 'vc\ahost'folders. |
|
+ |
|
+ These reference VC++ 6.0 configurations are generated using the dynamic CRT. |
|
+ |
|
+ |
|
+ How to build using Visual Studio 2003 or newer IDE |
|
+ -------------------------------------------------- |
|
+ |
|
+ First you have to convert the VC++ 6.0 reference workspace and project files |
|
+ to the Visual Studio IDE version you are using, following next steps: |
|
+ |
|
+ 1) Open vc\vc6aws.dsw with VS20XX. |
|
+ 2) Allow VS20XX to update all projects and workspaces. |
|
+ 3) Save ALL and close VS20XX. |
|
+ 4) Open vc\vc6aws.sln with VS20XX. |
|
+ 5) Select batch build, check 'all' projects and click 'build' button. |
|
+ |
|
+ Same comments relative to generated files and folders as done above for |
|
+ Visual Studio 6 IDE apply here. |
|
+ |
|
+ |
|
+ Relationship between c-ares library file names and versions |
|
+ ----------------------------------------------------------- |
|
+ |
|
+ c-ares static release library version files: |
|
+ |
|
+ libcares.lib -> static release library |
|
+ |
|
+ c-ares static debug library version files: |
|
+ |
|
+ libcaresd.lib -> static debug library |
|
+ |
|
+ c-ares dynamic release library version files: |
|
+ |
|
+ cares.dll -> dynamic release library |
|
+ cares.lib -> import library for the dynamic release library |
|
+ cares.exp -> export file for the dynamic release library |
|
+ |
|
+ c-ares dynamic debug library version files: |
|
+ |
|
+ caresd.dll -> dynamic debug library |
|
+ caresd.lib -> import library for the dynamic debug library |
|
+ caresd.exp -> export file for the dynamic debug library |
|
+ caresd.pdb -> debug symbol file for the dynamic debug library |
|
+ |
|
+ |
|
+ How to use c-ares static libraries |
|
+ ---------------------------------- |
|
+ |
|
+ When using the c-ares static library in your program, you will have to |
|
+ define preprocessor symbol CARES_STATICLIB while building your program, |
|
+ otherwise you will get errors at linkage stage. |
|
+ |
|
+ |
|
+Have Fun! |
|
+ |
|
diff --git a/deps/libuv/src/ares/README.node b/deps/libuv/src/ares/README.node |
|
new file mode 100644 |
|
index 0000000..1750309 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/README.node |
|
@@ -0,0 +1,21 @@ |
|
+Library: c-ares, DNS resolver |
|
+ |
|
+Version: 1.7.3 (11 June, 2010) |
|
+ |
|
+Authors: Greg Hudson, Daniel Stenberg |
|
+ |
|
+License: MIT |
|
+ |
|
+Notes: |
|
+ |
|
+Just use waf instead of the autoconf based configure script. Delete most of |
|
+the documentation and other files distributed with it. To upgrade, run |
|
+./configure on linux, macintosh, solaris (and other supported platforms) and |
|
+copy |
|
+- ares_config.h |
|
+- ares_setup.h |
|
+- ares_build.h |
|
+into the appropriate directory. |
|
+ |
|
+ |
|
+ |
|
diff --git a/deps/libuv/src/ares/RELEASE-NOTES b/deps/libuv/src/ares/RELEASE-NOTES |
|
new file mode 100644 |
|
index 0000000..06d7856 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/RELEASE-NOTES |
|
@@ -0,0 +1,26 @@ |
|
+c-ares version 1.7.5 |
|
+ |
|
+Fixed: |
|
+ |
|
+ o detection of semicolon comments in resolv.conf |
|
+ o avoid using system's inet_net_pton affected by the WLB-2008080064 advisory |
|
+ o replacement ares_inet_net_pton affected by the WLB-2008080064 advisory |
|
+ o replacement ares_inet_ntop affected by potential out of bounds write |
|
+ o added install target to Makefile.msvc |
|
+ o only fall back to AF_INET searches when looking for AF_UNSPEC addresses |
|
+ o fixed ares_parse_*_reply memory leaks |
|
+ o Use correct sizeof in ares_getnameinfo() |
|
+ o IPv6-on-windows: find DNS servers correctly |
|
+ o man pages: docs for the c-ares utility programs |
|
+ o getservbyport replacement for Win CE |
|
+ o config_sortlist: (win32) missing else |
|
+ o advance_tcp_send_queue: avoid NULL ptr dereference |
|
+ o configure: fix a bashism |
|
+ o ares_expand_name: Fix encoded length for indirect root |
|
+ |
|
+Thanks go to these friendly people for their efforts and contributions: |
|
+ |
|
+ Yang Tse, Jakub Hrozek, Gisle Vanem, Tom Hughes, David Stuart, Dima Tisnek, |
|
+ Peter Pentchev, Stefan Buhler |
|
+ |
|
+Have fun! |
|
diff --git a/deps/libuv/src/ares/TODO b/deps/libuv/src/ares/TODO |
|
new file mode 100644 |
|
index 0000000..fa31cea |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/TODO |
|
@@ -0,0 +1,23 @@ |
|
+TODO |
|
+==== |
|
+ |
|
+ares_reinit() |
|
+ |
|
+- To allow an app to force a re-read of /etc/resolv.conf etc, pretty much |
|
+ like the res_init() resolver function offers |
|
+ |
|
+ares_gethostbyname |
|
+ |
|
+- When built to support IPv6, it needs to also support PF_UNSPEC or similar, |
|
+ so that an application can ask for any protocol and then c-ares would return |
|
+ all known resolves and not just explicitly IPv4 _or_ IPv6 resolves. |
|
+ |
|
+ares_process |
|
+ |
|
+- Upon next ABI breakage ares_process() should be changed to return 'int' |
|
+ and return ARES_ENOTINITIALIZED if ares_library_init() has not been called. |
|
+ |
|
+ares_process_fd |
|
+ |
|
+- Upon next ABI breakage ares_process_fd() should be changed to return |
|
+ 'int' and return ARES_ENOTINITIALIZED if library has not been initialized. |
|
diff --git a/deps/libuv/src/ares/ares__close_sockets.c b/deps/libuv/src/ares/ares__close_sockets.c |
|
new file mode 100644 |
|
index 0000000..5d391a9 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares__close_sockets.c |
|
@@ -0,0 +1,66 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#include <stdlib.h> |
|
+#ifdef HAVE_UNISTD_H |
|
+#include <unistd.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+void ares__close_sockets(ares_channel channel, struct server_state *server) |
|
+{ |
|
+ struct send_request *sendreq; |
|
+ |
|
+ /* Free all pending output buffers. */ |
|
+ while (server->qhead) |
|
+ { |
|
+ /* Advance server->qhead; pull out query as we go. */ |
|
+ sendreq = server->qhead; |
|
+ server->qhead = sendreq->next; |
|
+ if (sendreq->data_storage != NULL) |
|
+ free(sendreq->data_storage); |
|
+ free(sendreq); |
|
+ } |
|
+ server->qtail = NULL; |
|
+ |
|
+ /* Reset any existing input buffer. */ |
|
+ if (server->tcp_buffer) |
|
+ free(server->tcp_buffer); |
|
+ server->tcp_buffer = NULL; |
|
+ server->tcp_lenbuf_pos = 0; |
|
+ |
|
+ /* Reset brokenness */ |
|
+ server->is_broken = 0; |
|
+ |
|
+ /* Close the TCP and UDP sockets. */ |
|
+ if (server->tcp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0); |
|
+ sclose(server->tcp_socket); |
|
+ server->tcp_socket = ARES_SOCKET_BAD; |
|
+ server->tcp_connection_generation = ++channel->tcp_connection_generation; |
|
+ } |
|
+ if (server->udp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0); |
|
+ sclose(server->udp_socket); |
|
+ server->udp_socket = ARES_SOCKET_BAD; |
|
+ } |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares__get_hostent.c b/deps/libuv/src/ares/ares__get_hostent.c |
|
new file mode 100644 |
|
index 0000000..298df09 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares__get_hostent.c |
|
@@ -0,0 +1,263 @@ |
|
+ |
|
+/* Copyright 1998, 2010 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "inet_net_pton.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares__get_hostent(FILE *fp, int family, struct hostent **host) |
|
+{ |
|
+ char *line = NULL, *p, *q, **alias; |
|
+ char *txtaddr, *txthost, *txtalias; |
|
+ int status; |
|
+ size_t addrlen, linesize, naliases; |
|
+ struct ares_addr addr; |
|
+ struct hostent *hostent = NULL; |
|
+ |
|
+ *host = NULL; /* Assume failure */ |
|
+ |
|
+ /* Validate family */ |
|
+ switch (family) { |
|
+ case AF_INET: |
|
+ case AF_INET6: |
|
+ case AF_UNSPEC: |
|
+ break; |
|
+ default: |
|
+ return ARES_EBADFAMILY; |
|
+ } |
|
+ |
|
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) |
|
+ { |
|
+ |
|
+ /* Trim line comment. */ |
|
+ p = line; |
|
+ while (*p && (*p != '#')) |
|
+ p++; |
|
+ *p = '\0'; |
|
+ |
|
+ /* Trim trailing whitespace. */ |
|
+ q = p - 1; |
|
+ while ((q >= line) && ISSPACE(*q)) |
|
+ q--; |
|
+ *++q = '\0'; |
|
+ |
|
+ /* Skip leading whitespace. */ |
|
+ p = line; |
|
+ while (*p && ISSPACE(*p)) |
|
+ p++; |
|
+ if (!*p) |
|
+ /* Ignore line if empty. */ |
|
+ continue; |
|
+ |
|
+ /* Pointer to start of IPv4 or IPv6 address part. */ |
|
+ txtaddr = p; |
|
+ |
|
+ /* Advance past address part. */ |
|
+ while (*p && !ISSPACE(*p)) |
|
+ p++; |
|
+ if (!*p) |
|
+ /* Ignore line if reached end of line. */ |
|
+ continue; |
|
+ |
|
+ /* Null terminate address part. */ |
|
+ *p = '\0'; |
|
+ |
|
+ /* Advance to host name */ |
|
+ p++; |
|
+ while (*p && ISSPACE(*p)) |
|
+ p++; |
|
+ if (!*p) |
|
+ /* Ignore line if reached end of line. */ |
|
+ continue; |
|
+ |
|
+ /* Pointer to start of host name. */ |
|
+ txthost = p; |
|
+ |
|
+ /* Advance past host name. */ |
|
+ while (*p && !ISSPACE(*p)) |
|
+ p++; |
|
+ |
|
+ /* Pointer to start of first alias. */ |
|
+ txtalias = NULL; |
|
+ if (*p) |
|
+ { |
|
+ q = p + 1; |
|
+ while (*q && ISSPACE(*q)) |
|
+ q++; |
|
+ if (*q) |
|
+ txtalias = q; |
|
+ } |
|
+ |
|
+ /* Null terminate host name. */ |
|
+ *p = '\0'; |
|
+ |
|
+ /* find out number of aliases. */ |
|
+ naliases = 0; |
|
+ if (txtalias) |
|
+ { |
|
+ p = txtalias; |
|
+ while (*p) |
|
+ { |
|
+ while (*p && !ISSPACE(*p)) |
|
+ p++; |
|
+ while (*p && ISSPACE(*p)) |
|
+ p++; |
|
+ naliases++; |
|
+ } |
|
+ } |
|
+ |
|
+ /* Convert address string to network address for the requested family. */ |
|
+ addrlen = 0; |
|
+ addr.family = AF_UNSPEC; |
|
+ addr.addrV4.s_addr = INADDR_NONE; |
|
+ if ((family == AF_INET) || (family == AF_UNSPEC)) |
|
+ { |
|
+ addr.addrV4.s_addr = inet_addr(txtaddr); |
|
+ if (addr.addrV4.s_addr != INADDR_NONE) |
|
+ { |
|
+ /* Actual network address family and length. */ |
|
+ addr.family = AF_INET; |
|
+ addrlen = sizeof(addr.addrV4); |
|
+ } |
|
+ } |
|
+ if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen))) |
|
+ { |
|
+ if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0) |
|
+ { |
|
+ /* Actual network address family and length. */ |
|
+ addr.family = AF_INET6; |
|
+ addrlen = sizeof(addr.addrV6); |
|
+ } |
|
+ } |
|
+ if (!addrlen) |
|
+ /* Ignore line if invalid address string for the requested family. */ |
|
+ continue; |
|
+ |
|
+ /* |
|
+ ** Actual address family possible values are AF_INET and AF_INET6 only. |
|
+ */ |
|
+ |
|
+ /* Allocate memory for the hostent structure. */ |
|
+ hostent = malloc(sizeof(struct hostent)); |
|
+ if (!hostent) |
|
+ break; |
|
+ |
|
+ /* Initialize fields for out of memory condition. */ |
|
+ hostent->h_aliases = NULL; |
|
+ hostent->h_addr_list = NULL; |
|
+ |
|
+ /* Copy official host name. */ |
|
+ hostent->h_name = strdup(txthost); |
|
+ if (!hostent->h_name) |
|
+ break; |
|
+ |
|
+ /* Copy network address. */ |
|
+ hostent->h_addr_list = malloc(2 * sizeof(char *)); |
|
+ if (!hostent->h_addr_list) |
|
+ break; |
|
+ hostent->h_addr_list[1] = NULL; |
|
+ hostent->h_addr_list[0] = malloc(addrlen); |
|
+ if (!hostent->h_addr_list[0]) |
|
+ break; |
|
+ if (addr.family == AF_INET) |
|
+ memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4)); |
|
+ else |
|
+ memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6)); |
|
+ |
|
+ /* Copy aliases. */ |
|
+ hostent->h_aliases = malloc((naliases + 1) * sizeof(char *)); |
|
+ if (!hostent->h_aliases) |
|
+ break; |
|
+ alias = hostent->h_aliases; |
|
+ while (naliases) |
|
+ *(alias + naliases--) = NULL; |
|
+ *alias = NULL; |
|
+ while (txtalias) |
|
+ { |
|
+ p = txtalias; |
|
+ while (*p && !ISSPACE(*p)) |
|
+ p++; |
|
+ q = p; |
|
+ while (*q && ISSPACE(*q)) |
|
+ q++; |
|
+ *p = '\0'; |
|
+ if ((*alias = strdup(txtalias)) == NULL) |
|
+ break; |
|
+ alias++; |
|
+ txtalias = *q ? q : NULL; |
|
+ } |
|
+ if (txtalias) |
|
+ /* Alias memory allocation failure. */ |
|
+ break; |
|
+ |
|
+ /* Copy actual network address family and length. */ |
|
+ hostent->h_addrtype = addr.family; |
|
+ hostent->h_length = (int)addrlen; |
|
+ |
|
+ /* Free line buffer. */ |
|
+ free(line); |
|
+ |
|
+ /* Return hostent successfully */ |
|
+ *host = hostent; |
|
+ return ARES_SUCCESS; |
|
+ |
|
+ } |
|
+ |
|
+ /* If allocated, free line buffer. */ |
|
+ if (line) |
|
+ free(line); |
|
+ |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ /* Memory allocation failure; clean up. */ |
|
+ if (hostent) |
|
+ { |
|
+ if (hostent->h_name) |
|
+ free((char *) hostent->h_name); |
|
+ if (hostent->h_aliases) |
|
+ { |
|
+ for (alias = hostent->h_aliases; *alias; alias++) |
|
+ free(*alias); |
|
+ free(hostent->h_aliases); |
|
+ } |
|
+ if (hostent->h_addr_list) |
|
+ { |
|
+ if (hostent->h_addr_list[0]) |
|
+ free(hostent->h_addr_list[0]); |
|
+ free(hostent->h_addr_list); |
|
+ } |
|
+ free(hostent); |
|
+ } |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares__read_line.c b/deps/libuv/src/ares/ares__read_line.c |
|
new file mode 100644 |
|
index 0000000..ca01803 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares__read_line.c |
|
@@ -0,0 +1,71 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_nowarn.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* This is an internal function. Its contract is to read a line from |
|
+ * a file into a dynamically allocated buffer, zeroing the trailing |
|
+ * newline if there is one. The calling routine may call |
|
+ * ares__read_line multiple times with the same buf and bufsize |
|
+ * pointers; *buf will be reallocated and *bufsize adjusted as |
|
+ * appropriate. The initial value of *buf should be NULL. After the |
|
+ * calling routine is done reading lines, it should free *buf. |
|
+ */ |
|
+int ares__read_line(FILE *fp, char **buf, size_t *bufsize) |
|
+{ |
|
+ char *newbuf; |
|
+ size_t offset = 0; |
|
+ size_t len; |
|
+ |
|
+ if (*buf == NULL) |
|
+ { |
|
+ *buf = malloc(128); |
|
+ if (!*buf) |
|
+ return ARES_ENOMEM; |
|
+ *bufsize = 128; |
|
+ } |
|
+ |
|
+ for (;;) |
|
+ { |
|
+ int bytestoread = aresx_uztosi(*bufsize - offset); |
|
+ |
|
+ if (!fgets(*buf + offset, bytestoread, fp)) |
|
+ return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; |
|
+ len = offset + strlen(*buf + offset); |
|
+ if ((*buf)[len - 1] == '\n') |
|
+ { |
|
+ (*buf)[len - 1] = 0; |
|
+ break; |
|
+ } |
|
+ offset = len; |
|
+ if(len < *bufsize - 1) |
|
+ continue; |
|
+ |
|
+ /* Allocate more space. */ |
|
+ newbuf = realloc(*buf, *bufsize * 2); |
|
+ if (!newbuf) |
|
+ return ARES_ENOMEM; |
|
+ *buf = newbuf; |
|
+ *bufsize *= 2; |
|
+ } |
|
+ return ARES_SUCCESS; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares__timeval.c b/deps/libuv/src/ares/ares__timeval.c |
|
new file mode 100644 |
|
index 0000000..f7aa788 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares__timeval.c |
|
@@ -0,0 +1,111 @@ |
|
+ |
|
+/* Copyright (C) 2008 by Daniel Stenberg et al |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this software and its |
|
+ * documentation for any purpose and without fee is hereby granted, provided |
|
+ * that the above copyright notice appear in all copies and that both that |
|
+ * copyright notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in advertising or |
|
+ * publicity pertaining to distribution of the software without specific, |
|
+ * written prior permission. M.I.T. makes no representations about the |
|
+ * suitability of this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+#if defined(WIN32) && !defined(MSDOS) |
|
+ |
|
+struct timeval ares__tvnow(void) |
|
+{ |
|
+ /* |
|
+ ** GetTickCount() is available on _all_ Windows versions from W95 up |
|
+ ** to nowadays. Returns milliseconds elapsed since last system boot, |
|
+ ** increases monotonically and wraps once 49.7 days have elapsed. |
|
+ */ |
|
+ struct timeval now; |
|
+ DWORD milliseconds = GetTickCount(); |
|
+ now.tv_sec = milliseconds / 1000; |
|
+ now.tv_usec = (milliseconds % 1000) * 1000; |
|
+ return now; |
|
+} |
|
+ |
|
+#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) |
|
+ |
|
+struct timeval ares__tvnow(void) |
|
+{ |
|
+ /* |
|
+ ** clock_gettime() is granted to be increased monotonically when the |
|
+ ** monotonic clock is queried. Time starting point is unspecified, it |
|
+ ** could be the system start-up time, the Epoch, or something else, |
|
+ ** in any case the time starting point does not change once that the |
|
+ ** system has started up. |
|
+ */ |
|
+ struct timeval now; |
|
+ struct timespec tsnow; |
|
+ if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) { |
|
+ now.tv_sec = tsnow.tv_sec; |
|
+ now.tv_usec = tsnow.tv_nsec / 1000; |
|
+ } |
|
+ /* |
|
+ ** Even when the configure process has truly detected monotonic clock |
|
+ ** availability, it might happen that it is not actually available at |
|
+ ** run-time. When this occurs simply fallback to other time source. |
|
+ */ |
|
+#ifdef HAVE_GETTIMEOFDAY |
|
+ else |
|
+ (void)gettimeofday(&now, NULL); |
|
+#else |
|
+ else { |
|
+ now.tv_sec = (long)time(NULL); |
|
+ now.tv_usec = 0; |
|
+ } |
|
+#endif |
|
+ return now; |
|
+} |
|
+ |
|
+#elif defined(HAVE_GETTIMEOFDAY) |
|
+ |
|
+struct timeval ares__tvnow(void) |
|
+{ |
|
+ /* |
|
+ ** gettimeofday() is not granted to be increased monotonically, due to |
|
+ ** clock drifting and external source time synchronization it can jump |
|
+ ** forward or backward in time. |
|
+ */ |
|
+ struct timeval now; |
|
+ (void)gettimeofday(&now, NULL); |
|
+ return now; |
|
+} |
|
+ |
|
+#else |
|
+ |
|
+struct timeval ares__tvnow(void) |
|
+{ |
|
+ /* |
|
+ ** time() returns the value of time in seconds since the Epoch. |
|
+ */ |
|
+ struct timeval now; |
|
+ now.tv_sec = (long)time(NULL); |
|
+ now.tv_usec = 0; |
|
+ return now; |
|
+} |
|
+ |
|
+#endif |
|
+ |
|
+#if 0 /* Not used */ |
|
+/* |
|
+ * Make sure that the first argument is the more recent time, as otherwise |
|
+ * we'll get a weird negative time-diff back... |
|
+ * |
|
+ * Returns: the time difference in number of milliseconds. |
|
+ */ |
|
+long ares__tvdiff(struct timeval newer, struct timeval older) |
|
+{ |
|
+ return (newer.tv_sec-older.tv_sec)*1000+ |
|
+ (newer.tv_usec-older.tv_usec)/1000; |
|
+} |
|
+#endif |
|
+ |
|
diff --git a/deps/libuv/src/ares/ares_cancel.c b/deps/libuv/src/ares/ares_cancel.c |
|
new file mode 100644 |
|
index 0000000..eb790ae |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_cancel.c |
|
@@ -0,0 +1,63 @@ |
|
+ |
|
+/* Copyright (C) 2004 by Daniel Stenberg et al |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this software and its |
|
+ * documentation for any purpose and without fee is hereby granted, provided |
|
+ * that the above copyright notice appear in all copies and that both that |
|
+ * copyright notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in advertising or |
|
+ * publicity pertaining to distribution of the software without specific, |
|
+ * written prior permission. M.I.T. makes no representations about the |
|
+ * suitability of this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include <assert.h> |
|
+#include <stdlib.h> |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* |
|
+ * ares_cancel() cancels all ongoing requests/resolves that might be going on |
|
+ * on the given channel. It does NOT kill the channel, use ares_destroy() for |
|
+ * that. |
|
+ */ |
|
+void ares_cancel(ares_channel channel) |
|
+{ |
|
+ struct query *query; |
|
+ struct list_node* list_head; |
|
+ struct list_node* list_node; |
|
+ int i; |
|
+ |
|
+ list_head = &(channel->all_queries); |
|
+ for (list_node = list_head->next; list_node != list_head; ) |
|
+ { |
|
+ query = list_node->data; |
|
+ list_node = list_node->next; /* since we're deleting the query */ |
|
+ query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0); |
|
+ ares__free_query(query); |
|
+ } |
|
+#ifndef NDEBUG |
|
+ /* Freeing the query should remove it from all the lists in which it sits, |
|
+ * so all query lists should be empty now. |
|
+ */ |
|
+ assert(ares__is_list_empty(&(channel->all_queries))); |
|
+ for (i = 0; i < ARES_QID_TABLE_SIZE; i++) |
|
+ { |
|
+ assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); |
|
+ } |
|
+ for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) |
|
+ { |
|
+ assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); |
|
+ } |
|
+#endif |
|
+ if (!(channel->flags & ARES_FLAG_STAYOPEN)) |
|
+ { |
|
+ if (channel->servers) |
|
+ { |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ ares__close_sockets(channel, &channel->servers[i]); |
|
+ } |
|
+ } |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_data.c b/deps/libuv/src/ares/ares_data.c |
|
new file mode 100644 |
|
index 0000000..a2477be |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_data.c |
|
@@ -0,0 +1,190 @@ |
|
+ |
|
+/* Copyright (C) 2009-2010 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#include <stddef.h> |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_data.h" |
|
+#include "ares_private.h" |
|
+ |
|
+ |
|
+/* |
|
+** ares_free_data() - c-ares external API function. |
|
+** |
|
+** This function must be used by the application to free data memory that |
|
+** has been internally allocated by some c-ares function and for which a |
|
+** pointer has already been returned to the calling application. The list |
|
+** of c-ares functions returning pointers that must be free'ed using this |
|
+** function is: |
|
+** |
|
+** ares_get_servers() |
|
+** ares_parse_srv_reply() |
|
+** ares_parse_txt_reply() |
|
+*/ |
|
+ |
|
+void ares_free_data(void *dataptr) |
|
+{ |
|
+ struct ares_data *ptr; |
|
+ |
|
+ if (!dataptr) |
|
+ return; |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:1684) |
|
+ /* 1684: conversion from pointer to same-sized integral type */ |
|
+#endif |
|
+ |
|
+ ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+ |
|
+ if (ptr->mark != ARES_DATATYPE_MARK) |
|
+ return; |
|
+ |
|
+ switch (ptr->type) |
|
+ { |
|
+ case ARES_DATATYPE_MX_REPLY: |
|
+ |
|
+ if (ptr->data.mx_reply.next) |
|
+ ares_free_data(ptr->data.mx_reply.next); |
|
+ if (ptr->data.mx_reply.host) |
|
+ free(ptr->data.mx_reply.host); |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_SRV_REPLY: |
|
+ |
|
+ if (ptr->data.srv_reply.next) |
|
+ ares_free_data(ptr->data.srv_reply.next); |
|
+ if (ptr->data.srv_reply.host) |
|
+ free(ptr->data.srv_reply.host); |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_TXT_REPLY: |
|
+ |
|
+ if (ptr->data.txt_reply.next) |
|
+ ares_free_data(ptr->data.txt_reply.next); |
|
+ if (ptr->data.txt_reply.txt) |
|
+ free(ptr->data.txt_reply.txt); |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_ADDR_NODE: |
|
+ |
|
+ if (ptr->data.addr_node.next) |
|
+ ares_free_data(ptr->data.addr_node.next); |
|
+ break; |
|
+ |
|
+ default: |
|
+ return; |
|
+ } |
|
+ |
|
+ free(ptr); |
|
+} |
|
+ |
|
+ |
|
+/* |
|
+** ares_malloc_data() - c-ares internal helper function. |
|
+** |
|
+** This function allocates memory for a c-ares private ares_data struct |
|
+** for the specified ares_datatype, initializes c-ares private fields |
|
+** and zero initializes those which later might be used from the public |
|
+** API. It returns an interior pointer which can be passed by c-ares |
|
+** functions to the calling application, and that must be free'ed using |
|
+** c-ares external API function ares_free_data(). |
|
+*/ |
|
+ |
|
+void *ares_malloc_data(ares_datatype type) |
|
+{ |
|
+ struct ares_data *ptr; |
|
+ |
|
+ ptr = malloc(sizeof(struct ares_data)); |
|
+ if (!ptr) |
|
+ return NULL; |
|
+ |
|
+ switch (type) |
|
+ { |
|
+ case ARES_DATATYPE_MX_REPLY: |
|
+ ptr->data.mx_reply.next = NULL; |
|
+ ptr->data.mx_reply.host = NULL; |
|
+ ptr->data.mx_reply.priority = 0; |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_SRV_REPLY: |
|
+ ptr->data.srv_reply.next = NULL; |
|
+ ptr->data.srv_reply.host = NULL; |
|
+ ptr->data.srv_reply.priority = 0; |
|
+ ptr->data.srv_reply.weight = 0; |
|
+ ptr->data.srv_reply.port = 0; |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_TXT_REPLY: |
|
+ ptr->data.txt_reply.next = NULL; |
|
+ ptr->data.txt_reply.txt = NULL; |
|
+ ptr->data.txt_reply.length = 0; |
|
+ break; |
|
+ |
|
+ case ARES_DATATYPE_ADDR_NODE: |
|
+ ptr->data.addr_node.next = NULL; |
|
+ ptr->data.addr_node.family = 0; |
|
+ memset(&ptr->data.addr_node.addrV6, 0, |
|
+ sizeof(ptr->data.addr_node.addrV6)); |
|
+ break; |
|
+ |
|
+ default: |
|
+ free(ptr); |
|
+ return NULL; |
|
+ } |
|
+ |
|
+ ptr->mark = ARES_DATATYPE_MARK; |
|
+ ptr->type = type; |
|
+ |
|
+ return &ptr->data; |
|
+} |
|
+ |
|
+ |
|
+/* |
|
+** ares_get_datatype() - c-ares internal helper function. |
|
+** |
|
+** This function returns the ares_datatype of the data stored in a |
|
+** private ares_data struct when given the public API pointer. |
|
+*/ |
|
+ |
|
+ares_datatype ares_get_datatype(void * dataptr) |
|
+{ |
|
+ struct ares_data *ptr; |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:1684) |
|
+ /* 1684: conversion from pointer to same-sized integral type */ |
|
+#endif |
|
+ |
|
+ ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+ |
|
+ if (ptr->mark == ARES_DATATYPE_MARK) |
|
+ return ptr->type; |
|
+ |
|
+ return ARES_DATATYPE_UNKNOWN; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_data.h b/deps/libuv/src/ares/ares_data.h |
|
new file mode 100644 |
|
index 0000000..de1608b |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_data.h |
|
@@ -0,0 +1,65 @@ |
|
+ |
|
+/* Copyright (C) 2009-2010 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+typedef enum { |
|
+ ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ |
|
+ ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ |
|
+ ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ |
|
+ ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ |
|
+ ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ |
|
+#if 0 |
|
+ ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ |
|
+ ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ |
|
+ ARES_DATATYPE_HOSTENT, /* struct hostent */ |
|
+ ARES_DATATYPE_OPTIONS, /* struct ares_options */ |
|
+#endif |
|
+ ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ |
|
+} ares_datatype; |
|
+ |
|
+#define ARES_DATATYPE_MARK 0xbead |
|
+ |
|
+/* |
|
+ * ares_data struct definition is internal to c-ares and shall not |
|
+ * be exposed by the public API in order to allow future changes |
|
+ * and extensions to it without breaking ABI. This will be used |
|
+ * internally by c-ares as the container of multiple types of data |
|
+ * dynamically allocated for which a reference will be returned |
|
+ * to the calling application. |
|
+ * |
|
+ * c-ares API functions returning a pointer to c-ares internally |
|
+ * allocated data will actually be returning an interior pointer |
|
+ * into this ares_data struct. |
|
+ * |
|
+ * All this is 'invisible' to the calling application, the only |
|
+ * requirement is that this kind of data must be free'ed by the |
|
+ * calling application using ares_free_data() with the pointer |
|
+ * it has received from a previous c-ares function call. |
|
+ */ |
|
+ |
|
+struct ares_data { |
|
+ ares_datatype type; /* Actual data type identifier. */ |
|
+ unsigned int mark; /* Private ares_data signature. */ |
|
+ union { |
|
+ struct ares_txt_reply txt_reply; |
|
+ struct ares_srv_reply srv_reply; |
|
+ struct ares_addr_node addr_node; |
|
+ struct ares_mx_reply mx_reply; |
|
+ } data; |
|
+}; |
|
+ |
|
+void *ares_malloc_data(ares_datatype type); |
|
+ |
|
+ares_datatype ares_get_datatype(void * dataptr); |
|
diff --git a/deps/libuv/src/ares/ares_destroy.c b/deps/libuv/src/ares/ares_destroy.c |
|
new file mode 100644 |
|
index 0000000..5e274da |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_destroy.c |
|
@@ -0,0 +1,105 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2004-2010 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include <assert.h> |
|
+#include <stdlib.h> |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+void ares_destroy_options(struct ares_options *options) |
|
+{ |
|
+ int i; |
|
+ |
|
+ if(options->servers) |
|
+ free(options->servers); |
|
+ for (i = 0; i < options->ndomains; i++) |
|
+ free(options->domains[i]); |
|
+ free(options->domains); |
|
+ if(options->sortlist) |
|
+ free(options->sortlist); |
|
+ free(options->lookups); |
|
+} |
|
+ |
|
+void ares_destroy(ares_channel channel) |
|
+{ |
|
+ int i; |
|
+ struct query *query; |
|
+ struct list_node* list_head; |
|
+ struct list_node* list_node; |
|
+ |
|
+ if (!channel) |
|
+ return; |
|
+ |
|
+ list_head = &(channel->all_queries); |
|
+ for (list_node = list_head->next; list_node != list_head; ) |
|
+ { |
|
+ query = list_node->data; |
|
+ list_node = list_node->next; /* since we're deleting the query */ |
|
+ query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0); |
|
+ ares__free_query(query); |
|
+ } |
|
+#ifndef NDEBUG |
|
+ /* Freeing the query should remove it from all the lists in which it sits, |
|
+ * so all query lists should be empty now. |
|
+ */ |
|
+ assert(ares__is_list_empty(&(channel->all_queries))); |
|
+ for (i = 0; i < ARES_QID_TABLE_SIZE; i++) |
|
+ { |
|
+ assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); |
|
+ } |
|
+ for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) |
|
+ { |
|
+ assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); |
|
+ } |
|
+#endif |
|
+ |
|
+ ares__destroy_servers_state(channel); |
|
+ |
|
+ if (channel->domains) { |
|
+ for (i = 0; i < channel->ndomains; i++) |
|
+ free(channel->domains[i]); |
|
+ free(channel->domains); |
|
+ } |
|
+ |
|
+ if(channel->sortlist) |
|
+ free(channel->sortlist); |
|
+ |
|
+ if (channel->lookups) |
|
+ free(channel->lookups); |
|
+ |
|
+ free(channel); |
|
+} |
|
+ |
|
+void ares__destroy_servers_state(ares_channel channel) |
|
+{ |
|
+ struct server_state *server; |
|
+ int i; |
|
+ |
|
+ if (channel->servers) |
|
+ { |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ { |
|
+ server = &channel->servers[i]; |
|
+ ares__close_sockets(channel, server); |
|
+ assert(ares__is_list_empty(&server->queries_to_server)); |
|
+ } |
|
+ free(channel->servers); |
|
+ channel->servers = NULL; |
|
+ } |
|
+ channel->nservers = -1; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_dns.h b/deps/libuv/src/ares/ares_dns.h |
|
new file mode 100644 |
|
index 0000000..6893c02 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_dns.h |
|
@@ -0,0 +1,90 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#ifndef ARES__DNS_H |
|
+#define ARES__DNS_H |
|
+ |
|
+#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1]) |
|
+#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \ |
|
+ ((p)[2] << 8) | (p)[3]) |
|
+ |
|
+#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \ |
|
+ ((p)[1] = (unsigned char)((v) & 0xff))) |
|
+#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \ |
|
+ ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \ |
|
+ ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \ |
|
+ ((p)[3] = (unsigned char)((v) & 0xff))) |
|
+ |
|
+#if 0 |
|
+/* we cannot use this approach on systems where we can't access 16/32 bit |
|
+ data on un-aligned addresses */ |
|
+#define DNS__16BIT(p) ntohs(*(unsigned short*)(p)) |
|
+#define DNS__32BIT(p) ntohl(*(unsigned long*)(p)) |
|
+#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v) |
|
+#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v) |
|
+#endif |
|
+ |
|
+/* Macros for parsing a DNS header */ |
|
+#define DNS_HEADER_QID(h) DNS__16BIT(h) |
|
+#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1) |
|
+#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf) |
|
+#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1) |
|
+#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1) |
|
+#define DNS_HEADER_RD(h) ((h)[2] & 0x1) |
|
+#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1) |
|
+#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7) |
|
+#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf) |
|
+#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4) |
|
+#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6) |
|
+#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8) |
|
+#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10) |
|
+ |
|
+/* Macros for constructing a DNS header */ |
|
+#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v) |
|
+#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7)) |
|
+#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3)) |
|
+#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2)) |
|
+#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1)) |
|
+#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1)) |
|
+#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7)) |
|
+#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4)) |
|
+#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf)) |
|
+#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v) |
|
+#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v) |
|
+#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v) |
|
+#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v) |
|
+ |
|
+/* Macros for parsing the fixed part of a DNS question */ |
|
+#define DNS_QUESTION_TYPE(q) DNS__16BIT(q) |
|
+#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2) |
|
+ |
|
+/* Macros for constructing the fixed part of a DNS question */ |
|
+#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v) |
|
+#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v) |
|
+ |
|
+/* Macros for parsing the fixed part of a DNS resource record */ |
|
+#define DNS_RR_TYPE(r) DNS__16BIT(r) |
|
+#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2) |
|
+#define DNS_RR_TTL(r) DNS__32BIT((r) + 4) |
|
+#define DNS_RR_LEN(r) DNS__16BIT((r) + 8) |
|
+ |
|
+/* Macros for constructing the fixed part of a DNS resource record */ |
|
+#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v) |
|
+#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v) |
|
+#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v) |
|
+#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v) |
|
+ |
|
+#endif /* ARES__DNS_H */ |
|
diff --git a/deps/libuv/src/ares/ares_expand_name.c b/deps/libuv/src/ares/ares_expand_name.c |
|
new file mode 100644 |
|
index 0000000..e3eccd2 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_expand_name.c |
|
@@ -0,0 +1,200 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include "ares.h" |
|
+#include "ares_private.h" /* for the memdebug */ |
|
+ |
|
+static int name_length(const unsigned char *encoded, const unsigned char *abuf, |
|
+ int alen); |
|
+ |
|
+/* Expand an RFC1035-encoded domain name given by encoded. The |
|
+ * containing message is given by abuf and alen. The result given by |
|
+ * *s, which is set to a NUL-terminated allocated buffer. *enclen is |
|
+ * set to the length of the encoded name (not the length of the |
|
+ * expanded name; the goal is to tell the caller how many bytes to |
|
+ * move forward to get past the encoded name). |
|
+ * |
|
+ * In the simple case, an encoded name is a series of labels, each |
|
+ * composed of a one-byte length (limited to values between 0 and 63 |
|
+ * inclusive) followed by the label contents. The name is terminated |
|
+ * by a zero-length label. |
|
+ * |
|
+ * In the more complicated case, a label may be terminated by an |
|
+ * indirection pointer, specified by two bytes with the high bits of |
|
+ * the first byte (corresponding to INDIR_MASK) set to 11. With the |
|
+ * two high bits of the first byte stripped off, the indirection |
|
+ * pointer gives an offset from the beginning of the containing |
|
+ * message with more labels to decode. Indirection can happen an |
|
+ * arbitrary number of times, so we have to detect loops. |
|
+ * |
|
+ * Since the expanded name uses '.' as a label separator, we use |
|
+ * backslashes to escape periods or backslashes in the expanded name. |
|
+ */ |
|
+ |
|
+int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, |
|
+ int alen, char **s, long *enclen) |
|
+{ |
|
+ int len, indir = 0; |
|
+ char *q; |
|
+ const unsigned char *p; |
|
+ union { |
|
+ ssize_t sig; |
|
+ size_t uns; |
|
+ } nlen; |
|
+ |
|
+ nlen.sig = name_length(encoded, abuf, alen); |
|
+ if (nlen.sig < 0) |
|
+ return ARES_EBADNAME; |
|
+ |
|
+ *s = malloc(nlen.uns + 1); |
|
+ if (!*s) |
|
+ return ARES_ENOMEM; |
|
+ q = *s; |
|
+ |
|
+ if (nlen.uns == 0) { |
|
+ /* RFC2181 says this should be ".": the root of the DNS tree. |
|
+ * Since this function strips trailing dots though, it becomes "" |
|
+ */ |
|
+ q[0] = '\0'; |
|
+ |
|
+ /* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but |
|
+ valid) */ |
|
+ if ((*encoded & INDIR_MASK) == INDIR_MASK) |
|
+ *enclen = 2; |
|
+ else |
|
+ *enclen = 1; /* the caller should move one byte to get past this */ |
|
+ |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ |
|
+ /* No error-checking necessary; it was all done by name_length(). */ |
|
+ p = encoded; |
|
+ while (*p) |
|
+ { |
|
+ if ((*p & INDIR_MASK) == INDIR_MASK) |
|
+ { |
|
+ if (!indir) |
|
+ { |
|
+ *enclen = p + 2 - encoded; |
|
+ indir = 1; |
|
+ } |
|
+ p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1)); |
|
+ } |
|
+ else |
|
+ { |
|
+ len = *p; |
|
+ p++; |
|
+ while (len--) |
|
+ { |
|
+ if (*p == '.' || *p == '\\') |
|
+ *q++ = '\\'; |
|
+ *q++ = *p; |
|
+ p++; |
|
+ } |
|
+ *q++ = '.'; |
|
+ } |
|
+ } |
|
+ if (!indir) |
|
+ *enclen = p + 1 - encoded; |
|
+ |
|
+ /* Nuke the trailing period if we wrote one. */ |
|
+ if (q > *s) |
|
+ *(q - 1) = 0; |
|
+ else |
|
+ *q = 0; /* zero terminate */ |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+/* Return the length of the expansion of an encoded domain name, or |
|
+ * -1 if the encoding is invalid. |
|
+ */ |
|
+static int name_length(const unsigned char *encoded, const unsigned char *abuf, |
|
+ int alen) |
|
+{ |
|
+ int n = 0, offset, indir = 0; |
|
+ |
|
+ /* Allow the caller to pass us abuf + alen and have us check for it. */ |
|
+ if (encoded == abuf + alen) |
|
+ return -1; |
|
+ |
|
+ while (*encoded) |
|
+ { |
|
+ if ((*encoded & INDIR_MASK) == INDIR_MASK) |
|
+ { |
|
+ /* Check the offset and go there. */ |
|
+ if (encoded + 1 >= abuf + alen) |
|
+ return -1; |
|
+ offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1); |
|
+ if (offset >= alen) |
|
+ return -1; |
|
+ encoded = abuf + offset; |
|
+ |
|
+ /* If we've seen more indirects than the message length, |
|
+ * then there's a loop. |
|
+ */ |
|
+ if (++indir > alen) |
|
+ return -1; |
|
+ } |
|
+ else |
|
+ { |
|
+ offset = *encoded; |
|
+ if (encoded + offset + 1 >= abuf + alen) |
|
+ return -1; |
|
+ encoded++; |
|
+ while (offset--) |
|
+ { |
|
+ n += (*encoded == '.' || *encoded == '\\') ? 2 : 1; |
|
+ encoded++; |
|
+ } |
|
+ n++; |
|
+ } |
|
+ } |
|
+ |
|
+ /* If there were any labels at all, then the number of dots is one |
|
+ * less than the number of labels, so subtract one. |
|
+ */ |
|
+ return (n) ? n - 1 : n; |
|
+} |
|
+ |
|
+/* Like ares_expand_name but returns EBADRESP in case of invalid input. */ |
|
+int ares__expand_name_for_response(const unsigned char *encoded, |
|
+ const unsigned char *abuf, int alen, |
|
+ char **s, long *enclen) |
|
+{ |
|
+ int status = ares_expand_name(encoded, abuf, alen, s, enclen); |
|
+ if (status == ARES_EBADNAME) |
|
+ status = ARES_EBADRESP; |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_expand_string.c b/deps/libuv/src/ares/ares_expand_string.c |
|
new file mode 100644 |
|
index 0000000..f24cccf |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_expand_string.c |
|
@@ -0,0 +1,75 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+ |
|
+#include <string.h> |
|
+#include <stdlib.h> |
|
+#include "ares.h" |
|
+#include "ares_private.h" /* for the memdebug */ |
|
+ |
|
+/* Simply decodes a length-encoded character string. The first byte of the |
|
+ * input is the length of the string to be returned and the bytes thereafter |
|
+ * are the characters of the string. The returned result will be NULL |
|
+ * terminated. |
|
+ */ |
|
+int ares_expand_string(const unsigned char *encoded, |
|
+ const unsigned char *abuf, |
|
+ int alen, |
|
+ unsigned char **s, |
|
+ long *enclen) |
|
+{ |
|
+ unsigned char *q; |
|
+ union { |
|
+ ssize_t sig; |
|
+ size_t uns; |
|
+ } elen; |
|
+ |
|
+ if (encoded == abuf+alen) |
|
+ return ARES_EBADSTR; |
|
+ |
|
+ elen.uns = *encoded; |
|
+ if (encoded+elen.sig+1 > abuf+alen) |
|
+ return ARES_EBADSTR; |
|
+ |
|
+ encoded++; |
|
+ |
|
+ *s = malloc(elen.uns+1); |
|
+ if (*s == NULL) |
|
+ return ARES_ENOMEM; |
|
+ q = *s; |
|
+ strncpy((char *)q, (char *)encoded, elen.uns); |
|
+ q[elen.uns] = '\0'; |
|
+ |
|
+ *s = q; |
|
+ |
|
+ *enclen = (long)(elen.sig+1); |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
diff --git a/deps/libuv/src/ares/ares_fds.c b/deps/libuv/src/ares/ares_fds.c |
|
new file mode 100644 |
|
index 0000000..ac5eedb |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_fds.c |
|
@@ -0,0 +1,63 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_TIME_H |
|
+#include <sys/time.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_nowarn.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds) |
|
+{ |
|
+ struct server_state *server; |
|
+ ares_socket_t nfds; |
|
+ int i; |
|
+ |
|
+ /* Are there any active queries? */ |
|
+ int active_queries = !ares__is_list_empty(&(channel->all_queries)); |
|
+ |
|
+ nfds = 0; |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ { |
|
+ server = &channel->servers[i]; |
|
+ /* We only need to register interest in UDP sockets if we have |
|
+ * outstanding queries. |
|
+ */ |
|
+ if (active_queries && server->udp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ FD_SET(server->udp_socket, read_fds); |
|
+ if (server->udp_socket >= nfds) |
|
+ nfds = server->udp_socket + 1; |
|
+ } |
|
+ /* We always register for TCP events, because we want to know |
|
+ * when the other side closes the connection, so we don't waste |
|
+ * time trying to use a broken connection. |
|
+ */ |
|
+ if (server->tcp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ FD_SET(server->tcp_socket, read_fds); |
|
+ if (server->qhead) |
|
+ FD_SET(server->tcp_socket, write_fds); |
|
+ if (server->tcp_socket >= nfds) |
|
+ nfds = server->tcp_socket + 1; |
|
+ } |
|
+ } |
|
+ return (int)nfds; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_free_hostent.c b/deps/libuv/src/ares/ares_free_hostent.c |
|
new file mode 100644 |
|
index 0000000..349d379 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_free_hostent.c |
|
@@ -0,0 +1,42 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include <stdlib.h> |
|
+ |
|
+#ifdef HAVE_NETDB_H |
|
+#include <netdb.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_private.h" /* for memdebug */ |
|
+ |
|
+void ares_free_hostent(struct hostent *host) |
|
+{ |
|
+ char **p; |
|
+ |
|
+ if (!host) |
|
+ return; |
|
+ |
|
+ free((char *)(host->h_name)); |
|
+ for (p = host->h_aliases; *p; p++) |
|
+ free(*p); |
|
+ free(host->h_aliases); |
|
+ free(host->h_addr_list[0]); /* no matter if there is one or many entries, |
|
+ there is only one malloc for all of them */ |
|
+ free(host->h_addr_list); |
|
+ free(host); |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_free_string.c b/deps/libuv/src/ares/ares_free_string.c |
|
new file mode 100644 |
|
index 0000000..e0545c1 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_free_string.c |
|
@@ -0,0 +1,25 @@ |
|
+ |
|
+/* Copyright 2000 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include <stdlib.h> |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+void ares_free_string(void *str) |
|
+{ |
|
+ free(str); |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_getenv.c b/deps/libuv/src/ares/ares_getenv.c |
|
new file mode 100644 |
|
index 0000000..1b2e85d |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getenv.c |
|
@@ -0,0 +1,30 @@ |
|
+ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+#include "ares_getenv.h" |
|
+ |
|
+#ifndef HAVE_GETENV |
|
+ |
|
+char *ares_getenv(const char *name) |
|
+{ |
|
+#ifdef _WIN32_WCE |
|
+ return NULL; |
|
+#endif |
|
+} |
|
+ |
|
+#endif |
|
diff --git a/deps/libuv/src/ares/ares_getenv.h b/deps/libuv/src/ares/ares_getenv.h |
|
new file mode 100644 |
|
index 0000000..6da6cc5 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getenv.h |
|
@@ -0,0 +1,26 @@ |
|
+#ifndef HEADER_CARES_GETENV_H |
|
+#define HEADER_CARES_GETENV_H |
|
+ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifndef HAVE_GETENV |
|
+extern char *ares_getenv(const char *name); |
|
+#endif |
|
+ |
|
+#endif /* HEADER_CARES_GETENV_H */ |
|
diff --git a/deps/libuv/src/ares/ares_gethostbyaddr.c b/deps/libuv/src/ares/ares_gethostbyaddr.c |
|
new file mode 100644 |
|
index 0000000..4b4c8a7 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_gethostbyaddr.c |
|
@@ -0,0 +1,301 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+ |
|
+#include "ares.h" |
|
+#include "inet_net_pton.h" |
|
+#include "ares_platform.h" |
|
+#include "ares_private.h" |
|
+ |
|
+#ifdef WATT32 |
|
+#undef WIN32 |
|
+#endif |
|
+ |
|
+struct addr_query { |
|
+ /* Arguments passed to ares_gethostbyaddr() */ |
|
+ ares_channel channel; |
|
+ struct ares_addr addr; |
|
+ ares_host_callback callback; |
|
+ void *arg; |
|
+ |
|
+ const char *remaining_lookups; |
|
+ int timeouts; |
|
+}; |
|
+ |
|
+static void next_lookup(struct addr_query *aquery); |
|
+static void addr_callback(void *arg, int status, int timeouts, |
|
+ unsigned char *abuf, int alen); |
|
+static void end_aquery(struct addr_query *aquery, int status, |
|
+ struct hostent *host); |
|
+static int file_lookup(struct ares_addr *addr, struct hostent **host); |
|
+static void ptr_rr_name(char *name, const struct ares_addr *addr); |
|
+ |
|
+void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, |
|
+ int family, ares_host_callback callback, void *arg) |
|
+{ |
|
+ struct addr_query *aquery; |
|
+ |
|
+ if (family != AF_INET && family != AF_INET6) |
|
+ { |
|
+ callback(arg, ARES_ENOTIMP, 0, NULL); |
|
+ return; |
|
+ } |
|
+ |
|
+ if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) || |
|
+ (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6))) |
|
+ { |
|
+ callback(arg, ARES_ENOTIMP, 0, NULL); |
|
+ return; |
|
+ } |
|
+ |
|
+ aquery = malloc(sizeof(struct addr_query)); |
|
+ if (!aquery) |
|
+ { |
|
+ callback(arg, ARES_ENOMEM, 0, NULL); |
|
+ return; |
|
+ } |
|
+ aquery->channel = channel; |
|
+ if (family == AF_INET) |
|
+ memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4)); |
|
+ else |
|
+ memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6)); |
|
+ aquery->addr.family = family; |
|
+ aquery->callback = callback; |
|
+ aquery->arg = arg; |
|
+ aquery->remaining_lookups = channel->lookups; |
|
+ aquery->timeouts = 0; |
|
+ |
|
+ next_lookup(aquery); |
|
+} |
|
+ |
|
+static void next_lookup(struct addr_query *aquery) |
|
+{ |
|
+ const char *p; |
|
+ char name[128]; |
|
+ int status; |
|
+ struct hostent *host; |
|
+ |
|
+ for (p = aquery->remaining_lookups; *p; p++) |
|
+ { |
|
+ switch (*p) |
|
+ { |
|
+ case 'b': |
|
+ ptr_rr_name(name, &aquery->addr); |
|
+ aquery->remaining_lookups = p + 1; |
|
+ ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, |
|
+ aquery); |
|
+ return; |
|
+ case 'f': |
|
+ status = file_lookup(&aquery->addr, &host); |
|
+ |
|
+ /* this status check below previously checked for !ARES_ENOTFOUND, |
|
+ but we should not assume that this single error code is the one |
|
+ that can occur, as that is in fact no longer the case */ |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ end_aquery(aquery, status, host); |
|
+ return; |
|
+ } |
|
+ break; |
|
+ } |
|
+ } |
|
+ end_aquery(aquery, ARES_ENOTFOUND, NULL); |
|
+} |
|
+ |
|
+static void addr_callback(void *arg, int status, int timeouts, |
|
+ unsigned char *abuf, int alen) |
|
+{ |
|
+ struct addr_query *aquery = (struct addr_query *) arg; |
|
+ struct hostent *host; |
|
+ size_t addrlen; |
|
+ |
|
+ aquery->timeouts += timeouts; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ if (aquery->addr.family == AF_INET) |
|
+ { |
|
+ addrlen = sizeof(aquery->addr.addrV4); |
|
+ status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4, |
|
+ (int)addrlen, AF_INET, &host); |
|
+ } |
|
+ else |
|
+ { |
|
+ addrlen = sizeof(aquery->addr.addrV6); |
|
+ status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6, |
|
+ (int)addrlen, AF_INET6, &host); |
|
+ } |
|
+ end_aquery(aquery, status, host); |
|
+ } |
|
+ else if (status == ARES_EDESTRUCTION) |
|
+ end_aquery(aquery, status, NULL); |
|
+ else |
|
+ next_lookup(aquery); |
|
+} |
|
+ |
|
+static void end_aquery(struct addr_query *aquery, int status, |
|
+ struct hostent *host) |
|
+{ |
|
+ aquery->callback(aquery->arg, status, aquery->timeouts, host); |
|
+ if (host) |
|
+ ares_free_hostent(host); |
|
+ free(aquery); |
|
+} |
|
+ |
|
+static int file_lookup(struct ares_addr *addr, struct hostent **host) |
|
+{ |
|
+ FILE *fp; |
|
+ int status; |
|
+ int error; |
|
+ |
|
+#ifdef WIN32 |
|
+ char PATH_HOSTS[MAX_PATH]; |
|
+ win_platform platform; |
|
+ |
|
+ PATH_HOSTS[0] = '\0'; |
|
+ |
|
+ platform = ares__getplatform(); |
|
+ |
|
+ if (platform == WIN_NT) { |
|
+ char tmp[MAX_PATH]; |
|
+ HKEY hkeyHosts; |
|
+ |
|
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, |
|
+ &hkeyHosts) == ERROR_SUCCESS) |
|
+ { |
|
+ DWORD dwLength = MAX_PATH; |
|
+ RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, |
|
+ &dwLength); |
|
+ ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); |
|
+ RegCloseKey(hkeyHosts); |
|
+ } |
|
+ } |
|
+ else if (platform == WIN_9X) |
|
+ GetWindowsDirectory(PATH_HOSTS, MAX_PATH); |
|
+ else |
|
+ return ARES_ENOTFOUND; |
|
+ |
|
+ strcat(PATH_HOSTS, WIN_PATH_HOSTS); |
|
+ |
|
+#elif defined(WATT32) |
|
+ extern const char *_w32_GetHostsFile (void); |
|
+ const char *PATH_HOSTS = _w32_GetHostsFile(); |
|
+ |
|
+ if (!PATH_HOSTS) |
|
+ return ARES_ENOTFOUND; |
|
+#endif |
|
+ |
|
+ fp = fopen(PATH_HOSTS, "r"); |
|
+ if (!fp) |
|
+ { |
|
+ error = ERRNO; |
|
+ switch(error) |
|
+ { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ return ARES_ENOTFOUND; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", |
|
+ PATH_HOSTS)); |
|
+ *host = NULL; |
|
+ return ARES_EFILE; |
|
+ } |
|
+ } |
|
+ while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS) |
|
+ { |
|
+ if (addr->family != (*host)->h_addrtype) |
|
+ { |
|
+ ares_free_hostent(*host); |
|
+ continue; |
|
+ } |
|
+ if (addr->family == AF_INET) |
|
+ { |
|
+ if (memcmp((*host)->h_addr, &addr->addrV4, |
|
+ sizeof(addr->addrV4)) == 0) |
|
+ break; |
|
+ } |
|
+ else if (addr->family == AF_INET6) |
|
+ { |
|
+ if (memcmp((*host)->h_addr, &addr->addrV6, |
|
+ sizeof(addr->addrV6)) == 0) |
|
+ break; |
|
+ } |
|
+ ares_free_hostent(*host); |
|
+ } |
|
+ fclose(fp); |
|
+ if (status == ARES_EOF) |
|
+ status = ARES_ENOTFOUND; |
|
+ if (status != ARES_SUCCESS) |
|
+ *host = NULL; |
|
+ return status; |
|
+} |
|
+ |
|
+static void ptr_rr_name(char *name, const struct ares_addr *addr) |
|
+{ |
|
+ if (addr->family == AF_INET) |
|
+ { |
|
+ unsigned long laddr = ntohl(addr->addrV4.s_addr); |
|
+ unsigned long a1 = (laddr >> 24UL) & 0xFFUL; |
|
+ unsigned long a2 = (laddr >> 16UL) & 0xFFUL; |
|
+ unsigned long a3 = (laddr >> 8UL) & 0xFFUL; |
|
+ unsigned long a4 = laddr & 0xFFUL; |
|
+ sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1); |
|
+ } |
|
+ else |
|
+ { |
|
+ unsigned char *bytes = (unsigned char *)&addr->addrV6; |
|
+ /* There are too many arguments to do this in one line using |
|
+ * minimally C89-compliant compilers */ |
|
+ sprintf(name, |
|
+ "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.", |
|
+ bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4, |
|
+ bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4, |
|
+ bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4, |
|
+ bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4); |
|
+ sprintf(name+strlen(name), |
|
+ "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa", |
|
+ bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4, |
|
+ bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4, |
|
+ bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4, |
|
+ bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4); |
|
+ } |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_gethostbyname.c b/deps/libuv/src/ares/ares_gethostbyname.c |
|
new file mode 100644 |
|
index 0000000..ad89dc2 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_gethostbyname.c |
|
@@ -0,0 +1,523 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include <ctype.h> |
|
+#ifdef HAVE_STRINGS_H |
|
+#include <strings.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "inet_net_pton.h" |
|
+#include "bitncmp.h" |
|
+#include "ares_platform.h" |
|
+#include "ares_private.h" |
|
+ |
|
+#ifdef WATT32 |
|
+#undef WIN32 |
|
+#endif |
|
+ |
|
+struct host_query { |
|
+ /* Arguments passed to ares_gethostbyname() */ |
|
+ ares_channel channel; |
|
+ char *name; |
|
+ ares_host_callback callback; |
|
+ void *arg; |
|
+ int sent_family; /* this family is what was is being used */ |
|
+ int want_family; /* this family is what is asked for in the API */ |
|
+ const char *remaining_lookups; |
|
+ int timeouts; |
|
+}; |
|
+ |
|
+static void next_lookup(struct host_query *hquery, int status_code); |
|
+static void host_callback(void *arg, int status, int timeouts, |
|
+ unsigned char *abuf, int alen); |
|
+static void end_hquery(struct host_query *hquery, int status, |
|
+ struct hostent *host); |
|
+static int fake_hostent(const char *name, int family, |
|
+ ares_host_callback callback, void *arg); |
|
+static int file_lookup(const char *name, int family, struct hostent **host); |
|
+static void sort_addresses(struct hostent *host, |
|
+ const struct apattern *sortlist, int nsort); |
|
+static void sort6_addresses(struct hostent *host, |
|
+ const struct apattern *sortlist, int nsort); |
|
+static int get_address_index(const struct in_addr *addr, |
|
+ const struct apattern *sortlist, int nsort); |
|
+static int get6_address_index(const struct ares_in6_addr *addr, |
|
+ const struct apattern *sortlist, int nsort); |
|
+ |
|
+void ares_gethostbyname(ares_channel channel, const char *name, int family, |
|
+ ares_host_callback callback, void *arg) |
|
+{ |
|
+ struct host_query *hquery; |
|
+ |
|
+ /* Right now we only know how to look up Internet addresses - and unspec |
|
+ means try both basically. */ |
|
+ switch (family) { |
|
+ case AF_INET: |
|
+ case AF_INET6: |
|
+ case AF_UNSPEC: |
|
+ break; |
|
+ default: |
|
+ callback(arg, ARES_ENOTIMP, 0, NULL); |
|
+ return; |
|
+ } |
|
+ |
|
+ if (fake_hostent(name, family, callback, arg)) |
|
+ return; |
|
+ |
|
+ /* Allocate and fill in the host query structure. */ |
|
+ hquery = malloc(sizeof(struct host_query)); |
|
+ if (!hquery) |
|
+ { |
|
+ callback(arg, ARES_ENOMEM, 0, NULL); |
|
+ return; |
|
+ } |
|
+ hquery->channel = channel; |
|
+ hquery->name = strdup(name); |
|
+ hquery->want_family = family; |
|
+ hquery->sent_family = -1; /* nothing is sent yet */ |
|
+ if (!hquery->name) { |
|
+ free(hquery); |
|
+ callback(arg, ARES_ENOMEM, 0, NULL); |
|
+ return; |
|
+ } |
|
+ hquery->callback = callback; |
|
+ hquery->arg = arg; |
|
+ hquery->remaining_lookups = channel->lookups; |
|
+ hquery->timeouts = 0; |
|
+ |
|
+ /* Start performing lookups according to channel->lookups. */ |
|
+ next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */); |
|
+} |
|
+ |
|
+static void next_lookup(struct host_query *hquery, int status_code) |
|
+{ |
|
+ const char *p; |
|
+ struct hostent *host; |
|
+ int status = status_code; |
|
+ |
|
+ for (p = hquery->remaining_lookups; *p; p++) |
|
+ { |
|
+ switch (*p) |
|
+ { |
|
+ case 'b': |
|
+ /* DNS lookup */ |
|
+ hquery->remaining_lookups = p + 1; |
|
+ if ((hquery->want_family == AF_INET6) || |
|
+ (hquery->want_family == AF_UNSPEC)) { |
|
+ /* if inet6 or unspec, start out with AAAA */ |
|
+ hquery->sent_family = AF_INET6; |
|
+ ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, |
|
+ host_callback, hquery); |
|
+ } |
|
+ else { |
|
+ hquery->sent_family = AF_INET; |
|
+ ares_search(hquery->channel, hquery->name, C_IN, T_A, |
|
+ host_callback, hquery); |
|
+ } |
|
+ return; |
|
+ |
|
+ case 'f': |
|
+ /* Host file lookup */ |
|
+ status = file_lookup(hquery->name, hquery->want_family, &host); |
|
+ |
|
+ /* this status check below previously checked for !ARES_ENOTFOUND, |
|
+ but we should not assume that this single error code is the one |
|
+ that can occur, as that is in fact no longer the case */ |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ end_hquery(hquery, status, host); |
|
+ return; |
|
+ } |
|
+ status = status_code; /* Use original status code */ |
|
+ break; |
|
+ } |
|
+ } |
|
+ end_hquery(hquery, status, NULL); |
|
+} |
|
+ |
|
+static void host_callback(void *arg, int status, int timeouts, |
|
+ unsigned char *abuf, int alen) |
|
+{ |
|
+ struct host_query *hquery = (struct host_query *) arg; |
|
+ ares_channel channel = hquery->channel; |
|
+ struct hostent *host = NULL; |
|
+ |
|
+ hquery->timeouts += timeouts; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ if (hquery->sent_family == AF_INET) |
|
+ { |
|
+ status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL); |
|
+ if (host && channel->nsort) |
|
+ sort_addresses(host, channel->sortlist, channel->nsort); |
|
+ } |
|
+ else if (hquery->sent_family == AF_INET6) |
|
+ { |
|
+ status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL); |
|
+ if ((status == ARES_ENODATA || status == ARES_EBADRESP) && |
|
+ hquery->want_family == AF_UNSPEC) { |
|
+ /* The query returned something but either there were no AAAA |
|
+ records (e.g. just CNAME) or the response was malformed. Try |
|
+ looking up A instead. */ |
|
+ hquery->sent_family = AF_INET; |
|
+ ares_search(hquery->channel, hquery->name, C_IN, T_A, |
|
+ host_callback, hquery); |
|
+ return; |
|
+ } |
|
+ if (host && channel->nsort) |
|
+ sort6_addresses(host, channel->sortlist, channel->nsort); |
|
+ } |
|
+ end_hquery(hquery, status, host); |
|
+ } |
|
+ else if ((status == ARES_ENODATA || status == ARES_EBADRESP || |
|
+ status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 && |
|
+ hquery->want_family == AF_UNSPEC)) |
|
+ { |
|
+ /* The AAAA query yielded no useful result. Now look up an A instead. */ |
|
+ hquery->sent_family = AF_INET; |
|
+ ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, |
|
+ hquery); |
|
+ } |
|
+ else if (status == ARES_EDESTRUCTION) |
|
+ end_hquery(hquery, status, NULL); |
|
+ else |
|
+ next_lookup(hquery, status); |
|
+} |
|
+ |
|
+static void end_hquery(struct host_query *hquery, int status, |
|
+ struct hostent *host) |
|
+{ |
|
+ hquery->callback(hquery->arg, status, hquery->timeouts, host); |
|
+ if (host) |
|
+ ares_free_hostent(host); |
|
+ free(hquery->name); |
|
+ free(hquery); |
|
+} |
|
+ |
|
+/* If the name looks like an IP address, fake up a host entry, end the |
|
+ * query immediately, and return true. Otherwise return false. |
|
+ */ |
|
+static int fake_hostent(const char *name, int family, |
|
+ ares_host_callback callback, void *arg) |
|
+{ |
|
+ struct hostent hostent; |
|
+ char *aliases[1] = { NULL }; |
|
+ char *addrs[2]; |
|
+ int result = 0; |
|
+ struct in_addr in; |
|
+ struct ares_in6_addr in6; |
|
+ |
|
+ if (family == AF_INET || family == AF_INET6) |
|
+ { |
|
+ /* It only looks like an IP address if it's all numbers and dots. */ |
|
+ int numdots = 0, valid = 1; |
|
+ const char *p; |
|
+ for (p = name; *p; p++) |
|
+ { |
|
+ if (!ISDIGIT(*p) && *p != '.') { |
|
+ valid = 0; |
|
+ break; |
|
+ } else if (*p == '.') { |
|
+ numdots++; |
|
+ } |
|
+ } |
|
+ |
|
+ /* if we don't have 3 dots, it is illegal |
|
+ * (although inet_addr doesn't think so). |
|
+ */ |
|
+ if (numdots != 3 || !valid) |
|
+ result = 0; |
|
+ else |
|
+ result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1); |
|
+ |
|
+ if (result) |
|
+ family = AF_INET; |
|
+ } |
|
+ if (family == AF_INET6) |
|
+ result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1); |
|
+ |
|
+ if (!result) |
|
+ return 0; |
|
+ |
|
+ if (family == AF_INET) |
|
+ { |
|
+ hostent.h_length = (int)sizeof(struct in_addr); |
|
+ addrs[0] = (char *)∈ |
|
+ } |
|
+ else if (family == AF_INET6) |
|
+ { |
|
+ hostent.h_length = (int)sizeof(struct ares_in6_addr); |
|
+ addrs[0] = (char *)&in6; |
|
+ } |
|
+ /* Duplicate the name, to avoid a constness violation. */ |
|
+ hostent.h_name = strdup(name); |
|
+ if (!hostent.h_name) |
|
+ { |
|
+ callback(arg, ARES_ENOMEM, 0, NULL); |
|
+ return 1; |
|
+ } |
|
+ |
|
+ /* Fill in the rest of the host structure and terminate the query. */ |
|
+ addrs[1] = NULL; |
|
+ hostent.h_aliases = aliases; |
|
+ hostent.h_addrtype = family; |
|
+ hostent.h_addr_list = addrs; |
|
+ callback(arg, ARES_SUCCESS, 0, &hostent); |
|
+ |
|
+ free((char *)(hostent.h_name)); |
|
+ return 1; |
|
+} |
|
+ |
|
+/* This is an API method */ |
|
+int ares_gethostbyname_file(ares_channel channel, const char *name, |
|
+ int family, struct hostent **host) |
|
+{ |
|
+ int result; |
|
+ |
|
+ /* We only take the channel to ensure that ares_init() been called. */ |
|
+ if(channel == NULL) |
|
+ { |
|
+ /* Anything will do, really. This seems fine, and is consistent with |
|
+ other error cases. */ |
|
+ *host = NULL; |
|
+ return ARES_ENOTFOUND; |
|
+ } |
|
+ |
|
+ /* Just chain to the internal implementation we use here; it's exactly |
|
+ * what we want. |
|
+ */ |
|
+ result = file_lookup(name, family, host); |
|
+ if(result != ARES_SUCCESS) |
|
+ { |
|
+ /* We guarantee a NULL hostent on failure. */ |
|
+ *host = NULL; |
|
+ } |
|
+ return result; |
|
+} |
|
+ |
|
+static int file_lookup(const char *name, int family, struct hostent **host) |
|
+{ |
|
+ FILE *fp; |
|
+ char **alias; |
|
+ int status; |
|
+ int error; |
|
+ |
|
+#ifdef WIN32 |
|
+ char PATH_HOSTS[MAX_PATH]; |
|
+ win_platform platform; |
|
+ |
|
+ PATH_HOSTS[0] = '\0'; |
|
+ |
|
+ platform = ares__getplatform(); |
|
+ |
|
+ if (platform == WIN_NT) { |
|
+ char tmp[MAX_PATH]; |
|
+ HKEY hkeyHosts; |
|
+ |
|
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, |
|
+ &hkeyHosts) == ERROR_SUCCESS) |
|
+ { |
|
+ DWORD dwLength = MAX_PATH; |
|
+ RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, |
|
+ &dwLength); |
|
+ ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); |
|
+ RegCloseKey(hkeyHosts); |
|
+ } |
|
+ } |
|
+ else if (platform == WIN_9X) |
|
+ GetWindowsDirectory(PATH_HOSTS, MAX_PATH); |
|
+ else |
|
+ return ARES_ENOTFOUND; |
|
+ |
|
+ strcat(PATH_HOSTS, WIN_PATH_HOSTS); |
|
+ |
|
+#elif defined(WATT32) |
|
+ extern const char *_w32_GetHostsFile (void); |
|
+ const char *PATH_HOSTS = _w32_GetHostsFile(); |
|
+ |
|
+ if (!PATH_HOSTS) |
|
+ return ARES_ENOTFOUND; |
|
+#endif |
|
+ |
|
+ fp = fopen(PATH_HOSTS, "r"); |
|
+ if (!fp) |
|
+ { |
|
+ error = ERRNO; |
|
+ switch(error) |
|
+ { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ return ARES_ENOTFOUND; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", |
|
+ PATH_HOSTS)); |
|
+ *host = NULL; |
|
+ return ARES_EFILE; |
|
+ } |
|
+ } |
|
+ while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) |
|
+ { |
|
+ if (strcasecmp((*host)->h_name, name) == 0) |
|
+ break; |
|
+ for (alias = (*host)->h_aliases; *alias; alias++) |
|
+ { |
|
+ if (strcasecmp(*alias, name) == 0) |
|
+ break; |
|
+ } |
|
+ if (*alias) |
|
+ break; |
|
+ ares_free_hostent(*host); |
|
+ } |
|
+ fclose(fp); |
|
+ if (status == ARES_EOF) |
|
+ status = ARES_ENOTFOUND; |
|
+ if (status != ARES_SUCCESS) |
|
+ *host = NULL; |
|
+ return status; |
|
+} |
|
+ |
|
+static void sort_addresses(struct hostent *host, |
|
+ const struct apattern *sortlist, int nsort) |
|
+{ |
|
+ struct in_addr a1, a2; |
|
+ int i1, i2, ind1, ind2; |
|
+ |
|
+ /* This is a simple insertion sort, not optimized at all. i1 walks |
|
+ * through the address list, with the loop invariant that everything |
|
+ * to the left of i1 is sorted. In the loop body, the value at i1 is moved |
|
+ * back through the list (via i2) until it is in sorted order. |
|
+ */ |
|
+ for (i1 = 0; host->h_addr_list[i1]; i1++) |
|
+ { |
|
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr)); |
|
+ ind1 = get_address_index(&a1, sortlist, nsort); |
|
+ for (i2 = i1 - 1; i2 >= 0; i2--) |
|
+ { |
|
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr)); |
|
+ ind2 = get_address_index(&a2, sortlist, nsort); |
|
+ if (ind2 <= ind1) |
|
+ break; |
|
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr)); |
|
+ } |
|
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr)); |
|
+ } |
|
+} |
|
+ |
|
+/* Find the first entry in sortlist which matches addr. Return nsort |
|
+ * if none of them match. |
|
+ */ |
|
+static int get_address_index(const struct in_addr *addr, |
|
+ const struct apattern *sortlist, |
|
+ int nsort) |
|
+{ |
|
+ int i; |
|
+ |
|
+ for (i = 0; i < nsort; i++) |
|
+ { |
|
+ if (sortlist[i].family != AF_INET) |
|
+ continue; |
|
+ if (sortlist[i].type == PATTERN_MASK) |
|
+ { |
|
+ if ((addr->s_addr & sortlist[i].mask.addr4.s_addr) |
|
+ == sortlist[i].addrV4.s_addr) |
|
+ break; |
|
+ } |
|
+ else |
|
+ { |
|
+ if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr, |
|
+ sortlist[i].mask.bits)) |
|
+ break; |
|
+ } |
|
+ } |
|
+ return i; |
|
+} |
|
+ |
|
+static void sort6_addresses(struct hostent *host, |
|
+ const struct apattern *sortlist, int nsort) |
|
+{ |
|
+ struct ares_in6_addr a1, a2; |
|
+ int i1, i2, ind1, ind2; |
|
+ |
|
+ /* This is a simple insertion sort, not optimized at all. i1 walks |
|
+ * through the address list, with the loop invariant that everything |
|
+ * to the left of i1 is sorted. In the loop body, the value at i1 is moved |
|
+ * back through the list (via i2) until it is in sorted order. |
|
+ */ |
|
+ for (i1 = 0; host->h_addr_list[i1]; i1++) |
|
+ { |
|
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr)); |
|
+ ind1 = get6_address_index(&a1, sortlist, nsort); |
|
+ for (i2 = i1 - 1; i2 >= 0; i2--) |
|
+ { |
|
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr)); |
|
+ ind2 = get6_address_index(&a2, sortlist, nsort); |
|
+ if (ind2 <= ind1) |
|
+ break; |
|
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr)); |
|
+ } |
|
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr)); |
|
+ } |
|
+} |
|
+ |
|
+/* Find the first entry in sortlist which matches addr. Return nsort |
|
+ * if none of them match. |
|
+ */ |
|
+static int get6_address_index(const struct ares_in6_addr *addr, |
|
+ const struct apattern *sortlist, |
|
+ int nsort) |
|
+{ |
|
+ int i; |
|
+ |
|
+ for (i = 0; i < nsort; i++) |
|
+ { |
|
+ if (sortlist[i].family != AF_INET6) |
|
+ continue; |
|
+ if (!ares_bitncmp(addr, |
|
+ &sortlist[i].addrV6, |
|
+ sortlist[i].mask.bits)) |
|
+ break; |
|
+ } |
|
+ return i; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_getnameinfo.c b/deps/libuv/src/ares/ares_getnameinfo.c |
|
new file mode 100644 |
|
index 0000000..82e261d |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getnameinfo.c |
|
@@ -0,0 +1,427 @@ |
|
+ |
|
+/* Copyright 2005 by Dominick Meglio |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_GETSERVBYPORT_R |
|
+# if !defined(GETSERVBYPORT_R_ARGS) || \ |
|
+ (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6) |
|
+# error "you MUST specifiy a valid number of arguments for getservbyport_r" |
|
+# endif |
|
+#endif |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_NET_IF_H |
|
+#include <net/if.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_UNISTD_H |
|
+#include <unistd.h> |
|
+#endif |
|
+ |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_ipv6.h" |
|
+#include "inet_ntop.h" |
|
+#include "ares_nowarn.h" |
|
+#include "ares_private.h" |
|
+ |
|
+struct nameinfo_query { |
|
+ ares_nameinfo_callback callback; |
|
+ void *arg; |
|
+ union { |
|
+ struct sockaddr_in addr4; |
|
+ struct sockaddr_in6 addr6; |
|
+ } addr; |
|
+ int family; |
|
+ int flags; |
|
+ int timeouts; |
|
+}; |
|
+ |
|
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID |
|
+#define IPBUFSIZ \ |
|
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE) |
|
+#else |
|
+#define IPBUFSIZ \ |
|
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) |
|
+#endif |
|
+ |
|
+static void nameinfo_callback(void *arg, int status, int timeouts, |
|
+ struct hostent *host); |
|
+static char *lookup_service(unsigned short port, int flags, |
|
+ char *buf, size_t buflen); |
|
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID |
|
+static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, |
|
+ char *buf, size_t buflen); |
|
+#endif |
|
+static char *ares_striendstr(const char *s1, const char *s2); |
|
+ |
|
+void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, |
|
+ ares_socklen_t salen, |
|
+ int flags, ares_nameinfo_callback callback, void *arg) |
|
+{ |
|
+ struct sockaddr_in *addr = NULL; |
|
+ struct sockaddr_in6 *addr6 = NULL; |
|
+ struct nameinfo_query *niquery; |
|
+ unsigned int port = 0; |
|
+ |
|
+ /* Validate socket address family and length */ |
|
+ if ((sa->sa_family == AF_INET) && |
|
+ (salen == sizeof(struct sockaddr_in))) |
|
+ { |
|
+ addr = (struct sockaddr_in *)sa; |
|
+ port = addr->sin_port; |
|
+ } |
|
+ else if ((sa->sa_family == AF_INET6) && |
|
+ (salen == sizeof(struct sockaddr_in6))) |
|
+ { |
|
+ addr6 = (struct sockaddr_in6 *)sa; |
|
+ port = addr6->sin6_port; |
|
+ } |
|
+ else |
|
+ { |
|
+ callback(arg, ARES_ENOTIMP, 0, NULL, NULL); |
|
+ return; |
|
+ } |
|
+ |
|
+ /* If neither, assume they want a host */ |
|
+ if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) |
|
+ flags |= ARES_NI_LOOKUPHOST; |
|
+ |
|
+ /* All they want is a service, no need for DNS */ |
|
+ if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) |
|
+ { |
|
+ char buf[33], *service; |
|
+ |
|
+ service = lookup_service((unsigned short)(port & 0xffff), |
|
+ flags, buf, sizeof(buf)); |
|
+ callback(arg, ARES_SUCCESS, 0, NULL, service); |
|
+ return; |
|
+ } |
|
+ |
|
+ /* They want a host lookup */ |
|
+ if ((flags & ARES_NI_LOOKUPHOST)) |
|
+ { |
|
+ /* A numeric host can be handled without DNS */ |
|
+ if ((flags & ARES_NI_NUMERICHOST)) |
|
+ { |
|
+ char ipbuf[IPBUFSIZ]; |
|
+ char srvbuf[33]; |
|
+ char *service = NULL; |
|
+ ipbuf[0] = 0; |
|
+ |
|
+ /* Specifying not to lookup a host, but then saying a host |
|
+ * is required has to be illegal. |
|
+ */ |
|
+ if (flags & ARES_NI_NAMEREQD) |
|
+ { |
|
+ callback(arg, ARES_EBADFLAGS, 0, NULL, NULL); |
|
+ return; |
|
+ } |
|
+ if (salen == sizeof(struct sockaddr_in6)) |
|
+ { |
|
+ ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ); |
|
+ /* If the system supports scope IDs, use it */ |
|
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID |
|
+ append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf)); |
|
+#endif |
|
+ } |
|
+ else |
|
+ { |
|
+ ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ); |
|
+ } |
|
+ /* They also want a service */ |
|
+ if (flags & ARES_NI_LOOKUPSERVICE) |
|
+ service = lookup_service((unsigned short)(port & 0xffff), |
|
+ flags, srvbuf, sizeof(srvbuf)); |
|
+ callback(arg, ARES_SUCCESS, 0, ipbuf, service); |
|
+ return; |
|
+ } |
|
+ /* This is where a DNS lookup becomes necessary */ |
|
+ else |
|
+ { |
|
+ niquery = malloc(sizeof(struct nameinfo_query)); |
|
+ if (!niquery) |
|
+ { |
|
+ callback(arg, ARES_ENOMEM, 0, NULL, NULL); |
|
+ return; |
|
+ } |
|
+ niquery->callback = callback; |
|
+ niquery->arg = arg; |
|
+ niquery->flags = flags; |
|
+ niquery->timeouts = 0; |
|
+ if (sa->sa_family == AF_INET) |
|
+ { |
|
+ niquery->family = AF_INET; |
|
+ memcpy(&niquery->addr.addr4, addr, sizeof(struct in_addr)); |
|
+ ares_gethostbyaddr(channel, &addr->sin_addr, |
|
+ sizeof(struct in_addr), AF_INET, |
|
+ nameinfo_callback, niquery); |
|
+ } |
|
+ else |
|
+ { |
|
+ niquery->family = AF_INET6; |
|
+ memcpy(&niquery->addr.addr6, addr6, sizeof(struct ares_in6_addr)); |
|
+ ares_gethostbyaddr(channel, &addr6->sin6_addr, |
|
+ sizeof(struct ares_in6_addr), AF_INET6, |
|
+ nameinfo_callback, niquery); |
|
+ } |
|
+ } |
|
+ } |
|
+} |
|
+ |
|
+static void nameinfo_callback(void *arg, int status, int timeouts, |
|
+ struct hostent *host) |
|
+{ |
|
+ struct nameinfo_query *niquery = (struct nameinfo_query *) arg; |
|
+ char srvbuf[33]; |
|
+ char *service = NULL; |
|
+ |
|
+ niquery->timeouts += timeouts; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ /* They want a service too */ |
|
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) |
|
+ { |
|
+ if (niquery->family == AF_INET) |
|
+ service = lookup_service(niquery->addr.addr4.sin_port, |
|
+ niquery->flags, srvbuf, sizeof(srvbuf)); |
|
+ else |
|
+ service = lookup_service(niquery->addr.addr6.sin6_port, |
|
+ niquery->flags, srvbuf, sizeof(srvbuf)); |
|
+ } |
|
+ /* NOFQDN means we have to strip off the domain name portion. We do |
|
+ this by determining our own domain name, then searching the string |
|
+ for this domain name and removing it. |
|
+ */ |
|
+#ifdef HAVE_GETHOSTNAME |
|
+ if (niquery->flags & ARES_NI_NOFQDN) |
|
+ { |
|
+ char buf[255]; |
|
+ char *domain; |
|
+ gethostname(buf, 255); |
|
+ if ((domain = strchr(buf, '.')) != NULL) |
|
+ { |
|
+ char *end = ares_striendstr(host->h_name, domain); |
|
+ if (end) |
|
+ *end = 0; |
|
+ } |
|
+ } |
|
+#endif |
|
+ niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, |
|
+ (char *)(host->h_name), |
|
+ service); |
|
+ free(niquery); |
|
+ return; |
|
+ } |
|
+ /* We couldn't find the host, but it's OK, we can use the IP */ |
|
+ else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) |
|
+ { |
|
+ char ipbuf[IPBUFSIZ]; |
|
+ if (niquery->family == AF_INET) |
|
+ ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, |
|
+ IPBUFSIZ); |
|
+ else |
|
+ { |
|
+ ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, |
|
+ IPBUFSIZ); |
|
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID |
|
+ append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, |
|
+ sizeof(ipbuf)); |
|
+#endif |
|
+ } |
|
+ /* They want a service too */ |
|
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) |
|
+ { |
|
+ if (niquery->family == AF_INET) |
|
+ service = lookup_service(niquery->addr.addr4.sin_port, |
|
+ niquery->flags, srvbuf, sizeof(srvbuf)); |
|
+ else |
|
+ service = lookup_service(niquery->addr.addr6.sin6_port, |
|
+ niquery->flags, srvbuf, sizeof(srvbuf)); |
|
+ } |
|
+ niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf, |
|
+ service); |
|
+ free(niquery); |
|
+ return; |
|
+ } |
|
+ niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL); |
|
+ free(niquery); |
|
+} |
|
+ |
|
+static char *lookup_service(unsigned short port, int flags, |
|
+ char *buf, size_t buflen) |
|
+{ |
|
+ const char *proto; |
|
+ struct servent *sep; |
|
+#ifdef HAVE_GETSERVBYPORT_R |
|
+ struct servent se; |
|
+#endif |
|
+ char tmpbuf[4096]; |
|
+ |
|
+ if (port) |
|
+ { |
|
+ if (flags & ARES_NI_NUMERICSERV) |
|
+ sep = NULL; |
|
+ else |
|
+ { |
|
+ if (flags & ARES_NI_UDP) |
|
+ proto = "udp"; |
|
+ else if (flags & ARES_NI_SCTP) |
|
+ proto = "sctp"; |
|
+ else if (flags & ARES_NI_DCCP) |
|
+ proto = "dccp"; |
|
+ else |
|
+ proto = "tcp"; |
|
+#ifdef HAVE_GETSERVBYPORT_R |
|
+ sep = &se; |
|
+ memset(tmpbuf, 0, sizeof(tmpbuf)); |
|
+#if GETSERVBYPORT_R_ARGS == 6 |
|
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf, |
|
+ sizeof(tmpbuf), &sep) != 0) |
|
+ sep = NULL; |
|
+#elif GETSERVBYPORT_R_ARGS == 5 |
|
+ sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, |
|
+ sizeof(tmpbuf)); |
|
+#elif GETSERVBYPORT_R_ARGS == 4 |
|
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) |
|
+ sep = NULL; |
|
+#else |
|
+ /* Lets just hope the OS uses TLS! */ |
|
+ sep = getservbyport(port, proto); |
|
+#endif |
|
+#else |
|
+ /* Lets just hope the OS uses TLS! */ |
|
+#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) |
|
+ sep = getservbyport(port, (char*)proto); |
|
+#else |
|
+ sep = getservbyport(port, proto); |
|
+#endif |
|
+#endif |
|
+ } |
|
+ if (sep && sep->s_name) |
|
+ /* get service name */ |
|
+ strcpy(tmpbuf, sep->s_name); |
|
+ else |
|
+ /* get port as a string */ |
|
+ sprintf(tmpbuf, "%u", (unsigned int)ntohs(port)); |
|
+ if (strlen(tmpbuf) < buflen) |
|
+ /* return it if buffer big enough */ |
|
+ strcpy(buf, tmpbuf); |
|
+ else |
|
+ /* avoid reusing previous one */ |
|
+ buf[0] = '\0'; |
|
+ return buf; |
|
+ } |
|
+ buf[0] = '\0'; |
|
+ return NULL; |
|
+} |
|
+ |
|
+#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID |
|
+static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, |
|
+ char *buf, size_t buflen) |
|
+{ |
|
+#ifdef HAVE_IF_INDEXTONAME |
|
+ int is_ll, is_mcll; |
|
+#endif |
|
+ static const char fmt_u[] = "%u"; |
|
+ static const char fmt_lu[] = "%lu"; |
|
+ char tmpbuf[IF_NAMESIZE + 2]; |
|
+ size_t bufl; |
|
+ const char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))? |
|
+ fmt_lu:fmt_u; |
|
+ |
|
+ tmpbuf[0] = '%'; |
|
+ |
|
+#ifdef HAVE_IF_INDEXTONAME |
|
+ is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr); |
|
+ is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr); |
|
+ if ((flags & ARES_NI_NUMERICSCOPE) || |
|
+ (!is_ll && !is_mcll)) |
|
+ { |
|
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); |
|
+ } |
|
+ else |
|
+ { |
|
+ if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) |
|
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); |
|
+ } |
|
+#else |
|
+ sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); |
|
+ (void) flags; |
|
+#endif |
|
+ tmpbuf[IF_NAMESIZE + 1] = '\0'; |
|
+ bufl = strlen(buf); |
|
+ |
|
+ if(bufl + strlen(tmpbuf) < buflen) |
|
+ /* only append the scopeid string if it fits in the target buffer */ |
|
+ strcpy(&buf[bufl], tmpbuf); |
|
+} |
|
+#endif |
|
+ |
|
+/* Determines if s1 ends with the string in s2 (case-insensitive) */ |
|
+static char *ares_striendstr(const char *s1, const char *s2) |
|
+{ |
|
+ const char *c1, *c2, *c1_begin; |
|
+ int lo1, lo2; |
|
+ size_t s1_len = strlen(s1), s2_len = strlen(s2); |
|
+ |
|
+ /* If the substr is longer than the full str, it can't match */ |
|
+ if (s2_len > s1_len) |
|
+ return NULL; |
|
+ |
|
+ /* Jump to the end of s1 minus the length of s2 */ |
|
+ c1_begin = s1+s1_len-s2_len; |
|
+ c1 = (const char *)c1_begin; |
|
+ c2 = s2; |
|
+ while (c2 < s2+s2_len) |
|
+ { |
|
+ lo1 = TOLOWER(*c1); |
|
+ lo2 = TOLOWER(*c2); |
|
+ if (lo1 != lo2) |
|
+ return NULL; |
|
+ else |
|
+ { |
|
+ c1++; |
|
+ c2++; |
|
+ } |
|
+ } |
|
+ if (c2 == c1 && c2 == NULL) |
|
+ return (char *)c1_begin; |
|
+ return NULL; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_getopt.c b/deps/libuv/src/ares/ares_getopt.c |
|
new file mode 100644 |
|
index 0000000..1e02d08 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getopt.c |
|
@@ -0,0 +1,122 @@ |
|
+/* |
|
+ * Original file name getopt.c Initial import into the c-ares source tree |
|
+ * on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with |
|
+ * the modified BSD license, BSD license without the advertising clause. |
|
+ * |
|
+ */ |
|
+ |
|
+/* |
|
+ * getopt.c -- |
|
+ * |
|
+ * Standard UNIX getopt function. Code is from BSD. |
|
+ * |
|
+ * Copyright (c) 1987-2001 The Regents of the University of California. |
|
+ * All rights reserved. |
|
+ * |
|
+ * Redistribution and use in source and binary forms, with or without |
|
+ * modification, are permitted provided that the following conditions are met: |
|
+ * |
|
+ * A. Redistributions of source code must retain the above copyright notice, |
|
+ * this list of conditions and the following disclaimer. |
|
+ * B. Redistributions in binary form must reproduce the above copyright notice, |
|
+ * this list of conditions and the following disclaimer in the documentation |
|
+ * and/or other materials provided with the distribution. |
|
+ * C. Neither the names of the copyright holders nor the names of its |
|
+ * contributors may be used to endorse or promote products derived from this |
|
+ * software without specific prior written permission. |
|
+ * |
|
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS |
|
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
|
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE |
|
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
+ * POSSIBILITY OF SUCH DAMAGE. |
|
+ */ |
|
+ |
|
+/* #if !defined(lint) |
|
+ * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94"; |
|
+ * #endif |
|
+ */ |
|
+ |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares_getopt.h" |
|
+ |
|
+int opterr = 1, /* if error message should be printed */ |
|
+ optind = 1; /* index into parent argv vector */ |
|
+int optopt = 0; /* character checked for validity */ |
|
+static int optreset; /* reset getopt */ |
|
+char *optarg; /* argument associated with option */ |
|
+ |
|
+#define BADCH (int)'?' |
|
+#define BADARG (int)':' |
|
+#define EMSG (char *)"" |
|
+ |
|
+/* |
|
+ * ares_getopt -- |
|
+ * Parse argc/argv argument vector. |
|
+ */ |
|
+int |
|
+ares_getopt(int nargc, char * const nargv[], const char *ostr) |
|
+{ |
|
+ static char *place = EMSG; /* option letter processing */ |
|
+ char *oli; /* option letter list index */ |
|
+ |
|
+ if (optreset || !*place) { /* update scanning pointer */ |
|
+ optreset = 0; |
|
+ if (optind >= nargc || *(place = nargv[optind]) != '-') { |
|
+ place = EMSG; |
|
+ return (EOF); |
|
+ } |
|
+ if (place[1] && *++place == '-') { /* found "--" */ |
|
+ ++optind; |
|
+ place = EMSG; |
|
+ return (EOF); |
|
+ } |
|
+ } /* option letter okay? */ |
|
+ if ((optopt = (int)*place++) == (int)':' || |
|
+ (oli = strchr(ostr, optopt)) == NULL) { |
|
+ /* |
|
+ * if the user didn't specify '-' as an option, |
|
+ * assume it means EOF. |
|
+ */ |
|
+ if (optopt == (int)'-') |
|
+ return (EOF); |
|
+ if (!*place) |
|
+ ++optind; |
|
+ if (opterr && *ostr != ':') |
|
+ (void)fprintf(stderr, |
|
+ "%s: illegal option -- %c\n", __FILE__, optopt); |
|
+ return (BADCH); |
|
+ } |
|
+ if (*++oli != ':') { /* don't need argument */ |
|
+ optarg = NULL; |
|
+ if (!*place) |
|
+ ++optind; |
|
+ } |
|
+ else { /* need an argument */ |
|
+ if (*place) /* no white space */ |
|
+ optarg = place; |
|
+ else if (nargc <= ++optind) { /* no arg */ |
|
+ place = EMSG; |
|
+ if (*ostr == ':') |
|
+ return (BADARG); |
|
+ if (opterr) |
|
+ (void)fprintf(stderr, |
|
+ "%s: option requires an argument -- %c\n", |
|
+ __FILE__, optopt); |
|
+ return (BADCH); |
|
+ } |
|
+ else /* white space */ |
|
+ optarg = nargv[optind]; |
|
+ place = EMSG; |
|
+ ++optind; |
|
+ } |
|
+ return (optopt); /* dump back option letter */ |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_getopt.h b/deps/libuv/src/ares/ares_getopt.h |
|
new file mode 100644 |
|
index 0000000..63acb3b |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getopt.h |
|
@@ -0,0 +1,53 @@ |
|
+#ifndef ARES_GETOPT_H |
|
+#define ARES_GETOPT_H |
|
+ |
|
+/* |
|
+ * Copyright (c) 1987-2001 The Regents of the University of California. |
|
+ * All rights reserved. |
|
+ * |
|
+ * Redistribution and use in source and binary forms, with or without |
|
+ * modification, are permitted provided that the following conditions are met: |
|
+ * |
|
+ * A. Redistributions of source code must retain the above copyright notice, |
|
+ * this list of conditions and the following disclaimer. |
|
+ * B. Redistributions in binary form must reproduce the above copyright notice, |
|
+ * this list of conditions and the following disclaimer in the documentation |
|
+ * and/or other materials provided with the distribution. |
|
+ * C. Neither the names of the copyright holders nor the names of its |
|
+ * contributors may be used to endorse or promote products derived from this |
|
+ * software without specific prior written permission. |
|
+ * |
|
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS |
|
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
|
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE |
|
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
|
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
|
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
|
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
+ * POSSIBILITY OF SUCH DAMAGE. |
|
+ */ |
|
+ |
|
+ |
|
+int ares_getopt(int nargc, char * const nargv[], const char *ostr); |
|
+ |
|
+#undef optarg |
|
+#undef optind |
|
+#undef opterr |
|
+#undef optopt |
|
+#undef optreset |
|
+ |
|
+#define optarg ares_optarg |
|
+#define optind ares_optind |
|
+#define opterr ares_opterr |
|
+#define optopt ares_optopt |
|
+#define optreset ares_optreset |
|
+ |
|
+extern char *optarg; |
|
+extern int optind; |
|
+extern int opterr; |
|
+extern int optopt; |
|
+ |
|
+#endif /* ARES_GETOPT_H */ |
|
diff --git a/deps/libuv/src/ares/ares_getsock.c b/deps/libuv/src/ares/ares_getsock.c |
|
new file mode 100644 |
|
index 0000000..72e467f |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_getsock.c |
|
@@ -0,0 +1,72 @@ |
|
+ |
|
+/* Copyright (C) 2005 - 2010, Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this software and its |
|
+ * documentation for any purpose and without fee is hereby granted, provided |
|
+ * that the above copyright notice appear in all copies and that both that |
|
+ * copyright notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in advertising or |
|
+ * publicity pertaining to distribution of the software without specific, |
|
+ * written prior permission. M.I.T. makes no representations about the |
|
+ * suitability of this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_TIME_H |
|
+#include <sys/time.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_getsock(ares_channel channel, |
|
+ ares_socket_t *socks, |
|
+ int numsocks) /* size of the 'socks' array */ |
|
+{ |
|
+ struct server_state *server; |
|
+ int i; |
|
+ int sockindex=0; |
|
+ int bitmap = 0; |
|
+ unsigned int setbits = 0xffffffff; |
|
+ |
|
+ /* Are there any active queries? */ |
|
+ int active_queries = !ares__is_list_empty(&(channel->all_queries)); |
|
+ |
|
+ for (i = 0; |
|
+ (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM); |
|
+ i++) |
|
+ { |
|
+ server = &channel->servers[i]; |
|
+ /* We only need to register interest in UDP sockets if we have |
|
+ * outstanding queries. |
|
+ */ |
|
+ if (active_queries && server->udp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ if(sockindex >= numsocks) |
|
+ break; |
|
+ socks[sockindex] = server->udp_socket; |
|
+ bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); |
|
+ sockindex++; |
|
+ } |
|
+ /* We always register for TCP events, because we want to know |
|
+ * when the other side closes the connection, so we don't waste |
|
+ * time trying to use a broken connection. |
|
+ */ |
|
+ if (server->tcp_socket != ARES_SOCKET_BAD) |
|
+ { |
|
+ if(sockindex >= numsocks) |
|
+ break; |
|
+ socks[sockindex] = server->tcp_socket; |
|
+ bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); |
|
+ |
|
+ if (server->qhead && active_queries) |
|
+ /* then the tcp socket is also writable! */ |
|
+ bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex); |
|
+ |
|
+ sockindex++; |
|
+ } |
|
+ } |
|
+ return bitmap; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_init.c b/deps/libuv/src/ares/ares_init.c |
|
new file mode 100644 |
|
index 0000000..52bb4d6 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_init.c |
|
@@ -0,0 +1,1809 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2007-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_PARAM_H |
|
+#include <sys/param.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_SYS_TIME_H |
|
+#include <sys/time.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+#include <sys/socket.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_NETINET_IN_H |
|
+#include <netinet/in.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_NETDB_H |
|
+#include <netdb.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_ARPA_INET_H |
|
+#include <arpa/inet.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_UNISTD_H |
|
+#include <unistd.h> |
|
+#endif |
|
+ |
|
+#include <stdio.h> |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include <ctype.h> |
|
+#include <time.h> |
|
+ |
|
+#ifdef ANDROID |
|
+#include <sys/system_properties.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "inet_net_pton.h" |
|
+#include "ares_library_init.h" |
|
+#include "ares_nowarn.h" |
|
+#include "ares_platform.h" |
|
+#include "inet_ntop.h" |
|
+#include "ares_private.h" |
|
+ |
|
+#ifdef WATT32 |
|
+#undef WIN32 /* Redefined in MingW/MSVC headers */ |
|
+#endif |
|
+ |
|
+static int init_by_options(ares_channel channel, const struct ares_options *options, |
|
+ int optmask); |
|
+static int init_by_environment(ares_channel channel); |
|
+static int init_by_resolv_conf(ares_channel channel); |
|
+static int init_by_defaults(ares_channel channel); |
|
+ |
|
+#ifndef WATT32 |
|
+static int config_nameserver(struct server_state **servers, int *nservers, |
|
+ char *str); |
|
+#endif |
|
+static int set_search(ares_channel channel, const char *str); |
|
+static int set_options(ares_channel channel, const char *str); |
|
+static const char *try_option(const char *p, const char *q, const char *opt); |
|
+static int init_id_key(rc4_key* key,int key_data_len); |
|
+ |
|
+#if !defined(WIN32) && !defined(WATT32) |
|
+static int sortlist_alloc(struct apattern **sortlist, int *nsort, struct apattern *pat); |
|
+static int ip_addr(const char *s, ssize_t len, struct in_addr *addr); |
|
+static void natural_mask(struct apattern *pat); |
|
+static int config_domain(ares_channel channel, char *str); |
|
+static int config_lookup(ares_channel channel, const char *str, |
|
+ const char *bindch, const char *filech); |
|
+static int config_sortlist(struct apattern **sortlist, int *nsort, |
|
+ const char *str); |
|
+static char *try_config(char *s, const char *opt, char scc); |
|
+#endif |
|
+ |
|
+#define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \ |
|
+ x->nservers > -1 && \ |
|
+ x->ndomains > -1 && \ |
|
+ x->ndots > -1 && x->timeout > -1 && \ |
|
+ x->tries > -1) |
|
+ |
|
+int ares_init(ares_channel *channelptr) |
|
+{ |
|
+ return ares_init_options(channelptr, NULL, 0); |
|
+} |
|
+ |
|
+int ares_init_options(ares_channel *channelptr, struct ares_options *options, |
|
+ int optmask) |
|
+{ |
|
+ ares_channel channel; |
|
+ int i; |
|
+ int status = ARES_SUCCESS; |
|
+ struct timeval now; |
|
+ |
|
+#ifdef CURLDEBUG |
|
+ const char *env = getenv("CARES_MEMDEBUG"); |
|
+ |
|
+ if (env) |
|
+ curl_memdebug(env); |
|
+ env = getenv("CARES_MEMLIMIT"); |
|
+ if (env) { |
|
+ char *endptr; |
|
+ long num = strtol(env, &endptr, 10); |
|
+ if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) |
|
+ curl_memlimit(num); |
|
+ } |
|
+#endif |
|
+ |
|
+ if (ares_library_initialized() != ARES_SUCCESS) |
|
+ return ARES_ENOTINITIALIZED; |
|
+ |
|
+ channel = malloc(sizeof(struct ares_channeldata)); |
|
+ if (!channel) { |
|
+ *channelptr = NULL; |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ |
|
+ now = ares__tvnow(); |
|
+ |
|
+ /* Set everything to distinguished values so we know they haven't |
|
+ * been set yet. |
|
+ */ |
|
+ channel->flags = -1; |
|
+ channel->timeout = -1; |
|
+ channel->tries = -1; |
|
+ channel->ndots = -1; |
|
+ channel->rotate = -1; |
|
+ channel->udp_port = -1; |
|
+ channel->tcp_port = -1; |
|
+ channel->socket_send_buffer_size = -1; |
|
+ channel->socket_receive_buffer_size = -1; |
|
+ channel->nservers = -1; |
|
+ channel->ndomains = -1; |
|
+ channel->nsort = -1; |
|
+ channel->tcp_connection_generation = 0; |
|
+ channel->lookups = NULL; |
|
+ channel->domains = NULL; |
|
+ channel->sortlist = NULL; |
|
+ channel->servers = NULL; |
|
+ channel->sock_state_cb = NULL; |
|
+ channel->sock_state_cb_data = NULL; |
|
+ channel->sock_create_cb = NULL; |
|
+ channel->sock_create_cb_data = NULL; |
|
+ |
|
+ channel->last_server = 0; |
|
+ channel->last_timeout_processed = (time_t)now.tv_sec; |
|
+ |
|
+ memset(&channel->local_dev_name, 0, sizeof(channel->local_dev_name)); |
|
+ channel->local_ip4 = 0; |
|
+ memset(&channel->local_ip6, 0, sizeof(channel->local_ip6)); |
|
+ |
|
+ /* Initialize our lists of queries */ |
|
+ ares__init_list_head(&(channel->all_queries)); |
|
+ for (i = 0; i < ARES_QID_TABLE_SIZE; i++) |
|
+ { |
|
+ ares__init_list_head(&(channel->queries_by_qid[i])); |
|
+ } |
|
+ for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) |
|
+ { |
|
+ ares__init_list_head(&(channel->queries_by_timeout[i])); |
|
+ } |
|
+ |
|
+ /* Initialize configuration by each of the four sources, from highest |
|
+ * precedence to lowest. |
|
+ */ |
|
+ |
|
+ if (status == ARES_SUCCESS) { |
|
+ status = init_by_options(channel, options, optmask); |
|
+ if (status != ARES_SUCCESS) |
|
+ DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n", |
|
+ ares_strerror(status))); |
|
+ } |
|
+ if (status == ARES_SUCCESS) { |
|
+ status = init_by_environment(channel); |
|
+ if (status != ARES_SUCCESS) |
|
+ DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n", |
|
+ ares_strerror(status))); |
|
+ } |
|
+ if (status == ARES_SUCCESS) { |
|
+ status = init_by_resolv_conf(channel); |
|
+ if (status != ARES_SUCCESS) |
|
+ DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n", |
|
+ ares_strerror(status))); |
|
+ } |
|
+ |
|
+ /* |
|
+ * No matter what failed or succeeded, seed defaults to provide |
|
+ * useful behavior for things that we missed. |
|
+ */ |
|
+ status = init_by_defaults(channel); |
|
+ if (status != ARES_SUCCESS) |
|
+ DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n", |
|
+ ares_strerror(status))); |
|
+ |
|
+ /* Generate random key */ |
|
+ |
|
+ if (status == ARES_SUCCESS) { |
|
+ status = init_id_key(&channel->id_key, ARES_ID_KEY_LEN); |
|
+ if (status == ARES_SUCCESS) |
|
+ channel->next_id = ares__generate_new_id(&channel->id_key); |
|
+ else |
|
+ DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n", |
|
+ ares_strerror(status))); |
|
+ } |
|
+ |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ /* Something failed; clean up memory we may have allocated. */ |
|
+ if (channel->servers) |
|
+ free(channel->servers); |
|
+ if (channel->domains) |
|
+ { |
|
+ for (i = 0; i < channel->ndomains; i++) |
|
+ free(channel->domains[i]); |
|
+ free(channel->domains); |
|
+ } |
|
+ if (channel->sortlist) |
|
+ free(channel->sortlist); |
|
+ if(channel->lookups) |
|
+ free(channel->lookups); |
|
+ free(channel); |
|
+ return status; |
|
+ } |
|
+ |
|
+ /* Trim to one server if ARES_FLAG_PRIMARY is set. */ |
|
+ if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1) |
|
+ channel->nservers = 1; |
|
+ |
|
+ ares__init_servers_state(channel); |
|
+ |
|
+ *channelptr = channel; |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+/* ares_dup() duplicates a channel handle with all its options and returns a |
|
+ new channel handle */ |
|
+int ares_dup(ares_channel *dest, ares_channel src) |
|
+{ |
|
+ struct ares_options opts; |
|
+ struct ares_addr_node *servers; |
|
+ int ipv6_nservers = 0; |
|
+ int i, rc; |
|
+ int optmask; |
|
+ |
|
+ *dest = NULL; /* in case of failure return NULL explicitly */ |
|
+ |
|
+ /* First get the options supported by the old ares_save_options() function, |
|
+ which is most of them */ |
|
+ rc = ares_save_options(src, &opts, &optmask); |
|
+ if(rc) |
|
+ return rc; |
|
+ |
|
+ /* Then create the new channel with those options */ |
|
+ rc = ares_init_options(dest, &opts, optmask); |
|
+ |
|
+ /* destroy the options copy to not leak any memory */ |
|
+ ares_destroy_options(&opts); |
|
+ |
|
+ if(rc) |
|
+ return rc; |
|
+ |
|
+ /* Now clone the options that ares_save_options() doesn't support. */ |
|
+ (*dest)->sock_create_cb = src->sock_create_cb; |
|
+ (*dest)->sock_create_cb_data = src->sock_create_cb_data; |
|
+ |
|
+ strncpy((*dest)->local_dev_name, src->local_dev_name, sizeof(src->local_dev_name)); |
|
+ (*dest)->local_ip4 = src->local_ip4; |
|
+ memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6)); |
|
+ |
|
+ /* Full name server cloning required when not all are IPv4 */ |
|
+ for (i = 0; i < src->nservers; i++) |
|
+ { |
|
+ if (src->servers[i].addr.family != AF_INET) { |
|
+ ipv6_nservers++; |
|
+ break; |
|
+ } |
|
+ } |
|
+ if (ipv6_nservers) { |
|
+ rc = ares_get_servers(src, &servers); |
|
+ if (rc != ARES_SUCCESS) |
|
+ return rc; |
|
+ rc = ares_set_servers(*dest, servers); |
|
+ ares_free_data(servers); |
|
+ if (rc != ARES_SUCCESS) |
|
+ return rc; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; /* everything went fine */ |
|
+} |
|
+ |
|
+/* Save options from initialized channel */ |
|
+int ares_save_options(ares_channel channel, struct ares_options *options, |
|
+ int *optmask) |
|
+{ |
|
+ int i, j; |
|
+ int ipv4_nservers = 0; |
|
+ |
|
+ /* Zero everything out */ |
|
+ memset(options, 0, sizeof(struct ares_options)); |
|
+ |
|
+ if (!ARES_CONFIG_CHECK(channel)) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ /* Traditionally the optmask wasn't saved in the channel struct so it was |
|
+ recreated here. ROTATE is the first option that has no struct field of |
|
+ its own in the public config struct */ |
|
+ (*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS| |
|
+ ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB| |
|
+ ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS| |
|
+ ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS) | |
|
+ (channel->optmask & ARES_OPT_ROTATE); |
|
+ |
|
+ /* Copy easy stuff */ |
|
+ options->flags = channel->flags; |
|
+ |
|
+ /* We return full millisecond resolution but that's only because we don't |
|
+ set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */ |
|
+ options->timeout = channel->timeout; |
|
+ options->tries = channel->tries; |
|
+ options->ndots = channel->ndots; |
|
+ options->udp_port = (unsigned short)channel->udp_port; |
|
+ options->tcp_port = (unsigned short)channel->tcp_port; |
|
+ options->sock_state_cb = channel->sock_state_cb; |
|
+ options->sock_state_cb_data = channel->sock_state_cb_data; |
|
+ |
|
+ /* Copy IPv4 servers */ |
|
+ if (channel->nservers) { |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ { |
|
+ if (channel->servers[i].addr.family == AF_INET) |
|
+ ipv4_nservers++; |
|
+ } |
|
+ if (ipv4_nservers) { |
|
+ options->servers = malloc(ipv4_nservers * sizeof(struct in_addr)); |
|
+ if (!options->servers) |
|
+ return ARES_ENOMEM; |
|
+ for (i = j = 0; i < channel->nservers; i++) |
|
+ { |
|
+ if (channel->servers[i].addr.family == AF_INET) |
|
+ memcpy(&options->servers[j++], |
|
+ &channel->servers[i].addr.addrV4, |
|
+ sizeof(channel->servers[i].addr.addrV4)); |
|
+ } |
|
+ } |
|
+ } |
|
+ options->nservers = ipv4_nservers; |
|
+ |
|
+ /* copy domains */ |
|
+ if (channel->ndomains) { |
|
+ options->domains = malloc(channel->ndomains * sizeof(char *)); |
|
+ if (!options->domains) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ for (i = 0; i < channel->ndomains; i++) |
|
+ { |
|
+ options->ndomains = i; |
|
+ options->domains[i] = strdup(channel->domains[i]); |
|
+ if (!options->domains[i]) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ options->ndomains = channel->ndomains; |
|
+ |
|
+ /* copy lookups */ |
|
+ if (channel->lookups) { |
|
+ options->lookups = strdup(channel->lookups); |
|
+ if (!options->lookups && channel->lookups) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ |
|
+ /* copy sortlist */ |
|
+ if (channel->nsort) { |
|
+ options->sortlist = malloc(channel->nsort * sizeof(struct apattern)); |
|
+ if (!options->sortlist) |
|
+ return ARES_ENOMEM; |
|
+ for (i = 0; i < channel->nsort; i++) |
|
+ options->sortlist[i] = channel->sortlist[i]; |
|
+ } |
|
+ options->nsort = channel->nsort; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+static int init_by_options(ares_channel channel, |
|
+ const struct ares_options *options, |
|
+ int optmask) |
|
+{ |
|
+ int i; |
|
+ |
|
+ /* Easy stuff. */ |
|
+ if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1) |
|
+ channel->flags = options->flags; |
|
+ if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1) |
|
+ channel->timeout = options->timeout; |
|
+ else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1) |
|
+ channel->timeout = options->timeout * 1000; |
|
+ if ((optmask & ARES_OPT_TRIES) && channel->tries == -1) |
|
+ channel->tries = options->tries; |
|
+ if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1) |
|
+ channel->ndots = options->ndots; |
|
+ if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1) |
|
+ channel->rotate = 1; |
|
+ if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1) |
|
+ channel->udp_port = options->udp_port; |
|
+ if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1) |
|
+ channel->tcp_port = options->tcp_port; |
|
+ if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL) |
|
+ { |
|
+ channel->sock_state_cb = options->sock_state_cb; |
|
+ channel->sock_state_cb_data = options->sock_state_cb_data; |
|
+ } |
|
+ if ((optmask & ARES_OPT_SOCK_SNDBUF) |
|
+ && channel->socket_send_buffer_size == -1) |
|
+ channel->socket_send_buffer_size = options->socket_send_buffer_size; |
|
+ if ((optmask & ARES_OPT_SOCK_RCVBUF) |
|
+ && channel->socket_receive_buffer_size == -1) |
|
+ channel->socket_receive_buffer_size = options->socket_receive_buffer_size; |
|
+ |
|
+ /* Copy the IPv4 servers, if given. */ |
|
+ if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1) |
|
+ { |
|
+ /* Avoid zero size allocations at any cost */ |
|
+ if (options->nservers > 0) |
|
+ { |
|
+ channel->servers = |
|
+ malloc(options->nservers * sizeof(struct server_state)); |
|
+ if (!channel->servers) |
|
+ return ARES_ENOMEM; |
|
+ for (i = 0; i < options->nservers; i++) |
|
+ { |
|
+ channel->servers[i].addr.family = AF_INET; |
|
+ memcpy(&channel->servers[i].addr.addrV4, |
|
+ &options->servers[i], |
|
+ sizeof(channel->servers[i].addr.addrV4)); |
|
+ } |
|
+ } |
|
+ channel->nservers = options->nservers; |
|
+ } |
|
+ |
|
+ /* Copy the domains, if given. Keep channel->ndomains consistent so |
|
+ * we can clean up in case of error. |
|
+ */ |
|
+ if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1) |
|
+ { |
|
+ /* Avoid zero size allocations at any cost */ |
|
+ if (options->ndomains > 0) |
|
+ { |
|
+ channel->domains = malloc(options->ndomains * sizeof(char *)); |
|
+ if (!channel->domains) |
|
+ return ARES_ENOMEM; |
|
+ for (i = 0; i < options->ndomains; i++) |
|
+ { |
|
+ channel->ndomains = i; |
|
+ channel->domains[i] = strdup(options->domains[i]); |
|
+ if (!channel->domains[i]) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ channel->ndomains = options->ndomains; |
|
+ } |
|
+ |
|
+ /* Set lookups, if given. */ |
|
+ if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups) |
|
+ { |
|
+ channel->lookups = strdup(options->lookups); |
|
+ if (!channel->lookups) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ |
|
+ /* copy sortlist */ |
|
+ if ((optmask & ARES_OPT_SORTLIST) && (channel->nsort == -1) && |
|
+ (options->nsort>0)) { |
|
+ channel->sortlist = malloc(options->nsort * sizeof(struct apattern)); |
|
+ if (!channel->sortlist) |
|
+ return ARES_ENOMEM; |
|
+ for (i = 0; i < options->nsort; i++) |
|
+ channel->sortlist[i] = options->sortlist[i]; |
|
+ channel->nsort = options->nsort; |
|
+ } |
|
+ |
|
+ channel->optmask = optmask; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+static int init_by_environment(ares_channel channel) |
|
+{ |
|
+ const char *localdomain, *res_options; |
|
+ int status; |
|
+ |
|
+ localdomain = getenv("LOCALDOMAIN"); |
|
+ if (localdomain && channel->ndomains == -1) |
|
+ { |
|
+ status = set_search(channel, localdomain); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ } |
|
+ |
|
+ res_options = getenv("RES_OPTIONS"); |
|
+ if (res_options) |
|
+ { |
|
+ status = set_options(channel, res_options); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+#ifdef WIN32 |
|
+/* |
|
+ * Warning: returns a dynamically allocated buffer, the user MUST |
|
+ * use free() if the function returns 1 |
|
+ */ |
|
+static int get_res_nt(HKEY hKey, const char *subkey, char **obuf) |
|
+{ |
|
+ /* Test for the size we need */ |
|
+ DWORD size = 0; |
|
+ int result; |
|
+ |
|
+ result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size); |
|
+ if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size) |
|
+ return 0; |
|
+ *obuf = malloc(size+1); |
|
+ if (!*obuf) |
|
+ return 0; |
|
+ |
|
+ if (RegQueryValueEx(hKey, subkey, 0, NULL, |
|
+ (LPBYTE)*obuf, &size) != ERROR_SUCCESS) |
|
+ { |
|
+ free(*obuf); |
|
+ return 0; |
|
+ } |
|
+ if (size == 1) |
|
+ { |
|
+ free(*obuf); |
|
+ return 0; |
|
+ } |
|
+ return 1; |
|
+} |
|
+ |
|
+static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf) |
|
+{ |
|
+ char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */ |
|
+ DWORD enum_size = 39; |
|
+ int idx = 0; |
|
+ HKEY hVal; |
|
+ |
|
+ while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0, |
|
+ NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS) |
|
+ { |
|
+ int rc; |
|
+ |
|
+ enum_size = 39; |
|
+ if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) != |
|
+ ERROR_SUCCESS) |
|
+ continue; |
|
+ rc = get_res_nt(hVal, subkey, obuf); |
|
+ RegCloseKey(hVal); |
|
+ if (rc) |
|
+ return 1; |
|
+ } |
|
+ return 0; |
|
+} |
|
+ |
|
+/** |
|
+ * The desired output for this method is that we set "ret_buf" to |
|
+ * something like: |
|
+ * |
|
+ * 192.168.0.1,dns01.my.domain,fe80::200:f8ff:fe21:67cf |
|
+ * |
|
+ * The only ordering requirement is that primary servers are listed |
|
+ * before secondary. There is no requirement that IPv4 addresses should |
|
+ * necessarily be before IPv6. |
|
+ * |
|
+ * Note that ret_size should ideally be big enough to hold around |
|
+ * 2-3 IPv4 and 2-3 IPv6 addresses. |
|
+ * |
|
+ * Finally, we need to return the total number of DNS servers located. |
|
+ */ |
|
+static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size) |
|
+{ |
|
+ const size_t ipv4_size = INET_ADDRSTRLEN + 1; /* +1 for ',' at end */ |
|
+ const size_t ipv6_size = INET6_ADDRSTRLEN + 12; /* +12 for "%0123456789," at end */ |
|
+ size_t left = ret_size; |
|
+ char *ret = ret_buf; |
|
+ int count = 0; |
|
+ |
|
+ /* Use the GetAdaptersAddresses method if it's available, otherwise |
|
+ fall back to GetNetworkParams. */ |
|
+ if (ares_fpGetAdaptersAddresses != ZERO_NULL) |
|
+ { |
|
+ const ULONG working_buf_size = 15000; |
|
+ IP_ADAPTER_ADDRESSES *pFirstEntry = NULL; |
|
+ IP_ADAPTER_ADDRESSES *pEntry = NULL; |
|
+ ULONG bufSize = 0; |
|
+ ULONG result = 0; |
|
+ |
|
+ /* According to MSDN, the recommended way to do this is to use a temporary |
|
+ buffer of 15K, to "dramatically reduce the chance that the GetAdaptersAddresses |
|
+ method returns ERROR_BUFFER_OVERFLOW" */ |
|
+ pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) malloc( working_buf_size ); |
|
+ bufSize = working_buf_size; |
|
+ if( !pFirstEntry ) |
|
+ return 0; |
|
+ |
|
+ /* Call the method one time */ |
|
+ result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); |
|
+ if( result == ERROR_BUFFER_OVERFLOW ) |
|
+ { |
|
+ /* Reallocate, bufSize should now be set to the required size */ |
|
+ pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) realloc( pFirstEntry, bufSize ); |
|
+ if( !pFirstEntry ) |
|
+ return 0; |
|
+ |
|
+ /* Call the method a second time */ |
|
+ result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); |
|
+ if( result == ERROR_BUFFER_OVERFLOW ) |
|
+ { |
|
+ /* Reallocate, bufSize should now be set to the required size */ |
|
+ pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) realloc( pFirstEntry, bufSize ); |
|
+ if( !pFirstEntry ) |
|
+ return 0; |
|
+ |
|
+ /* Call the method a third time. The maximum number of times we're going to do |
|
+ this is 3. Three shall be the number thou shalt count, and the number of the |
|
+ counting shall be three. Five is right out. */ |
|
+ result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); |
|
+ } |
|
+ } |
|
+ |
|
+ /* Check the current result for failure */ |
|
+ if( result != ERROR_SUCCESS ) |
|
+ { |
|
+ free( pFirstEntry ); |
|
+ return 0; |
|
+ } |
|
+ |
|
+ /* process the results */ |
|
+ for( pEntry = pFirstEntry ; pEntry != NULL ; pEntry = pEntry->Next ) |
|
+ { |
|
+ IP_ADAPTER_DNS_SERVER_ADDRESS* pDNSAddr = pEntry->FirstDnsServerAddress; |
|
+ for( ; pDNSAddr != NULL ; pDNSAddr = pDNSAddr->Next ) |
|
+ { |
|
+ struct sockaddr *pGenericAddr = pDNSAddr->Address.lpSockaddr; |
|
+ size_t stringlen = 0; |
|
+ |
|
+ if( pGenericAddr->sa_family == AF_INET && left > ipv4_size ) |
|
+ { |
|
+ /* Handle the v4 case */ |
|
+ struct sockaddr_in *pIPv4Addr = ( struct sockaddr_in * ) pGenericAddr; |
|
+ ares_inet_ntop( AF_INET, &pIPv4Addr->sin_addr, ret, ipv4_size - 1 ); /* -1 for comma */ |
|
+ |
|
+ /* Append a comma to the end, THEN NULL. Should be OK because we |
|
+ already tested the size at the top of the if statement. */ |
|
+ stringlen = strlen( ret ); |
|
+ ret[ stringlen ] = ','; |
|
+ ret[ stringlen + 1 ] = '\0'; |
|
+ ret += stringlen + 1; |
|
+ left -= ret - ret_buf; |
|
+ ++count; |
|
+ } |
|
+ else if( pGenericAddr->sa_family == AF_INET6 && left > ipv6_size ) |
|
+ { |
|
+ /* Handle the v6 case */ |
|
+ struct sockaddr_in6 *pIPv6Addr = ( struct sockaddr_in6 * ) pGenericAddr; |
|
+ ares_inet_ntop( AF_INET6, &pIPv6Addr->sin6_addr, ret, ipv6_size - 1 ); /* -1 for comma */ |
|
+ |
|
+ stringlen = strlen( ret ); |
|
+ |
|
+ /* Windows apparently always reports some IPv6 DNS servers that |
|
+ prefixed with fec0:0:0:ffff. These ususally do not point to |
|
+ working DNS servers, so we ignore them. */ |
|
+ if (strncmp(ret, "fec0:0:0:ffff:", 14) != 0) { |
|
+ /* Append a comma to the end, THEN NULL. Should be OK because we |
|
+ already tested the size at the top of the if statement. */ |
|
+ ret[ stringlen ] = ','; |
|
+ ret[ stringlen + 1 ] = '\0'; |
|
+ ret += stringlen + 1; |
|
+ left -= ret - ret_buf; |
|
+ ++count; |
|
+ } |
|
+ } |
|
+ } |
|
+ } |
|
+ |
|
+ if( pFirstEntry ) |
|
+ free( pFirstEntry ); |
|
+ if (ret > ret_buf) |
|
+ ret[-1] = '\0'; |
|
+ return count; |
|
+ } |
|
+ else |
|
+ { |
|
+ FIXED_INFO *fi, *newfi; |
|
+ DWORD size = sizeof (*fi); |
|
+ IP_ADDR_STRING *ipAddr; |
|
+ int i; |
|
+ int debug = 0; |
|
+ HRESULT res; |
|
+ |
|
+ fi = malloc(size); |
|
+ if (!fi) |
|
+ return 0; |
|
+ |
|
+ res = (*ares_fpGetNetworkParams) (fi, &size); |
|
+ if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) |
|
+ goto quit; |
|
+ |
|
+ newfi = realloc(fi, size); |
|
+ if (!newfi) |
|
+ goto quit; |
|
+ |
|
+ fi = newfi; |
|
+ res = (*ares_fpGetNetworkParams) (fi, &size); |
|
+ if (res != ERROR_SUCCESS) |
|
+ goto quit; |
|
+ |
|
+ if (debug) |
|
+ { |
|
+ printf ("Host Name: %s\n", fi->HostName); |
|
+ printf ("Domain Name: %s\n", fi->DomainName); |
|
+ printf ("DNS Servers:\n" |
|
+ " %s (primary)\n", fi->DnsServerList.IpAddress.String); |
|
+ } |
|
+ if (strlen(fi->DnsServerList.IpAddress.String) > 0 && |
|
+ inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE && |
|
+ left > ipv4_size) |
|
+ { |
|
+ ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String); |
|
+ left -= ret - ret_buf; |
|
+ ++count; |
|
+ } |
|
+ |
|
+ for (i = 0, ipAddr = fi->DnsServerList.Next; ipAddr && left > ipv4_size; |
|
+ ipAddr = ipAddr->Next, i++) |
|
+ { |
|
+ if (inet_addr(ipAddr->IpAddress.String) != INADDR_NONE) |
|
+ { |
|
+ ret += sprintf (ret, "%s,", ipAddr->IpAddress.String); |
|
+ left -= ret - ret_buf; |
|
+ ++count; |
|
+ } |
|
+ if (debug) |
|
+ printf (" %s (secondary %d)\n", ipAddr->IpAddress.String, i+1); |
|
+ } |
|
+ |
|
+quit: |
|
+ if (fi) |
|
+ free(fi); |
|
+ |
|
+ if (debug && left <= ipv4_size) |
|
+ printf ("Too many nameservers. Truncating to %d addressess", count); |
|
+ if (ret > ret_buf) |
|
+ ret[-1] = '\0'; |
|
+ return count; |
|
+ } |
|
+} |
|
+#endif |
|
+ |
|
+static int init_by_resolv_conf(ares_channel channel) |
|
+{ |
|
+#ifndef WATT32 |
|
+ char *line = NULL; |
|
+#endif |
|
+ int status = -1, nservers = 0, nsort = 0; |
|
+ struct server_state *servers = NULL; |
|
+ struct apattern *sortlist = NULL; |
|
+ |
|
+#ifdef WIN32 |
|
+ |
|
+ /* |
|
+ NameServer info via IPHLPAPI (IP helper API): |
|
+ GetNetworkParams() should be the trusted source for this. |
|
+ Available in Win-98/2000 and later. If that fail, fall-back to |
|
+ registry information. |
|
+ |
|
+ NameServer Registry: |
|
+ |
|
+ On Windows 9X, the DNS server can be found in: |
|
+HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\NameServer |
|
+ |
|
+ On Windows NT/2000/XP/2003: |
|
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer |
|
+ or |
|
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DhcpNameServer |
|
+ or |
|
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\ |
|
+NameServer |
|
+ or |
|
+HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\ |
|
+DhcpNameServer |
|
+ */ |
|
+ |
|
+ HKEY mykey; |
|
+ HKEY subkey; |
|
+ DWORD data_type; |
|
+ DWORD bytes; |
|
+ DWORD result; |
|
+ char buf[512]; |
|
+ win_platform platform; |
|
+ |
|
+ if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */ |
|
+ return ARES_SUCCESS; |
|
+ |
|
+ if (get_iphlpapi_dns_info(buf,sizeof(buf)) > 0) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, buf); |
|
+ if (status == ARES_SUCCESS) |
|
+ goto okay; |
|
+ } |
|
+ |
|
+ platform = ares__getplatform(); |
|
+ |
|
+ if (platform == WIN_NT) |
|
+ { |
|
+ if (RegOpenKeyEx( |
|
+ HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, |
|
+ KEY_READ, &mykey |
|
+ ) == ERROR_SUCCESS) |
|
+ { |
|
+ RegOpenKeyEx(mykey, "Interfaces", 0, |
|
+ KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &subkey); |
|
+ if (get_res_nt(mykey, NAMESERVER, &line)) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, line); |
|
+ free(line); |
|
+ } |
|
+ else if (get_res_nt(mykey, DHCPNAMESERVER, &line)) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, line); |
|
+ free(line); |
|
+ } |
|
+ /* Try the interfaces */ |
|
+ else if (get_res_interfaces_nt(subkey, NAMESERVER, &line)) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, line); |
|
+ free(line); |
|
+ } |
|
+ else if (get_res_interfaces_nt(subkey, DHCPNAMESERVER, &line)) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, line); |
|
+ free(line); |
|
+ } |
|
+ RegCloseKey(subkey); |
|
+ RegCloseKey(mykey); |
|
+ } |
|
+ } |
|
+ else if (platform == WIN_9X) |
|
+ { |
|
+ if (RegOpenKeyEx( |
|
+ HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, |
|
+ KEY_READ, &mykey |
|
+ ) == ERROR_SUCCESS) |
|
+ { |
|
+ if ((result = RegQueryValueEx( |
|
+ mykey, NAMESERVER, NULL, &data_type, |
|
+ NULL, &bytes |
|
+ ) |
|
+ ) == ERROR_SUCCESS || |
|
+ result == ERROR_MORE_DATA) |
|
+ { |
|
+ if (bytes) |
|
+ { |
|
+ line = malloc(bytes+1); |
|
+ if (RegQueryValueEx(mykey, NAMESERVER, NULL, &data_type, |
|
+ (unsigned char *)line, &bytes) == |
|
+ ERROR_SUCCESS) |
|
+ { |
|
+ status = config_nameserver(&servers, &nservers, line); |
|
+ } |
|
+ free(line); |
|
+ } |
|
+ } |
|
+ } |
|
+ RegCloseKey(mykey); |
|
+ } |
|
+ |
|
+ if (status == ARES_SUCCESS) |
|
+ status = ARES_EOF; |
|
+ else |
|
+ /* Catch the case when all the above checks fail (which happens when there |
|
+ is no network card or the cable is unplugged) */ |
|
+ status = ARES_EFILE; |
|
+ |
|
+#elif defined(__riscos__) |
|
+ |
|
+ /* Under RISC OS, name servers are listed in the |
|
+ system variable Inet$Resolvers, space separated. */ |
|
+ |
|
+ line = getenv("Inet$Resolvers"); |
|
+ status = ARES_EOF; |
|
+ if (line) { |
|
+ char *resolvers = strdup(line), *pos, *space; |
|
+ |
|
+ if (!resolvers) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ pos = resolvers; |
|
+ do { |
|
+ space = strchr(pos, ' '); |
|
+ if (space) |
|
+ *space = '\0'; |
|
+ status = config_nameserver(&servers, &nservers, pos); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ pos = space + 1; |
|
+ } while (space); |
|
+ |
|
+ if (status == ARES_SUCCESS) |
|
+ status = ARES_EOF; |
|
+ |
|
+ free(resolvers); |
|
+ } |
|
+ |
|
+#elif defined(WATT32) |
|
+ int i; |
|
+ |
|
+ sock_init(); |
|
+ for (i = 0; def_nameservers[i]; i++) |
|
+ ; |
|
+ if (i == 0) |
|
+ return ARES_SUCCESS; /* use localhost DNS server */ |
|
+ |
|
+ nservers = i; |
|
+ servers = calloc(i, sizeof(struct server_state)); |
|
+ if (!servers) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ for (i = 0; def_nameservers[i]; i++) |
|
+ { |
|
+ servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); |
|
+ servers[i].addr.family = AF_INET; |
|
+ } |
|
+ status = ARES_EOF; |
|
+ |
|
+#elif defined(ANDROID) |
|
+ char value[PROP_VALUE_MAX]=""; |
|
+ __system_property_get("net.dns1", value); |
|
+ status = config_nameserver(&servers, &nservers, value); |
|
+ if (status == ARES_SUCCESS) |
|
+ status = ARES_EOF; |
|
+#else |
|
+ { |
|
+ char *p; |
|
+ FILE *fp; |
|
+ size_t linesize; |
|
+ int error; |
|
+ |
|
+ /* Don't read resolv.conf and friends if we don't have to */ |
|
+ if (ARES_CONFIG_CHECK(channel)) |
|
+ return ARES_SUCCESS; |
|
+ |
|
+ fp = fopen(PATH_RESOLV_CONF, "r"); |
|
+ if (fp) { |
|
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) |
|
+ { |
|
+ if ((p = try_config(line, "domain", ';'))) |
|
+ status = config_domain(channel, p); |
|
+ else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) |
|
+ status = config_lookup(channel, p, "bind", "file"); |
|
+ else if ((p = try_config(line, "search", ';'))) |
|
+ status = set_search(channel, p); |
|
+ else if ((p = try_config(line, "nameserver", ';')) && |
|
+ channel->nservers == -1) |
|
+ status = config_nameserver(&servers, &nservers, p); |
|
+ else if ((p = try_config(line, "sortlist", ';')) && |
|
+ channel->nsort == -1) |
|
+ status = config_sortlist(&sortlist, &nsort, p); |
|
+ else if ((p = try_config(line, "options", ';'))) |
|
+ status = set_options(channel, p); |
|
+ else |
|
+ status = ARES_SUCCESS; |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ } |
|
+ fclose(fp); |
|
+ } |
|
+ else { |
|
+ error = ERRNO; |
|
+ switch(error) { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ status = ARES_EOF; |
|
+ break; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF)); |
|
+ status = ARES_EFILE; |
|
+ } |
|
+ } |
|
+ |
|
+ if ((status == ARES_EOF) && (!channel->lookups)) { |
|
+ /* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */ |
|
+ fp = fopen("/etc/nsswitch.conf", "r"); |
|
+ if (fp) { |
|
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) |
|
+ { |
|
+ if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) |
|
+ /* ignore errors */ |
|
+ (void)config_lookup(channel, p, "dns", "files"); |
|
+ } |
|
+ fclose(fp); |
|
+ } |
|
+ else { |
|
+ error = ERRNO; |
|
+ switch(error) { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ status = ARES_EOF; |
|
+ break; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/nsswitch.conf")); |
|
+ status = ARES_EFILE; |
|
+ } |
|
+ } |
|
+ } |
|
+ |
|
+ if ((status == ARES_EOF) && (!channel->lookups)) { |
|
+ /* Linux / GNU libc 2.x and possibly others have host.conf */ |
|
+ fp = fopen("/etc/host.conf", "r"); |
|
+ if (fp) { |
|
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) |
|
+ { |
|
+ if ((p = try_config(line, "order", '\0')) && !channel->lookups) |
|
+ /* ignore errors */ |
|
+ (void)config_lookup(channel, p, "bind", "hosts"); |
|
+ } |
|
+ fclose(fp); |
|
+ } |
|
+ else { |
|
+ error = ERRNO; |
|
+ switch(error) { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ status = ARES_EOF; |
|
+ break; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/host.conf")); |
|
+ status = ARES_EFILE; |
|
+ } |
|
+ } |
|
+ } |
|
+ |
|
+ if ((status == ARES_EOF) && (!channel->lookups)) { |
|
+ /* Tru64 uses /etc/svc.conf */ |
|
+ fp = fopen("/etc/svc.conf", "r"); |
|
+ if (fp) { |
|
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) |
|
+ { |
|
+ if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) |
|
+ /* ignore errors */ |
|
+ (void)config_lookup(channel, p, "bind", "local"); |
|
+ } |
|
+ fclose(fp); |
|
+ } |
|
+ else { |
|
+ error = ERRNO; |
|
+ switch(error) { |
|
+ case ENOENT: |
|
+ case ESRCH: |
|
+ status = ARES_EOF; |
|
+ break; |
|
+ default: |
|
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", |
|
+ error, strerror(error))); |
|
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf")); |
|
+ status = ARES_EFILE; |
|
+ } |
|
+ } |
|
+ } |
|
+ |
|
+ if(line) |
|
+ free(line); |
|
+ } |
|
+ |
|
+#endif |
|
+ |
|
+ /* Handle errors. */ |
|
+ if (status != ARES_EOF) |
|
+ { |
|
+ if (servers != NULL) |
|
+ free(servers); |
|
+ if (sortlist != NULL) |
|
+ free(sortlist); |
|
+ return status; |
|
+ } |
|
+ |
|
+ /* If we got any name server entries, fill them in. */ |
|
+#ifdef WIN32 |
|
+okay: |
|
+#endif |
|
+ if (servers) |
|
+ { |
|
+ channel->servers = servers; |
|
+ channel->nservers = nservers; |
|
+ } |
|
+ |
|
+ /* If we got any sortlist entries, fill them in. */ |
|
+ if (sortlist) |
|
+ { |
|
+ channel->sortlist = sortlist; |
|
+ channel->nsort = nsort; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+static int init_by_defaults(ares_channel channel) |
|
+{ |
|
+ char *hostname = NULL; |
|
+ int rc = ARES_SUCCESS; |
|
+#ifdef HAVE_GETHOSTNAME |
|
+ char *dot; |
|
+#endif |
|
+ |
|
+ if (channel->flags == -1) |
|
+ channel->flags = 0; |
|
+ if (channel->timeout == -1) |
|
+ channel->timeout = DEFAULT_TIMEOUT; |
|
+ if (channel->tries == -1) |
|
+ channel->tries = DEFAULT_TRIES; |
|
+ if (channel->ndots == -1) |
|
+ channel->ndots = 1; |
|
+ if (channel->rotate == -1) |
|
+ channel->rotate = 0; |
|
+ if (channel->udp_port == -1) |
|
+ channel->udp_port = htons(NAMESERVER_PORT); |
|
+ if (channel->tcp_port == -1) |
|
+ channel->tcp_port = htons(NAMESERVER_PORT); |
|
+ |
|
+ if (channel->nservers == -1) { |
|
+ /* If nobody specified servers, try a local named. */ |
|
+ channel->servers = malloc(sizeof(struct server_state)); |
|
+ if (!channel->servers) { |
|
+ rc = ARES_ENOMEM; |
|
+ goto error; |
|
+ } |
|
+ channel->servers[0].addr.family = AF_INET; |
|
+ channel->servers[0].addr.addrV4.s_addr = htonl(INADDR_LOOPBACK); |
|
+ channel->nservers = 1; |
|
+ } |
|
+ |
|
+#if defined(USE_WINSOCK) |
|
+#define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT) |
|
+#elif defined(ENAMETOOLONG) |
|
+#define toolong(x) (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || \ |
|
+ (SOCKERRNO == EINVAL)) |
|
+#else |
|
+#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) |
|
+#endif |
|
+ |
|
+ if (channel->ndomains == -1) { |
|
+ /* Derive a default domain search list from the kernel hostname, |
|
+ * or set it to empty if the hostname isn't helpful. |
|
+ */ |
|
+ size_t len = 64; |
|
+ int res; |
|
+ channel->ndomains = 0; /* default to none */ |
|
+ |
|
+#ifdef HAVE_GETHOSTNAME |
|
+ hostname = malloc(len); |
|
+ if(!hostname) { |
|
+ rc = ARES_ENOMEM; |
|
+ goto error; |
|
+ } |
|
+ |
|
+ do { |
|
+ res = gethostname(hostname, len); |
|
+ |
|
+ if(toolong(res)) { |
|
+ char *p; |
|
+ len *= 2; |
|
+ p = realloc(hostname, len); |
|
+ if(!p) { |
|
+ rc = ARES_ENOMEM; |
|
+ goto error; |
|
+ } |
|
+ hostname = p; |
|
+ continue; |
|
+ } |
|
+ else if(res) { |
|
+ rc = ARES_EBADNAME; |
|
+ goto error; |
|
+ } |
|
+ |
|
+ } while(0); |
|
+ |
|
+ dot = strchr(hostname, '.'); |
|
+ if (dot) { |
|
+ /* a dot was found */ |
|
+ channel->domains = malloc(sizeof(char *)); |
|
+ if (!channel->domains) { |
|
+ rc = ARES_ENOMEM; |
|
+ goto error; |
|
+ } |
|
+ channel->domains[0] = strdup(dot + 1); |
|
+ if (!channel->domains[0]) { |
|
+ rc = ARES_ENOMEM; |
|
+ goto error; |
|
+ } |
|
+ channel->ndomains = 1; |
|
+ } |
|
+#endif |
|
+ } |
|
+ |
|
+ if (channel->nsort == -1) { |
|
+ channel->sortlist = NULL; |
|
+ channel->nsort = 0; |
|
+ } |
|
+ |
|
+ if (!channel->lookups) { |
|
+ channel->lookups = strdup("fb"); |
|
+ if (!channel->lookups) |
|
+ rc = ARES_ENOMEM; |
|
+ } |
|
+ |
|
+ error: |
|
+ if(rc) { |
|
+ if(channel->servers) |
|
+ free(channel->servers); |
|
+ |
|
+ if(channel->domains && channel->domains[0]) |
|
+ free(channel->domains[0]); |
|
+ if(channel->domains) |
|
+ free(channel->domains); |
|
+ if(channel->lookups) |
|
+ free(channel->lookups); |
|
+ } |
|
+ |
|
+ if(hostname) |
|
+ free(hostname); |
|
+ |
|
+ return rc; |
|
+} |
|
+ |
|
+#if !defined(WIN32) && !defined(WATT32) |
|
+static int config_domain(ares_channel channel, char *str) |
|
+{ |
|
+ char *q; |
|
+ |
|
+ /* Set a single search domain. */ |
|
+ q = str; |
|
+ while (*q && !ISSPACE(*q)) |
|
+ q++; |
|
+ *q = '\0'; |
|
+ return set_search(channel, str); |
|
+} |
|
+ |
|
+#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \ |
|
+ defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__) |
|
+ /* workaround icc 9.1 optimizer issue */ |
|
+# define vqualifier volatile |
|
+#else |
|
+# define vqualifier |
|
+#endif |
|
+ |
|
+static int config_lookup(ares_channel channel, const char *str, |
|
+ const char *bindch, const char *filech) |
|
+{ |
|
+ char lookups[3], *l; |
|
+ const char *vqualifier p; |
|
+ |
|
+ /* Set the lookup order. Only the first letter of each work |
|
+ * is relevant, and it has to be "b" for DNS or "f" for the |
|
+ * host file. Ignore everything else. |
|
+ */ |
|
+ l = lookups; |
|
+ p = str; |
|
+ while (*p) |
|
+ { |
|
+ if ((*p == *bindch || *p == *filech) && l < lookups + 2) { |
|
+ if (*p == *bindch) *l++ = 'b'; |
|
+ else *l++ = 'f'; |
|
+ } |
|
+ while (*p && !ISSPACE(*p) && (*p != ',')) |
|
+ p++; |
|
+ while (*p && (ISSPACE(*p) || (*p == ','))) |
|
+ p++; |
|
+ } |
|
+ *l = '\0'; |
|
+ channel->lookups = strdup(lookups); |
|
+ return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM; |
|
+} |
|
+#endif /* !WIN32 & !WATT32 */ |
|
+ |
|
+#ifndef WATT32 |
|
+static int config_nameserver(struct server_state **servers, int *nservers, |
|
+ char *str) |
|
+{ |
|
+ struct ares_addr host; |
|
+ struct server_state *newserv; |
|
+ char *p, *txtaddr; |
|
+ /* On Windows, there may be more than one nameserver specified in the same |
|
+ * registry key, so we parse input as a space or comma seperated list. |
|
+ */ |
|
+ for (p = str; p;) |
|
+ { |
|
+ /* Skip whitespace and commas. */ |
|
+ while (*p && (ISSPACE(*p) || (*p == ','))) |
|
+ p++; |
|
+ if (!*p) |
|
+ /* No more input, done. */ |
|
+ break; |
|
+ |
|
+ /* Pointer to start of IPv4 or IPv6 address part. */ |
|
+ txtaddr = p; |
|
+ |
|
+ /* Advance past this address. */ |
|
+ while (*p && !ISSPACE(*p) && (*p != ',')) |
|
+ p++; |
|
+ if (*p) |
|
+ /* Null terminate this address. */ |
|
+ *p++ = '\0'; |
|
+ else |
|
+ /* Reached end of input, done when this address is processed. */ |
|
+ p = NULL; |
|
+ |
|
+ /* Convert textual address to binary format. */ |
|
+ if (ares_inet_pton(AF_INET, txtaddr, &host.addrV4) == 1) |
|
+ host.family = AF_INET; |
|
+ else if (ares_inet_pton(AF_INET6, txtaddr, &host.addrV6) == 1) |
|
+ host.family = AF_INET6; |
|
+ else |
|
+ continue; |
|
+ |
|
+ /* Resize servers state array. */ |
|
+ newserv = realloc(*servers, (*nservers + 1) * |
|
+ sizeof(struct server_state)); |
|
+ if (!newserv) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ /* Store address data. */ |
|
+ newserv[*nservers].addr.family = host.family; |
|
+ if (host.family == AF_INET) |
|
+ memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4, |
|
+ sizeof(host.addrV4)); |
|
+ else |
|
+ memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6, |
|
+ sizeof(host.addrV6)); |
|
+ |
|
+ /* Update arguments. */ |
|
+ *servers = newserv; |
|
+ *nservers += 1; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+#ifndef WIN32 |
|
+static int config_sortlist(struct apattern **sortlist, int *nsort, |
|
+ const char *str) |
|
+{ |
|
+ struct apattern pat; |
|
+ const char *q; |
|
+ |
|
+ /* Add sortlist entries. */ |
|
+ while (*str && *str != ';') |
|
+ { |
|
+ int bits; |
|
+ char ipbuf[16], ipbufpfx[32]; |
|
+ /* Find just the IP */ |
|
+ q = str; |
|
+ while (*q && *q != '/' && *q != ';' && !ISSPACE(*q)) |
|
+ q++; |
|
+ memcpy(ipbuf, str, q-str); |
|
+ ipbuf[q-str] = '\0'; |
|
+ /* Find the prefix */ |
|
+ if (*q == '/') |
|
+ { |
|
+ const char *str2 = q+1; |
|
+ while (*q && *q != ';' && !ISSPACE(*q)) |
|
+ q++; |
|
+ memcpy(ipbufpfx, str, q-str); |
|
+ ipbufpfx[q-str] = '\0'; |
|
+ str = str2; |
|
+ } |
|
+ else |
|
+ ipbufpfx[0] = '\0'; |
|
+ /* Lets see if it is CIDR */ |
|
+ /* First we'll try IPv6 */ |
|
+ if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf, |
|
+ &pat.addrV6, |
|
+ sizeof(pat.addrV6))) > 0) |
|
+ { |
|
+ pat.type = PATTERN_CIDR; |
|
+ pat.mask.bits = (unsigned short)bits; |
|
+ pat.family = AF_INET6; |
|
+ if (!sortlist_alloc(sortlist, nsort, &pat)) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ else if (ipbufpfx[0] && |
|
+ (bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4, |
|
+ sizeof(pat.addrV4))) > 0) |
|
+ { |
|
+ pat.type = PATTERN_CIDR; |
|
+ pat.mask.bits = (unsigned short)bits; |
|
+ pat.family = AF_INET; |
|
+ if (!sortlist_alloc(sortlist, nsort, &pat)) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ /* See if it is just a regular IP */ |
|
+ else if (ip_addr(ipbuf, q-str, &pat.addrV4) == 0) |
|
+ { |
|
+ if (ipbufpfx[0]) |
|
+ { |
|
+ memcpy(ipbuf, str, q-str); |
|
+ ipbuf[q-str] = '\0'; |
|
+ if (ip_addr(ipbuf, q-str, &pat.mask.addr4) != 0) |
|
+ natural_mask(&pat); |
|
+ } |
|
+ else |
|
+ natural_mask(&pat); |
|
+ pat.family = AF_INET; |
|
+ pat.type = PATTERN_MASK; |
|
+ if (!sortlist_alloc(sortlist, nsort, &pat)) |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ else |
|
+ { |
|
+ while (*q && *q != ';' && !ISSPACE(*q)) |
|
+ q++; |
|
+ } |
|
+ str = q; |
|
+ while (ISSPACE(*str)) |
|
+ str++; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+#endif /* !WIN32 */ |
|
+#endif /* !WATT32 */ |
|
+ |
|
+static int set_search(ares_channel channel, const char *str) |
|
+{ |
|
+ int n; |
|
+ const char *p, *q; |
|
+ |
|
+ if(channel->ndomains != -1) { |
|
+ /* if we already have some domains present, free them first */ |
|
+ for(n=0; n < channel->ndomains; n++) |
|
+ free(channel->domains[n]); |
|
+ free(channel->domains); |
|
+ channel->domains = NULL; |
|
+ channel->ndomains = -1; |
|
+ } |
|
+ |
|
+ /* Count the domains given. */ |
|
+ n = 0; |
|
+ p = str; |
|
+ while (*p) |
|
+ { |
|
+ while (*p && !ISSPACE(*p)) |
|
+ p++; |
|
+ while (ISSPACE(*p)) |
|
+ p++; |
|
+ n++; |
|
+ } |
|
+ |
|
+ if (!n) |
|
+ { |
|
+ channel->ndomains = 0; |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ |
|
+ channel->domains = malloc(n * sizeof(char *)); |
|
+ if (!channel->domains) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ /* Now copy the domains. */ |
|
+ n = 0; |
|
+ p = str; |
|
+ while (*p) |
|
+ { |
|
+ channel->ndomains = n; |
|
+ q = p; |
|
+ while (*q && !ISSPACE(*q)) |
|
+ q++; |
|
+ channel->domains[n] = malloc(q - p + 1); |
|
+ if (!channel->domains[n]) |
|
+ return ARES_ENOMEM; |
|
+ memcpy(channel->domains[n], p, q - p); |
|
+ channel->domains[n][q - p] = 0; |
|
+ p = q; |
|
+ while (ISSPACE(*p)) |
|
+ p++; |
|
+ n++; |
|
+ } |
|
+ channel->ndomains = n; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+static int set_options(ares_channel channel, const char *str) |
|
+{ |
|
+ const char *p, *q, *val; |
|
+ |
|
+ p = str; |
|
+ while (*p) |
|
+ { |
|
+ q = p; |
|
+ while (*q && !ISSPACE(*q)) |
|
+ q++; |
|
+ val = try_option(p, q, "ndots:"); |
|
+ if (val && channel->ndots == -1) |
|
+ channel->ndots = aresx_sltosi(strtol(val, NULL, 10)); |
|
+ val = try_option(p, q, "retrans:"); |
|
+ if (val && channel->timeout == -1) |
|
+ channel->timeout = aresx_sltosi(strtol(val, NULL, 10)); |
|
+ val = try_option(p, q, "retry:"); |
|
+ if (val && channel->tries == -1) |
|
+ channel->tries = aresx_sltosi(strtol(val, NULL, 10)); |
|
+ val = try_option(p, q, "rotate"); |
|
+ if (val && channel->rotate == -1) |
|
+ channel->rotate = 1; |
|
+ p = q; |
|
+ while (ISSPACE(*p)) |
|
+ p++; |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+static const char *try_option(const char *p, const char *q, const char *opt) |
|
+{ |
|
+ size_t len = strlen(opt); |
|
+ return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL; |
|
+} |
|
+ |
|
+#if !defined(WIN32) && !defined(WATT32) |
|
+static char *try_config(char *s, const char *opt, char scc) |
|
+{ |
|
+ size_t len; |
|
+ char *p; |
|
+ char *q; |
|
+ |
|
+ if (!s || !opt) |
|
+ /* no line or no option */ |
|
+ return NULL; |
|
+ |
|
+ /* Hash '#' character is always used as primary comment char, additionally |
|
+ a not-NUL secondary comment char will be considered when specified. */ |
|
+ |
|
+ /* trim line comment */ |
|
+ p = s; |
|
+ if(scc) |
|
+ while (*p && (*p != '#') && (*p != scc)) |
|
+ p++; |
|
+ else |
|
+ while (*p && (*p != '#')) |
|
+ p++; |
|
+ *p = '\0'; |
|
+ |
|
+ /* trim trailing whitespace */ |
|
+ q = p - 1; |
|
+ while ((q >= s) && ISSPACE(*q)) |
|
+ q--; |
|
+ *++q = '\0'; |
|
+ |
|
+ /* skip leading whitespace */ |
|
+ p = s; |
|
+ while (*p && ISSPACE(*p)) |
|
+ p++; |
|
+ |
|
+ if (!*p) |
|
+ /* empty line */ |
|
+ return NULL; |
|
+ |
|
+ if ((len = strlen(opt)) == 0) |
|
+ /* empty option */ |
|
+ return NULL; |
|
+ |
|
+ if (strncmp(p, opt, len) != 0) |
|
+ /* line and option do not match */ |
|
+ return NULL; |
|
+ |
|
+ /* skip over given option name */ |
|
+ p += len; |
|
+ |
|
+ if (!*p) |
|
+ /* no option value */ |
|
+ return NULL; |
|
+ |
|
+ if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p)) |
|
+ /* whitespace between option name and value is mandatory |
|
+ for given option names which do not end with ':' or '=' */ |
|
+ return NULL; |
|
+ |
|
+ /* skip over whitespace */ |
|
+ while (*p && ISSPACE(*p)) |
|
+ p++; |
|
+ |
|
+ if (!*p) |
|
+ /* no option value */ |
|
+ return NULL; |
|
+ |
|
+ /* return pointer to option value */ |
|
+ return p; |
|
+} |
|
+ |
|
+static int sortlist_alloc(struct apattern **sortlist, int *nsort, |
|
+ struct apattern *pat) |
|
+{ |
|
+ struct apattern *newsort; |
|
+ newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); |
|
+ if (!newsort) |
|
+ return 0; |
|
+ newsort[*nsort] = *pat; |
|
+ *sortlist = newsort; |
|
+ (*nsort)++; |
|
+ return 1; |
|
+} |
|
+ |
|
+static int ip_addr(const char *ipbuf, ssize_t len, struct in_addr *addr) |
|
+{ |
|
+ |
|
+ /* Four octets and three periods yields at most 15 characters. */ |
|
+ if (len > 15) |
|
+ return -1; |
|
+ |
|
+ addr->s_addr = inet_addr(ipbuf); |
|
+ if (addr->s_addr == INADDR_NONE && strcmp(ipbuf, "255.255.255.255") != 0) |
|
+ return -1; |
|
+ return 0; |
|
+} |
|
+ |
|
+static void natural_mask(struct apattern *pat) |
|
+{ |
|
+ struct in_addr addr; |
|
+ |
|
+ /* Store a host-byte-order copy of pat in a struct in_addr. Icky, |
|
+ * but portable. |
|
+ */ |
|
+ addr.s_addr = ntohl(pat->addrV4.s_addr); |
|
+ |
|
+ /* This is out of date in the CIDR world, but some people might |
|
+ * still rely on it. |
|
+ */ |
|
+ if (IN_CLASSA(addr.s_addr)) |
|
+ pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET); |
|
+ else if (IN_CLASSB(addr.s_addr)) |
|
+ pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET); |
|
+ else |
|
+ pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET); |
|
+} |
|
+#endif /* !WIN32 && !WATT32 */ |
|
+ |
|
+/* initialize an rc4 key. If possible a cryptographically secure random key |
|
+ is generated using a suitable function (for example win32's RtlGenRandom as |
|
+ described in |
|
+ http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx |
|
+ otherwise the code defaults to cross-platform albeit less secure mechanism |
|
+ using rand |
|
+*/ |
|
+static void randomize_key(unsigned char* key,int key_data_len) |
|
+{ |
|
+ int randomized = 0; |
|
+ int counter=0; |
|
+#ifdef WIN32 |
|
+ BOOLEAN res; |
|
+ if (ares_fpSystemFunction036) |
|
+ { |
|
+ res = (*ares_fpSystemFunction036) (key, key_data_len); |
|
+ if (res) |
|
+ randomized = 1; |
|
+ } |
|
+#else /* !WIN32 */ |
|
+#ifdef RANDOM_FILE |
|
+ FILE *f = fopen(RANDOM_FILE, "rb"); |
|
+ if(f) { |
|
+ counter = aresx_uztosi(fread(key, 1, key_data_len, f)); |
|
+ fclose(f); |
|
+ } |
|
+#endif |
|
+#endif /* WIN32 */ |
|
+ |
|
+ if ( !randomized ) { |
|
+ for (;counter<key_data_len;counter++) |
|
+ key[counter]=(unsigned char)(rand() % 256); |
|
+ } |
|
+} |
|
+ |
|
+static int init_id_key(rc4_key* key,int key_data_len) |
|
+{ |
|
+ unsigned char index1; |
|
+ unsigned char index2; |
|
+ unsigned char* state; |
|
+ short counter; |
|
+ unsigned char *key_data_ptr = 0; |
|
+ |
|
+ key_data_ptr = calloc(1,key_data_len); |
|
+ if (!key_data_ptr) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ state = &key->state[0]; |
|
+ for(counter = 0; counter < 256; counter++) |
|
+ /* unnecessary AND but it keeps some compilers happier */ |
|
+ state[counter] = (unsigned char)(counter & 0xff); |
|
+ randomize_key(key->state,key_data_len); |
|
+ key->x = 0; |
|
+ key->y = 0; |
|
+ index1 = 0; |
|
+ index2 = 0; |
|
+ for(counter = 0; counter < 256; counter++) |
|
+ { |
|
+ index2 = (unsigned char)((key_data_ptr[index1] + state[counter] + |
|
+ index2) % 256); |
|
+ ARES_SWAP_BYTE(&state[counter], &state[index2]); |
|
+ |
|
+ index1 = (unsigned char)((index1 + 1) % key_data_len); |
|
+ } |
|
+ free(key_data_ptr); |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+unsigned short ares__generate_new_id(rc4_key* key) |
|
+{ |
|
+ unsigned short r=0; |
|
+ ares__rc4(key, (unsigned char *)&r, sizeof(r)); |
|
+ return r; |
|
+} |
|
+ |
|
+void ares_set_local_ip4(ares_channel channel, unsigned int local_ip) |
|
+{ |
|
+ channel->local_ip4 = local_ip; |
|
+} |
|
+ |
|
+/* local_ip6 should be 16 bytes in length */ |
|
+void ares_set_local_ip6(ares_channel channel, |
|
+ const unsigned char* local_ip6) |
|
+{ |
|
+ memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6)); |
|
+} |
|
+ |
|
+/* local_dev_name should be null terminated. */ |
|
+void ares_set_local_dev(ares_channel channel, |
|
+ const char* local_dev_name) |
|
+{ |
|
+ strncpy(channel->local_dev_name, local_dev_name, |
|
+ sizeof(channel->local_dev_name)); |
|
+ channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0; |
|
+} |
|
+ |
|
+ |
|
+void ares_set_socket_callback(ares_channel channel, |
|
+ ares_sock_create_callback cb, |
|
+ void *data) |
|
+{ |
|
+ channel->sock_create_cb = cb; |
|
+ channel->sock_create_cb_data = data; |
|
+} |
|
+ |
|
+void ares__init_servers_state(ares_channel channel) |
|
+{ |
|
+ struct server_state *server; |
|
+ int i; |
|
+ |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ { |
|
+ server = &channel->servers[i]; |
|
+ server->udp_socket = ARES_SOCKET_BAD; |
|
+ server->tcp_socket = ARES_SOCKET_BAD; |
|
+ server->tcp_connection_generation = ++channel->tcp_connection_generation; |
|
+ server->tcp_lenbuf_pos = 0; |
|
+ server->tcp_buffer_pos = 0; |
|
+ server->tcp_buffer = NULL; |
|
+ server->tcp_length = 0; |
|
+ server->qhead = NULL; |
|
+ server->qtail = NULL; |
|
+ ares__init_list_head(&server->queries_to_server); |
|
+ server->channel = channel; |
|
+ server->is_broken = 0; |
|
+ } |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_iphlpapi.h b/deps/libuv/src/ares/ares_iphlpapi.h |
|
new file mode 100644 |
|
index 0000000..343aee3 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_iphlpapi.h |
|
@@ -0,0 +1,221 @@ |
|
+#ifndef HEADER_CARES_IPHLPAPI_H |
|
+#define HEADER_CARES_IPHLPAPI_H |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2004 - 2011 by Daniel Stenberg et al |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#if defined(USE_WINSOCK) |
|
+ |
|
+#ifndef INET_ADDRSTRLEN |
|
+#define INET_ADDRSTRLEN 22 |
|
+#endif |
|
+ |
|
+#ifndef INET6_ADDRSTRLEN |
|
+#define INET6_ADDRSTRLEN 65 |
|
+#endif |
|
+ |
|
+/* ---------------------------------- */ |
|
+#if !defined(_WS2DEF_) && \ |
|
+ !defined(__CSADDR_DEFINED__) && \ |
|
+ !defined(__CSADDR_T_DEFINED) |
|
+/* ---------------------------------- */ |
|
+ |
|
+typedef struct _SOCKET_ADDRESS { |
|
+ LPSOCKADDR lpSockaddr; |
|
+ INT iSockaddrLength; |
|
+} SOCKET_ADDRESS, *PSOCKET_ADDRESS; |
|
+ |
|
+typedef struct _CSADDR_INFO { |
|
+ SOCKET_ADDRESS LocalAddr; |
|
+ SOCKET_ADDRESS RemoteAddr; |
|
+ INT iSocketType; |
|
+ INT iProtocol; |
|
+} CSADDR_INFO, *PCSADDR_INFO; |
|
+ |
|
+/* --------------------------------- */ |
|
+#endif /* ! _WS2DEF_ && \ */ |
|
+/* ! __CSADDR_DEFINED__ && \ */ |
|
+/* ! __CSADDR_T_DEFINED */ |
|
+/* --------------------------------- */ |
|
+ |
|
+/* ------------------------------- */ |
|
+#if !defined(IP_ADAPTER_DDNS_ENABLED) |
|
+/* ------------------------------- */ |
|
+ |
|
+#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x0001 |
|
+#define IP_ADAPTER_ADDRESS_TRANSIENT 0x0002 |
|
+ |
|
+#define IP_ADAPTER_DDNS_ENABLED 0x0001 |
|
+#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x0002 |
|
+#define IP_ADAPTER_DHCP_ENABLED 0x0004 |
|
+#define IP_ADAPTER_RECEIVE_ONLY 0x0008 |
|
+#define IP_ADAPTER_NO_MULTICAST 0x0010 |
|
+#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x0020 |
|
+ |
|
+#define GAA_FLAG_SKIP_UNICAST 0x0001 |
|
+#define GAA_FLAG_SKIP_ANYCAST 0x0002 |
|
+#define GAA_FLAG_SKIP_MULTICAST 0x0004 |
|
+#define GAA_FLAG_SKIP_DNS_SERVER 0x0008 |
|
+#define GAA_FLAG_INCLUDE_PREFIX 0x0010 |
|
+#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020 |
|
+ |
|
+typedef enum { |
|
+ IpPrefixOriginOther = 0, |
|
+ IpPrefixOriginManual, |
|
+ IpPrefixOriginWellKnown, |
|
+ IpPrefixOriginDhcp, |
|
+ IpPrefixOriginRouterAdvertisement |
|
+} IP_PREFIX_ORIGIN; |
|
+ |
|
+typedef enum { |
|
+ IpSuffixOriginOther = 0, |
|
+ IpSuffixOriginManual, |
|
+ IpSuffixOriginWellKnown, |
|
+ IpSuffixOriginDhcp, |
|
+ IpSuffixOriginLinkLayerAddress, |
|
+ IpSuffixOriginRandom |
|
+} IP_SUFFIX_ORIGIN; |
|
+ |
|
+typedef enum { |
|
+ IpDadStateInvalid = 0, |
|
+ IpDadStateTentative, |
|
+ IpDadStateDuplicate, |
|
+ IpDadStateDeprecated, |
|
+ IpDadStatePreferred |
|
+} IP_DAD_STATE; |
|
+ |
|
+typedef enum { |
|
+ IfOperStatusUp = 1, |
|
+ IfOperStatusDown, |
|
+ IfOperStatusTesting, |
|
+ IfOperStatusUnknown, |
|
+ IfOperStatusDormant, |
|
+ IfOperStatusNotPresent, |
|
+ IfOperStatusLowerLayerDown |
|
+} IF_OPER_STATUS; |
|
+ |
|
+typedef enum { |
|
+ ScopeLevelInterface = 0x0001, |
|
+ ScopeLevelLink = 0x0002, |
|
+ ScopeLevelSubnet = 0x0003, |
|
+ ScopeLevelAdmin = 0x0004, |
|
+ ScopeLevelSite = 0x0005, |
|
+ ScopeLevelOrganization = 0x0008, |
|
+ ScopeLevelGlobal = 0x000E |
|
+} SCOPE_LEVEL; |
|
+ |
|
+typedef struct _IP_ADAPTER_UNICAST_ADDRESS { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD Flags; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_UNICAST_ADDRESS *Next; |
|
+ SOCKET_ADDRESS Address; |
|
+ IP_PREFIX_ORIGIN PrefixOrigin; |
|
+ IP_SUFFIX_ORIGIN SuffixOrigin; |
|
+ IP_DAD_STATE DadState; |
|
+ ULONG ValidLifetime; |
|
+ ULONG PreferredLifetime; |
|
+ ULONG LeaseLifetime; |
|
+} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS; |
|
+ |
|
+typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD Flags; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_ANYCAST_ADDRESS *Next; |
|
+ SOCKET_ADDRESS Address; |
|
+} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; |
|
+ |
|
+typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD Flags; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_MULTICAST_ADDRESS *Next; |
|
+ SOCKET_ADDRESS Address; |
|
+} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS; |
|
+ |
|
+typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD Reserved; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next; |
|
+ SOCKET_ADDRESS Address; |
|
+} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS; |
|
+ |
|
+typedef struct _IP_ADAPTER_PREFIX { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD Flags; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_PREFIX *Next; |
|
+ SOCKET_ADDRESS Address; |
|
+ ULONG PrefixLength; |
|
+} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX; |
|
+ |
|
+typedef struct _IP_ADAPTER_ADDRESSES { |
|
+ union { |
|
+ ULONGLONG Alignment; |
|
+ struct { |
|
+ ULONG Length; |
|
+ DWORD IfIndex; |
|
+ } s; |
|
+ } u; |
|
+ struct _IP_ADAPTER_ADDRESSES *Next; |
|
+ PCHAR AdapterName; |
|
+ PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; |
|
+ PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; |
|
+ PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; |
|
+ PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; |
|
+ PWCHAR DnsSuffix; |
|
+ PWCHAR Description; |
|
+ PWCHAR FriendlyName; |
|
+ BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; |
|
+ DWORD PhysicalAddressLength; |
|
+ DWORD Flags; |
|
+ DWORD Mtu; |
|
+ DWORD IfType; |
|
+ IF_OPER_STATUS OperStatus; |
|
+ DWORD Ipv6IfIndex; |
|
+ DWORD ZoneIndices[16]; |
|
+ PIP_ADAPTER_PREFIX FirstPrefix; |
|
+} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES; |
|
+ |
|
+/* -------------------------------- */ |
|
+#endif /* ! IP_ADAPTER_DDNS_ENABLED */ |
|
+/* -------------------------------- */ |
|
+ |
|
+#endif /* USE_WINSOCK */ |
|
+ |
|
+#endif /* HEADER_CARES_IPHLPAPI_H */ |
|
diff --git a/deps/libuv/src/ares/ares_ipv6.h b/deps/libuv/src/ares/ares_ipv6.h |
|
new file mode 100644 |
|
index 0000000..6f1022a |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_ipv6.h |
|
@@ -0,0 +1,78 @@ |
|
+ |
|
+/* Copyright (C) 2005 by Dominick Meglio |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#ifndef ARES_IPV6_H |
|
+#define ARES_IPV6_H |
|
+ |
|
+#ifndef HAVE_PF_INET6 |
|
+#define PF_INET6 AF_INET6 |
|
+#endif |
|
+ |
|
+#ifndef HAVE_STRUCT_SOCKADDR_IN6 |
|
+struct sockaddr_in6 |
|
+{ |
|
+ unsigned short sin6_family; |
|
+ unsigned short sin6_port; |
|
+ unsigned long sin6_flowinfo; |
|
+ struct ares_in6_addr sin6_addr; |
|
+ unsigned int sin6_scope_id; |
|
+}; |
|
+#endif |
|
+ |
|
+#ifndef HAVE_STRUCT_ADDRINFO |
|
+struct addrinfo |
|
+{ |
|
+ int ai_flags; |
|
+ int ai_family; |
|
+ int ai_socktype; |
|
+ int ai_protocol; |
|
+ ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ |
|
+ char *ai_canonname; |
|
+ struct sockaddr *ai_addr; |
|
+ struct addrinfo *ai_next; |
|
+}; |
|
+#endif |
|
+ |
|
+#ifndef NS_IN6ADDRSZ |
|
+#if SIZEOF_STRUCT_IN6_ADDR == 0 |
|
+/* We cannot have it set to zero, so we pick a fixed value here */ |
|
+#define NS_IN6ADDRSZ 16 |
|
+#else |
|
+#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR |
|
+#endif |
|
+#endif |
|
+ |
|
+#ifndef NS_INADDRSZ |
|
+#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR |
|
+#endif |
|
+ |
|
+#ifndef NS_INT16SZ |
|
+#define NS_INT16SZ 2 |
|
+#endif |
|
+ |
|
+#ifndef IF_NAMESIZE |
|
+#ifdef IFNAMSIZ |
|
+#define IF_NAMESIZE IFNAMSIZ |
|
+#else |
|
+#define IF_NAMESIZE 256 |
|
+#endif |
|
+#endif |
|
+ |
|
+/* Defined in ares_net_pton.c for no particular reason. */ |
|
+extern const struct ares_in6_addr ares_in6addr_any; /* :: */ |
|
+ |
|
+ |
|
+#endif /* ARES_IPV6_H */ |
|
diff --git a/deps/libuv/src/ares/ares_library_init.c b/deps/libuv/src/ares/ares_library_init.c |
|
new file mode 100644 |
|
index 0000000..f0137a1 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_library_init.c |
|
@@ -0,0 +1,142 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2004-2009 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_library_init.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* library-private global and unique instance vars */ |
|
+ |
|
+#ifdef USE_WINSOCK |
|
+fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL; |
|
+fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL; |
|
+fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL; |
|
+#endif |
|
+ |
|
+/* library-private global vars with source visibility restricted to this file */ |
|
+ |
|
+static unsigned int ares_initialized; |
|
+static int ares_init_flags; |
|
+ |
|
+#ifdef USE_WINSOCK |
|
+static HMODULE hnd_iphlpapi; |
|
+static HMODULE hnd_advapi32; |
|
+#endif |
|
+ |
|
+ |
|
+static int ares_win32_init(void) |
|
+{ |
|
+#ifdef USE_WINSOCK |
|
+ |
|
+ hnd_iphlpapi = 0; |
|
+ hnd_iphlpapi = LoadLibrary("iphlpapi.dll"); |
|
+ if (!hnd_iphlpapi) |
|
+ return ARES_ELOADIPHLPAPI; |
|
+ |
|
+ ares_fpGetNetworkParams = (fpGetNetworkParams_t) |
|
+ GetProcAddress(hnd_iphlpapi, "GetNetworkParams"); |
|
+ if (!ares_fpGetNetworkParams) |
|
+ { |
|
+ FreeLibrary(hnd_iphlpapi); |
|
+ return ARES_EADDRGETNETWORKPARAMS; |
|
+ } |
|
+ |
|
+ ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t) |
|
+ GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses"); |
|
+ if (!ares_fpGetAdaptersAddresses) |
|
+ { |
|
+ /* This can happen on clients before WinXP, I don't |
|
+ think it should be an error, unless we don't want to |
|
+ support Windows 2000 anymore */ |
|
+ } |
|
+ |
|
+ /* |
|
+ * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036, |
|
+ * also known as RtlGenRandom, which is the case for Windows versions prior |
|
+ * to WinXP then c-ares uses portable rand() function. Then don't error here. |
|
+ */ |
|
+ |
|
+ hnd_advapi32 = 0; |
|
+ hnd_advapi32 = LoadLibrary("advapi32.dll"); |
|
+ if (hnd_advapi32) |
|
+ { |
|
+ ares_fpSystemFunction036 = (fpSystemFunction036_t) |
|
+ GetProcAddress(hnd_advapi32, "SystemFunction036"); |
|
+ } |
|
+ |
|
+#endif |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+ |
|
+static void ares_win32_cleanup(void) |
|
+{ |
|
+#ifdef USE_WINSOCK |
|
+ if (hnd_advapi32) |
|
+ FreeLibrary(hnd_advapi32); |
|
+ if (hnd_iphlpapi) |
|
+ FreeLibrary(hnd_iphlpapi); |
|
+#endif |
|
+} |
|
+ |
|
+ |
|
+int ares_library_init(int flags) |
|
+{ |
|
+ int res; |
|
+ |
|
+ if (ares_initialized) |
|
+ return ARES_SUCCESS; |
|
+ ares_initialized++; |
|
+ |
|
+ if (flags & ARES_LIB_INIT_WIN32) |
|
+ { |
|
+ res = ares_win32_init(); |
|
+ if (res != ARES_SUCCESS) |
|
+ return res; |
|
+ } |
|
+ |
|
+ ares_init_flags = flags; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+ |
|
+void ares_library_cleanup(void) |
|
+{ |
|
+ if (!ares_initialized) |
|
+ return; |
|
+ ares_initialized--; |
|
+ |
|
+ if (ares_init_flags & ARES_LIB_INIT_WIN32) |
|
+ ares_win32_cleanup(); |
|
+ |
|
+ ares_init_flags = ARES_LIB_INIT_NONE; |
|
+} |
|
+ |
|
+ |
|
+int ares_library_initialized(void) |
|
+{ |
|
+#ifdef USE_WINSOCK |
|
+ if (!ares_initialized) |
|
+ return ARES_ENOTINITIALIZED; |
|
+#endif |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+ |
|
diff --git a/deps/libuv/src/ares/ares_library_init.h b/deps/libuv/src/ares/ares_library_init.h |
|
new file mode 100644 |
|
index 0000000..cbbfc6a |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_library_init.h |
|
@@ -0,0 +1,42 @@ |
|
+#ifndef HEADER_CARES_LIBRARY_INIT_H |
|
+#define HEADER_CARES_LIBRARY_INIT_H |
|
+ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2004-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef USE_WINSOCK |
|
+ |
|
+#include <iphlpapi.h> |
|
+#include "ares_iphlpapi.h" |
|
+ |
|
+typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*); |
|
+typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG); |
|
+typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* ); |
|
+ |
|
+/* Forward-declaration of variables defined in ares_library_init.c */ |
|
+/* that are global and unique instances for whole c-ares library. */ |
|
+ |
|
+extern fpGetNetworkParams_t ares_fpGetNetworkParams; |
|
+extern fpSystemFunction036_t ares_fpSystemFunction036; |
|
+extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses; |
|
+ |
|
+#endif /* USE_WINSOCK */ |
|
+ |
|
+#endif /* HEADER_CARES_LIBRARY_INIT_H */ |
|
+ |
|
diff --git a/deps/libuv/src/ares/ares_llist.c b/deps/libuv/src/ares/ares_llist.c |
|
new file mode 100644 |
|
index 0000000..c0acd90 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_llist.c |
|
@@ -0,0 +1,86 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* Routines for managing doubly-linked circular linked lists with a |
|
+ * dummy head. |
|
+ */ |
|
+ |
|
+/* Initialize a new head node */ |
|
+void ares__init_list_head(struct list_node* head) { |
|
+ head->prev = head; |
|
+ head->next = head; |
|
+ head->data = NULL; |
|
+} |
|
+ |
|
+/* Initialize a list node */ |
|
+void ares__init_list_node(struct list_node* node, void* d) { |
|
+ node->prev = NULL; |
|
+ node->next = NULL; |
|
+ node->data = d; |
|
+} |
|
+ |
|
+/* Returns true iff the given list is empty */ |
|
+int ares__is_list_empty(struct list_node* head) { |
|
+ return ((head->next == head) && (head->prev == head)); |
|
+} |
|
+ |
|
+/* Inserts new_node before old_node */ |
|
+void ares__insert_in_list(struct list_node* new_node, |
|
+ struct list_node* old_node) { |
|
+ new_node->next = old_node; |
|
+ new_node->prev = old_node->prev; |
|
+ old_node->prev->next = new_node; |
|
+ old_node->prev = new_node; |
|
+} |
|
+ |
|
+/* Removes the node from the list it's in, if any */ |
|
+void ares__remove_from_list(struct list_node* node) { |
|
+ if (node->next != NULL) { |
|
+ node->prev->next = node->next; |
|
+ node->next->prev = node->prev; |
|
+ node->prev = NULL; |
|
+ node->next = NULL; |
|
+ } |
|
+} |
|
+ |
|
+/* Swap the contents of two lists */ |
|
+void ares__swap_lists(struct list_node* head_a, |
|
+ struct list_node* head_b) { |
|
+ int is_a_empty = ares__is_list_empty(head_a); |
|
+ int is_b_empty = ares__is_list_empty(head_b); |
|
+ struct list_node old_a = *head_a; |
|
+ struct list_node old_b = *head_b; |
|
+ |
|
+ if (is_a_empty) { |
|
+ ares__init_list_head(head_b); |
|
+ } else { |
|
+ *head_b = old_a; |
|
+ old_a.next->prev = head_b; |
|
+ old_a.prev->next = head_b; |
|
+ } |
|
+ if (is_b_empty) { |
|
+ ares__init_list_head(head_a); |
|
+ } else { |
|
+ *head_a = old_b; |
|
+ old_b.next->prev = head_a; |
|
+ old_b.prev->next = head_a; |
|
+ } |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_llist.h b/deps/libuv/src/ares/ares_llist.h |
|
new file mode 100644 |
|
index 0000000..b09f0de |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_llist.h |
|
@@ -0,0 +1,42 @@ |
|
+#ifndef __ARES_LLIST_H |
|
+#define __ARES_LLIST_H |
|
+ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+ |
|
+/* Node definition for circular, doubly-linked list */ |
|
+struct list_node { |
|
+ struct list_node *prev; |
|
+ struct list_node *next; |
|
+ void* data; |
|
+}; |
|
+ |
|
+void ares__init_list_head(struct list_node* head); |
|
+ |
|
+void ares__init_list_node(struct list_node* node, void* d); |
|
+ |
|
+int ares__is_list_empty(struct list_node* head); |
|
+ |
|
+void ares__insert_in_list(struct list_node* new_node, |
|
+ struct list_node* old_node); |
|
+ |
|
+void ares__remove_from_list(struct list_node* node); |
|
+ |
|
+void ares__swap_lists(struct list_node* head_a, |
|
+ struct list_node* head_b); |
|
+ |
|
+#endif /* __ARES_LLIST_H */ |
|
diff --git a/deps/libuv/src/ares/ares_mkquery.c b/deps/libuv/src/ares/ares_mkquery.c |
|
new file mode 100644 |
|
index 0000000..e33f13f |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_mkquery.c |
|
@@ -0,0 +1,195 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* Header format, from RFC 1035: |
|
+ * 1 1 1 1 1 1 |
|
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | ID | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * |QR| Opcode |AA|TC|RD|RA| Z | RCODE | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | QDCOUNT | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | ANCOUNT | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | NSCOUNT | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | ARCOUNT | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * |
|
+ * AA, TC, RA, and RCODE are only set in responses. Brief description |
|
+ * of the remaining fields: |
|
+ * ID Identifier to match responses with queries |
|
+ * QR Query (0) or response (1) |
|
+ * Opcode For our purposes, always QUERY |
|
+ * RD Recursion desired |
|
+ * Z Reserved (zero) |
|
+ * QDCOUNT Number of queries |
|
+ * ANCOUNT Number of answers |
|
+ * NSCOUNT Number of name server records |
|
+ * ARCOUNT Number of additional records |
|
+ * |
|
+ * Question format, from RFC 1035: |
|
+ * 1 1 1 1 1 1 |
|
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | | |
|
+ * / QNAME / |
|
+ * / / |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | QTYPE | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * | QCLASS | |
|
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ |
|
+ * |
|
+ * The query name is encoded as a series of labels, each represented |
|
+ * as a one-byte length (maximum 63) followed by the text of the |
|
+ * label. The list is terminated by a label of length zero (which can |
|
+ * be thought of as the root domain). |
|
+ */ |
|
+ |
|
+int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id, |
|
+ int rd, unsigned char **buf, int *buflen) |
|
+{ |
|
+ int len; |
|
+ unsigned char *q; |
|
+ const char *p; |
|
+ |
|
+ /* Set our results early, in case we bail out early with an error. */ |
|
+ *buflen = 0; |
|
+ *buf = NULL; |
|
+ |
|
+ /* Compute the length of the encoded name so we can check buflen. |
|
+ * Start counting at 1 for the zero-length label at the end. */ |
|
+ len = 1; |
|
+ for (p = name; *p; p++) |
|
+ { |
|
+ if (*p == '\\' && *(p + 1) != 0) |
|
+ p++; |
|
+ len++; |
|
+ } |
|
+ /* If there are n periods in the name, there are n + 1 labels, and |
|
+ * thus n + 1 length fields, unless the name is empty or ends with a |
|
+ * period. So add 1 unless name is empty or ends with a period. |
|
+ */ |
|
+ if (*name && *(p - 1) != '.') |
|
+ len++; |
|
+ |
|
+ /* Immediately reject names that are longer than the maximum of 255 |
|
+ * bytes that's specified in RFC 1035 ("To simplify implementations, |
|
+ * the total length of a domain name (i.e., label octets and label |
|
+ * length octets) is restricted to 255 octets or less."). We aren't |
|
+ * doing this just to be a stickler about RFCs. For names that are |
|
+ * too long, 'dnscache' closes its TCP connection to us immediately |
|
+ * (when using TCP) and ignores the request when using UDP, and |
|
+ * BIND's named returns ServFail (TCP or UDP). Sending a request |
|
+ * that we know will cause 'dnscache' to close the TCP connection is |
|
+ * painful, since that makes any other outstanding requests on that |
|
+ * connection fail. And sending a UDP request that we know |
|
+ * 'dnscache' will ignore is bad because resources will be tied up |
|
+ * until we time-out the request. |
|
+ */ |
|
+ if (len > MAXCDNAME) |
|
+ return ARES_EBADNAME; |
|
+ |
|
+ *buflen = len + HFIXEDSZ + QFIXEDSZ; |
|
+ *buf = malloc(*buflen); |
|
+ if (!*buf) |
|
+ return ARES_ENOMEM; |
|
+ |
|
+ /* Set up the header. */ |
|
+ q = *buf; |
|
+ memset(q, 0, HFIXEDSZ); |
|
+ DNS_HEADER_SET_QID(q, id); |
|
+ DNS_HEADER_SET_OPCODE(q, QUERY); |
|
+ if (rd) { |
|
+ DNS_HEADER_SET_RD(q, 1); |
|
+ } |
|
+ else { |
|
+ DNS_HEADER_SET_RD(q, 0); |
|
+ } |
|
+ DNS_HEADER_SET_QDCOUNT(q, 1); |
|
+ |
|
+ /* A name of "." is a screw case for the loop below, so adjust it. */ |
|
+ if (strcmp(name, ".") == 0) |
|
+ name++; |
|
+ |
|
+ /* Start writing out the name after the header. */ |
|
+ q += HFIXEDSZ; |
|
+ while (*name) |
|
+ { |
|
+ if (*name == '.') |
|
+ return ARES_EBADNAME; |
|
+ |
|
+ /* Count the number of bytes in this label. */ |
|
+ len = 0; |
|
+ for (p = name; *p && *p != '.'; p++) |
|
+ { |
|
+ if (*p == '\\' && *(p + 1) != 0) |
|
+ p++; |
|
+ len++; |
|
+ } |
|
+ if (len > MAXLABEL) |
|
+ return ARES_EBADNAME; |
|
+ |
|
+ /* Encode the length and copy the data. */ |
|
+ *q++ = (unsigned char)len; |
|
+ for (p = name; *p && *p != '.'; p++) |
|
+ { |
|
+ if (*p == '\\' && *(p + 1) != 0) |
|
+ p++; |
|
+ *q++ = *p; |
|
+ } |
|
+ |
|
+ /* Go to the next label and repeat, unless we hit the end. */ |
|
+ if (!*p) |
|
+ break; |
|
+ name = p + 1; |
|
+ } |
|
+ |
|
+ /* Add the zero-length label at the end. */ |
|
+ *q++ = 0; |
|
+ |
|
+ /* Finish off the question with the type and class. */ |
|
+ DNS_QUESTION_SET_TYPE(q, type); |
|
+ DNS_QUESTION_SET_CLASS(q, dnsclass); |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_nowarn.c b/deps/libuv/src/ares/ares_nowarn.c |
|
new file mode 100644 |
|
index 0000000..701add5 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_nowarn.c |
|
@@ -0,0 +1,181 @@ |
|
+ |
|
+/* Copyright (C) 2010-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_ASSERT_H |
|
+# include <assert.h> |
|
+#endif |
|
+ |
|
+#if defined(__INTEL_COMPILER) && defined(__unix__) |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+ |
|
+#endif /* __INTEL_COMPILER && __unix__ */ |
|
+ |
|
+#define BUILDING_ARES_NOWARN_C 1 |
|
+ |
|
+#include "ares_nowarn.h" |
|
+ |
|
+#if (SIZEOF_INT == 2) |
|
+# define CARES_MASK_SINT 0x7FFF |
|
+# define CARES_MASK_UINT 0xFFFF |
|
+#elif (SIZEOF_INT == 4) |
|
+# define CARES_MASK_SINT 0x7FFFFFFF |
|
+# define CARES_MASK_UINT 0xFFFFFFFF |
|
+#elif (SIZEOF_INT == 8) |
|
+# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF |
|
+# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF |
|
+#elif (SIZEOF_INT == 16) |
|
+# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
|
+# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
|
+#endif |
|
+ |
|
+/* |
|
+** unsigned size_t to signed int |
|
+*/ |
|
+ |
|
+int aresx_uztosi(size_t uznum) |
|
+{ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+#endif |
|
+ |
|
+ return (int)(uznum & (size_t) CARES_MASK_SINT); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+/* |
|
+** signed long to signed int |
|
+*/ |
|
+ |
|
+int aresx_sltosi(long slnum) |
|
+{ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+#endif |
|
+ |
|
+ DEBUGASSERT(slnum >= 0); |
|
+ return (int)(slnum & (long) CARES_MASK_SINT); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+/* |
|
+** signed ssize_t to signed int |
|
+*/ |
|
+ |
|
+int aresx_sztosi(ssize_t sznum) |
|
+{ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+#endif |
|
+ |
|
+ DEBUGASSERT(sznum >= 0); |
|
+ return (int)(sznum & (ssize_t) CARES_MASK_SINT); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+/* |
|
+** signed ssize_t to unsigned int |
|
+*/ |
|
+ |
|
+unsigned int aresx_sztoui(ssize_t sznum) |
|
+{ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(push) |
|
+# pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+#endif |
|
+ |
|
+ DEBUGASSERT(sznum >= 0); |
|
+ return (unsigned int)(sznum & (ssize_t) CARES_MASK_UINT); |
|
+ |
|
+#ifdef __INTEL_COMPILER |
|
+# pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+#if defined(__INTEL_COMPILER) && defined(__unix__) |
|
+ |
|
+int aresx_FD_ISSET(int fd, fd_set *fdset) |
|
+{ |
|
+ #pragma warning(push) |
|
+ #pragma warning(disable:1469) /* clobber ignored */ |
|
+ return FD_ISSET(fd, fdset); |
|
+ #pragma warning(pop) |
|
+} |
|
+ |
|
+void aresx_FD_SET(int fd, fd_set *fdset) |
|
+{ |
|
+ #pragma warning(push) |
|
+ #pragma warning(disable:1469) /* clobber ignored */ |
|
+ FD_SET(fd, fdset); |
|
+ #pragma warning(pop) |
|
+} |
|
+ |
|
+void aresx_FD_ZERO(fd_set *fdset) |
|
+{ |
|
+ #pragma warning(push) |
|
+ #pragma warning(disable:593) /* variable was set but never used */ |
|
+ FD_ZERO(fdset); |
|
+ #pragma warning(pop) |
|
+} |
|
+ |
|
+unsigned short aresx_htons(unsigned short usnum) |
|
+{ |
|
+#if (__INTEL_COMPILER == 910) && defined(__i386__) |
|
+ return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); |
|
+#else |
|
+ #pragma warning(push) |
|
+ #pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+ return htons(usnum); |
|
+ #pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+unsigned short aresx_ntohs(unsigned short usnum) |
|
+{ |
|
+#if (__INTEL_COMPILER == 910) && defined(__i386__) |
|
+ return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); |
|
+#else |
|
+ #pragma warning(push) |
|
+ #pragma warning(disable:810) /* conversion may lose significant bits */ |
|
+ return ntohs(usnum); |
|
+ #pragma warning(pop) |
|
+#endif |
|
+} |
|
+ |
|
+#endif /* __INTEL_COMPILER && __unix__ */ |
|
diff --git a/deps/libuv/src/ares/ares_nowarn.h b/deps/libuv/src/ares/ares_nowarn.h |
|
new file mode 100644 |
|
index 0000000..bcaa227 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_nowarn.h |
|
@@ -0,0 +1,55 @@ |
|
+#ifndef HEADER_CARES_NOWARN_H |
|
+#define HEADER_CARES_NOWARN_H |
|
+ |
|
+ |
|
+/* Copyright (C) 2010-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+int aresx_uztosi(size_t uznum); |
|
+ |
|
+int aresx_sltosi(long slnum); |
|
+ |
|
+int aresx_sztosi(ssize_t sznum); |
|
+ |
|
+unsigned int aresx_sztoui(ssize_t sznum); |
|
+ |
|
+#if defined(__INTEL_COMPILER) && defined(__unix__) |
|
+ |
|
+int aresx_FD_ISSET(int fd, fd_set *fdset); |
|
+ |
|
+void aresx_FD_SET(int fd, fd_set *fdset); |
|
+ |
|
+void aresx_FD_ZERO(fd_set *fdset); |
|
+ |
|
+unsigned short aresx_htons(unsigned short usnum); |
|
+ |
|
+unsigned short aresx_ntohs(unsigned short usnum); |
|
+ |
|
+#ifndef BUILDING_ARES_NOWARN_C |
|
+# undef FD_ISSET |
|
+# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b)) |
|
+# undef FD_SET |
|
+# define FD_SET(a,b) aresx_FD_SET((a),(b)) |
|
+# undef FD_ZERO |
|
+# define FD_ZERO(a) aresx_FD_ZERO((a)) |
|
+# undef htons |
|
+# define htons(a) aresx_htons((a)) |
|
+# undef ntohs |
|
+# define ntohs(a) aresx_ntohs((a)) |
|
+#endif |
|
+ |
|
+#endif /* __INTEL_COMPILER && __unix__ */ |
|
+ |
|
+#endif /* HEADER_CARES_NOWARN_H */ |
|
diff --git a/deps/libuv/src/ares/ares_options.c b/deps/libuv/src/ares/ares_options.c |
|
new file mode 100644 |
|
index 0000000..5174ef2 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_options.c |
|
@@ -0,0 +1,248 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2008-2011 by Daniel Stenberg |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_data.h" |
|
+#include "inet_net_pton.h" |
|
+#include "ares_private.h" |
|
+ |
|
+ |
|
+int ares_get_servers(ares_channel channel, |
|
+ struct ares_addr_node **servers) |
|
+{ |
|
+ struct ares_addr_node *srvr_head = NULL; |
|
+ struct ares_addr_node *srvr_last = NULL; |
|
+ struct ares_addr_node *srvr_curr; |
|
+ int status = ARES_SUCCESS; |
|
+ int i; |
|
+ |
|
+ if (!channel) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ for (i = 0; i < channel->nservers; i++) |
|
+ { |
|
+ /* Allocate storage for this server node appending it to the list */ |
|
+ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE); |
|
+ if (!srvr_curr) |
|
+ { |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ if (srvr_last) |
|
+ { |
|
+ srvr_last->next = srvr_curr; |
|
+ } |
|
+ else |
|
+ { |
|
+ srvr_head = srvr_curr; |
|
+ } |
|
+ srvr_last = srvr_curr; |
|
+ |
|
+ /* Fill this server node data */ |
|
+ srvr_curr->family = channel->servers[i].addr.family; |
|
+ if (srvr_curr->family == AF_INET) |
|
+ memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, |
|
+ sizeof(srvr_curr->addrV4)); |
|
+ else |
|
+ memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, |
|
+ sizeof(srvr_curr->addrV6)); |
|
+ } |
|
+ |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ if (srvr_head) |
|
+ { |
|
+ ares_free_data(srvr_head); |
|
+ srvr_head = NULL; |
|
+ } |
|
+ } |
|
+ |
|
+ *servers = srvr_head; |
|
+ |
|
+ return status; |
|
+} |
|
+ |
|
+ |
|
+int ares_set_servers(ares_channel channel, |
|
+ struct ares_addr_node *servers) |
|
+{ |
|
+ struct ares_addr_node *srvr; |
|
+ int num_srvrs = 0; |
|
+ int i; |
|
+ |
|
+ if (ares_library_initialized() != ARES_SUCCESS) |
|
+ return ARES_ENOTINITIALIZED; |
|
+ |
|
+ if (!channel) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ ares__destroy_servers_state(channel); |
|
+ |
|
+ for (srvr = servers; srvr; srvr = srvr->next) |
|
+ { |
|
+ num_srvrs++; |
|
+ } |
|
+ |
|
+ if (num_srvrs > 0) |
|
+ { |
|
+ /* Allocate storage for servers state */ |
|
+ channel->servers = malloc(num_srvrs * sizeof(struct server_state)); |
|
+ if (!channel->servers) |
|
+ { |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ channel->nservers = num_srvrs; |
|
+ /* Fill servers state address data */ |
|
+ for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) |
|
+ { |
|
+ channel->servers[i].addr.family = srvr->family; |
|
+ if (srvr->family == AF_INET) |
|
+ memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, |
|
+ sizeof(srvr->addrV4)); |
|
+ else |
|
+ memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, |
|
+ sizeof(srvr->addrV6)); |
|
+ } |
|
+ /* Initialize servers state remaining data */ |
|
+ ares__init_servers_state(channel); |
|
+ } |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
+ |
|
+/* Incomming string format: host[:port][,host[:port]]... */ |
|
+int ares_set_servers_csv(ares_channel channel, |
|
+ const char* _csv) |
|
+{ |
|
+ size_t i; |
|
+ char* csv = NULL; |
|
+ char* ptr; |
|
+ char* start_host; |
|
+ int rv = ARES_SUCCESS; |
|
+ struct ares_addr_node *servers = NULL; |
|
+ struct ares_addr_node *last = NULL; |
|
+ |
|
+ if (ares_library_initialized() != ARES_SUCCESS) |
|
+ return ARES_ENOTINITIALIZED; |
|
+ |
|
+ if (!channel) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ ares__destroy_servers_state(channel); |
|
+ |
|
+ i = strlen(_csv); |
|
+ if (i == 0) |
|
+ return ARES_SUCCESS; /* blank all servers */ |
|
+ |
|
+ csv = malloc(i + 2); |
|
+ strcpy(csv, _csv); |
|
+ if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */ |
|
+ csv[i] = ','; |
|
+ csv[i+1] = 0; |
|
+ } |
|
+ |
|
+ start_host = csv; |
|
+ for (ptr = csv; *ptr; ptr++) { |
|
+ if (*ptr == ',') { |
|
+ char* pp = ptr - 1; |
|
+ struct in_addr in4; |
|
+ struct ares_in6_addr in6; |
|
+ struct ares_addr_node *s = NULL; |
|
+ |
|
+ *ptr = 0; /* null terminate host:port string */ |
|
+ /* Got an entry..see if port was specified. */ |
|
+ while (pp > start_host) { |
|
+ if (*pp == ':') |
|
+ break; /* yes */ |
|
+ if (!ISDIGIT(*pp)) { |
|
+ /* Found end of digits before we found :, so wasn't a port */ |
|
+ pp = ptr; |
|
+ break; |
|
+ } |
|
+ pp--; |
|
+ } |
|
+ if ((pp != start_host) && ((pp + 1) < ptr)) { |
|
+ /* Found it. Parse over the port number */ |
|
+ (void)strtol(pp + 1, NULL, 10); |
|
+ *pp = 0; /* null terminate host */ |
|
+ } |
|
+ /* resolve host, try ipv4 first, rslt is in network byte order */ |
|
+ rv = ares_inet_pton(AF_INET, start_host, &in4); |
|
+ if (!rv) { |
|
+ /* Ok, try IPv6 then */ |
|
+ rv = ares_inet_pton(AF_INET6, start_host, &in6); |
|
+ if (!rv) { |
|
+ rv = ARES_EBADSTR; |
|
+ goto out; |
|
+ } |
|
+ /* was ipv6, add new server */ |
|
+ s = malloc(sizeof(*s)); |
|
+ if (!s) { |
|
+ rv = ARES_ENOMEM; |
|
+ goto out; |
|
+ } |
|
+ s->family = AF_INET6; |
|
+ memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr)); |
|
+ } |
|
+ else { |
|
+ /* was ipv4, add new server */ |
|
+ s = malloc(sizeof(*s)); |
|
+ if (!s) { |
|
+ rv = ARES_ENOMEM; |
|
+ goto out; |
|
+ } |
|
+ s->family = AF_INET; |
|
+ memcpy(&s->addr, &in4, sizeof(struct in_addr)); |
|
+ } |
|
+ if (s) { |
|
+ /* TODO: Add port to ares_addr_node and assign it here. */ |
|
+ |
|
+ s->next = NULL; |
|
+ if (last) { |
|
+ last->next = s; |
|
+ } |
|
+ else { |
|
+ servers = s; |
|
+ last = s; |
|
+ } |
|
+ } |
|
+ |
|
+ /* Set up for next one */ |
|
+ start_host = ptr + 1; |
|
+ } |
|
+ } |
|
+ |
|
+ rv = ares_set_servers(channel, servers); |
|
+ |
|
+ out: |
|
+ if (csv) |
|
+ free(csv); |
|
+ while (servers) { |
|
+ struct ares_addr_node *s = servers; |
|
+ servers = servers->next; |
|
+ free(s); |
|
+ } |
|
+ |
|
+ return rv; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_a_reply.c b/deps/libuv/src/ares/ares_parse_a_reply.c |
|
new file mode 100644 |
|
index 0000000..4bd0845 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_a_reply.c |
|
@@ -0,0 +1,263 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_STRINGS_H |
|
+# include <strings.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#ifdef HAVE_LIMITS_H |
|
+# include <limits.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_parse_a_reply(const unsigned char *abuf, int alen, |
|
+ struct hostent **host, |
|
+ struct ares_addrttl *addrttls, int *naddrttls) |
|
+{ |
|
+ unsigned int qdcount, ancount; |
|
+ int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs; |
|
+ int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */ |
|
+ int naliases; |
|
+ long len; |
|
+ const unsigned char *aptr; |
|
+ char *hostname, *rr_name, *rr_data, **aliases; |
|
+ struct in_addr *addrs; |
|
+ struct hostent *hostent; |
|
+ const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0; |
|
+ |
|
+ /* Set *host to NULL for all failure cases. */ |
|
+ if (host) |
|
+ *host = NULL; |
|
+ /* Same with *naddrttls. */ |
|
+ if (naddrttls) |
|
+ *naddrttls = 0; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT(abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT(abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(hostname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ if (host) |
|
+ { |
|
+ /* Allocate addresses and aliases; ancount gives an upper bound for |
|
+ both. */ |
|
+ addrs = malloc(ancount * sizeof(struct in_addr)); |
|
+ if (!addrs) |
|
+ { |
|
+ free(hostname); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ aliases = malloc((ancount + 1) * sizeof(char *)); |
|
+ if (!aliases) |
|
+ { |
|
+ free(hostname); |
|
+ free(addrs); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ else |
|
+ { |
|
+ addrs = NULL; |
|
+ aliases = NULL; |
|
+ } |
|
+ |
|
+ naddrs = 0; |
|
+ naliases = 0; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for (i = 0; i < (int)ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE(aptr); |
|
+ rr_class = DNS_RR_CLASS(aptr); |
|
+ rr_len = DNS_RR_LEN(aptr); |
|
+ rr_ttl = DNS_RR_TTL(aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_A |
|
+ && rr_len == sizeof(struct in_addr) |
|
+ && strcasecmp(rr_name, hostname) == 0) |
|
+ { |
|
+ if (addrs) |
|
+ { |
|
+ if (aptr + sizeof(struct in_addr) > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr)); |
|
+ } |
|
+ if (naddrs < max_addr_ttls) |
|
+ { |
|
+ struct ares_addrttl * const at = &addrttls[naddrs]; |
|
+ if (aptr + sizeof(struct in_addr) > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ memcpy(&at->ipaddr, aptr, sizeof(struct in_addr)); |
|
+ at->ttl = rr_ttl; |
|
+ } |
|
+ naddrs++; |
|
+ status = ARES_SUCCESS; |
|
+ } |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_CNAME) |
|
+ { |
|
+ /* Record the RR name as an alias. */ |
|
+ if (aliases) |
|
+ aliases[naliases] = rr_name; |
|
+ else |
|
+ free(rr_name); |
|
+ naliases++; |
|
+ |
|
+ /* Decode the RR data and replace the hostname with it. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, |
|
+ &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ free(hostname); |
|
+ hostname = rr_data; |
|
+ |
|
+ /* Take the min of the TTLs we see in the CNAME chain. */ |
|
+ if (cname_ttl > rr_ttl) |
|
+ cname_ttl = rr_ttl; |
|
+ } |
|
+ else |
|
+ free(rr_name); |
|
+ |
|
+ aptr += rr_len; |
|
+ if (aptr > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ } |
|
+ |
|
+ if (status == ARES_SUCCESS && naddrs == 0 && naliases == 0) |
|
+ /* the check for naliases to be zero is to make sure CNAME responses |
|
+ don't get caught here */ |
|
+ status = ARES_ENODATA; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ /* We got our answer. */ |
|
+ if (naddrttls) |
|
+ { |
|
+ const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls; |
|
+ for (i = 0; i < n; i++) |
|
+ { |
|
+ /* Ensure that each A TTL is no larger than the CNAME TTL. */ |
|
+ if (addrttls[i].ttl > cname_ttl) |
|
+ addrttls[i].ttl = cname_ttl; |
|
+ } |
|
+ *naddrttls = n; |
|
+ } |
|
+ if (aliases) |
|
+ aliases[naliases] = NULL; |
|
+ if (host) |
|
+ { |
|
+ /* Allocate memory to build the host entry. */ |
|
+ hostent = malloc(sizeof(struct hostent)); |
|
+ if (hostent) |
|
+ { |
|
+ hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *)); |
|
+ if (hostent->h_addr_list) |
|
+ { |
|
+ /* Fill in the hostent and return successfully. */ |
|
+ hostent->h_name = hostname; |
|
+ hostent->h_aliases = aliases; |
|
+ hostent->h_addrtype = AF_INET; |
|
+ hostent->h_length = sizeof(struct in_addr); |
|
+ for (i = 0; i < naddrs; i++) |
|
+ hostent->h_addr_list[i] = (char *) &addrs[i]; |
|
+ hostent->h_addr_list[naddrs] = NULL; |
|
+ if (!naddrs && addrs) |
|
+ free(addrs); |
|
+ *host = hostent; |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ free(hostent); |
|
+ } |
|
+ status = ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ if (aliases) |
|
+ { |
|
+ for (i = 0; i < naliases; i++) |
|
+ free(aliases[i]); |
|
+ free(aliases); |
|
+ } |
|
+ free(addrs); |
|
+ free(hostname); |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_aaaa_reply.c b/deps/libuv/src/ares/ares_parse_aaaa_reply.c |
|
new file mode 100644 |
|
index 0000000..1fbe838 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_aaaa_reply.c |
|
@@ -0,0 +1,259 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright 2005 Dominick Meglio |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_STRINGS_H |
|
+# include <strings.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#ifdef HAVE_LIMITS_H |
|
+# include <limits.h> |
|
+#endif |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "inet_net_pton.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, |
|
+ struct hostent **host, struct ares_addr6ttl *addrttls, |
|
+ int *naddrttls) |
|
+{ |
|
+ unsigned int qdcount, ancount; |
|
+ int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs; |
|
+ int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */ |
|
+ int naliases; |
|
+ long len; |
|
+ const unsigned char *aptr; |
|
+ char *hostname, *rr_name, *rr_data, **aliases; |
|
+ struct ares_in6_addr *addrs; |
|
+ struct hostent *hostent; |
|
+ const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0; |
|
+ |
|
+ /* Set *host to NULL for all failure cases. */ |
|
+ if (host) |
|
+ *host = NULL; |
|
+ /* Same with *naddrttls. */ |
|
+ if (naddrttls) |
|
+ *naddrttls = 0; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT(abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT(abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(hostname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Allocate addresses and aliases; ancount gives an upper bound for both. */ |
|
+ if (host) |
|
+ { |
|
+ addrs = malloc(ancount * sizeof(struct ares_in6_addr)); |
|
+ if (!addrs) |
|
+ { |
|
+ free(hostname); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ aliases = malloc((ancount + 1) * sizeof(char *)); |
|
+ if (!aliases) |
|
+ { |
|
+ free(hostname); |
|
+ free(addrs); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ else |
|
+ { |
|
+ addrs = NULL; |
|
+ aliases = NULL; |
|
+ } |
|
+ naddrs = 0; |
|
+ naliases = 0; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for (i = 0; i < (int)ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE(aptr); |
|
+ rr_class = DNS_RR_CLASS(aptr); |
|
+ rr_len = DNS_RR_LEN(aptr); |
|
+ rr_ttl = DNS_RR_TTL(aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_AAAA |
|
+ && rr_len == sizeof(struct ares_in6_addr) |
|
+ && strcasecmp(rr_name, hostname) == 0) |
|
+ { |
|
+ if (addrs) |
|
+ { |
|
+ if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ memcpy(&addrs[naddrs], aptr, sizeof(struct ares_in6_addr)); |
|
+ } |
|
+ if (naddrs < max_addr_ttls) |
|
+ { |
|
+ struct ares_addr6ttl * const at = &addrttls[naddrs]; |
|
+ if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ memcpy(&at->ip6addr, aptr, sizeof(struct ares_in6_addr)); |
|
+ at->ttl = rr_ttl; |
|
+ } |
|
+ naddrs++; |
|
+ status = ARES_SUCCESS; |
|
+ } |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_CNAME) |
|
+ { |
|
+ /* Record the RR name as an alias. */ |
|
+ if (aliases) |
|
+ aliases[naliases] = rr_name; |
|
+ else |
|
+ free(rr_name); |
|
+ naliases++; |
|
+ |
|
+ /* Decode the RR data and replace the hostname with it. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, |
|
+ &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ free(hostname); |
|
+ hostname = rr_data; |
|
+ |
|
+ /* Take the min of the TTLs we see in the CNAME chain. */ |
|
+ if (cname_ttl > rr_ttl) |
|
+ cname_ttl = rr_ttl; |
|
+ } |
|
+ else |
|
+ free(rr_name); |
|
+ |
|
+ aptr += rr_len; |
|
+ if (aptr > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ } |
|
+ |
|
+ if (status == ARES_SUCCESS && naddrs == 0) |
|
+ status = ARES_ENODATA; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ /* We got our answer. */ |
|
+ if (naddrttls) |
|
+ { |
|
+ const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls; |
|
+ for (i = 0; i < n; i++) |
|
+ { |
|
+ /* Ensure that each A TTL is no larger than the CNAME TTL. */ |
|
+ if (addrttls[i].ttl > cname_ttl) |
|
+ addrttls[i].ttl = cname_ttl; |
|
+ } |
|
+ *naddrttls = n; |
|
+ } |
|
+ if (aliases) |
|
+ aliases[naliases] = NULL; |
|
+ if (host) |
|
+ { |
|
+ /* Allocate memory to build the host entry. */ |
|
+ hostent = malloc(sizeof(struct hostent)); |
|
+ if (hostent) |
|
+ { |
|
+ hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *)); |
|
+ if (hostent->h_addr_list) |
|
+ { |
|
+ /* Fill in the hostent and return successfully. */ |
|
+ hostent->h_name = hostname; |
|
+ hostent->h_aliases = aliases; |
|
+ hostent->h_addrtype = AF_INET6; |
|
+ hostent->h_length = sizeof(struct ares_in6_addr); |
|
+ for (i = 0; i < naddrs; i++) |
|
+ hostent->h_addr_list[i] = (char *) &addrs[i]; |
|
+ hostent->h_addr_list[naddrs] = NULL; |
|
+ *host = hostent; |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ free(hostent); |
|
+ } |
|
+ status = ARES_ENOMEM; |
|
+ } |
|
+ } |
|
+ if (aliases) |
|
+ { |
|
+ for (i = 0; i < naliases; i++) |
|
+ free(aliases[i]); |
|
+ free(aliases); |
|
+ } |
|
+ free(addrs); |
|
+ free(hostname); |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_mx_reply.c b/deps/libuv/src/ares/ares_parse_mx_reply.c |
|
new file mode 100644 |
|
index 0000000..2180054 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_mx_reply.c |
|
@@ -0,0 +1,170 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2010 Jeremy Lal <[email protected]> |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_data.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int |
|
+ares_parse_mx_reply (const unsigned char *abuf, int alen, |
|
+ struct ares_mx_reply **mx_out) |
|
+{ |
|
+ unsigned int qdcount, ancount, i; |
|
+ const unsigned char *aptr, *vptr; |
|
+ int status, rr_type, rr_class, rr_len; |
|
+ long len; |
|
+ char *hostname = NULL, *rr_name = NULL; |
|
+ struct ares_mx_reply *mx_head = NULL; |
|
+ struct ares_mx_reply *mx_last = NULL; |
|
+ struct ares_mx_reply *mx_curr; |
|
+ |
|
+ /* Set *mx_out to NULL for all failure cases. */ |
|
+ *mx_out = NULL; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT (abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT (abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ if (ancount == 0) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares_expand_name (aptr, abuf, alen, &hostname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free (hostname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for (i = 0; i < ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ break; |
|
+ } |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE (aptr); |
|
+ rr_class = DNS_RR_CLASS (aptr); |
|
+ rr_len = DNS_RR_LEN (aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ /* Check if we are really looking at a MX record */ |
|
+ if (rr_class == C_IN && rr_type == T_MX) |
|
+ { |
|
+ /* parse the MX record itself */ |
|
+ if (rr_len < 2) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ |
|
+ /* Allocate storage for this MX answer appending it to the list */ |
|
+ mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY); |
|
+ if (!mx_curr) |
|
+ { |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ if (mx_last) |
|
+ { |
|
+ mx_last->next = mx_curr; |
|
+ } |
|
+ else |
|
+ { |
|
+ mx_head = mx_curr; |
|
+ } |
|
+ mx_last = mx_curr; |
|
+ |
|
+ vptr = aptr; |
|
+ mx_curr->priority = DNS__16BIT(vptr); |
|
+ vptr += sizeof(unsigned short); |
|
+ |
|
+ status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ } |
|
+ |
|
+ /* Don't lose memory in the next iteration */ |
|
+ free (rr_name); |
|
+ rr_name = NULL; |
|
+ |
|
+ /* Move on to the next record */ |
|
+ aptr += rr_len; |
|
+ } |
|
+ |
|
+ if (hostname) |
|
+ free (hostname); |
|
+ if (rr_name) |
|
+ free (rr_name); |
|
+ |
|
+ /* clean up on error */ |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ if (mx_head) |
|
+ ares_free_data (mx_head); |
|
+ return status; |
|
+ } |
|
+ |
|
+ /* everything looks fine, return the data */ |
|
+ *mx_out = mx_head; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_ns_reply.c b/deps/libuv/src/ares/ares_parse_ns_reply.c |
|
new file mode 100644 |
|
index 0000000..5e9af71 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_ns_reply.c |
|
@@ -0,0 +1,182 @@ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+/* |
|
+ * ares_parse_ns_reply created by Vlad Dinulescu <[email protected]> |
|
+ * on behalf of AVIRA Gmbh - http://www.avira.com |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_parse_ns_reply( const unsigned char* abuf, int alen, |
|
+ struct hostent** host ) |
|
+{ |
|
+ unsigned int qdcount, ancount; |
|
+ int status, i, rr_type, rr_class, rr_len; |
|
+ int nameservers_num; |
|
+ long len; |
|
+ const unsigned char *aptr; |
|
+ char* hostname, *rr_name, *rr_data, **nameservers; |
|
+ struct hostent *hostent; |
|
+ |
|
+ /* Set *host to NULL for all failure cases. */ |
|
+ *host = NULL; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if ( alen < HFIXEDSZ ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT( abuf ); |
|
+ ancount = DNS_HEADER_ANCOUNT( abuf ); |
|
+ if ( qdcount != 1 ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len); |
|
+ if ( status != ARES_SUCCESS ) |
|
+ return status; |
|
+ if ( aptr + len + QFIXEDSZ > abuf + alen ) |
|
+ { |
|
+ free( hostname ); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Allocate nameservers array; ancount gives an upper bound */ |
|
+ nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) ); |
|
+ if ( !nameservers ) |
|
+ { |
|
+ free( hostname ); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ nameservers_num = 0; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for ( i = 0; i < ( int ) ancount; i++ ) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len ); |
|
+ if ( status != ARES_SUCCESS ) |
|
+ break; |
|
+ aptr += len; |
|
+ if ( aptr + RRFIXEDSZ > abuf + alen ) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ free(rr_name); |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE( aptr ); |
|
+ rr_class = DNS_RR_CLASS( aptr ); |
|
+ rr_len = DNS_RR_LEN( aptr ); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ if ( rr_class == C_IN && rr_type == T_NS ) |
|
+ { |
|
+ /* Decode the RR data and add it to the nameservers list */ |
|
+ status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data, |
|
+ &len); |
|
+ if ( status != ARES_SUCCESS ) |
|
+ { |
|
+ free(rr_name); |
|
+ break; |
|
+ } |
|
+ |
|
+ nameservers[nameservers_num] = malloc(strlen(rr_data)+1); |
|
+ |
|
+ if (nameservers[nameservers_num]==NULL) |
|
+ { |
|
+ free(rr_name); |
|
+ free(rr_data); |
|
+ status=ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ strcpy(nameservers[nameservers_num],rr_data); |
|
+ free(rr_data); |
|
+ |
|
+ nameservers_num++; |
|
+ } |
|
+ |
|
+ free( rr_name ); |
|
+ |
|
+ aptr += rr_len; |
|
+ if ( aptr > abuf + alen ) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ } |
|
+ |
|
+ if ( status == ARES_SUCCESS && nameservers_num == 0 ) |
|
+ { |
|
+ status = ARES_ENODATA; |
|
+ } |
|
+ if ( status == ARES_SUCCESS ) |
|
+ { |
|
+ /* We got our answer. Allocate memory to build the host entry. */ |
|
+ nameservers[nameservers_num] = NULL; |
|
+ hostent = malloc( sizeof( struct hostent ) ); |
|
+ if ( hostent ) |
|
+ { |
|
+ hostent->h_addr_list = malloc( 1 * sizeof( char * ) ); |
|
+ if ( hostent->h_addr_list ) |
|
+ { |
|
+ /* Fill in the hostent and return successfully. */ |
|
+ hostent->h_name = hostname; |
|
+ hostent->h_aliases = nameservers; |
|
+ hostent->h_addrtype = AF_INET; |
|
+ hostent->h_length = sizeof( struct in_addr ); |
|
+ hostent->h_addr_list[0] = NULL; |
|
+ *host = hostent; |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ free( hostent ); |
|
+ } |
|
+ status = ARES_ENOMEM; |
|
+ } |
|
+ for ( i = 0; i < nameservers_num; i++ ) |
|
+ free( nameservers[i] ); |
|
+ free( nameservers ); |
|
+ free( hostname ); |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_ptr_reply.c b/deps/libuv/src/ares/ares_parse_ptr_reply.c |
|
new file mode 100644 |
|
index 0000000..3b6dbc3 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_ptr_reply.c |
|
@@ -0,0 +1,217 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_STRINGS_H |
|
+# include <strings.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, |
|
+ int addrlen, int family, struct hostent **host) |
|
+{ |
|
+ unsigned int qdcount, ancount; |
|
+ int status, i, rr_type, rr_class, rr_len; |
|
+ long len; |
|
+ const unsigned char *aptr; |
|
+ char *ptrname, *hostname, *rr_name, *rr_data; |
|
+ struct hostent *hostent; |
|
+ int aliascnt = 0; |
|
+ int alias_alloc = 8; |
|
+ char ** aliases; |
|
+ |
|
+ /* Set *host to NULL for all failure cases. */ |
|
+ *host = NULL; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT(abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT(abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(ptrname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ hostname = NULL; |
|
+ aliases = malloc(alias_alloc * sizeof(char *)); |
|
+ if (!aliases) |
|
+ { |
|
+ free(ptrname); |
|
+ return ARES_ENOMEM; |
|
+ } |
|
+ for (i = 0; i < (int)ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE(aptr); |
|
+ rr_class = DNS_RR_CLASS(aptr); |
|
+ rr_len = DNS_RR_LEN(aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_PTR |
|
+ && strcasecmp(rr_name, ptrname) == 0) |
|
+ { |
|
+ /* Decode the RR data and set hostname to it. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, |
|
+ &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ free(rr_name); |
|
+ break; |
|
+ } |
|
+ if (hostname) |
|
+ free(hostname); |
|
+ hostname = rr_data; |
|
+ aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char)); |
|
+ if (!aliases[aliascnt]) |
|
+ { |
|
+ free(rr_name); |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1); |
|
+ aliascnt++; |
|
+ if (aliascnt >= alias_alloc) { |
|
+ char **ptr; |
|
+ alias_alloc *= 2; |
|
+ ptr = realloc(aliases, alias_alloc * sizeof(char *)); |
|
+ if(!ptr) { |
|
+ free(rr_name); |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ aliases = ptr; |
|
+ } |
|
+ } |
|
+ |
|
+ if (rr_class == C_IN && rr_type == T_CNAME) |
|
+ { |
|
+ /* Decode the RR data and replace ptrname with it. */ |
|
+ status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, |
|
+ &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ free(rr_name); |
|
+ break; |
|
+ } |
|
+ free(ptrname); |
|
+ ptrname = rr_data; |
|
+ } |
|
+ |
|
+ free(rr_name); |
|
+ aptr += rr_len; |
|
+ if (aptr > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ } |
|
+ |
|
+ if (status == ARES_SUCCESS && !hostname) |
|
+ status = ARES_ENODATA; |
|
+ if (status == ARES_SUCCESS) |
|
+ { |
|
+ /* We got our answer. Allocate memory to build the host entry. */ |
|
+ hostent = malloc(sizeof(struct hostent)); |
|
+ if (hostent) |
|
+ { |
|
+ hostent->h_addr_list = malloc(2 * sizeof(char *)); |
|
+ if (hostent->h_addr_list) |
|
+ { |
|
+ hostent->h_addr_list[0] = malloc(addrlen); |
|
+ if (hostent->h_addr_list[0]) |
|
+ { |
|
+ hostent->h_aliases = malloc((aliascnt+1) * sizeof (char *)); |
|
+ if (hostent->h_aliases) |
|
+ { |
|
+ /* Fill in the hostent and return successfully. */ |
|
+ hostent->h_name = hostname; |
|
+ for (i=0 ; i<aliascnt ; i++) |
|
+ hostent->h_aliases[i] = aliases[i]; |
|
+ hostent->h_aliases[aliascnt] = NULL; |
|
+ hostent->h_addrtype = family; |
|
+ hostent->h_length = addrlen; |
|
+ memcpy(hostent->h_addr_list[0], addr, addrlen); |
|
+ hostent->h_addr_list[1] = NULL; |
|
+ *host = hostent; |
|
+ free(aliases); |
|
+ free(ptrname); |
|
+ return ARES_SUCCESS; |
|
+ } |
|
+ free(hostent->h_addr_list[0]); |
|
+ } |
|
+ free(hostent->h_addr_list); |
|
+ } |
|
+ free(hostent); |
|
+ } |
|
+ status = ARES_ENOMEM; |
|
+ } |
|
+ for (i=0 ; i<aliascnt ; i++) |
|
+ if (aliases[i]) |
|
+ free(aliases[i]); |
|
+ free(aliases); |
|
+ if (hostname) |
|
+ free(hostname); |
|
+ free(ptrname); |
|
+ return status; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_srv_reply.c b/deps/libuv/src/ares/ares_parse_srv_reply.c |
|
new file mode 100644 |
|
index 0000000..9c7eb6e |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_srv_reply.c |
|
@@ -0,0 +1,179 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2009 by Jakub Hrozek <[email protected]> |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_data.h" |
|
+#include "ares_private.h" |
|
+ |
|
+/* AIX portability check */ |
|
+#ifndef T_SRV |
|
+# define T_SRV 33 /* server selection */ |
|
+#endif |
|
+ |
|
+int |
|
+ares_parse_srv_reply (const unsigned char *abuf, int alen, |
|
+ struct ares_srv_reply **srv_out) |
|
+{ |
|
+ unsigned int qdcount, ancount, i; |
|
+ const unsigned char *aptr, *vptr; |
|
+ int status, rr_type, rr_class, rr_len; |
|
+ long len; |
|
+ char *hostname = NULL, *rr_name = NULL; |
|
+ struct ares_srv_reply *srv_head = NULL; |
|
+ struct ares_srv_reply *srv_last = NULL; |
|
+ struct ares_srv_reply *srv_curr; |
|
+ |
|
+ /* Set *srv_out to NULL for all failure cases. */ |
|
+ *srv_out = NULL; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT (abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT (abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ if (ancount == 0) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares_expand_name (aptr, abuf, alen, &hostname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free (hostname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for (i = 0; i < ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ break; |
|
+ } |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE (aptr); |
|
+ rr_class = DNS_RR_CLASS (aptr); |
|
+ rr_len = DNS_RR_LEN (aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ /* Check if we are really looking at a SRV record */ |
|
+ if (rr_class == C_IN && rr_type == T_SRV) |
|
+ { |
|
+ /* parse the SRV record itself */ |
|
+ if (rr_len < 6) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ |
|
+ /* Allocate storage for this SRV answer appending it to the list */ |
|
+ srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY); |
|
+ if (!srv_curr) |
|
+ { |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ if (srv_last) |
|
+ { |
|
+ srv_last->next = srv_curr; |
|
+ } |
|
+ else |
|
+ { |
|
+ srv_head = srv_curr; |
|
+ } |
|
+ srv_last = srv_curr; |
|
+ |
|
+ vptr = aptr; |
|
+ srv_curr->priority = DNS__16BIT(vptr); |
|
+ vptr += sizeof(unsigned short); |
|
+ srv_curr->weight = DNS__16BIT(vptr); |
|
+ vptr += sizeof(unsigned short); |
|
+ srv_curr->port = DNS__16BIT(vptr); |
|
+ vptr += sizeof(unsigned short); |
|
+ |
|
+ status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ break; |
|
+ } |
|
+ |
|
+ /* Don't lose memory in the next iteration */ |
|
+ free (rr_name); |
|
+ rr_name = NULL; |
|
+ |
|
+ /* Move on to the next record */ |
|
+ aptr += rr_len; |
|
+ } |
|
+ |
|
+ if (hostname) |
|
+ free (hostname); |
|
+ if (rr_name) |
|
+ free (rr_name); |
|
+ |
|
+ /* clean up on error */ |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ if (srv_head) |
|
+ ares_free_data (srv_head); |
|
+ return status; |
|
+ } |
|
+ |
|
+ /* everything looks fine, return the data */ |
|
+ *srv_out = srv_head; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_parse_txt_reply.c b/deps/libuv/src/ares/ares_parse_txt_reply.c |
|
new file mode 100644 |
|
index 0000000..5165332 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_parse_txt_reply.c |
|
@@ -0,0 +1,201 @@ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2009 by Jakub Hrozek <[email protected]> |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#ifdef HAVE_SYS_SOCKET_H |
|
+# include <sys/socket.h> |
|
+#endif |
|
+#ifdef HAVE_NETINET_IN_H |
|
+# include <netinet/in.h> |
|
+#endif |
|
+#ifdef HAVE_NETDB_H |
|
+# include <netdb.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_INET_H |
|
+# include <arpa/inet.h> |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_H |
|
+# include <arpa/nameser.h> |
|
+#else |
|
+# include "nameser.h" |
|
+#endif |
|
+#ifdef HAVE_ARPA_NAMESER_COMPAT_H |
|
+# include <arpa/nameser_compat.h> |
|
+#endif |
|
+ |
|
+#ifdef HAVE_STRINGS_H |
|
+# include <strings.h> |
|
+#endif |
|
+ |
|
+#include <stdlib.h> |
|
+#include <string.h> |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_dns.h" |
|
+#include "ares_data.h" |
|
+#include "ares_private.h" |
|
+ |
|
+int |
|
+ares_parse_txt_reply (const unsigned char *abuf, int alen, |
|
+ struct ares_txt_reply **txt_out) |
|
+{ |
|
+ size_t substr_len, str_len; |
|
+ unsigned int qdcount, ancount, i; |
|
+ const unsigned char *aptr; |
|
+ const unsigned char *strptr; |
|
+ int status, rr_type, rr_class, rr_len; |
|
+ long len; |
|
+ char *hostname = NULL, *rr_name = NULL; |
|
+ struct ares_txt_reply *txt_head = NULL; |
|
+ struct ares_txt_reply *txt_last = NULL; |
|
+ struct ares_txt_reply *txt_curr; |
|
+ |
|
+ /* Set *txt_out to NULL for all failure cases. */ |
|
+ *txt_out = NULL; |
|
+ |
|
+ /* Give up if abuf doesn't have room for a header. */ |
|
+ if (alen < HFIXEDSZ) |
|
+ return ARES_EBADRESP; |
|
+ |
|
+ /* Fetch the question and answer count from the header. */ |
|
+ qdcount = DNS_HEADER_QDCOUNT (abuf); |
|
+ ancount = DNS_HEADER_ANCOUNT (abuf); |
|
+ if (qdcount != 1) |
|
+ return ARES_EBADRESP; |
|
+ if (ancount == 0) |
|
+ return ARES_ENODATA; |
|
+ |
|
+ /* Expand the name from the question, and skip past the question. */ |
|
+ aptr = abuf + HFIXEDSZ; |
|
+ status = ares_expand_name (aptr, abuf, alen, &hostname, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ return status; |
|
+ |
|
+ if (aptr + len + QFIXEDSZ > abuf + alen) |
|
+ { |
|
+ free (hostname); |
|
+ return ARES_EBADRESP; |
|
+ } |
|
+ aptr += len + QFIXEDSZ; |
|
+ |
|
+ /* Examine each answer resource record (RR) in turn. */ |
|
+ for (i = 0; i < ancount; i++) |
|
+ { |
|
+ /* Decode the RR up to the data field. */ |
|
+ status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ break; |
|
+ } |
|
+ aptr += len; |
|
+ if (aptr + RRFIXEDSZ > abuf + alen) |
|
+ { |
|
+ status = ARES_EBADRESP; |
|
+ break; |
|
+ } |
|
+ rr_type = DNS_RR_TYPE (aptr); |
|
+ rr_class = DNS_RR_CLASS (aptr); |
|
+ rr_len = DNS_RR_LEN (aptr); |
|
+ aptr += RRFIXEDSZ; |
|
+ |
|
+ /* Check if we are really looking at a TXT record */ |
|
+ if (rr_class == C_IN && rr_type == T_TXT) |
|
+ { |
|
+ /* Allocate storage for this TXT answer appending it to the list */ |
|
+ txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY); |
|
+ if (!txt_curr) |
|
+ { |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ if (txt_last) |
|
+ { |
|
+ txt_last->next = txt_curr; |
|
+ } |
|
+ else |
|
+ { |
|
+ txt_head = txt_curr; |
|
+ } |
|
+ txt_last = txt_curr; |
|
+ |
|
+ /* |
|
+ * There may be multiple substrings in a single TXT record. Each |
|
+ * substring may be up to 255 characters in length, with a |
|
+ * "length byte" indicating the size of the substring payload. |
|
+ * RDATA contains both the length-bytes and payloads of all |
|
+ * substrings contained therein. |
|
+ */ |
|
+ |
|
+ /* Compute total length to allow a single memory allocation */ |
|
+ strptr = aptr; |
|
+ while (strptr < (aptr + rr_len)) |
|
+ { |
|
+ substr_len = (unsigned char)*strptr; |
|
+ txt_curr->length += substr_len; |
|
+ strptr += substr_len + 1; |
|
+ } |
|
+ |
|
+ /* Including null byte */ |
|
+ txt_curr->txt = malloc (txt_curr->length + 1); |
|
+ if (txt_curr->txt == NULL) |
|
+ { |
|
+ status = ARES_ENOMEM; |
|
+ break; |
|
+ } |
|
+ |
|
+ /* Step through the list of substrings, concatenating them */ |
|
+ str_len = 0; |
|
+ strptr = aptr; |
|
+ while (strptr < (aptr + rr_len)) |
|
+ { |
|
+ substr_len = (unsigned char)*strptr; |
|
+ strptr++; |
|
+ memcpy ((char *) txt_curr->txt + str_len, strptr, substr_len); |
|
+ str_len += substr_len; |
|
+ strptr += substr_len; |
|
+ } |
|
+ /* Make sure we NULL-terminate */ |
|
+ *((char *) txt_curr->txt + txt_curr->length) = '\0'; |
|
+ } |
|
+ |
|
+ /* Don't lose memory in the next iteration */ |
|
+ free (rr_name); |
|
+ rr_name = NULL; |
|
+ |
|
+ /* Move on to the next record */ |
|
+ aptr += rr_len; |
|
+ } |
|
+ |
|
+ if (hostname) |
|
+ free (hostname); |
|
+ if (rr_name) |
|
+ free (rr_name); |
|
+ |
|
+ /* clean up on error */ |
|
+ if (status != ARES_SUCCESS) |
|
+ { |
|
+ if (txt_head) |
|
+ ares_free_data (txt_head); |
|
+ return status; |
|
+ } |
|
+ |
|
+ /* everything looks fine, return the data */ |
|
+ *txt_out = txt_head; |
|
+ |
|
+ return ARES_SUCCESS; |
|
+} |
|
diff --git a/deps/libuv/src/ares/ares_platform.c b/deps/libuv/src/ares/ares_platform.c |
|
new file mode 100644 |
|
index 0000000..c200615 |
|
--- /dev/null |
|
+++ b/deps/libuv/src/ares/ares_platform.c |
|
@@ -0,0 +1,11035 @@ |
|
+ |
|
+ |
|
+/* Copyright 1998 by the Massachusetts Institute of Technology. |
|
+ * Copyright (C) 2004 - 2011 by Daniel Stenberg et al |
|
+ * |
|
+ * Permission to use, copy, modify, and distribute this |
|
+ * software and its documentation for any purpose and without |
|
+ * fee is hereby granted, provided that the above copyright |
|
+ * notice appear in all copies and that both that copyright |
|
+ * notice and this permission notice appear in supporting |
|
+ * documentation, and that the name of M.I.T. not be used in |
|
+ * advertising or publicity pertaining to distribution of the |
|
+ * software without specific, written prior permission. |
|
+ * M.I.T. makes no representations about the suitability of |
|
+ * this software for any purpose. It is provided "as is" |
|
+ * without express or implied warranty. |
|
+ */ |
|
+ |
|
+#include "ares_setup.h" |
|
+ |
|
+#include "ares.h" |
|
+#include "ares_platform.h" |
|
+#include "ares_nowarn.h" |
|
+#include "ares_private.h" |
|
+ |
|
+#if defined(WIN32) && !defined(MSDOS) |
|
+ |
|
+#define V_PLATFORM_WIN32s 0 |
|
+#define V_PLATFORM_WIN32_WINDOWS 1 |
|
+#define V_PLATFORM_WIN32_NT 2 |
|
+#define V_PLATFORM_WIN32_CE 3 |
|
+ |
|
+win_platform ares__getplatform(void) |
|
+{ |
|
+ OSVERSIONINFOEX OsvEx; |
|
+ |
|
+ memset(&OsvEx, 0, sizeof(OsvEx)); |
|
+ OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); |
|
+ if (!GetVersionEx((void *)&OsvEx)) |
|
+ { |
|
+ memset(&OsvEx, 0, sizeof(OsvEx)); |
|
+ OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
|
+ if (!GetVersionEx((void *)&OsvEx)) |
|
+ return WIN_UNKNOWN; |
|
+ } |
|
+ |
|
+ switch(OsvEx.dwPlatformId) |
|
+ { |
|
+ case V_PLATFORM_WIN32s: |
|
+ return WIN_3X; |
|
+ |
|
+ case V_PLATFORM_WIN32_WINDOWS: |
|
+ return WIN_9X; |
|
+ |
|
+ case V_PLATFORM_WIN32_NT: |
|
+ return WIN_NT; |
|
+ |
|
+ case V_PLATFORM_WIN32_CE: |
|
+ return WIN_CE; |
|
+ |
|
+ default: |
|
+ return WIN_UNKNOWN; |
|
+ } |
|
+} |
|
+ |
|
+#endif /* WIN32 && ! MSDOS */ |
|
+ |
|
+#if defined(_WIN32_WCE) |
|
+ |
|
+/* IANA Well Known Ports are in range 0-1023 */ |
|
+#define USE_IANA_WELL_KNOWN_PORTS 1 |
|
+ |
|
+/* IANA Registered Ports are in range 1024-49151 */ |
|
+#define USE_IANA_REGISTERED_PORTS 1 |
|
+ |
|
+struct pvt_servent { |
|
+ char *s_name; |
|
+ char **s_aliases; |
|
+ unsigned short s_port; |
|
+ char *s_proto; |
|
+}; |
|
+ |
|
+/* |
|
+ * Ref: http://www.iana.org/assignments/port-numbers |
|
+ */ |
|
+ |
|
+static struct pvt_servent IANAports[] = { |
|
+#ifdef USE_IANA_WELL_KNOWN_PORTS |
|
+{"tcpmux", {NULL}, 1, "tcp"}, |
|
+{"tcpmux", {NULL}, 1, "udp"}, |
|
+{"compressnet", {NULL}, 2, "tcp"}, |
|
+{"compressnet", {NULL}, 2, "udp"}, |
|
+{"compressnet", {NULL}, 3, "tcp"}, |
|
+{"compressnet", {NULL}, 3, "udp"}, |
|
+{"rje", {NULL}, 5, "tcp"}, |
|
+{"rje", {NULL}, 5, "udp"}, |
|
+{"echo", {NULL}, 7, "tcp"}, |
|
+{"echo", {NULL}, 7, "udp"}, |
|
+{"discard", {NULL}, 9, "tcp"}, |
|
+{"discard", {NULL}, 9, "udp"}, |
|
+{"discard", {NULL}, 9, "sctp"}, |
|
+{"discard", {NULL}, 9, "dccp"}, |
|
+{"systat", {NULL}, 11, "tcp"}, |
|
+{"systat", {NULL}, 11, "udp"}, |
|
+{"daytime", {NULL}, 13, "tcp"}, |
|
+{"daytime", {NULL}, 13, "udp"}, |
|
+{"qotd", {NULL}, 17, "tcp"}, |
|
+{"qotd", {NULL}, 17, "udp"}, |
|
+{"msp", {NULL}, 18, "tcp"}, |
|
+{"msp", {NULL}, 18, "udp"}, |
|
+{"chargen", {NULL}, 19, "tcp"}, |
|
+{"chargen", {NULL}, 19, "udp"}, |
|
+{"ftp-data", {NULL}, 20, "tcp"}, |
|
+{"ftp-data", {NULL}, 20, "udp"}, |
|
+{"ftp-data", {NULL}, 20, "sctp"}, |
|
+{"ftp", {NULL}, 21, "tcp"}, |
|
+{"ftp", {NULL}, 21, "udp"}, |
|
+{"ftp", {NULL}, 21, "sctp"}, |
|
+{"ssh", {NULL}, 22, "tcp"}, |
|
+{"ssh", {NULL}, 22, "udp"}, |
|
+{"ssh", {NULL}, 22, "sctp"}, |
|
+{"telnet", {NULL}, 23, "tcp"}, |
|
+{"telnet", {NULL}, 23, "udp"}, |
|
+{"smtp", {NULL}, 25, "tcp"}, |
|
+{"smtp", {NULL}, 25, "udp"}, |
|
+{"nsw-fe", {NULL}, 27, "tcp"}, |
|
+{"nsw-fe", {NULL}, 27, "udp"}, |
|
+{"msg-icp", {NULL}, 29, "tcp"}, |
|
+{"msg-icp", {NULL}, 29, "udp"}, |
|
+{"msg-auth", {NULL}, 31, "tcp"}, |
|
+{"msg-auth", {NULL}, 31, "udp"}, |
|
+{"dsp", {NULL}, 33, "tcp"}, |
|
+{"dsp", {NULL}, 33, "udp"}, |
|
+{"time", {NULL}, 37, "tcp"}, |
|
+{"time", {NULL}, 37, "udp"}, |
|
+{"rap", {NULL}, 38, "tcp"}, |
|
+{"rap", {NULL}, 38, "udp"}, |
|
+{"rlp", {NULL}, 39, "tcp"}, |
|
+{"rlp", {NULL}, 39, "udp"}, |
|
+{"graphics", {NULL}, 41, "tcp"}, |
|
+{"graphics", {NULL}, 41, "udp"}, |
|
+{"name", {NULL}, 42, "tcp"}, |
|
+{"name", {NULL}, 42, "udp"}, |
|
+{"nameserver", {NULL}, 42, "tcp"}, |
|
+{"nameserver", {NULL}, 42, "udp"}, |
|
+{"nicname", {NULL}, 43, "tcp"}, |
|
+{"nicname", {NULL}, 43, "udp"}, |
|
+{"mpm-flags", {NULL}, 44, "tcp"}, |
|
+{"mpm-flags", {NULL}, 44, "udp"}, |
|
+{"mpm", {NULL}, 45, "tcp"}, |
|
+{"mpm", {NULL}, 45, "udp"}, |
|
+{"mpm-snd", {NULL}, 46, "tcp"}, |
|
+{"mpm-snd", {NULL}, 46, "udp"}, |
|
+{"ni-ftp", {NULL}, 47, "tcp"}, |
|
+{"ni-ftp", {NULL}, 47, "udp"}, |
|
+{"auditd", {NULL}, 48, "tcp"}, |
|
+{"auditd", {NULL}, 48, "udp"}, |
|
+{"tacacs", {NULL}, 49, "tcp"}, |
|
+{"tacacs", {NULL}, 49, "udp"}, |
|
+{"re-mail-ck", {NULL}, 50, "tcp"}, |
|
+{"re-mail-ck", {NULL}, 50, "udp"}, |
|
+{"la-maint", {NULL}, 51, "tcp"}, |
|
+{"la-maint", {NULL}, 51, "udp"}, |
|
+{"xns-time", {NULL}, 52, "tcp"}, |
|
+{"xns-time", {NULL}, 52, "udp"}, |
|
+{"domain", {NULL}, 53, "tcp"}, |
|
+{"domain", {NULL}, 53, "udp"}, |
|
+{"xns-ch", {NULL}, 54, "tcp"}, |
|
+{"xns-ch", {NULL}, 54, "udp"}, |
|
+{"isi-gl", {NULL}, 55, "tcp"}, |
|
+{"isi-gl", {NULL}, 55, "udp"}, |
|
+{"xns-auth", {NULL}, 56, "tcp"}, |
|
+{"xns-auth", {NULL}, 56, "udp"}, |
|
+{"xns-mail", {NULL}, 58, "tcp"}, |
|
+{"xns-mail", {NULL}, 58, "udp"}, |
|
+{"ni-mail", {NULL}, 61, "tcp"}, |
|
+{"ni-mail", {NULL}, 61, "udp"}, |
|
+{"acas", {NULL}, 62, "tcp"}, |
|
+{"acas", {NULL}, 62, "udp"}, |
|
+{"whois++", {NULL}, 63, "tcp"}, |
|
+{"whois++", {NULL}, 63, "udp"}, |
|
+{"covia", {NULL}, 64, "tcp"}, |
|
+{"covia", {NULL}, 64, "udp"}, |
|
+{"tacacs-ds", {NULL}, 65, "tcp"}, |
|
+{"tacacs-ds", {NULL}, 65, "udp"}, |
|
+{"sql*net", {NULL}, 66, "tcp"}, |
|
+{"sql*net", {NULL}, 66, "udp"}, |
|
+{"bootps", {NULL}, 67, "tcp"}, |
|
+{"bootps", {NULL}, 67, "udp"}, |
|
+{"bootpc", {NULL}, 68, "tcp"}, |
|
+{"bootpc", {NULL}, 68, "udp"}, |
|
+{"tftp", {NULL}, 69, "tcp"}, |
|
+{"tftp", {NULL}, 69, "udp"}, |
|
+{"gopher", {NULL}, 70, "tcp"}, |
|
+{"gopher", {NULL}, 70, "udp"}, |
|
+{"netrjs-1", {NULL}, 71, "tcp"}, |
|
+{"netrjs-1", {NULL}, 71, "udp"}, |
|
+{"netrjs-2", {NULL}, 72, "tcp"}, |
|
+{"netrjs-2", {NULL}, 72, "udp"}, |
|
+{"netrjs-3", {NULL}, 73, "tcp"}, |
|
+{"netrjs-3", {NULL}, 73, "udp"}, |
|
+{"netrjs-4", {NULL}, 74, "tcp"}, |
|
+{"netrjs-4", {NULL}, 74, "udp"}, |
|
+{"deos", {NULL}, 76, "tcp"}, |
|
+{"deos", {NULL}, 76, "udp"}, |
|
+{"vettcp", {NULL}, 78, "tcp"}, |
|
+{"vettcp", {NULL}, 78, "udp"}, |
|
+{"finger", {NULL}, 79, "tcp"}, |
|
+{"finger", {NULL}, 79, "udp"}, |
|
+{"http", {NULL}, 80, "tcp"}, |
|
+{"http", {NULL}, 80, "udp"}, |
|
+{"www", {NULL}, 80, "tcp"}, |
|
+{"www", {NULL}, 80, "udp"}, |
|
+{"www-http", {NULL}, 80, "tcp"}, |
|
+{"www-http", {NULL}, 80, "udp"}, |
|
+{"http", {NULL}, 80, "sctp"}, |
|
+{"xfer", {NULL}, 82, "tcp"}, |
|
+{"xfer", {NULL}, 82, "udp"}, |
|
+{"mit-ml-dev", {NULL}, 83, "tcp"}, |
|
+{"mit-ml-dev", {NULL}, 83, "udp"}, |
|
+{"ctf", {NULL}, 84, "tcp"}, |
|
+{"ctf", {NULL}, 84, "udp"}, |
|
+{"mit-ml-dev", {NULL}, 85, "tcp"}, |
|
+{"mit-ml-dev", {NULL}, 85, "udp"}, |
|
+{"mfcobol", {NULL}, 86, "tcp"}, |
|
+{"mfcobol", {NULL}, 86, "udp"}, |
|
+{"kerberos", {NULL}, 88, "tcp"}, |
|
+{"kerberos", {NULL}, 88, "udp"}, |
|
+{"su-mit-tg", {NULL}, 89, "tcp"}, |
|
+{"su-mit-tg", {NULL}, 89, "udp"}, |
|
+{"dnsix", {NULL}, 90, "tcp"}, |
|
+{"dnsix", {NULL}, 90, "udp"}, |
|
+{"mit-dov", {NULL}, 91, "tcp"}, |
|
+{"mit-dov", {NULL}, 91, "udp"}, |
|
+{"npp", {NULL}, 92, "tcp"}, |
|
+{"npp", {NULL}, 92, "udp"}, |
|
+{"dcp", {NULL}, 93, "tcp"}, |
|
+{"dcp", {NULL}, 93, "udp"}, |
|
+{"objcall", {NULL}, 94, "tcp"}, |
|
+{"objcall", {NULL}, 94, "udp"}, |
|
+{"supdup", {NULL}, 95, "tcp"}, |
|
+{"supdup", {NULL}, 95, "udp"}, |
|
+{"dixie", {NULL}, 96, "tcp"}, |
|
+{"dixie", {NULL}, 96, "udp"}, |
|
+{"swift-rvf", {NULL}, 97, "tcp"}, |
|
+{"swift-rvf", {NULL}, 97, "udp"}, |
|
+{"tacnews", {NULL}, 98, "tcp"}, |
|
+{"tacnews", {NULL}, 98, "udp"}, |
|
+{"metagram", {NULL}, 99, "tcp"}, |
|
+{"metagram", {NULL}, 99, "udp"}, |
|
+{"newacct", {NULL}, 100, "tcp"}, |
|
+{"hostname", {NULL}, 101, "tcp"}, |
|
+{"hostname", {NULL}, 101, "udp"}, |
|
+{"iso-tsap", {NULL}, 102, "tcp"}, |
|
+{"iso-tsap", {NULL}, 102, "udp"}, |
|
+{"gppitnp", {NULL}, 103, "tcp"}, |
|
+{"gppitnp", {NULL}, 103, "udp"}, |
|
+{"acr-nema", {NULL}, 104, "tcp"}, |
|
+{"acr-nema", {NULL}, 104, "udp"}, |
|
+{"cso", {NULL}, 105, "tcp"}, |
|
+{"cso", {NULL}, 105, "udp"}, |
|
+{"csnet-ns", {NULL}, 105, "tcp"}, |
|
+{"csnet-ns", {NULL}, 105, "udp"}, |
|
+{"3com-tsmux", {NULL}, 106, "tcp"}, |
|
+{"3com-tsmux", {NULL}, 106, "udp"}, |
|
+{"rtelnet", {NULL}, 107, "tcp"}, |
|
+{"rtelnet", {NULL}, 107, "udp"}, |
|
+{"snagas", {NULL}, 108, "tcp"}, |
|
+{"snagas", {NULL}, 108, "udp"}, |
|
+{"pop2", {NULL}, 109, "tcp"}, |
|
+{"pop2", {NULL}, 109, "udp"}, |
|
+{"pop3", {NULL}, 110, "tcp"}, |
|
+{"pop3", {NULL}, 110, "udp"}, |
|
+{"sunrpc", {NULL}, 111, "tcp"}, |
|
+{"sunrpc", {NULL}, 111, "udp"}, |
|
+{"mcidas", {NULL}, 112, "tcp"}, |
|
+{"mcidas", {NULL}, 112, "udp"}, |
|
+{"ident", {NULL}, 113, "tcp"}, |
|
+{"auth", {NULL}, 113, "tcp"}, |
|
+{"auth", {NULL}, 113, "udp"}, |
|
+{"sftp", {NULL}, 115, "tcp"}, |
|
+{"sftp", {NULL}, 115, "udp"}, |
|
+{"ansanotify", {NULL}, 116, "tcp"}, |
|
+{"ansanotify", {NULL}, 116, "udp"}, |
|
+{"uucp-path", {NULL}, 117, "tcp"}, |
|
+{"uucp-path", {NULL}, 117, "udp"}, |
|
+{"sqlserv", {NULL}, 118, "tcp"}, |
|
+{"sqlserv", {NULL}, 118, "udp"}, |
|
+{"nntp", {NULL}, 119, "tcp"}, |
|
+{"nntp", {NULL}, 119, "udp"}, |
|
+{"cfdptkt", {NULL}, 120, "tcp"}, |
|
+{"cfdptkt", {NULL}, 120, "udp"}, |
|
+{"erpc", {NULL}, 121, "tcp"}, |
|
+{"erpc", {NULL}, 121, "udp"}, |
|
+{"smakynet", {NULL}, 122, "tcp"}, |
|
+{"smakynet", {NULL}, 122, "udp"}, |
|
+{"ntp", {NULL}, 123, "tcp"}, |
|
+{"ntp", {NULL}, 123, "udp"}, |
|
+{"ansatrader", {NULL}, 124, "tcp"}, |
|
+{"ansatrader", {NULL}, 124, "udp"}, |
|
+{"locus-map", {NULL}, 125, "tcp"}, |
|
+{"locus-map", {NULL}, 125, "udp"}, |
|
+{"nxedit", {NULL}, 126, "tcp"}, |
|
+{"nxedit", {NULL}, 126, "udp"}, |
|
+{"locus-con", {NULL}, 127, "tcp"}, |
|
+{"locus-con", {NULL}, 127, "udp"}, |
|
+{"gss-xlicen", {NULL}, 128, "tcp"}, |
|
+{"gss-xlicen", {NULL}, 128, "udp"}, |
|
+{"pwdgen", {NULL}, 129, "tcp"}, |
|
+{"pwdgen", {NULL}, 129, "udp"}, |
|
+{"cisco-fna", {NULL}, 130, "tcp"}, |
|
+{"cisco-fna", {NULL}, 130, "udp"}, |
|
+{"cisco-tna", {NULL}, 131, "tcp"}, |
|
+{"cisco-tna", {NULL}, 131, "udp"}, |
|
+{"cisco-sys", {NULL}, 132, "tcp"}, |
|
+{"cisco-sys", {NULL}, 132, "udp"}, |
|
+{"statsrv", {NULL}, 133, "tcp"}, |
|
+{"statsrv", {NULL}, 133, "udp"}, |
|
+{"ingres-net", {NULL}, 134, "tcp"}, |
|
+{"ingres-net", {NULL}, 134, "udp"}, |
|
+{"epmap", {NULL}, 135, "tcp"}, |
|
+{"epmap", {NULL}, 135, "udp"}, |
|
+{"profile", {NULL}, 136, "tcp"}, |
|
+{"profile", {NULL}, 136, "udp"}, |
|
+{"netbios-ns", {NULL}, 137, "tcp"}, |
|
+{"netbios-ns", {NULL}, 137, "udp"}, |
|
+{"netbios-dgm", {NULL}, 138, "tcp"}, |
|
+{"netbios-dgm", {NULL}, 138, "udp"}, |
|
+{"netbios-ssn", {NULL}, 139, "tcp"}, |
|
+{"netbios-ssn", {NULL}, 139, "udp"}, |
|
+{"emfis-data", {NULL}, 140, "tcp"}, |
|
+{"emfis-data", {NULL}, 140, "udp"}, |
|
+{"emfis-cntl", {NULL}, 141, "tcp"}, |
|
+{"emfis-cntl", {NULL}, 141, "udp"}, |
|
+{"bl-idm", {NULL}, 142, "tcp"}, |
|
+{"bl-idm", {NULL}, 142, "udp"}, |
|
+{"imap", {NULL}, 143, "tcp"}, |
|
+{"imap", {NULL}, 143, "udp"}, |
|
+{"uma", {NULL}, 144, "tcp"}, |
|
+{"uma", {NULL}, 144, "udp"}, |
|
+{"uaac", {NULL}, 145, "tcp"}, |
|
+{"uaac", {NULL}, 145, "udp"}, |
|
+{"iso-tp0", {NULL}, 146, "tcp"}, |
|
+{"iso-tp0", {NULL}, 146, "udp"}, |
|
+{"iso-ip", {NULL}, 147, "tcp"}, |
|
+{"iso-ip", {NULL}, 147, "udp"}, |
|
+{"jargon", {NULL}, 148, "tcp"}, |
|
+{"jargon", {NULL}, 148, "udp"}, |
|
+{"aed-512", {NULL}, 149, "tcp"}, |
|
+{"aed-512", {NULL}, 149, "udp"}, |
|
+{"sql-net", {NULL}, 150, "tcp"}, |
|
+{"sql-net", {NULL}, 150, "udp"}, |
|
+{"hems", {NULL}, 151, "tcp"}, |
|
+{"hems", {NULL}, 151, "udp"}, |
|
+{"bftp", {NULL}, 152, "tcp"}, |
|
+{"bftp", {NULL}, 152, "udp"}, |
|
+{"sgmp", {NULL}, 153, "tcp"}, |
|
+{"sgmp", {NULL}, 153, "udp"}, |
|
+{"netsc-prod", {NULL}, 154, "tcp"}, |
|
+{"netsc-prod", {NULL}, 154, "udp"}, |
|
+{"netsc-dev", {NULL}, 155, "tcp"}, |
|
+{"netsc-dev", {NULL}, 155, "udp"}, |
|
+{"sqlsrv", {NULL}, 156, "tcp"}, |
|
+{"sqlsrv", {NULL}, 156, "udp"}, |
|
+{"knet-cmp", {NULL}, 157, "tcp"}, |
|
+{"knet-cmp", {NULL}, 157, "udp"}, |
|
+{"pcmail-srv", {NULL}, 158, "tcp"}, |
|
+{"pcmail-srv", {NULL}, 158, "udp"}, |
|
+{"nss-routing", {NULL}, 159, "tcp"}, |
|
+{"nss-routing", {NULL}, 159, "udp"}, |
|
+{"sgmp-traps", {NULL}, 160, "tcp"}, |
|
+{"sgmp-traps", {NULL}, 160, "udp"}, |
|
+{"snmp", {NULL}, 161, "tcp"}, |
|
+{"snmp", {NULL}, 161, "udp"}, |
|
+{"snmptrap", {NULL}, 162, "tcp"}, |
|
+{"snmptrap", {NULL}, 162, "udp"}, |
|
+{"cmip-man", {NULL}, 163, "tcp"}, |
|
+{"cmip-man", {NULL}, 163, "udp"}, |
|
+{"cmip-agent", {NULL}, 164, "tcp"}, |
|
+{"cmip-agent", {NULL}, 164, "udp"}, |
|
+{"xns-courier", {NULL}, 165, "tcp"}, |
|
+{"xns-courier", {NULL}, 165, "udp"}, |
|
+{"s-net", {NULL}, 166, "tcp"}, |
|
+{"s-net", {NULL}, 166, "udp"}, |
|
+{"namp", {NULL}, 167, "tcp"}, |
|
+{"namp", {NULL}, 167, "udp"}, |
|
+{"rsvd", {NULL}, 168, "tcp"}, |
|
+{"rsvd", {NULL}, 168, "udp"}, |
|
+{"send", {NULL}, 169, "tcp"}, |
|
+{"send", {NULL}, 169, "udp"}, |
|
+{"print-srv", {NULL}, 170, "tcp"}, |
|
+{"print-srv", {NULL}, 170, "udp"}, |
|
+{"multiplex", {NULL}, 171, "tcp"}, |
|
+{"multiplex", {NULL}, 171, "udp"}, |
|
+{"cl/1", {NULL}, 172, "tcp"}, |
|
+{"cl/1", {NULL}, 172, "udp"}, |
|
+{"xyplex-mux", {NULL}, 173, "tcp"}, |
|
+{"xyplex-mux", {NULL}, 173, "udp"}, |
|
+{"mailq", {NULL}, 174, "tcp"}, |
|
+{"mailq", {NULL}, 174, "udp"}, |
|
+{"vmnet", {NULL}, 175, "tcp"}, |
|
+{"vmnet", {NULL}, 175, "udp"}, |
|
+{"genrad-mux", {NULL}, 176, "tcp"}, |
|
+{"genrad-mux", {NULL}, 176, "udp"}, |
|
+{"xdmcp", {NULL}, 177, "tcp"}, |
|
+{"xdmcp", {NULL}, 177, "udp"}, |
|
+{"nextstep", {NULL}, 178, "tcp"}, |
|
+{"nextstep", {NULL}, 178, "udp"}, |
|
+{"bgp", {NULL}, 179, "tcp"}, |
|
+{"bgp", {NULL}, 179, "udp"}, |
|
+{"bgp", {NULL}, 179, "sctp"}, |
|
+{"ris", {NULL}, 180, "tcp"}, |
|
+{"ris", {NULL}, 180, "udp"}, |
|
+{"unify", {NULL}, 181, "tcp"}, |
|
+{"unify", {NULL}, 181, "udp"}, |
|
+{"audit", {NULL}, 182, "tcp"}, |
|
+{"audit", {NULL}, 182, "udp"}, |
|
+{"ocbinder", {NULL}, 183, "tcp"}, |
|
+{"ocbinder", {NULL}, 183, "udp"}, |
|
+{"ocserver", {NULL}, 184, "tcp"}, |
|
+{"ocserver", {NULL}, 184, "udp"}, |
|
+{"remote-kis", {NULL}, 185, "tcp"}, |
|
+{"remote-kis", {NULL}, 185, "udp"}, |
|
+{"kis", {NULL}, 186, "tcp"}, |
|
+{"kis", {NULL}, 186, "udp"}, |
|
+{"aci", {NULL}, 187, "tcp"}, |
|
+{"aci", {NULL}, 187, "udp"}, |
|
+{"mumps", {NULL}, 188, "tcp"}, |
|
+{"mumps", {NULL}, 188, "udp"}, |
|
+{"qft", {NULL}, 189, "tcp"}, |
|
+{"qft", {NULL}, 189, "udp"}, |
|
+{"gacp", {NULL}, 190, "tcp"}, |
|
+{"gacp", {NULL}, 190, "udp"}, |
|
+{"prospero", {NULL}, 191, "tcp"}, |
|
+{"prospero", {NULL}, 191, "udp"}, |
|
+{"osu-nms", {NULL}, 192, "tcp"}, |
|
+{"osu-nms", {NULL}, 192, "udp"}, |
|
+{"srmp", {NULL}, 193, "tcp"}, |
|
+{"srmp", {NULL}, 193, "udp"}, |
|
+{"irc", {NULL}, 194, "tcp"}, |
|
+{"irc", {NULL}, 194, "udp"}, |
|
+{"dn6-nlm-aud", {NULL}, 195, "tcp"}, |
|
+{"dn6-nlm-aud", {NULL}, 195, "udp"}, |
|
+{"dn6-smm-red", {NULL}, 196, "tcp"}, |
|
+{"dn6-smm-red", {NULL}, 196, "udp"}, |
|
+{"dls", {NULL}, 197, "tcp"}, |
|
+{"dls", {NULL}, 197, "udp"}, |
|
+{"dls-mon", {NULL}, 198, "tcp"}, |
|
+{"dls-mon", {NULL}, 198, "udp"}, |
|
+{"smux", {NULL}, 199, "tcp"}, |
|
+{"smux", {NULL}, 199, "udp"}, |
|
+{"src", {NULL}, 200, "tcp"}, |
|
+{"src", {NULL}, 200, "udp"}, |
|
+{"at-rtmp", {NULL}, 201, "tcp"}, |
|
+{"at-rtmp", {NULL}, 201, "udp"}, |
|
+{"at-nbp", {NULL}, 202, "tcp"}, |
|
+{"at-nbp", {NULL}, 202, "udp"}, |
|
+{"at-3", {NULL}, 203, "tcp"}, |
|
+{"at-3", {NULL}, 203, "udp"}, |
|
+{"at-echo", {NULL}, 204, "tcp"}, |
|
+{"at-echo", {NULL}, 204, "udp"}, |
|
+{"at-5", {NULL}, 205, "tcp"}, |
|
+{"at-5", {NULL}, 205, "udp"}, |
|
+{"at-zis", {NULL}, 206, "tcp"}, |
|
+{"at-zis", {NULL}, 206, "udp"}, |
|
+{"at-7", {NULL}, 207, "tcp"}, |
|
+{"at-7", {NULL}, 207, "udp"}, |
|
+{"at-8", {NULL}, 208, "tcp"}, |
|
+{"at-8", {NULL}, 208, "udp"}, |
|
+{"qmtp", {NULL}, 209, "tcp"}, |
|
+{"qmtp", {NULL}, 209, "udp"}, |
|
+{"z39.50", {NULL}, 210, "tcp"}, |
|
+{"z39.50", {NULL}, 210, "udp"}, |
|
+{"914c/g", {NULL}, 211, "tcp"}, |
|
+{"914c/g", {NULL}, 211, "udp"}, |
|
+{"anet", {NULL}, 212, "tcp"}, |
|
+{"anet", {NULL}, 212, "udp"}, |
|
+{"ipx", {NULL}, 213, "tcp"}, |
|
+{"ipx", {NULL}, 213, "udp"}, |
|
+{"vmpwscs", {NULL}, 214, "tcp"}, |
|
+{"vmpwscs", {NULL}, 214, "udp"}, |
|
+{"softpc", {NULL}, 215, "tcp"}, |
|
+{"softpc", {NULL}, 215, "udp"}, |
|
+{"CAIlic", {NULL}, 216, "tcp"}, |
|
+{"CAIlic", {NULL}, 216, "udp"}, |
|
+{"dbase", {NULL}, 217, "tcp"}, |
|
+{"dbase", {NULL}, 217, "udp"}, |
|
+{"mpp", {NULL}, 218, "tcp"}, |
|
+{"mpp", {NULL}, 218, "udp"}, |
|
+{"uarps", {NULL}, 219, "tcp"}, |
|
+{"uarps", {NULL}, 219, "udp"}, |
|
+{"imap3", {NULL}, 220, "tcp"}, |
|
+{"imap3", {NULL}, 220, "udp"}, |
|
+{"fln-spx", {NULL}, 221, "tcp"}, |
|
+{"fln-spx", {NULL}, 221, "udp"}, |
|
+{"rsh-spx", {NULL}, 222, "tcp"}, |
|
+{"rsh-spx", {NULL}, 222, "udp"}, |
|
+{"cdc", {NULL}, 223, "tcp"}, |
|
+{"cdc", {NULL}, 223, "udp"}, |
|
+{"masqdialer", {NULL}, 224, "tcp"}, |
|
+{"masqdialer", {NULL}, 224, "udp"}, |
|
+{"direct", {NULL}, 242, "tcp"}, |
|
+{"direct", {NULL}, 242, "udp"}, |
|
+{"sur-meas", {NULL}, 243, "tcp"}, |
|
+{"sur-meas", {NULL}, 243, "udp"}, |
|
+{"inbusiness", {NULL}, 244, "tcp"}, |
|
+{"inbusiness", {NULL}, 244, "udp"}, |
|
+{"link", {NULL}, 245, "tcp"}, |
|
+{"link", {NULL}, 245, "udp"}, |
|
+{"dsp3270", {NULL}, 246, "tcp"}, |
|
+{"dsp3270", {NULL}, 246, "udp"}, |
|
+{"subntbcst_tftp", {NULL}, 247, "tcp"}, |
|
+{"subntbcst_tftp", {NULL}, 247, "udp"}, |
|
+{"bhfhs", {NULL}, 248, "tcp"}, |
|
+{"bhfhs", {NULL}, 248, "udp"}, |
|
+{"rap", {NULL}, 256, "tcp"}, |
|
+{"rap", {NULL}, 256, "udp"}, |
|
+{"set", {NULL}, 257, "tcp"}, |
|
+{"set", {NULL}, 257, "udp"}, |
|
+{"esro-gen", {NULL}, 259, "tcp"}, |
|
+{"esro-gen", {NULL}, 259, "udp"}, |
|
+{"openport", {NULL}, 260, "tcp"}, |
|
+{"openport", {NULL}, 260, "udp"}, |
|
+{"nsiiops", {NULL}, 261, "tcp"}, |
|
+{"nsiiops", {NULL}, 261, "udp"}, |
|
+{"arcisdms", {NULL}, 262, "tcp"}, |
|
+{"arcisdms", {NULL}, 262, "udp"}, |
|
+{"hdap", {NULL}, 263, "tcp"}, |
|
+{"hdap", {NULL}, 263, "udp"}, |
|
+{"bgmp", {NULL}, 264, "tcp"}, |
|
+{"bgmp", {NULL}, 264, "udp"}, |
|
+{"x-bone-ctl", {NULL}, 265, "tcp"}, |
|
+{"x-bone-ctl", {NULL}, 265, "udp"}, |
|
+{"sst", {NULL}, 266, "tcp"}, |
|
+{"sst", {NULL}, 266, "udp"}, |
|
+{"td-service", {NULL}, 267, "tcp"}, |
|
+{"td-service", {NULL}, 267, "udp"}, |
|
+{"td-replica", {NULL}, 268, "tcp"}, |
|
+{"td-replica", {NULL}, 268, "udp"}, |
|
+{"manet", {NULL}, 269, "tcp"}, |
|
+{"manet", {NULL}, 269, "udp"}, |
|
+{"gist", {NULL}, 270, "udp"}, |
|
+{"http-mgmt", {NULL}, 280, "tcp"}, |
|
+{"http-mgmt", {NULL}, 280, "udp"}, |
|
+{"personal-link", {NULL}, 281, "tcp"}, |
|
+{"personal-link", {NULL}, 281, "udp"}, |
|
+{"cableport-ax", {NULL}, 282, "tcp"}, |
|
+{"cableport-ax", {NULL}, 282, "udp"}, |
|
+{"rescap", {NULL}, 283, "tcp"}, |
|
+{"rescap", {NULL}, 283, "udp"}, |
|
+{"corerjd", {NULL}, 284, "tcp"}, |
|
+{"corerjd", {NULL}, 284, "udp"}, |
|
+{"fxp", {NULL}, 286, "tcp"}, |
|
+{"fxp", {NULL}, 286, "udp"}, |
|
+{"k-block", {NULL}, 287, "tcp"}, |
|
+{"k-block", {NULL}, 287, "udp"}, |
|
+{"novastorbakcup", {NULL}, 308, "tcp"}, |
|
+{"novastorbakcup", {NULL}, 308, "udp"}, |
|
+{"entrusttime", {NULL}, 309, "tcp"}, |
|
+{"entrusttime", {NULL}, 309, "udp"}, |
|
+{"bhmds", {NULL}, 310, "tcp"}, |
|
+{"bhmds", {NULL}, 310, "udp"}, |
|
+{"asip-webadmin", {NULL}, 311, "tcp"}, |
|
+{"asip-webadmin", {NULL}, 311, "udp"}, |
|
+{"vslmp", {NULL}, 312, "tcp"}, |
|
+{"vslmp", {NULL}, 312, "udp"}, |
|
+{"magenta-logic", {NULL}, 313, "tcp"}, |
|
+{"magenta-logic", {NULL}, 313, "udp"}, |
|
+{"opalis-robot", {NULL}, 314, "tcp"}, |
|
+{"opalis-robot", {NULL}, 314, "udp"}, |
|
+{"dpsi", {NULL}, 315, "tcp"}, |
|
+{"dpsi", {NULL}, 315, "udp"}, |
|
+{"decauth", {NULL}, 316, "tcp"}, |
|
+{"decauth", {NULL}, 316, "udp"}, |
|
+{"zannet", {NULL}, 317, "tcp"}, |
|
+{"zannet", {NULL}, 317, "udp"}, |
|
+{"pkix-timestamp", {NULL}, 318, "tcp"}, |
|
+{"pkix-timestamp", {NULL}, 318, "udp"}, |
|
+{"ptp-event", {NULL}, 319, "tcp"}, |
|
+{"ptp-event", {NULL}, 319, "udp"}, |
|
+{"ptp-general", {NULL}, 320, "tcp"}, |
|
+{"ptp-general", {NULL}, 320, "udp"}, |
|
+{"pip", {NULL}, 321, "tcp"}, |
|
+{"pip", {NULL}, 321, "udp"}, |
|
+{"rtsps", {NULL}, 322, "tcp"}, |
|
+{"rtsps", {NULL}, 322, "udp"}, |
|
+{"texar", {NULL}, 333, "tcp"}, |
|
+{"texar", {NULL}, 333, "udp"}, |
|
+{"pdap", {NULL}, 344, "tcp"}, |
|
+{"pdap", {NULL}, 344, "udp"}, |
|
+{"pawserv", {NULL}, 345, "tcp"}, |
|
+{"pawserv", {NULL}, 345, "udp"}, |
|
+{"zserv", {NULL}, 346, "tcp"}, |
|
+{"zserv", {NULL}, 346, "udp"}, |
|
+{"fatserv", {NULL}, 347, "tcp"}, |
|
+{"fatserv", {NULL}, 347, "udp"}, |
|
+{"csi-sgwp", {NULL}, 348, "tcp"}, |
|
+{"csi-sgwp", {NULL}, 348, "udp"}, |
|
+{"mftp", {NULL}, 349, "tcp"}, |
|
+{"mftp", {NULL}, 349, "udp"}, |
|
+{"matip-type-a", {NULL}, 350, "tcp"}, |
|
+{"matip-type-a", {NULL}, 350, "udp"}, |
|
+{"matip-type-b", {NULL}, 351, "tcp"}, |
|
+{"matip-type-b", {NULL}, 351, "udp"}, |
|
+{"bhoetty", {NULL}, 351, "tcp"}, |
|
+{"bhoetty", {NULL}, 351, "udp"}, |
|
+{"dtag-ste-sb", {NULL}, 352, "tcp"}, |
|
+{"dtag-ste-sb", {NULL}, 352, "udp"}, |
|
+{"bhoedap4", {NULL}, 352, "tcp"}, |
|
+{"bhoedap4", {NULL}, 352, "udp"}, |
|
+{"ndsauth", {NULL}, 353, "tcp"}, |
|
+{"ndsauth", {NULL}, 353, "udp"}, |
|
+{"bh611", {NULL}, 354, "tcp"}, |
|
+{"bh611", {NULL}, 354, "udp"}, |
|
+{"datex-asn", {NULL}, 355, "tcp"}, |
|
+{"datex-asn", {NULL}, 355, "udp"}, |
|
+{"cloanto-net-1", {NULL}, 356, "tcp"}, |
|
+{"cloanto-net-1", {NULL}, 356, "udp"}, |
|
+{"bhevent", {NULL}, 357, "tcp"}, |
|
+{"bhevent", {NULL}, 357, "udp"}, |
|
+{"shrinkwrap", {NULL}, 358, "tcp"}, |
|
+{"shrinkwrap", {NULL}, 358, "udp"}, |
|
+{"nsrmp", {NULL}, 359, "tcp"}, |
|
+{"nsrmp", {NULL}, 359, "udp"}, |
|
+{"scoi2odialog", {NULL}, 360, "tcp"}, |
|
+{"scoi2odialog", {NULL}, 360, "udp"}, |
|
+{"semantix", {NULL}, 361, "tcp"}, |
|
+{"semantix", {NULL}, 361, "udp"}, |
|
+{"srssend", {NULL}, 362, "tcp"}, |
|
+{"srssend", {NULL}, 362, "udp"}, |
|
+{"rsvp_tunnel", {NULL}, 363, "tcp"}, |
|
+{"rsvp_tunnel", {NULL}, 363, "udp"}, |
|
+{"aurora-cmgr", {NULL}, 364, "tcp"}, |
|
+{"aurora-cmgr", {NULL}, 364, "udp"}, |
|
+{"dtk", {NULL}, 365, "tcp"}, |
|
+{"dtk", {NULL}, 365, "udp"}, |
|
+{"odmr", {NULL}, 366, "tcp"}, |
|
+{"odmr", {NULL}, 366, "udp"}, |
|
+{"mortgageware", {NULL}, 367, "tcp"}, |
|
+{"mortgageware", {NULL}, 367, "udp"}, |
|
+{"qbikgdp", {NULL}, 368, "tcp"}, |
|
+{"qbikgdp", {NULL}, 368, "udp"}, |
|
+{"rpc2portmap", {NULL}, 369, "tcp"}, |
|
+{"rpc2portmap", {NULL}, 369, "udp"}, |
|
+{"codaauth2", {NULL}, 370, "tcp"}, |
|
+{"codaauth2", {NULL}, 370, "udp"}, |
|
+{"clearcase", {NULL}, 371, "tcp"}, |
|
+{"clearcase", {NULL}, 371, "udp"}, |
|
+{"ulistproc", {NULL}, 372, "tcp"}, |
|
+{"ulistproc", {NULL}, 372, "udp"}, |
|
+{"legent-1", {NULL}, 373, "tcp"}, |
|
+{"legent-1", {NULL}, 373, "udp"}, |
|
+{"legent-2", {NULL}, 374, "tcp"}, |
|
+{"legent-2", {NULL}, 374, "udp"}, |
|
+{"hassle", {NULL}, 375, "tcp"}, |
|
+{"hassle", {NULL}, 375, "udp"}, |
|
+{"nip", {NULL}, 376, "tcp"}, |
|
+{"nip", {NULL}, 376, "udp"}, |
|
+{"tnETOS", {NULL}, 377, "tcp"}, |
|
+{"tnETOS", {NULL}, 377, "udp"}, |
|
+{"dsETOS", {NULL}, 378, "tcp"}, |
|
+{"dsETOS", {NULL}, 378, "udp"}, |
|
+{"is99c", {NULL}, 379, "tcp"}, |
|
+{"is99c", {NULL}, 379, "udp"}, |
|
+{"is99s", {NULL}, 380, "tcp"}, |
|
+{"is99s", {NULL}, 380, "udp"}, |
|
+{"hp-collector", {NULL}, 381, "tcp"}, |
|
+{"hp-collector", {NULL}, 381, "udp"}, |
|
+{"hp-managed-node", {NULL}, 382, "tcp"}, |
|
+{"hp-managed-node", {NULL}, 382, "udp"}, |
|
+{"hp-alarm-mgr", {NULL}, 383, "tcp"}, |
|
+{"hp-alarm-mgr", {NULL}, 383, "udp"}, |
|
+{"arns", {NULL}, 384, "tcp"}, |
|
+{"arns", {NULL}, 384, "udp"}, |
|
+{"ibm-app", {NULL}, 385, "tcp"}, |
|
+{"ibm-app", {NULL}, 385, "udp"}, |
|
+{"asa", {NULL}, 386, "tcp"}, |
|
+{"asa", {NULL}, 386, "udp"}, |
|
+{"aurp", {NULL}, 387, "tcp"}, |
|
+{"aurp", {NULL}, 387, "udp"}, |
|
+{"unidata-ldm", {NULL}, 388, "tcp"}, |
|
+{"unidata-ldm", {NULL}, 388, "udp"}, |
|
+{"ldap", {NULL}, 389, "tcp"}, |
|
+{"ldap", {NULL}, 389, "udp"}, |
|
+{"uis", {NULL}, 390, "tcp"}, |
|
+{"uis", {NULL}, 390, "udp"}, |
|
+{"synotics-relay", {NULL}, 391, "tcp"}, |
|
+{"synotics-relay", {NULL}, 391, "udp"}, |
|
+{"synotics-broker", {NULL}, 392, "tcp"}, |
|
+{"synotics-broker", {NULL}, 392, "udp"}, |
|
+{"meta5", {NULL}, 393, "tcp"}, |
|
+{"meta5", {NULL}, 393, "udp"}, |
|
+{"embl-ndt", {NULL}, 394, "tcp"}, |
|
+{"embl-ndt", {NULL}, 394, "udp"}, |
|
+{"netcp", {NULL}, 395, "tcp"}, |
|
+{"netcp", {NULL}, 395, "udp"}, |
|
+{"netware-ip", {NULL}, 396, "tcp"}, |
|
+{"netware-ip", {NULL}, 396, "udp"}, |
|
+{"mptn", {NULL}, 397, "tcp"}, |
|
+{"mptn", {NULL}, 397, "udp"}, |
|
+{"kryptolan", {NULL}, 398, "tcp"}, |
|
+{"kryptolan", {NULL}, 398, "udp"}, |
|
+{"iso-tsap-c2", {NULL}, 399, "tcp"}, |
|
+{"iso-tsap-c2", {NULL}, 399, "udp"}, |
|
+{"osb-sd", {NULL}, 400, "tcp"}, |
|
+{"osb-sd", {NULL}, 400, "udp"}, |
|
+{"ups", {NULL}, 401, "tcp"}, |
|
+{"ups", {NULL}, 401, "udp"}, |
|
+{"genie", {NULL}, 402, "tcp"}, |
|
+{"genie", {NULL}, 402, "udp"}, |
|
+{"decap", {NULL}, 403, "tcp"}, |
|
+{"decap", {NULL}, 403, "udp"}, |
|
+{"nced", {NULL}, 404, "tcp"}, |
|
+{"nced", {NULL}, 404, "udp"}, |
|
+{"ncld", {NULL}, 405, "tcp"}, |
|
+{"ncld", {NULL}, 405, "udp"}, |
|
+{"imsp", {NULL}, 406, "tcp"}, |
|
+{"imsp", {NULL}, 406, "udp"}, |
|
+{"timbuktu", {NULL}, 407, "tcp"}, |
|
+{"timbuktu", {NULL}, 407, "udp"}, |
|
+{"prm-sm", {NULL}, 408, "tcp"}, |
|
+{"prm-sm", {NULL}, 408, "udp"}, |
|
+{"prm-nm", {NULL}, 409, "tcp"}, |
|
+{"prm-nm", {NULL}, 409, "udp"}, |
|
+{"decladebug", {NULL}, 410, "tcp"}, |
|
+{"decladebug", {NULL}, 410, "udp"}, |
|
+{"rmt", {NULL}, 411, "tcp"}, |
|
+{"rmt", {NULL}, 411, "udp"}, |
|
+{"synoptics-trap", {NULL}, 412, "tcp"}, |
|
+{"synoptics-trap", {NULL}, 412, "udp"}, |
|
+{"smsp", {NULL}, 413, "tcp"}, |
|
+{"smsp", {NULL}, 413, "udp"}, |
|
+{"infoseek", {NULL}, 414, "tcp"}, |
|
+{"infoseek", {NULL}, 414, "udp"}, |
|
+{"bnet", {NULL}, 415, "tcp"}, |
|
+{"bnet", {NULL}, 415, "udp"}, |
|
+{"silverplatter", {NULL}, 416, "tcp"}, |
|
+{"silverplatter", {NULL}, 416, "udp"}, |
|
+{"onmux", {NULL}, 417, "tcp"}, |
|
+{"onmux", {NULL}, 417, "udp"}, |
|
+{"hyper-g", {NULL}, 418, "tcp"}, |
|
+{"hyper-g", {NULL}, 418, "udp"}, |
|
+{"ariel1", {NULL}, 419, "tcp"}, |
|
+{"ariel1", {NULL}, 419, "udp"}, |
|
+{"smpte", {NULL}, 420, "tcp"}, |
|
+{"smpte", {NULL}, 420, "udp"}, |
|
+{"ariel2", {NULL}, 421, "tcp"}, |
|
+{"ariel2", {NULL}, 421, "udp"}, |
|
+{"ariel3", {NULL}, 422, "tcp"}, |
|
+{"ariel3", {NULL}, 422, "udp"}, |
|
+{"opc-job-start", {NULL}, 423, "tcp"}, |
|
+{"opc-job-start", {NULL}, 423, "udp"}, |
|
+{"opc-job-track", {NULL}, 424, "tcp"}, |
|
+{"opc-job-track", {NULL}, 424, "udp"}, |
|
+{"icad-el", {NULL}, 425, "tcp"}, |
|
+{"icad-el", {NULL}, 425, "udp"}, |
|
+{"smartsdp", {NULL}, 426, "tcp"}, |
|
+{"smartsdp", {NULL}, 426, "udp"}, |
|
+{"svrloc", {NULL}, 427, "tcp"}, |
|
+{"svrloc", {NULL}, 427, "udp"}, |
|
+{"ocs_cmu", {NULL}, 428, "tcp"}, |
|
+{"ocs_cmu", {NULL}, 428, "udp"}, |
|
+{"ocs_amu", {NULL}, 429, "tcp"}, |
|
+{"ocs_amu", {NULL}, 429, "udp"}, |
|
+{"utmpsd", {NULL}, 430, "tcp"}, |
|
+{"utmpsd", {NULL}, 430, "udp"}, |
|
+{"utmpcd", {NULL}, 431, "tcp"}, |
|
+{"utmpcd", {NULL}, 431, "udp"}, |
|
+{"iasd", {NULL}, 432, "tcp"}, |
|
+{"iasd", {NULL}, 432, "udp"}, |
|
+{"nnsp", {NULL}, 433, "tcp"}, |
|
+{"nnsp", {NULL}, 433, "udp"}, |
|
+{"mobileip-agent", {NULL}, 434, "tcp"}, |
|
+{"mobileip-agent", {NULL}, 434, "udp"}, |
|
+{"mobilip-mn", {NULL}, 435, "tcp"}, |
|
+{"mobilip-mn", {NULL}, 435, "udp"}, |
|
+{"dna-cml", {NULL}, 436, "tcp"}, |
|
+{"dna-cml", {NULL}, 436, "udp"}, |
|
+{"comscm", {NULL}, 437, "tcp"}, |
|
+{"comscm", {NULL}, 437, "udp"}, |
|
+{"dsfgw", {NULL}, 438, "tcp"}, |
|
+{"dsfgw", {NULL}, 438, "udp"}, |
|
+{"dasp", {NULL}, 439, "tcp"}, |
|
+{"dasp", {NULL}, 439, "udp"}, |
|
+{"sgcp", {NULL}, 440, "tcp"}, |
|
+{"sgcp", {NULL}, 440, "udp"}, |
|
+{"decvms-sysmgt", {NULL}, 441, "tcp"}, |
|
+{"decvms-sysmgt", {NULL}, 441, "udp"}, |
|
+{"cvc_hostd", {NULL}, 442, "tcp"}, |
|
+{"cvc_hostd", {NULL}, 442, "udp"}, |
|
+{"https", {NULL}, 443, "tcp"}, |
|
+{"https", {NULL}, 443, "udp"}, |
|
+{"https", {NULL}, 443, "sctp"}, |
|
+{"snpp", {NULL}, 444, "tcp"}, |
|
+{"snpp", {NULL}, 444, "udp"}, |
|
+{"microsoft-ds", {NULL}, 445, "tcp"}, |
|
+{"microsoft-ds", {NULL}, 445, "udp"}, |
|
+{"ddm-rdb", {NULL}, 446, "tcp"}, |
|
+{"ddm-rdb", {NULL}, 446, "udp"}, |
|
+{"ddm-dfm", {NULL}, 447, "tcp"}, |
|
+{"ddm-dfm", {NULL}, 447, "udp"}, |
|
+{"ddm-ssl", {NULL}, 448, "tcp"}, |
|
+{"ddm-ssl", {NULL}, 448, "udp"}, |
|
+{"as-servermap", {NULL}, 449, "tcp"}, |
|
+{"as-servermap", {NULL}, 449, "udp"}, |
|
+{"tserver", {NULL}, 450, "tcp"}, |
|
+{"tserver", {NULL}, 450, "udp"}, |
|
+{"sfs-smp-net", {NULL}, 451, "tcp"}, |
|
+{"sfs-smp-net", {NULL}, 451, "udp"}, |
|
+{"sfs-config", {NULL}, 452, "tcp"}, |
|
+{"sfs-config", {NULL}, 452, "udp"}, |
|
+{"creativeserver", {NULL}, 453, "tcp"}, |
|
+{"creativeserver", {NULL}, 453, "udp"}, |
|
+{"contentserver", {NULL}, 454, "tcp"}, |
|
+{"contentserver", {NULL}, 454, "udp"}, |
|
+{"creativepartnr", {NULL}, 455, "tcp"}, |
|
+{"creativepartnr", {NULL}, 455, "udp"}, |
|
+{"macon-tcp", {NULL}, 456, "tcp"}, |
|
+{"macon-udp", {NULL}, 456, "udp"}, |
|
+{"scohelp", {NULL}, 457, "tcp"}, |
|
+{"scohelp", {NULL}, 457, "udp"}, |
|
+{"appleqtc", {NULL}, 458, "tcp"}, |
|
+{"appleqtc", {NULL}, 458, "udp"}, |
|
+{"ampr-rcmd", {NULL}, 459, "tcp"}, |
|
+{"ampr-rcmd", {NULL}, 459, "udp"}, |
|
+{"skronk", {NULL}, 460, "tcp"}, |
|
+{"skronk", {NULL}, 460, "udp"}, |
|
+{"datasurfsrv", {NULL}, 461, "tcp"}, |
|
+{"datasurfsrv", {NULL}, 461, "udp"}, |
|
+{"datasurfsrvsec", {NULL}, 462, "tcp"}, |
|
+{"datasurfsrvsec", {NULL}, 462, "udp"}, |
|
+{"alpes", {NULL}, 463, "tcp"}, |
|
+{"alpes", {NULL}, 463, "udp"}, |
|
+{"kpasswd", {NULL}, 464, "tcp"}, |
|
+{"kpasswd", {NULL}, 464, "udp"}, |
|
+{"urd", {NULL}, 465, "tcp"}, |
|
+{"igmpv3lite", {NULL}, 465, "udp"}, |
|
+{"digital-vrc", {NULL}, 466, "tcp"}, |
|
+{"digital-vrc", {NULL}, 466, "udp"}, |
|
+{"mylex-mapd", {NULL}, 467, "tcp"}, |
|
+{"mylex-mapd", {NULL}, 467, "udp"}, |
|
+{"photuris", {NULL}, 468, "tcp"}, |
|
+{"photuris", {NULL}, 468, "udp"}, |
|
+{"rcp", {NULL}, 469, "tcp"}, |
|
+{"rcp", {NULL}, 469, "udp"}, |
|
+{"scx-proxy", {NULL}, 470, "tcp"}, |
|
+{"scx-proxy", {NULL}, 470, "udp"}, |
|
+{"mondex", {NULL}, 471, "tcp"}, |
|
+{"mondex", {NULL}, 471, "udp"}, |
|
+{"ljk-login", {NULL}, 472, "tcp"}, |
|
+{"ljk-login", {NULL}, 472, "udp"}, |
|
+{"hybrid-pop", {NULL}, 473, "tcp"}, |
|
+{"hybrid-pop", {NULL}, 473, "udp"}, |
|
+{"tn-tl-w1", {NULL}, 474, "tcp"}, |
|
+{"tn-tl-w2", {NULL}, 474, "udp"}, |
|
+{"tcpnethaspsrv", {NULL}, 475, "tcp"}, |
|
+{"tcpnethaspsrv", {NULL}, 475, "udp"}, |
|
+{"tn-tl-fd1", {NULL}, 476, "tcp"}, |
|
+{"tn-tl-fd1", {NULL}, 476, "udp"}, |
|
+{"ss7ns", {NULL}, 477, "tcp"}, |
|
+{"ss7ns", {NULL}, 477, "udp"}, |
|
+{"spsc", {NULL}, 478, "tcp"}, |
|
+{"spsc", {NULL}, 478, "udp"}, |
|
+{"iafserver", {NULL}, 479, "tcp"}, |
|
+{"iafserver", {NULL}, 479, "udp"}, |
|
+{"iafdbase", {NULL}, 480, "tcp"}, |
|
+{"iafdbase", {NULL}, 480, "udp"}, |
|
+{"ph", {NULL}, 481, "tcp"}, |
|
+{"ph", {NULL}, 481, "udp"}, |
|
+{"bgs-nsi", {NULL}, 482, "tcp"}, |
|
+{"bgs-nsi", {NULL}, 482, "udp"}, |
|
+{"ulpnet", {NULL}, 483, "tcp"}, |
|
+{"ulpnet", {NULL}, 483, "udp"}, |
|
+{"integra-sme", {NULL}, 484, "tcp"}, |
|
+{"integra-sme", {NULL}, 484, "udp"}, |
|
+{"powerburst", {NULL}, 485, "tcp"}, |
|
+{"powerburst", {NULL}, 485, "udp"}, |
|
+{"avian", {NULL}, 486, "tcp"}, |
|
+{"avian", {NULL}, 486, "udp"}, |
|
+{"saft", {NULL}, 487, "tcp"}, |
|
+{"saft", {NULL}, 487, "udp"}, |
|
+{"gss-http", {NULL}, 488, "tcp"}, |
|
+{"gss-http", {NULL}, 488, "udp"}, |
|
+{"nest-protocol", {NULL}, 489, "tcp"}, |
|
+{"nest-protocol", {NULL}, 489, "udp"}, |
|
+{"micom-pfs", {NULL}, 490, "tcp"}, |
|
+{"micom-pfs", {NULL}, 490, "udp"}, |
|
+{"go-login", {NULL}, 491, "tcp"}, |
|
+{"go-login", {NULL}, 491, "udp"}, |
|
+{"ticf-1", {NULL}, 492, "tcp"}, |
|
+{"ticf-1", {NULL}, 492, "udp"}, |
|
+{"ticf-2", {NULL}, 493, "tcp"}, |
|
+{"ticf-2", {NULL}, 493, "udp"}, |
|
+{"pov-ray", {NULL}, 494, "tcp"}, |
|
+{"pov-ray", {NULL}, 494, "udp"}, |
|
+{"intecourier", {NULL}, 495, "tcp"}, |
|
+{"intecourier", {NULL}, 495, "udp"}, |
|
+{"pim-rp-disc", {NULL}, 496, "tcp"}, |
|
+{"pim-rp-disc", {NULL}, 496, "udp"}, |
|
+{"dantz", {NULL}, 497, "tcp"}, |
|
+{"dantz", {NULL}, 497, "udp"}, |
|
+{"siam", {NULL}, 498, "tcp"}, |
|
+{"siam", {NULL}, 498, "udp"}, |
|
+{"iso-ill", {NULL}, 499, "tcp"}, |
|
+{"iso-ill", {NULL}, 499, "udp"}, |
|
+{"isakmp", {NULL}, 500, "tcp"}, |
|
+{"isakmp", {NULL}, 500, "udp"}, |
|
+{"stmf", {NULL}, 501, "tcp"}, |
|
+{"stmf", {NULL}, 501, "udp"}, |
|
+{"asa-appl-proto", {NULL}, 502, "tcp"}, |
|
+{"asa-appl-proto", {NULL}, 502, "udp"}, |
|
+{"intrinsa", {NULL}, 503, "tcp"}, |
|
+{"intrinsa", {NULL}, 503, "udp"}, |
|
+{"citadel", {NULL}, 504, "tcp"}, |
|
+{"citadel", {NULL}, 504, "udp"}, |
|
+{"mailbox-lm", {NULL}, 505, "tcp"}, |
|
+{"mailbox-lm", {NULL}, 505, "udp"}, |
|
+{"ohimsrv", {NULL}, 506, "tcp"}, |
|
+{"ohimsrv", {NULL}, 506, "udp"}, |
|
+{"crs", {NULL}, 507, "tcp"}, |
|
+{"crs", {NULL}, 507, "udp"}, |
|
+{"xvttp", {NULL}, 508, "tcp"}, |
|
+{"xvttp", {NULL}, 508, "udp"}, |
|
+{"snare", {NULL}, 509, "tcp"}, |
|
+{"snare", {NULL}, 509, "udp"}, |
|
+{"fcp", {NULL}, 510, "tcp"}, |
|
+{"fcp", {NULL}, 510, "udp"}, |
|
+{"passgo", {NULL}, 511, "tcp"}, |
|
+{"passgo", {NULL}, 511, "udp"}, |
|
+{"exec", {NULL}, 512, "tcp"}, |
|
+{"comsat", {NULL}, 512, "udp"}, |
|
+{"biff", {NULL}, 512, "udp"}, |
|
+{"login", {NULL}, 513, "tcp"}, |
|
+{"who", {NULL}, 513, "udp"}, |
|
+{"shell", {NULL}, 514, "tcp"}, |
|
+{"syslog", {NULL}, 514, "udp"}, |
|
+{"printer", {NULL}, 515, "tcp"}, |
|
+{"printer", {NULL}, 515, "udp"}, |
|
+{"videotex", {NULL}, 516, "tcp"}, |
|
+{"videotex", {NULL}, 516, "udp"}, |
|
+{"talk", {NULL}, 517, "tcp"}, |
|
+{"talk", {NULL}, 517, "udp"}, |
|
+{"ntalk", {NULL}, 518, "tcp"}, |
|
+{"ntalk", {NULL}, 518, "udp"}, |
|
+{"utime", {NULL}, 519, "tcp"}, |
|
+{"utime", {NULL}, 519, "udp"}, |
|
+{"efs", {NULL}, 520, "tcp"}, |
|
+{"router", {NULL}, 520, "udp"}, |
|
+{"ripng", {NULL}, 521, "tcp"}, |
|
+{"ripng", {NULL}, 521, "udp"}, |
|
+{"ulp", {NULL}, 522, "tcp"}, |
|
+{"ulp", {NULL}, 522, "udp"}, |
|
+{"ibm-db2", {NULL}, 523, "tcp"}, |
|
+{"ibm-db2", {NULL}, 523, "udp"}, |
|
+{"ncp", {NULL}, 524, "tcp"}, |
|
+{"ncp", {NULL}, 524, "udp"}, |
|
+{"timed", {NULL}, 525, "tcp"}, |
|
+{"timed", {NULL}, 525, "udp"}, |
|
+{"tempo", {NULL}, 526, "tcp"}, |
|
+{"tempo", {NULL}, 526, "udp"}, |
|
+{"stx", {NULL}, 527, "tcp"}, |
|
+{"stx", {NULL}, 527, "udp"}, |
|
+{"custix", {NULL}, 528, "tcp"}, |
|
+{"custix", {NULL}, 528, "udp"}, |
|
+{"irc-serv", {NULL}, 529, "tcp"}, |
|
+{"irc-serv", {NULL}, 529, "udp"}, |
|
+{"courier", {NULL}, 530, "tcp"}, |
|
+{"courier", {NULL}, 530, "udp"}, |
|
+{"conference", {NULL}, 531, "tcp"}, |
|
+{"conference", {NULL}, 531, "udp"}, |
|
+{"netnews", {NULL}, 532, "tcp"}, |
|
+{"netnews", {NULL}, 532, "udp"}, |
|
+{"netwall", {NULL}, 533, "tcp"}, |
|
+{"netwall", {NULL}, 533, "udp"}, |
|
+{"windream", {NULL}, 534, "tcp"}, |
|
+{"windream", {NULL}, 534, "udp"}, |
|
+{"iiop", {NULL}, 535, "tcp"}, |
|
+{"iiop", {NULL}, 535, "udp"}, |
|
+{"opalis-rdv", {NULL}, 536, "tcp"}, |
|
+{"opalis-rdv", {NULL}, 536, "udp"}, |
|
+{"nmsp", {NULL}, 537, "tcp"}, |
|
+{"nmsp", {NULL}, 537, "udp"}, |
|
+{"gdomap", {NULL}, 538, "tcp"}, |
|
+{"gdomap", {NULL}, 538, "udp"}, |
|
+{"apertus-ldp", {NULL}, 539, "tcp"}, |
|
+{"apertus-ldp", {NULL}, 539, "udp"}, |
|
+{"uucp", {NULL}, 540, "tcp"}, |
|
+{"uucp", {NULL}, 540, "udp"}, |
|
+{"uucp-rlogin", {NULL}, 541, "tcp"}, |
|
+{"uucp-rlogin", {NULL}, 541, "udp"}, |
|
+{"commerce", {NULL}, 542, "tcp"}, |
|
+{"commerce", {NULL}, 542, "udp"}, |
|
+{"klogin", {NULL}, 543, "tcp"}, |
|
+{"klogin", {NULL}, 543, "udp"}, |
|
+{"kshell", {NULL}, 544, "tcp"}, |
|
+{"kshell", {NULL}, 544, "udp"}, |
|
+{"appleqtcsrvr", {NULL}, 545, "tcp"}, |
|
+{"appleqtcsrvr", {NULL}, 545, "udp"}, |
|
+{"dhcpv6-client", {NULL}, 546, "tcp"}, |
|
+{"dhcpv6-client", {NULL}, 546, "udp"}, |
|
+{"dhcpv6-server", {NULL}, 547, "tcp"}, |
|
+{"dhcpv6-server", {NULL}, 547, "udp"}, |
|
+{"afpovertcp", {NULL}, 548, "tcp"}, |
|
+{"afpovertcp", {NULL}, 548, "udp"}, |
|
+{"idfp", {NULL}, 549, "tcp"}, |
|
+{"idfp", {NULL}, 549, "udp"}, |
|
+{"new-rwho", {NULL}, 550, "tcp"}, |
|
+{"new-rwho", {NULL}, 550, "udp"}, |
|
+{"cybercash", {NULL}, 551, "tcp"}, |
|
+{"cybercash", {NULL}, 551, "udp"}, |
|
+{"devshr-nts", {NULL}, 552, "tcp"}, |
|
+{"devshr-nts", {NULL}, 552, "udp"}, |
|
+{"pirp", {NULL}, 553, "tcp"}, |
|
+{"pirp", {NULL}, 553, "udp"}, |
|
+{"rtsp", {NULL}, 554, "tcp"}, |
|
+{"rtsp", {NULL}, 554, "udp"}, |
|
+{"dsf", {NULL}, 555, "tcp"}, |
|
+{"dsf", {NULL}, 555, "udp"}, |
|
+{"remotefs", {NULL}, 556, "tcp"}, |
|
+{"remotefs", {NULL}, 556, "udp"}, |
|
+{"openvms-sysipc", {NULL}, 557, "tcp"}, |
|
+{"openvms-sysipc", {NULL}, 557, "udp"}, |
|
+{"sdnskmp", {NULL}, 558, "tcp"}, |
|
+{"sdnskmp", {NULL}, 558, "udp"}, |
|
+{"teedtap", {NULL}, 559, "tcp"}, |
|
+{"teedtap", {NULL}, 559, "udp"}, |
|
+{"rmonitor", {NULL}, 560, "tcp"}, |
|
+{"rmonitor", {NULL}, 560, "udp"}, |
|
+{"monitor", {NULL}, 561, "tcp"}, |
|
+{"monitor", {NULL}, 561, "udp"}, |
|
+{"chshell", {NULL}, 562, "tcp"}, |
|
+{"chshell", {NULL}, 562, "udp"}, |
|
+{"nntps", {NULL}, 563, "tcp"}, |
|
+{"nntps", {NULL}, 563, "udp"}, |
|
+{"9pfs", {NULL}, 564, "tcp"}, |
|
+{"9pfs", {NULL}, 564, "udp"}, |
|
+{"whoami", {NULL}, 565, "tcp"}, |
|
+{"whoami", {NULL}, 565, "udp"}, |
|
+{"streettalk", {NULL}, 566, "tcp"}, |
|
+{"streettalk", {NULL}, 566, "udp"}, |
|
+{"banyan-rpc", {NULL}, 567, "tcp"}, |
|
+{"banyan-rpc", {NULL}, 567, "udp"}, |
|
+{"ms-shuttle", {NULL}, 568, "tcp"}, |
|
+{"ms-shuttle", {NULL}, 568, "udp"}, |
|
+{"ms-rome", {NULL}, 569, "tcp"}, |
|
+{"ms-rome", {NULL}, 569, "udp"}, |
|
+{"meter", {NULL}, 570, "tcp"}, |
|
+{"meter", {NULL}, 570, "udp"}, |
|
+{"meter", {NULL}, 571, "tcp"}, |
|
+{"meter", {NULL}, 571, "udp"}, |
|
+{"sonar", {NULL}, 572, "tcp"}, |
|
+{"sonar", {NULL}, 572, "udp"}, |
|
+{"banyan-vip", {NULL}, 573, "tcp"}, |
|
+{"banyan-vip", {NULL}, 573, "udp"}, |
|
+{"ftp-agent", {NULL}, 574, "tcp"}, |
|
+{"ftp-agent", {NULL}, 574, "udp"}, |
|
+{"vemmi", {NULL}, 575, "tcp"}, |
|
+{"vemmi", {NULL}, 575, "udp"}, |
|
+{"ipcd", {NULL}, 576, "tcp"}, |
|
+{"ipcd", {NULL}, 576, "udp"}, |
|
+{"vnas", {NULL}, 577, "tcp"}, |
|
+{"vnas", {NULL}, 577, "udp"}, |
|
+{"ipdd", {NULL}, 578, "tcp"}, |
|
+{"ipdd", {NULL}, 578, "udp"}, |
|
+{"decbsrv", {NULL}, 579, "tcp"}, |
|
+{"decbsrv", {NULL}, 579, "udp"}, |
|
+{"sntp-heartbeat", {NULL}, 580, "tcp"}, |
|
+{"sntp-heartbeat", {NULL}, 580, "udp"}, |
|
+{"bdp", {NULL}, 581, "tcp"}, |
|
+{"bdp", {NULL}, 581, "udp"}, |
|
+{"scc-security", {NULL}, 582, "tcp"}, |
|
+{"scc-security", {NULL}, 582, "udp"}, |
|
+{"philips-vc", {NULL}, 583, "tcp"}, |
|
+{"philips-vc", {NULL}, 583, "udp"}, |
|
+{"keyserver", {NULL}, 584, "tcp"}, |
|
+{"keyserver", {NULL}, 584, "udp"}, |
|
+{"password-chg", {NULL}, 586, "tcp"}, |
|
+{"password-chg", {NULL}, 586, "udp"}, |
|
+{"submission", {NULL}, 587, "tcp"}, |
|
+{"submission", {NULL}, 587, "udp"}, |
|
+{"cal", {NULL}, 588, "tcp"}, |
|
+{"cal", {NULL}, 588, "udp"}, |
|
+{"eyelink", {NULL}, 589, "tcp"}, |
|
+{"eyelink", {NULL}, 589, "udp"}, |
|
+{"tns-cml", {NULL}, 590, "tcp"}, |
|
+{"tns-cml", {NULL}, 590, "udp"}, |
|
+{"http-alt", {NULL}, 591, "tcp"}, |
|
+{"http-alt", {NULL}, 591, "udp"}, |
|
+{"eudora-set", {NULL}, 592, "tcp"}, |
|
+{"eudora-set", {NULL}, 592, "udp"}, |
|
+{"http-rpc-epmap", {NULL}, 593, "tcp"}, |
|
+{"http-rpc-epmap", {NULL}, 593, "udp"}, |
|
+{"tpip", {NULL}, 594, "tcp"}, |
|
+{"tpip", {NULL}, 594, "udp"}, |
|
+{"cab-protocol", {NULL}, 595, "tcp"}, |
|
+{"cab-protocol", {NULL}, 595, "udp"}, |
|
+{"smsd", {NULL}, 596, "tcp"}, |
|
+{"smsd", {NULL}, 596, "udp"}, |
|
+{"ptcnameservice", {NULL}, 597, "tcp"}, |
|
+{"ptcnameservice", {NULL}, 597, "udp"}, |
|
+{"sco-websrvrmg3", {NULL}, 598, "tcp"}, |
|
+{"sco-websrvrmg3", {NULL}, 598, "udp"}, |
|
+{"acp", {NULL}, 599, "tcp"}, |
|
+{"acp", {NULL}, 599, "udp"}, |
|
+{"ipcserver", {NULL}, 600, "tcp"}, |
|
+{"ipcserver", {NULL}, 600, "udp"}, |
|
+{"syslog-conn", {NULL}, 601, "tcp"}, |
|
+{"syslog-conn", {NULL}, 601, "udp"}, |
|
+{"xmlrpc-beep", {NULL}, 602, "tcp"}, |
|
+{"xmlrpc-beep", {NULL}, 602, "udp"}, |
|
+{"idxp", {NULL}, 603, "tcp"}, |
|
+{"idxp", {NULL}, 603, "udp"}, |
|
+{"tunnel", {NULL}, 604, "tcp"}, |
|
+{"tunnel", {NULL}, 604, "udp"}, |
|
+{"soap-beep", {NULL}, 605, "tcp"}, |
|
+{"soap-beep", {NULL}, 605, "udp"}, |
|
+{"urm", {NULL}, 606, "tcp"}, |
|
+{"urm", {NULL}, 606, "udp"}, |
|
+{"nqs", {NULL}, 607, "tcp"}, |
|
+{"nqs", {NULL}, 607, "udp"}, |
|
+{"sift-uft", {NULL}, 608, "tcp"}, |
|
+{"sift-uft", {NULL}, 608, "udp"}, |
|
+{"npmp-trap", {NULL}, 609, "tcp"}, |
|
+{"npmp-trap", {NULL}, 609, "udp"}, |
|
+{"npmp-local", {NULL}, 610, "tcp"}, |
|
+{"npmp-local", {NULL}, 610, "udp"}, |
|
+{"npmp-gui", {NULL}, 611, "tcp"}, |
|
+{"npmp-gui", {NULL}, 611, "udp"}, |
|
+{"hmmp-ind", {NULL}, 612, "tcp"}, |
|
+{"hmmp-ind", {NULL}, 612, "udp"}, |
|
+{"hmmp-op", {NULL}, 613, "tcp"}, |
|
+{"hmmp-op", {NULL}, 613, "udp"}, |
|
+{"sshell", {NULL}, 614, "tcp"}, |
|
+{"sshell", {NULL}, 614, "udp"}, |
|
+{"sco-inetmgr", {NULL}, 615, "tcp"}, |
|
+{"sco-inetmgr", {NULL}, 615, "udp"}, |
|
+{"sco-sysmgr", {NULL}, 616, "tcp"}, |
|
+{"sco-sysmgr", {NULL}, 616, "udp"}, |
|
+{"sco-dtmgr", {NULL}, 617, "tcp"}, |
|
+{"sco-dtmgr", {NULL}, 617, "udp"}, |
|
+{"dei-icda", {NULL}, 618, "tcp"}, |
|
+{"dei-icda", {NULL}, 618, "udp"}, |
|
+{"compaq-evm", {NULL}, 619, "tcp"}, |
|
+{"compaq-evm", {NULL}, 619, "udp"}, |
|
+{"sco-websrvrmgr", {NULL}, 620, "tcp"}, |
|
+{"sco-websrvrmgr", {NULL}, 620, "udp"}, |
|
+{"escp-ip", {NULL}, 621, "tcp"}, |
|
+{"escp-ip", {NULL}, 621, "udp"}, |
|
+{"collaborator", {NULL}, 622, "tcp"}, |
|
+{"collaborator", {NULL}, 622, "udp"}, |
|
+{"oob-ws-http", {NULL}, 623, "tcp"}, |
|
+{"asf-rmcp", {NULL}, 623, "udp"}, |
|
+{"cryptoadmin", {NULL}, 624, "tcp"}, |
|
+{"cryptoadmin", {NULL}, 624, "udp"}, |
|
+{"dec_dlm", {NULL}, 625, "tcp"}, |
|
+{"dec_dlm", {NULL}, 625, "udp"}, |
|
+{"asia", {NULL}, 626, "tcp"}, |
|
+{"asia", {NULL}, 626, "udp"}, |
|
+{"passgo-tivoli", {NULL}, 627, "tcp"}, |
|
+{"passgo-tivoli", {NULL}, 627, "udp"}, |
|
+{"qmqp", {NULL}, 628, "tcp"}, |
|
+{"qmqp", {NULL}, 628, "udp"}, |
|
+{"3com-amp3", {NULL}, 629, "tcp"}, |
|
+{"3com-amp3", {NULL}, 629, "udp"}, |
|
+{"rda", {NULL}, 630, "tcp"}, |
|
+{"rda", {NULL}, 630, "udp"}, |
|
+{"ipp", {NULL}, 631, "tcp"}, |
|
+{"ipp", {NULL}, 631, "udp"}, |
|
+{"bmpp", {NULL}, 632, "tcp"}, |
|
+{"bmpp", {NULL}, 632, "udp"}, |
|
+{"servstat", {NULL}, 633, "tcp"}, |
|
+{"servstat", {NULL}, 633, "udp"}, |
|
+{"ginad", {NULL}, 634, "tcp"}, |
|
+{"ginad", {NULL}, 634, "udp"}, |
|
+{"rlzdbase", {NULL}, 635, "tcp"}, |
|
+{"rlzdbase", {NULL}, 635, "udp"}, |
|
+{"ldaps", {NULL}, 636, "tcp"}, |
|
+{"ldaps", {NULL}, 636, "udp"}, |
|
+{"lanserver", {NULL}, 637, "tcp"}, |
|
+{"lanserver", {NULL}, 637, "udp"}, |
|
+{"mcns-sec", {NULL}, 638, "tcp"}, |
|
+{"mcns-sec", {NULL}, 638, "udp"}, |
|
+{"msdp", {NULL}, 639, "tcp"}, |
|
+{"msdp", {NULL}, 639, "udp"}, |
|
+{"entrust-sps", {NULL}, 640, "tcp"}, |
|
+{"entrust-sps", {NULL}, 640, "udp"}, |
|
+{"repcmd", {NULL}, 641, "tcp"}, |
|
+{"repcmd", {NULL}, 641, "udp"}, |
|
+{"esro-emsdp", {NULL}, 642, "tcp"}, |
|
+{"esro-emsdp", {NULL}, 642, "udp"}, |
|
+{"sanity", {NULL}, 643, "tcp"}, |
|
+{"sanity", {NULL}, 643, "udp"}, |
|
+{"dwr", {NULL}, 644, "tcp"}, |
|
+{"dwr", {NULL}, 644, "udp"}, |
|
+{"pssc", {NULL}, 645, "tcp"}, |
|
+{"pssc", {NULL}, 645, "udp"}, |
|
+{"ldp", {NULL}, 646, "tcp"}, |
|
+{"ldp", {NULL}, 646, "udp"}, |
|
+{"dhcp-failover", {NULL}, 647, "tcp"}, |
|
+{"dhcp-failover", {NULL}, 647, "udp"}, |
|
+{"rrp", {NULL}, 648, "tcp"}, |
|
+{"rrp", {NULL}, 648, "udp"}, |
|
+{"cadview-3d", {NULL}, 649, "tcp"}, |
|
+{"cadview-3d", {NULL}, 649, "udp"}, |
|
+{"obex", {NULL}, 650, "tcp"}, |
|
+{"obex", {NULL}, 650, "udp"}, |
|
+{"ieee-mms", {NULL}, 651, "tcp"}, |
|
+{"ieee-mms", {NULL}, 651, "udp"}, |
|
+{"hello-port", {NULL}, 652, "tcp"}, |
|
+{"hello-port", {NULL}, 652, "udp"}, |
|
+{"repscmd", {NULL}, 653, "tcp"}, |
|
+{"repscmd", {NULL}, 653, "udp"}, |
|
+{"aodv", {NULL}, 654, "tcp"}, |
|
+{"aodv", {NULL}, 654, "udp"}, |
|
+{"tinc", {NULL}, 655, "tcp"}, |
|
+{"tinc", {NULL}, 655, "udp"}, |
|
+{"spmp", {NULL}, 656, "tcp"}, |
|
+{"spmp", {NULL}, 656, "udp"}, |
|
+{"rmc", {NULL}, 657, "tcp"}, |
|
+{"rmc", {NULL}, 657, "udp"}, |
|
+{"tenfold", {NULL}, 658, "tcp"}, |
|
+{"tenfold", {NULL}, 658, "udp"}, |
|
+{"mac-srvr-admin", {NULL}, 660, "tcp"}, |
|
+{"mac-srvr-admin", {NULL}, 660, "udp"}, |
|
+{"hap", {NULL}, 661, "tcp"}, |
|
+{"hap", {NULL}, 661, "udp"}, |
|
+{"pftp", {NULL}, 662, "tcp"}, |
|
+{"pftp", {NULL}, 662, "udp"}, |
|
+{"purenoise", {NULL}, 663, "tcp"}, |
|
+{"purenoise", {NULL}, 663, "udp"}, |
|
+{"oob-ws-https", {NULL}, 664, "tcp"}, |
|
+{"asf-secure-rmcp", {NULL}, 664, "udp"}, |
|
+{"sun-dr", {NULL}, 665, "tcp"}, |
|
+{"sun-dr", {NULL}, 665, "udp"}, |
|
+{"mdqs", {NULL}, 666, "tcp"}, |
|
+{"mdqs", {NULL}, 666, "udp"}, |
|
+{"doom", {NULL}, 666, "tcp"}, |
|
+{"doom", {NULL}, 666, "udp"}, |
|
+{"disclose", {NULL}, 667, "tcp"}, |
|
+{"disclose", {NULL}, 667, "udp"}, |
|
+{"mecomm", {NULL}, 668, "tcp"}, |
|
+{"mecomm", {NULL}, 668, "udp"}, |
|
+{"meregister", {NULL}, 669, "tcp"}, |
|
+{"meregister", {NULL}, 669, "udp"}, |
|
+{"vacdsm-sws", {NULL}, 670, "tcp"}, |
|
+{"vacdsm-sws", {NULL}, 670, "udp"}, |
|
+{"vacdsm-app", {NULL}, 671, "tcp"}, |
|
+{"vacdsm-app", {NULL}, 671, "udp"}, |
|
+{"vpps-qua", {NULL}, 672, "tcp"}, |
|
+{"vpps-qua", {NULL}, 672, "udp"}, |
|
+{"cimplex", {NULL}, 673, "tcp"}, |
|
+{"cimplex", {NULL}, 673, "udp"}, |
|
+{"acap", {NULL}, 674, "tcp"}, |
|
+{"acap", {NULL}, 674, "udp"}, |
|
+{"dctp", {NULL}, 675, "tcp"}, |
|
+{"dctp", {NULL}, 675, "udp"}, |
|
+{"vpps-via", {NULL}, 676, "tcp"}, |
|
+{"vpps-via", {NULL}, 676, "udp"}, |
|
+{"vpp", {NULL}, 677, "tcp"}, |
|
+{"vpp", {NULL}, 677, "udp"}, |
|
+{"ggf-ncp", {NULL}, 678, "tcp"}, |
|
+{"ggf-ncp", {NULL}, 678, "udp"}, |
|
+{"mrm", {NULL}, 679, "tcp"}, |
|
+{"mrm", {NULL}, 679, "udp"}, |
|
+{"entrust-aaas", {NULL}, 680, "tcp"}, |
|
+{"entrust-aaas", {NULL}, 680, "udp"}, |
|
+{"entrust-aams", {NULL}, 681, "tcp"}, |
|
+{"entrust-aams", {NULL}, 681, "udp"}, |
|
+{"xfr", {NULL}, 682, "tcp"}, |
|
+{"xfr", {NULL}, 682, "udp"}, |
|
+{"corba-iiop", {NULL}, 683, "tcp"}, |
|
+{"corba-iiop", {NULL}, 683, "udp"}, |
|
+{"corba-iiop-ssl", {NULL}, 684, "tcp"}, |
|
+{"corba-iiop-ssl", {NULL}, 684, "udp"}, |
|
+{"mdc-portmapper", {NULL}, 685, "tcp"}, |
|
+{"mdc-portmapper", {NULL}, 685, "udp"}, |
|
+{"hcp-wismar", {NULL}, 686, "tcp"}, |
|
+{"hcp-wismar", {NULL}, 686, "udp"}, |
|
+{"asipregistry", {NULL}, 687, "tcp"}, |
|
+{"asipregistry", {NULL}, 687, "udp"}, |
|
+{"realm-rusd", {NULL}, 688, "tcp"}, |
|
+{"realm-rusd", {NULL}, 688, "udp"}, |
|
+{"nmap", {NULL}, 689, "tcp"}, |
|
+{"nmap", {NULL}, 689, "udp"}, |
|
+{"vatp", {NULL}, 690, "tcp"}, |
|
+{"vatp", {NULL}, 690, "udp"}, |
|
+{"msexch-routing", {NULL}, 691, "tcp"}, |
|
+{"msexch-routing", {NULL}, 691, "udp"}, |
|
+{"hyperwave-isp", {NULL}, 692, "tcp"}, |
|
+{"hyperwave-isp", {NULL}, 692, "udp"}, |
|
+{"connendp", {NULL}, 693, "tcp"}, |
|
+{"connendp", {NULL}, 693, "udp"}, |
|
+{"ha-cluster", {NULL}, 694, "tcp"}, |
|
+{"ha-cluster", {NULL}, 694, "udp"}, |
|
+{"ieee-mms-ssl", {NULL}, 695, "tcp"}, |
|
+{"ieee-mms-ssl", {NULL}, 695, "udp"}, |
|
+{"rushd", {NULL}, 696, "tcp"}, |
|
+{"rushd", {NULL}, 696, "udp"}, |
|
+{"uuidgen", {NULL}, 697, "tcp"}, |
|
+{"uuidgen", {NULL}, 697, "udp"}, |
|
+{"olsr", {NULL}, 698, "tcp"}, |
|
+{"olsr", {NULL}, 698, "udp"}, |
|
+{"accessnetwork", {NULL}, 699, "tcp"}, |
|
+{"accessnetwork", {NULL}, 699, "udp"}, |
|
+{"epp", {NULL}, 700, "tcp"}, |
|
+{"epp", {NULL}, 700, "udp"}, |
|
+{"lmp", {NULL}, 701, "tcp"}, |
|
+{"lmp", {NULL}, 701, "udp"}, |
|
+{"iris-beep", {NULL}, 702, "tcp"}, |
|
+{"iris-beep", {NULL}, 702, "udp"}, |
|
+{"elcsd", {NULL}, 704, "tcp"}, |
|
+{"elcsd", {NULL}, 704, "udp"}, |
|
+{"agentx", {NULL}, 705, "tcp"}, |
|
+{"agentx", {NULL}, 705, "udp"}, |
|
+{"silc", {NULL}, 706, "tcp"}, |
|
+{"silc", {NULL}, 706, "udp"}, |
|
+{"borland-dsj", {NULL}, 707, "tcp"}, |
|
+{"borland-dsj", {NULL}, 707, "udp"}, |
|
+{"entrust-kmsh", {NULL}, 709, "tcp"}, |
|
+{"entrust-kmsh", {NULL}, 709, "udp"}, |
|
+{"entrust-ash", {NULL}, 710, "tcp"}, |
|
+{"entrust-ash", {NULL}, 710, "udp"}, |
|
+{"cisco-tdp", {NULL}, 711, "tcp"}, |
|
+{"cisco-tdp", {NULL}, 711, "udp"}, |
|
+{"tbrpf", {NULL}, 712, "tcp"}, |
|
+{"tbrpf", {NULL}, 712, "udp"}, |
|
+{"iris-xpc", {NULL}, 713, "tcp"}, |
|
+{"iris-xpc", {NULL}, 713, "udp"}, |
|
+{"iris-xpcs", {NULL}, 714, "tcp"}, |
|
+{"iris-xpcs", {NULL}, 714, "udp"}, |
|
+{"iris-lwz", {NULL}, 715, "tcp"}, |
|
+{"iris-lwz", {NULL}, 715, "udp"}, |
|
+{"pana", {NULL}, 716, "udp"}, |
|
+{"netviewdm1", {NULL}, 729, "tcp"}, |
|
+{"netviewdm1", {NULL}, 729, "udp"}, |
|
+{"netviewdm2", {NULL}, 730, "tcp"}, |
|
+{"netviewdm2", {NULL}, 730, "udp"}, |
|
+{"netviewdm3", {NULL}, 731, "tcp"}, |
|
+{"netviewdm3", {NULL}, 731, "udp"}, |
|
+{"netgw", {NULL}, 741, "tcp"}, |
|
+{"netgw", {NULL}, 741, "udp"}, |
|
+{"netrcs", {NULL}, 742, "tcp"}, |
|
+{"netrcs", {NULL}, 742, "udp"}, |
|
+{"flexlm", {NULL}, 744, "tcp"}, |
|
+{"flexlm", {NULL}, 744, "udp"}, |
|
+{"fujitsu-dev", {NULL}, 747, "tcp"}, |
|
+{"fujitsu-dev", {NULL}, 747, "udp"}, |
|
+{"ris-cm", {NULL}, 748, "tcp"}, |
|
+{"ris-cm", {NULL}, 748, "udp"}, |
|
+{"kerberos-adm", {NULL}, 749, "tcp"}, |
|
+{"kerberos-adm", {NULL}, 749, "udp"}, |
|
+{"rfile", {NULL}, 750, "tcp"}, |
|
+{"loadav", {NULL}, 750, "udp"}, |
|
+{"kerberos-iv", {NULL}, 750, "udp"}, |
|
+{"pump", {NULL}, 751, "tcp"}, |
|
+{"pump", {NULL}, 751, "udp"}, |
|
+{"qrh", {NULL}, 752, "tcp"}, |
|
+{"qrh", {NULL}, 752, "udp"}, |
|
+{"rrh", {NULL}, 753, "tcp"}, |
|
+{"rrh", {NULL}, 753, "udp"}, |
|
+{"tell", {NULL}, 754, "tcp"}, |
|
+{"tell", {NULL}, 754, "udp"}, |
|
+{"nlogin", {NULL}, 758, "tcp"}, |
|
+{"nlogin", {NULL}, 758, "udp"}, |
|
+{"con", {NULL}, 759, "tcp"}, |
|
+{"con", {NULL}, 759, "udp"}, |
|
+{"ns", {NULL}, 760, "tcp"}, |
|
+{"ns", {NULL}, 760, "udp"}, |
|
+{"rxe", {NULL}, 761, "tcp"}, |
|
+{"rxe", {NULL}, 761, "udp"}, |
|
+{"quotad", {NULL}, 762, "tcp"}, |
|
+{"quotad", {NULL}, 762, "udp"}, |
|
+{"cycleserv", {NULL}, 763, "tcp"}, |
|
+{"cycleserv", {NULL}, 763, "udp"}, |
|
+{"omserv", {NULL}, 764, "tcp"}, |
|
+{"omserv", {NULL}, 764, "udp"}, |
|
+{"webster", {NULL}, 765, "tcp"}, |
|
+{"webster", {NULL}, 765, "udp"}, |
|
+{"phonebook", {NULL}, 767, "tcp"}, |
|
+{"phonebook", {NULL}, 767, "udp"}, |
|
+{"vid", {NULL}, 769, "tcp"}, |
|
+{"vid", {NULL}, 769, "udp"}, |
|
+{"cadlock", {NULL}, 770, "tcp"}, |
|
+{"cadlock", {NULL}, 770, "udp"}, |
|
+{"rtip", {NULL}, 771, "tcp"}, |
|
+{"rtip", {NULL}, 771, "udp"}, |
|
+{"cycleserv2", {NULL}, 772, "tcp"}, |
|
+{"cycleserv2", {NULL}, 772, "udp"}, |
|
+{"submit", {NULL}, 773, "tcp"}, |
|
+{"notify", {NULL}, 773, "udp"}, |
|
+{"rpasswd", {NULL}, 774, "tcp"}, |
|
+{"acmaint_dbd", {NULL}, 774, "udp"}, |
|
+{"entomb", {NULL}, 775, "tcp"}, |
|
+{"acmaint_transd", {NULL}, 775, "udp"}, |
|
+{"wpages", {NULL}, 776, "tcp"}, |
|
+{"wpages", {NULL}, 776, "udp"}, |
|
+{"multiling-http", {NULL}, 777, "tcp"}, |
|
+{"multiling-http", {NULL}, 777, "udp"}, |
|
+{"wpgs", {NULL}, 780, "tcp"}, |
|
+{"wpgs", {NULL}, 780, "udp"}, |
|
+{"mdbs_daemon", {NULL}, 800, "tcp"}, |
|
+{"mdbs_daemon", {NULL}, 800, "udp"}, |
|
+{"device", {NULL}, 801, "tcp"}, |
|
+{"device", {NULL}, 801, "udp"}, |
|
+{"fcp-udp", {NULL}, 810, "tcp"}, |
|
+{"fcp-udp", {NULL}, 810, "udp"}, |
|
+{"itm-mcell-s", {NULL}, 828, "tcp"}, |
|
+{"itm-mcell-s", {NULL}, 828, "udp"}, |
|
+{"pkix-3-ca-ra", {NULL}, 829, "tcp"}, |
|
+{"pkix-3-ca-ra", {NULL}, 829, "udp"}, |
|
+{"netconf-ssh", {NULL}, 830, "tcp"}, |
|
+{"netconf-ssh", {NULL}, 830, "udp"}, |
|
+{"netconf-beep", {NULL}, 831, "tcp"}, |
|
+{"netconf-beep", {NULL}, 831, "udp"}, |
|
+{"netconfsoaphttp", {NULL}, 832, "tcp"}, |
|
+{"netconfsoaphttp", {NULL}, 832, "udp"}, |
|
+{"netconfsoapbeep", {NULL}, 833, "tcp"}, |
|
+{"netconfsoapbeep", {NULL}, 833, "udp"}, |
|
+{"dhcp-failover2", {NULL}, 847, "tcp"}, |
|
+{"dhcp-failover2", {NULL}, 847, "udp"}, |
|
+{"gdoi", {NULL}, 848, "tcp"}, |
|
+{"gdoi", {NULL}, 848, "udp"}, |
|
+{"iscsi", {NULL}, 860, "tcp"}, |
|
+{"iscsi", {NULL}, 860, "udp"}, |
|
+{"owamp-control", {NULL}, 861, "tcp"}, |
|
+{"owamp-control", {NULL}, 861, "udp"}, |
|
+{"twamp-control", {NULL}, 862, "tcp"}, |
|
+{"twamp-control", {NULL}, 862, "udp"}, |
|
+{"rsync", {NULL}, 873, "tcp"}, |
|
+{"rsync", {NULL}, 873, "udp"}, |
|
+{"iclcnet-locate", {NULL}, 886, "tcp"}, |
|
+{"iclcnet-locate", {NULL}, 886, "udp"}, |
|
+{"iclcnet_svinfo", {NULL}, 887, "tcp"}, |
|
+{"iclcnet_svinfo", {NULL}, 887, "udp"}, |
|
+{"accessbuilder", {NULL}, 888, "tcp"}, |
|
+{"accessbuilder", {NULL}, 888, "udp"}, |
|
+{"cddbp", {NULL}, 888, "tcp"}, |
|
+{"omginitialrefs", {NULL}, 900, "tcp"}, |
|
+{"omginitialrefs", {NULL}, 900, "udp"}, |
|
+{"smpnameres", {NULL}, 901, "tcp"}, |
|
+{"smpnameres", {NULL}, 901, "udp"}, |
|
+{"ideafarm-door", {NULL}, 902, "tcp"}, |
|
+{"ideafarm-door", {NULL}, 902, "udp"}, |
|
+{"ideafarm-panic", {NULL}, 903, "tcp"}, |
|
+{"ideafarm-panic", {NULL}, 903, "udp"}, |
|
+{"kink", {NULL}, 910, "tcp"}, |
|
+{"kink", {NULL}, 910, "udp"}, |
|
+{"xact-backup", {NULL}, 911, "tcp"}, |
|
+{"xact-backup", {NULL}, 911, "udp"}, |
|
+{"apex-mesh", {NULL}, 912, "tcp"}, |
|
+{"apex-mesh", {NULL}, 912, "udp"}, |
|
+{"apex-edge", {NULL}, 913, "tcp"}, |
|
+{"apex-edge", {NULL}, 913, "udp"}, |
|
+{"ftps-data", {NULL}, 989, "tcp"}, |
|
+{"ftps-data", {NULL}, 989, "udp"}, |
|
+{"ftps", {NULL}, 990, "tcp"}, |
|
+{"ftps", {NULL}, 990, "udp"}, |
|
+{"nas", {NULL}, 991, "tcp"}, |
|
+{"nas", {NULL}, 991, "udp"}, |
|
+{"telnets", {NULL}, 992, "tcp"}, |
|
+{"telnets", {NULL}, 992, "udp"}, |
|
+{"imaps", {NULL}, 993, "tcp"}, |
|
+{"imaps", {NULL}, 993, "udp"}, |
|
+{"ircs", {NULL}, 994, "tcp"}, |
|
+{"ircs", {NULL}, 994, "udp"}, |
|
+{"pop3s", {NULL}, 995, "tcp"}, |
|
+{"pop3s", {NULL}, 995, "udp"}, |
|
+{"vsinet", {NULL}, 996, "tcp"}, |
|
+{"vsinet", {NULL}, 996, "udp"}, |
|
+{"maitrd", {NULL}, 997, "tcp"}, |
|
+{"maitrd", {NULL}, 997, "udp"}, |
|
+{"busboy", {NULL}, 998, "tcp"}, |
|
+{"puparp", {NULL}, 998, "udp"}, |
|
+{"garcon", {NULL}, 999, "tcp"}, |
|
+{"applix", {NULL}, 999, "udp"}, |
|
+{"puprouter", {NULL}, 999, "tcp"}, |
|
+{"puprouter", {NULL}, 999, "udp"}, |
|
+{"cadlock2", {NULL}, 1000, "tcp"}, |
|
+{"cadlock2", {NULL}, 1000, "udp"}, |
|
+{"surf", {NULL}, 1010, "tcp"}, |
|
+{"surf", {NULL}, 1010, "udp"}, |
|
+{"exp1", {NULL}, 1021, "tcp"}, |
|
+{"exp1", {NULL}, 1021, "udp"}, |
|
+{"exp2", {NULL}, 1022, "tcp"}, |
|
+{"exp2", {NULL}, 1022, "udp"}, |
|
+#endif /* USE_IANA_WELL_KNOWN_PORTS */ |
|
+#ifdef USE_IANA_REGISTERED_PORTS |
|
+{"blackjack", {NULL}, 1025, "tcp"}, |
|
+{"blackjack", {NULL}, 1025, "udp"}, |
|
+{"cap", {NULL}, 1026, "tcp"}, |
|
+{"cap", {NULL}, 1026, "udp"}, |
|
+{"solid-mux", {NULL}, 1029, "tcp"}, |
|
+{"solid-mux", {NULL}, 1029, "udp"}, |
|
+{"iad1", {NULL}, 1030, "tcp"}, |
|
+{"iad1", {NULL}, 1030, "udp"}, |
|
+{"iad2", {NULL}, 1031, "tcp"}, |
|
+{"iad2", {NULL}, 1031, "udp"}, |
|
+{"iad3", {NULL}, 1032, "tcp"}, |
|
+{"iad3", {NULL}, 1032, "udp"}, |
|
+{"netinfo-local", {NULL}, 1033, "tcp"}, |
|
+{"netinfo-local", {NULL}, 1033, "udp"}, |
|
+{"activesync", {NULL}, 1034, "tcp"}, |
|
+{"activesync", {NULL}, 1034, "udp"}, |
|
+{"mxxrlogin", {NULL}, 1035, "tcp"}, |
|
+{"mxxrlogin", {NULL}, 1035, "udp"}, |
|
+{"nsstp", {NULL}, 1036, "tcp"}, |
|
+{"nsstp", {NULL}, 1036, "udp"}, |
|
+{"ams", {NULL}, 1037, "tcp"}, |
|
+{"ams", {NULL}, 1037, "udp"}, |
|
+{"mtqp", {NULL}, 1038, "tcp"}, |
|
+{"mtqp", {NULL}, 1038, "udp"}, |
|
+{"sbl", {NULL}, 1039, "tcp"}, |
|
+{"sbl", {NULL}, 1039, "udp"}, |
|
+{"netarx", {NULL}, 1040, "tcp"}, |
|
+{"netarx", {NULL}, 1040, "udp"}, |
|
+{"danf-ak2", {NULL}, 1041, "tcp"}, |
|
+{"danf-ak2", {NULL}, 1041, "udp"}, |
|
+{"afrog", {NULL}, 1042, "tcp"}, |
|
+{"afrog", {NULL}, 1042, "udp"}, |
|
+{"boinc-client", {NULL}, 1043, "tcp"}, |
|
+{"boinc-client", {NULL}, 1043, "udp"}, |
|
+{"dcutility", {NULL}, 1044, "tcp"}, |
|
+{"dcutility", {NULL}, 1044, "udp"}, |
|
+{"fpitp", {NULL}, 1045, "tcp"}, |
|
+{"fpitp", {NULL}, 1045, "udp"}, |
|
+{"wfremotertm", {NULL}, 1046, "tcp"}, |
|
+{"wfremotertm", {NULL}, 1046, "udp"}, |
|
+{"neod1", {NULL}, 1047, "tcp"}, |
|
+{"neod1", {NULL}, 1047, "udp"}, |
|
+{"neod2", {NULL}, 1048, "tcp"}, |
|
+{"neod2", {NULL}, 1048, "udp"}, |
|
+{"td-postman", {NULL}, 1049, "tcp"}, |
|
+{"td-postman", {NULL}, 1049, "udp"}, |
|
+{"cma", {NULL}, 1050, "tcp"}, |
|
+{"cma", {NULL}, 1050, "udp"}, |
|
+{"optima-vnet", {NULL}, 1051, "tcp"}, |
|
+{"optima-vnet", {NULL}, 1051, "udp"}, |
|
+{"ddt", {NULL}, 1052, "tcp"}, |
|
+{"ddt", {NULL}, 1052, "udp"}, |
|
+{"remote-as", {NULL}, 1053, "tcp"}, |
|
+{"remote-as", {NULL}, 1053, "udp"}, |
|
+{"brvread", {NULL}, 1054, "tcp"}, |
|
+{"brvread", {NULL}, 1054, "udp"}, |
|
+{"ansyslmd", {NULL}, 1055, "tcp"}, |
|
+{"ansyslmd", {NULL}, 1055, "udp"}, |
|
+{"vfo", {NULL}, 1056, "tcp"}, |
|
+{"vfo", {NULL}, 1056, "udp"}, |
|
+{"startron", {NULL}, 1057, "tcp"}, |
|
+{"startron", {NULL}, 1057, "udp"}, |
|
+{"nim", {NULL}, 1058, "tcp"}, |
|
+{"nim", {NULL}, 1058, "udp"}, |
|
+{"nimreg", {NULL}, 1059, "tcp"}, |
|
+{"nimreg", {NULL}, 1059, "udp"}, |
|
+{"polestar", {NULL}, 1060, "tcp"}, |
|
+{"polestar", {NULL}, 1060, "udp"}, |
|
+{"kiosk", {NULL}, 1061, "tcp"}, |
|
+{"kiosk", {NULL}, 1061, "udp"}, |
|
+{"veracity", {NULL}, 1062, "tcp"}, |
|
+{"veracity", {NULL}, 1062, "udp"}, |
|
+{"kyoceranetdev", {NULL}, 1063, "tcp"}, |
|
+{"kyoceranetdev", {NULL}, 1063, "udp"}, |
|
+{"jstel", {NULL}, 1064, "tcp"}, |
|
+{"jstel", {NULL}, 1064, "udp"}, |
|
+{"syscomlan", {NULL}, 1065, "tcp"}, |
|
+{"syscomlan", {NULL}, 1065, "udp"}, |
|
+{"fpo-fns", {NULL}, 1066, "tcp"}, |
|
+{"fpo-fns", {NULL}, 1066, "udp"}, |
|
+{"instl_boots", {NULL}, 1067, "tcp"}, |
|
+{"instl_boots", {NULL}, 1067, "udp"}, |
|
+{"instl_bootc", {NULL}, 1068, "tcp"}, |
|
+{"instl_bootc", {NULL}, 1068, "udp"}, |
|
+{"cognex-insight", {NULL}, 1069, "tcp"}, |
|
+{"cognex-insight", {NULL}, 1069, "udp"}, |
|
+{"gmrupdateserv", {NULL}, 1070, "tcp"}, |
|
+{"gmrupdateserv", {NULL}, 1070, "udp"}, |
|
+{"bsquare-voip", {NULL}, 1071, "tcp"}, |
|
+{"bsquare-voip", {NULL}, 1071, "udp"}, |
|
+{"cardax", {NULL}, 1072, "tcp"}, |
|
+{"cardax", {NULL}, 1072, "udp"}, |
|
+{"bridgecontrol", {NULL}, 1073, "tcp"}, |
|
+{"bridgecontrol", {NULL}, 1073, "udp"}, |
|
+{"warmspotMgmt", {NULL}, 1074, "tcp"}, |
|
+{"warmspotMgmt", {NULL}, 1074, "udp"}, |
|
+{"rdrmshc", {NULL}, 1075, "tcp"}, |
|
+{"rdrmshc", {NULL}, 1075, "udp"}, |
|
+{"dab-sti-c", {NULL}, 1076, "tcp"}, |
|
+{"dab-sti-c", {NULL}, 1076, "udp"}, |
|
+{"imgames", {NULL}, 1077, "tcp"}, |
|
+{"imgames", {NULL}, 1077, "udp"}, |
|
+{"avocent-proxy", {NULL}, 1078, "tcp"}, |
|
+{"avocent-proxy", {NULL}, 1078, "udp"}, |
|
+{"asprovatalk", {NULL}, 1079, "tcp"}, |
|
+{"asprovatalk", {NULL}, 1079, "udp"}, |
|
+{"socks", {NULL}, 1080, "tcp"}, |
|
+{"socks", {NULL}, 1080, "udp"}, |
|
+{"pvuniwien", {NULL}, 1081, "tcp"}, |
|
+{"pvuniwien", {NULL}, 1081, "udp"}, |
|
+{"amt-esd-prot", {NULL}, 1082, "tcp"}, |
|
+{"amt-esd-prot", {NULL}, 1082, "udp"}, |
|
+{"ansoft-lm-1", {NULL}, 1083, "tcp"}, |
|
+{"ansoft-lm-1", {NULL}, 1083, "udp"}, |
|
+{"ansoft-lm-2", {NULL}, 1084, "tcp"}, |
|
+{"ansoft-lm-2", {NULL}, 1084, "udp"}, |
|
+{"webobjects", {NULL}, 1085, "tcp"}, |
|
+{"webobjects", {NULL}, 1085, "udp"}, |
|
+{"cplscrambler-lg", {NULL}, 1086, "tcp"}, |
|
+{"cplscrambler-lg", {NULL}, 1086, "udp"}, |
|
+{"cplscrambler-in", {NULL}, 1087, "tcp"}, |
|
+{"cplscrambler-in", {NULL}, 1087, "udp"}, |
|
+{"cplscrambler-al", {NULL}, 1088, "tcp"}, |
|
+{"cplscrambler-al", {NULL}, 1088, "udp"}, |
|
+{"ff-annunc", {NULL}, 1089, "tcp"}, |
|
+{"ff-annunc", {NULL}, 1089, "udp"}, |
|
+{"ff-fms", {NULL}, 1090, "tcp"}, |
|
+{"ff-fms", {NULL}, 1090, "udp"}, |
|
+{"ff-sm", {NULL}, 1091, "tcp"}, |
|
+{"ff-sm", {NULL}, 1091, "udp"}, |
|
+{"obrpd", {NULL}, 1092, "tcp"}, |
|
+{"obrpd", {NULL}, 1092, "udp"}, |
|
+{"proofd", {NULL}, 1093, "tcp"}, |
|
+{"proofd", {NULL}, 1093, "udp"}, |
|
+{"rootd", {NULL}, 1094, "tcp"}, |
|
+{"rootd", {NULL}, 1094, "udp"}, |
|
+{"nicelink", {NULL}, 1095, "tcp"}, |
|
+{"nicelink", {NULL}, 1095, "udp"}, |
|
+{"cnrprotocol", {NULL}, 1096, "tcp"}, |
|
+{"cnrprotocol", {NULL}, 1096, "udp"}, |
|
+{"sunclustermgr", {NULL}, 1097, "tcp"}, |
|
+{"sunclustermgr", {NULL}, 1097, "udp"}, |
|
+{"rmiactivation", {NULL}, 1098, "tcp"}, |
|
+{"rmiactivation", {NULL}, 1098, "udp"}, |
|
+{"rmiregistry", {NULL}, 1099, "tcp"}, |
|
+{"rmiregistry", {NULL}, 1099, "udp"}, |
|
+{"mctp", {NULL}, 1100, "tcp"}, |
|
+{"mctp", {NULL}, 1100, "udp"}, |
|
+{"pt2-discover", {NULL}, 1101, "tcp"}, |
|
+{"pt2-discover", {NULL}, 1101, "udp"}, |
|
+{"adobeserver-1", {NULL}, 1102, "tcp"}, |
|
+{"adobeserver-1", {NULL}, 1102, "udp"}, |
|
+{"adobeserver-2", {NULL}, 1103, "tcp"}, |
|
+{"adobeserver-2", {NULL}, 1103, "udp"}, |
|
+{"xrl", {NULL}, 1104, "tcp"}, |
|
+{"xrl", {NULL}, 1104, "udp"}, |
|
+{"ftranhc", {NULL}, 1105, "tcp"}, |
|
+{"ftranhc", {NULL}, 1105, "udp"}, |
|
+{"isoipsigport-1", {NULL}, 1106, "tcp"}, |
|
+{"isoipsigport-1", {NULL}, 1106, "udp"}, |
|
+{"isoipsigport-2", {NULL}, 1107, "tcp"}, |
|
+{"isoipsigport-2", {NULL}, 1107, "udp"}, |
|
+{"ratio-adp", {NULL}, 1108, "tcp"}, |
|
+{"ratio-adp", {NULL}, 1108, "udp"}, |
|
+{"webadmstart", {NULL}, 1110, "tcp"}, |
|
+{"nfsd-keepalive", {NULL}, 1110, "udp"}, |
|
+{"lmsocialserver", {NULL}, 1111, "tcp"}, |
|
+{"lmsocialserver", {NULL}, 1111, "udp"}, |
|
+{"icp", {NULL}, 1112, "tcp"}, |
|
+{"icp", {NULL}, 1112, "udp"}, |
|
+{"ltp-deepspace", {NULL}, 1113, "tcp"}, |
|
+{"ltp-deepspace", {NULL}, 1113, "udp"}, |
|
+{"mini-sql", {NULL}, 1114, "tcp"}, |
|
+{"mini-sql", {NULL}, 1114, "udp"}, |
|
+{"ardus-trns", {NULL}, 1115, "tcp"}, |
|
+{"ardus-trns", {NULL}, 1115, "udp"}, |
|
+{"ardus-cntl", {NULL}, 1116, "tcp"}, |
|
+{"ardus-cntl", {NULL}, 1116, "udp"}, |
|
+{"ardus-mtrns", {NULL}, 1117, "tcp"}, |
|
+{"ardus-mtrns", {NULL}, 1117, "udp"}, |
|
+{"sacred", {NULL}, 1118, "tcp"}, |
|
+{"sacred", {NULL}, 1118, "udp"}, |
|
+{"bnetgame", {NULL}, 1119, "tcp"}, |
|
+{"bnetgame", {NULL}, 1119, "udp"}, |
|
+{"bnetfile", {NULL}, 1120, "tcp"}, |
|
+{"bnetfile", {NULL}, 1120, "udp"}, |
|
+{"rmpp", {NULL}, 1121, "tcp"}, |
|
+{"rmpp", {NULL}, 1121, "udp"}, |
|
+{"availant-mgr", {NULL}, 1122, "tcp"}, |
|
+{"availant-mgr", {NULL}, 1122, "udp"}, |
|
+{"murray", {NULL}, 1123, "tcp"}, |
|
+{"murray", {NULL}, 1123, "udp"}, |
|
+{"hpvmmcontrol", {NULL}, 1124, "tcp"}, |
|
+{"hpvmmcontrol", {NULL}, 1124, "udp"}, |
|
+{"hpvmmagent", {NULL}, 1125, "tcp"}, |
|
+{"hpvmmagent", {NULL}, 1125, "udp"}, |
|
+{"hpvmmdata", {NULL}, 1126, "tcp"}, |
|
+{"hpvmmdata", {NULL}, 1126, "udp"}, |
|
+{"kwdb-commn", {NULL}, 1127, "tcp"}, |
|
+{"kwdb-commn", {NULL}, 1127, "udp"}, |
|
+{"saphostctrl", {NULL}, 1128, "tcp"}, |
|
+{"saphostctrl", {NULL}, 1128, "udp"}, |
|
+{"saphostctrls", {NULL}, 1129, "tcp"}, |
|
+{"saphostctrls", {NULL}, 1129, "udp"}, |
|
+{"casp", {NULL}, 1130, "tcp"}, |
|
+{"casp", {NULL}, 1130, "udp"}, |
|
+{"caspssl", {NULL}, 1131, "tcp"}, |
|
+{"caspssl", {NULL}, 1131, "udp"}, |
|
+{"kvm-via-ip", {NULL}, 1132, "tcp"}, |
|
+{"kvm-via-ip", {NULL}, 1132, "udp"}, |
|
+{"dfn", {NULL}, 1133, "tcp"}, |
|
+{"dfn", {NULL}, 1133, "udp"}, |
|
+{"aplx", {NULL}, 1134, "tcp"}, |
|
+{"aplx", {NULL}, 1134, "udp"}, |
|
+{"omnivision", {NULL}, 1135, "tcp"}, |
|
+{"omnivision", {NULL}, 1135, "udp"}, |
|
+{"hhb-gateway", {NULL}, 1136, "tcp"}, |
|
+{"hhb-gateway", {NULL}, 1136, "udp"}, |
|
+{"trim", {NULL}, 1137, "tcp"}, |
|
+{"trim", {NULL}, 1137, "udp"}, |
|
+{"encrypted_admin", {NULL}, 1138, "tcp"}, |
|
+{"encrypted_admin", {NULL}, 1138, "udp"}, |
|
+{"evm", {NULL}, 1139, "tcp"}, |
|
+{"evm", {NULL}, 1139, "udp"}, |
|
+{"autonoc", {NULL}, 1140, "tcp"}, |
|
+{"autonoc", {NULL}, 1140, "udp"}, |
|
+{"mxomss", {NULL}, 1141, "tcp"}, |
|
+{"mxomss", {NULL}, 1141, "udp"}, |
|
+{"edtools", {NULL}, 1142, "tcp"}, |
|
+{"edtools", {NULL}, 1142, "udp"}, |
|
+{"imyx", {NULL}, 1143, "tcp"}, |
|
+{"imyx", {NULL}, 1143, "udp"}, |
|
+{"fuscript", {NULL}, 1144, "tcp"}, |
|
+{"fuscript", {NULL}, 1144, "udp"}, |
|
+{"x9-icue", {NULL}, 1145, "tcp"}, |
|
+{"x9-icue", {NULL}, 1145, "udp"}, |
|
+{"audit-transfer", {NULL}, 1146, "tcp"}, |
|
+{"audit-transfer", {NULL}, 1146, "udp"}, |
|
+{"capioverlan", {NULL}, 1147, "tcp"}, |
|
+{"capioverlan", {NULL}, 1147, "udp"}, |
|
+{"elfiq-repl", {NULL}, 1148, "tcp"}, |
|
+{"elfiq-repl", {NULL}, 1148, "udp"}, |
|
+{"bvtsonar", {NULL}, 1149, "tcp"}, |
|
+{"bvtsonar", {NULL}, 1149, "udp"}, |
|
+{"blaze", {NULL}, 1150, "tcp"}, |
|
+{"blaze", {NULL}, 1150, "udp"}, |
|
+{"unizensus", {NULL}, 1151, "tcp"}, |
|
+{"unizensus", {NULL}, 1151, "udp"}, |
|
+{"winpoplanmess", {NULL}, 1152, "tcp"}, |
|
+{"winpoplanmess", {NULL}, 1152, "udp"}, |
|
+{"c1222-acse", {NULL}, 1153, "tcp"}, |
|
+{"c1222-acse", {NULL}, 1153, "udp"}, |
|
+{"resacommunity", {NULL}, 1154, "tcp"}, |
|
+{"resacommunity", {NULL}, 1154, "udp"}, |
|
+{"nfa", {NULL}, 1155, "tcp"}, |
|
+{"nfa", {NULL}, 1155, "udp"}, |
|
+{"iascontrol-oms", {NULL}, 1156, "tcp"}, |
|
+{"iascontrol-oms", {NULL}, 1156, "udp"}, |
|
+{"iascontrol", {NULL}, 1157, "tcp"}, |
|
+{"iascontrol", {NULL}, 1157, "udp"}, |
|
+{"dbcontrol-oms", {NULL}, 1158, "tcp"}, |
|
+{"dbcontrol-oms", {NULL}, 1158, "udp"}, |
|
+{"oracle-oms", {NULL}, 1159, "tcp"}, |
|
+{"oracle-oms", {NULL}, 1159, "udp"}, |
|
+{"olsv", {NULL}, 1160, "tcp"}, |
|
+{"olsv", {NULL}, 1160, "udp"}, |
|
+{"health-polling", {NULL}, 1161, "tcp"}, |
|
+{"health-polling", {NULL}, 1161, "udp"}, |
|
+{"health-trap", {NULL}, 1162, "tcp"}, |
|
+{"health-trap", {NULL}, 1162, "udp"}, |
|
+{"sddp", {NULL}, 1163, "tcp"}, |
|
+{"sddp", {NULL}, 1163, "udp"}, |
|
+{"qsm-proxy", {NULL}, 1164, "tcp"}, |
|
+{"qsm-proxy", {NULL}, 1164, "udp"}, |
|
+{"qsm-gui", {NULL}, 1165, "tcp"}, |
|
+{"qsm-gui", {NULL}, 1165, "udp"}, |
|
+{"qsm-remote", {NULL}, 1166, "tcp"}, |
|
+{"qsm-remote", {NULL}, 1166, "udp"}, |
|
+{"cisco-ipsla", {NULL}, 1167, "tcp"}, |
|
+{"cisco-ipsla", {NULL}, 1167, "udp"}, |
|
+{"cisco-ipsla", {NULL}, 1167, "sctp"}, |
|
+{"vchat", {NULL}, 1168, "tcp"}, |
|
+{"vchat", {NULL}, 1168, "udp"}, |
|
+{"tripwire", {NULL}, 1169, "tcp"}, |
|
+{"tripwire", {NULL}, 1169, "udp"}, |
|
+{"atc-lm", {NULL}, 1170, "tcp"}, |
|
+{"atc-lm", {NULL}, 1170, "udp"}, |
|
+{"atc-appserver", {NULL}, 1171, "tcp"}, |
|
+{"atc-appserver", {NULL}, 1171, "udp"}, |
|
+{"dnap", {NULL}, 1172, "tcp"}, |
|
+{"dnap", {NULL}, 1172, "udp"}, |
|
+{"d-cinema-rrp", {NULL}, 1173, "tcp"}, |
|
+{"d-cinema-rrp", {NULL}, 1173, "udp"}, |
|
+{"fnet-remote-ui", {NULL}, 1174, "tcp"}, |
|
+{"fnet-remote-ui", {NULL}, 1174, "udp"}, |
|
+{"dossier", {NULL}, 1175, "tcp"}, |
|
+{"dossier", {NULL}, 1175, "udp"}, |
|
+{"indigo-server", {NULL}, 1176, "tcp"}, |
|
+{"indigo-server", {NULL}, 1176, "udp"}, |
|
+{"dkmessenger", {NULL}, 1177, "tcp"}, |
|
+{"dkmessenger", {NULL}, 1177, "udp"}, |
|
+{"sgi-storman", {NULL}, 1178, "tcp"}, |
|
+{"sgi-storman", {NULL}, 1178, "udp"}, |
|
+{"b2n", {NULL}, 1179, "tcp"}, |
|
+{"b2n", {NULL}, 1179, "udp"}, |
|
+{"mc-client", {NULL}, 1180, "tcp"}, |
|
+{"mc-client", {NULL}, 1180, "udp"}, |
|
+{"3comnetman", {NULL}, 1181, "tcp"}, |
|
+{"3comnetman", {NULL}, 1181, "udp"}, |
|
+{"accelenet", {NULL}, 1182, "tcp"}, |
|
+{"accelenet-data", {NULL}, 1182, "udp"}, |
|
+{"llsurfup-http", {NULL}, 1183, "tcp"}, |
|
+{"llsurfup-http", {NULL}, 1183, "udp"}, |
|
+{"llsurfup-https", {NULL}, 1184, "tcp"}, |
|
+{"llsurfup-https", {NULL}, 1184, "udp"}, |
|
+{"catchpole", {NULL}, 1185, "tcp"}, |
|
+{"catchpole", {NULL}, 1185, "udp"}, |
|
+{"mysql-cluster", {NULL}, 1186, "tcp"}, |
|
+{"mysql-cluster", {NULL}, 1186, "udp"}, |
|
+{"alias", {NULL}, 1187, "tcp"}, |
|
+{"alias", {NULL}, 1187, "udp"}, |
|
+{"hp-webadmin", {NULL}, 1188, "tcp"}, |
|
+{"hp-webadmin", {NULL}, 1188, "udp"}, |
|
+{"unet", {NULL}, 1189, "tcp"}, |
|
+{"unet", {NULL}, 1189, "udp"}, |
|
+{"commlinx-avl", {NULL}, 1190, "tcp"}, |
|
+{"commlinx-avl", {NULL}, 1190, "udp"}, |
|
+{"gpfs", {NULL}, 1191, "tcp"}, |
|
+{"gpfs", {NULL}, 1191, "udp"}, |
|
+{"caids-sensor", {NULL}, 1192, "tcp"}, |
|
+{"caids-sensor", {NULL}, 1192, "udp"}, |
|
+{"fiveacross", {NULL}, 1193, "tcp"}, |
|
+{"fiveacross", {NULL}, 1193, "udp"}, |
|
+{"openvpn", {NULL}, 1194, "tcp"}, |
|
+{"openvpn", {NULL}, 1194, "udp"}, |
|
+{"rsf-1", {NULL}, 1195, "tcp"}, |
|
+{"rsf-1", {NULL}, 1195, "udp"}, |
|
+{"netmagic", {NULL}, 1196, "tcp"}, |
|
+{"netmagic", {NULL}, 1196, "udp"}, |
|
+{"carrius-rshell", {NULL}, 1197, "tcp"}, |
|
+{"carrius-rshell", {NULL}, 1197, "udp"}, |
|
+{"cajo-discovery", {NULL}, 1198, "tcp"}, |
|
+{"cajo-discovery", {NULL}, 1198, "udp"}, |
|
+{"dmidi", {NULL}, 1199, "tcp"}, |
|
+{"dmidi", {NULL}, 1199, "udp"}, |
|
+{"scol", {NULL}, 1200, "tcp"}, |
|
+{"scol", {NULL}, 1200, "udp"}, |
|
+{"nucleus-sand", {NULL}, 1201, "tcp"}, |
|
+{"nucleus-sand", {NULL}, 1201, "udp"}, |
|
+{"caiccipc", {NULL}, 1202, "tcp"}, |
|
+{"caiccipc", {NULL}, 1202, "udp"}, |
|
+{"ssslic-mgr", {NULL}, 1203, "tcp"}, |
|
+{"ssslic-mgr", {NULL}, 1203, "udp"}, |
|
+{"ssslog-mgr", {NULL}, 1204, "tcp"}, |
|
+{"ssslog-mgr", {NULL}, 1204, "udp"}, |
|
+{"accord-mgc", {NULL}, 1205, "tcp"}, |
|
+{"accord-mgc", {NULL}, 1205, "udp"}, |
|
+{"anthony-data", {NULL}, 1206, "tcp"}, |
|
+{"anthony-data", {NULL}, 1206, "udp"}, |
|
+{"metasage", {NULL}, 1207, "tcp"}, |
|
+{"metasage", {NULL}, 1207, "udp"}, |
|
+{"seagull-ais", {NULL}, 1208, "tcp"}, |
|
+{"seagull-ais", {NULL}, 1208, "udp"}, |
|
+{"ipcd3", {NULL}, 1209, "tcp"}, |
|
+{"ipcd3", {NULL}, 1209, "udp"}, |
|
+{"eoss", {NULL}, 1210, "tcp"}, |
|
+{"eoss", {NULL}, 1210, "udp"}, |
|
+{"groove-dpp", {NULL}, 1211, "tcp"}, |
|
+{"groove-dpp", {NULL}, 1211, "udp"}, |
|
+{"lupa", {NULL}, 1212, "tcp"}, |
|
+{"lupa", {NULL}, 1212, "udp"}, |
|
+{"mpc-lifenet", {NULL}, 1213, "tcp"}, |
|
+{"mpc-lifenet", {NULL}, 1213, "udp"}, |
|
+{"kazaa", {NULL}, 1214, "tcp"}, |
|
+{"kazaa", {NULL}, 1214, "udp"}, |
|
+{"scanstat-1", {NULL}, 1215, "tcp"}, |
|
+{"scanstat-1", {NULL}, 1215, "udp"}, |
|
+{"etebac5", {NULL}, 1216, "tcp"}, |
|
+{"etebac5", {NULL}, 1216, "udp"}, |
|
+{"hpss-ndapi", {NULL}, 1217, "tcp"}, |
|
+{"hpss-ndapi", {NULL}, 1217, "udp"}, |
|
+{"aeroflight-ads", {NULL}, 1218, "tcp"}, |
|
+{"aeroflight-ads", {NULL}, 1218, "udp"}, |
|
+{"aeroflight-ret", {NULL}, 1219, "tcp"}, |
|
+{"aeroflight-ret", {NULL}, 1219, "udp"}, |
|
+{"qt-serveradmin", {NULL}, 1220, "tcp"}, |
|
+{"qt-serveradmin", {NULL}, 1220, "udp"}, |
|
+{"sweetware-apps", {NULL}, 1221, "tcp"}, |
|
+{"sweetware-apps", {NULL}, 1221, "udp"}, |
|
+{"nerv", {NULL}, 1222, "tcp"}, |
|
+{"nerv", {NULL}, 1222, "udp"}, |
|
+{"tgp", {NULL}, 1223, "tcp"}, |
|
+{"tgp", {NULL}, 1223, "udp"}, |
|
+{"vpnz", {NULL}, 1224, "tcp"}, |
|
+{"vpnz", {NULL}, 1224, "udp"}, |
|
+{"slinkysearch", {NULL}, 1225, "tcp"}, |
|
+{"slinkysearch", {NULL}, 1225, "udp"}, |
|
+{"stgxfws", {NULL}, 1226, "tcp"}, |
|
+{"stgxfws", {NULL}, 1226, "udp"}, |
|
+{"dns2go", {NULL}, 1227, "tcp"}, |
|
+{"dns2go", {NULL}, 1227, "udp"}, |
|
+{"florence", {NULL}, 1228, "tcp"}, |
|
+{"florence", {NULL}, 1228, "udp"}, |
|
+{"zented", {NULL}, 1229, "tcp"}, |
|
+{"zented", {NULL}, 1229, "udp"}, |
|
+{"periscope", {NULL}, 1230, "tcp"}, |
|
+{"periscope", {NULL}, 1230, "udp"}, |
|
+{"menandmice-lpm", {NULL}, 1231, "tcp"}, |
|
+{"menandmice-lpm", {NULL}, 1231, "udp"}, |
|
+{"univ-appserver", {NULL}, 1233, "tcp"}, |
|
+{"univ-appserver", {NULL}, 1233, "udp"}, |
|
+{"search-agent", {NULL}, 1234, "tcp"}, |
|
+{"search-agent", {NULL}, 1234, "udp"}, |
|
+{"mosaicsyssvc1", {NULL}, 1235, "tcp"}, |
|
+{"mosaicsyssvc1", {NULL}, 1235, "udp"}, |
|
+{"bvcontrol", {NULL}, 1236, "tcp"}, |
|
+{"bvcontrol", {NULL}, 1236, "udp"}, |
|
+{"tsdos390", {NULL}, 1237, "tcp"}, |
|
+{"tsdos390", {NULL}, 1237, "udp"}, |
|
+{"hacl-qs", {NULL}, 1238, "tcp"}, |
|
+{"hacl-qs", {NULL}, 1238, "udp"}, |
|
+{"nmsd", {NULL}, 1239, "tcp"}, |
|
+{"nmsd", {NULL}, 1239, "udp"}, |
|
+{"instantia", {NULL}, 1240, "tcp"}, |
|
+{"instantia", {NULL}, 1240, "udp"}, |
|
+{"nessus", {NULL}, 1241, "tcp"}, |
|
+{"nessus", {NULL}, 1241, "udp"}, |
|
+{"nmasoverip", {NULL}, 1242, "tcp"}, |
|
+{"nmasoverip", {NULL}, 1242, "udp"}, |
|
+{"serialgateway", {NULL}, 1243, "tcp"}, |
|
+{"serialgateway", {NULL}, 1243, "udp"}, |
|
+{"isbconference1", {NULL}, 1244, "tcp"}, |
|
+{"isbconference1", {NULL}, 1244, "udp"}, |
|
+{"isbconference2", {NULL}, 1245, "tcp"}, |
|
+{"isbconference2", {NULL}, 1245, "udp"}, |
|
+{"payrouter", {NULL}, 1246, "tcp"}, |
|
+{"payrouter", {NULL}, 1246, "udp"}, |
|
+{"visionpyramid", {NULL}, 1247, "tcp"}, |
|
+{"visionpyramid", {NULL}, 1247, "udp"}, |
|
+{"hermes", {NULL}, 1248, "tcp"}, |
|
+{"hermes", {NULL}, 1248, "udp"}, |
|
+{"mesavistaco", {NULL}, 1249, "tcp"}, |
|
+{"mesavistaco", {NULL}, 1249, "udp"}, |
|
+{"swldy-sias", {NULL}, 1250, "tcp"}, |
|
+{"swldy-sias", {NULL}, 1250, "udp"}, |
|
+{"servergraph", {NULL}, 1251, "tcp"}, |
|
+{"servergraph", {NULL}, 1251, "udp"}, |
|
+{"bspne-pcc", {NULL}, 1252, "tcp"}, |
|
+{"bspne-pcc", {NULL}, 1252, "udp"}, |
|
+{"q55-pcc", {NULL}, 1253, "tcp"}, |
|
+{"q55-pcc", {NULL}, 1253, "udp"}, |
|
+{"de-noc", {NULL}, 1254, "tcp"}, |
|
+{"de-noc", {NULL}, 1254, "udp"}, |
|
+{"de-cache-query", {NULL}, 1255, "tcp"}, |
|
+{"de-cache-query", {NULL}, 1255, "udp"}, |
|
+{"de-server", {NULL}, 1256, "tcp"}, |
|
+{"de-server", {NULL}, 1256, "udp"}, |
|
+{"shockwave2", {NULL}, 1257, "tcp"}, |
|
+{"shockwave2", {NULL}, 1257, "udp"}, |
|
+{"opennl", {NULL}, 1258, "tcp"}, |
|
+{"opennl", {NULL}, 1258, "udp"}, |
|
+{"opennl-voice", {NULL}, 1259, "tcp"}, |
|
+{"opennl-voice", {NULL}, 1259, "udp"}, |
|
+{"ibm-ssd", {NULL}, 1260, "tcp"}, |
|
+{"ibm-ssd", {NULL}, 1260, "udp"}, |
|
+{"mpshrsv", {NULL}, 1261, "tcp"}, |
|
+{"mpshrsv", {NULL}, 1261, "udp"}, |
|
+{"qnts-orb", {NULL}, 1262, "tcp"}, |
|
+{"qnts-orb", {NULL}, 1262, "udp"}, |
|
+{"dka", {NULL}, 1263, "tcp"}, |
|
+{"dka", {NULL}, 1263, "udp"}, |
|
+{"prat", {NULL}, 1264, "tcp"}, |
|
+{"prat", {NULL}, 1264, "udp"}, |
|
+{"dssiapi", {NULL}, 1265, "tcp"}, |
|
+{"dssiapi", {NULL}, 1265, "udp"}, |
|
+{"dellpwrappks", {NULL}, 1266, "tcp"}, |
|
+{"dellpwrappks", {NULL}, 1266, "udp"}, |
|
+{"epc", {NULL}, 1267, "tcp"}, |
|
+{"epc", {NULL}, 1267, "udp"}, |
|
+{"propel-msgsys", {NULL}, 1268, "tcp"}, |
|
+{"propel-msgsys", {NULL}, 1268, "udp"}, |
|
+{"watilapp", {NULL}, 1269, "tcp"}, |
|
+{"watilapp", {NULL}, 1269, "udp"}, |
|
+{"opsmgr", {NULL}, 1270, "tcp"}, |
|
+{"opsmgr", {NULL}, 1270, "udp"}, |
|
+{"excw", {NULL}, 1271, "tcp"}, |
|
+{"excw", {NULL}, 1271, "udp"}, |
|
+{"cspmlockmgr", {NULL}, 1272, "tcp"}, |
|
+{"cspmlockmgr", {NULL}, 1272, "udp"}, |
|
+{"emc-gateway", {NULL}, 1273, "tcp"}, |
|
+{"emc-gateway", {NULL}, 1273, "udp"}, |
|
+{"t1distproc", {NULL}, 1274, "tcp"}, |
|
+{"t1distproc", {NULL}, 1274, "udp"}, |
|
+{"ivcollector", {NULL}, 1275, "tcp"}, |
|
+{"ivcollector", {NULL}, 1275, "udp"}, |
|
+{"ivmanager", {NULL}, 1276, "tcp"}, |
|
+{"ivmanager", {NULL}, 1276, "udp"}, |
|
+{"miva-mqs", {NULL}, 1277, "tcp"}, |
|
+{"miva-mqs", {NULL}, 1277, "udp"}, |
|
+{"dellwebadmin-1", {NULL}, 1278, "tcp"}, |
|
+{"dellwebadmin-1", {NULL}, 1278, "udp"}, |
|
+{"dellwebadmin-2", {NULL}, 1279, "tcp"}, |
|
+{"dellwebadmin-2", {NULL}, 1279, "udp"}, |
|
+{"pictrography", {NULL}, 1280, "tcp"}, |
|
+{"pictrography", {NULL}, 1280, "udp"}, |
|
+{"healthd", {NULL}, 1281, "tcp"}, |
|
+{"healthd", {NULL}, 1281, "udp"}, |
|
+{"emperion", {NULL}, 1282, "tcp"}, |
|
+{"emperion", {NULL}, 1282, "udp"}, |
|
+{"productinfo", {NULL}, 1283, "tcp"}, |
|
+{"productinfo", {NULL}, 1283, "udp"}, |
|
+{"iee-qfx", {NULL}, 1284, "tcp"}, |
|
+{"iee-qfx", {NULL}, 1284, "udp"}, |
|
+{"neoiface", {NULL}, 1285, "tcp"}, |
|
+{"neoiface", {NULL}, 1285, "udp"}, |
|
+{"netuitive", {NULL}, 1286, "tcp"}, |
|
+{"netuitive", {NULL}, 1286, "udp"}, |
|
+{"routematch", {NULL}, 1287, "tcp"}, |
|
+{"routematch", {NULL}, 1287, "udp"}, |
|
+{"navbuddy", {NULL}, 1288, "tcp"}, |
|
+{"navbuddy", {NULL}, 1288, "udp"}, |
|
+{"jwalkserver", {NULL}, 1289, "tcp"}, |
|
+{"jwalkserver", {NULL}, 1289, "udp"}, |
|
+{"winjaserver", {NULL}, 1290, "tcp"}, |
|
+{"winjaserver", {NULL}, 1290, "udp"}, |
|
+{"seagulllms", {NULL}, 1291, "tcp"}, |
|
+{"seagulllms", {NULL}, 1291, "udp"}, |
|
+{"dsdn", {NULL}, 1292, "tcp"}, |
|
+{"dsdn", {NULL}, 1292, "udp"}, |
|
+{"pkt-krb-ipsec", {NULL}, 1293, "tcp"}, |
|
+{"pkt-krb-ipsec", {NULL}, 1293, "udp"}, |
|
+{"cmmdriver", {NULL}, 1294, "tcp"}, |
|
+{"cmmdriver", {NULL}, 1294, "udp"}, |
|
+{"ehtp", {NULL}, 1295, "tcp"}, |
|
+{"ehtp", {NULL}, 1295, "udp"}, |
|
+{"dproxy", {NULL}, 1296, "tcp"}, |
|
+{"dproxy", {NULL}, 1296, "udp"}, |
|
+{"sdproxy", {NULL}, 1297, "tcp"}, |
|
+{"sdproxy", {NULL}, 1297, "udp"}, |
|
+{"lpcp", {NULL}, 1298, "tcp"}, |
|
+{"lpcp", {NULL}, 1298, "udp"}, |
|
+{"hp-sci", {NULL}, 1299, "tcp"}, |
|
+{"hp-sci", {NULL}, 1299, "udp"}, |
|
+{"h323hostcallsc", {NULL}, 1300, "tcp"}, |
|
+{"h323hostcallsc", {NULL}, 1300, "udp"}, |
|
+{"ci3-software-1", {NULL}, 1301, "tcp"}, |
|
+{"ci3-software-1", {NULL}, 1301, "udp"}, |
|
+{"ci3-software-2", {NULL}, 1302, "tcp"}, |
|
+{"ci3-software-2", {NULL}, 1302, "udp"}, |
|
+{"sftsrv", {NULL}, 1303, "tcp"}, |
|
+{"sftsrv", {NULL}, 1303, "udp"}, |
|
+{"boomerang", {NULL}, 1304, "tcp"}, |
|
+{"boomerang", {NULL}, 1304, "udp"}, |
|
+{"pe-mike", {NULL}, 1305, "tcp"}, |
|
+{"pe-mike", {NULL}, 1305, "udp"}, |
|
+{"re-conn-proto", {NULL}, 1306, "tcp"}, |
|
+{"re-conn-proto", {NULL}, 1306, "udp"}, |
|
+{"pacmand", {NULL}, 1307, "tcp"}, |
|
+{"pacmand", {NULL}, 1307, "udp"}, |
|
+{"odsi", {NULL}, 1308, "tcp"}, |
|
+{"odsi", {NULL}, 1308, "udp"}, |
|
+{"jtag-server", {NULL}, 1309, "tcp"}, |
|
+{"jtag-server", {NULL}, 1309, "udp"}, |
|
+{"husky", {NULL}, 1310, "tcp"}, |
|
+{"husky", {NULL}, 1310, "udp"}, |
|
+{"rxmon", {NULL}, 1311, "tcp"}, |
|
+{"rxmon", {NULL}, 1311, "udp"}, |
|
+{"sti-envision", {NULL}, 1312, "tcp"}, |
|
+{"sti-envision", {NULL}, 1312, "udp"}, |
|
+{"bmc_patroldb", {NULL}, 1313, "tcp"}, |
|
+{"bmc_patroldb", {NULL}, 1313, "udp"}, |
|
+{"pdps", {NULL}, 1314, "tcp"}, |
|
+{"pdps", {NULL}, 1314, "udp"}, |
|
+{"els", {NULL}, 1315, "tcp"}, |
|
+{"els", {NULL}, 1315, "udp"}, |
|
+{"exbit-escp", {NULL}, 1316, "tcp"}, |
|
+{"exbit-escp", {NULL}, 1316, "udp"}, |
|
+{"vrts-ipcserver", {NULL}, 1317, "tcp"}, |
|
+{"vrts-ipcserver", {NULL}, 1317, "udp"}, |
|
+{"krb5gatekeeper", {NULL}, 1318, "tcp"}, |
|
+{"krb5gatekeeper", {NULL}, 1318, "udp"}, |
|
+{"amx-icsp", {NULL}, 1319, "tcp"}, |
|
+{"amx-icsp", {NULL}, 1319, "udp"}, |
|
+{"amx-axbnet", {NULL}, 1320, "tcp"}, |
|
+{"amx-axbnet", {NULL}, 1320, "udp"}, |
|
+{"pip", {NULL}, 1321, "tcp"}, |
|
+{"pip", {NULL}, 1321, "udp"}, |
|
+{"novation", {NULL}, 1322, "tcp"}, |
|
+{"novation", {NULL}, 1322, "udp"}, |
|
+{"brcd", {NULL}, 1323, "tcp"}, |
|
+{"brcd", {NULL}, 1323, "udp"}, |
|
+{"delta-mcp", {NULL}, 1324, "tcp"}, |
|
+{"delta-mcp", {NULL}, 1324, "udp"}, |
|
+{"dx-instrument", {NULL}, 1325, "tcp"}, |
|
+{"dx-instrument", {NULL}, 1325, "udp"}, |
|
+{"wimsic", {NULL}, 1326, "tcp"}, |
|
+{"wimsic", {NULL}, 1326, "udp"}, |
|
+{"ultrex", {NULL}, 1327, "tcp"}, |
|
+{"ultrex", {NULL}, 1327, "udp"}, |
|
+{"ewall", {NULL}, 1328, "tcp"}, |
|
+{"ewall", {NULL}, 1328, "udp"}, |
|
+{"netdb-export", {NULL}, 1329, "tcp"}, |
|
+{"netdb-export", {NULL}, 1329, "udp"}, |
|
+{"streetperfect", {NULL}, 1330, "tcp"}, |
|
+{"streetperfect", {NULL}, 1330, "udp"}, |
|
+{"intersan", {NULL}, 1331, "tcp"}, |
|
+{"intersan", {NULL}, 1331, "udp"}, |
|
+{"pcia-rxp-b", {NULL}, 1332, "tcp"}, |
|
+{"pcia-rxp-b", {NULL}, 1332, "udp"}, |
|
+{"passwrd-policy", {NULL}, 1333, "tcp"}, |
|
+{"passwrd-policy", {NULL}, 1333, "udp"}, |
|
+{"writesrv", {NULL}, 1334, "tcp"}, |
|
+{"writesrv", {NULL}, 1334, "udp"}, |
|
+{"digital-notary", {NULL}, 1335, "tcp"}, |
|
+{"digital-notary", {NULL}, 1335, "udp"}, |
|
+{"ischat", {NULL}, 1336, "tcp"}, |
|
+{"ischat", {NULL}, 1336, "udp"}, |
|
+{"menandmice-dns", {NULL}, 1337, "tcp"}, |
|
+{"menandmice-dns", {NULL}, 1337, "udp"}, |
|
+{"wmc-log-svc", {NULL}, 1338, "tcp"}, |
|
+{"wmc-log-svc", {NULL}, 1338, "udp"}, |
|
+{"kjtsiteserver", {NULL}, 1339, "tcp"}, |
|
+{"kjtsiteserver", {NULL}, 1339, "udp"}, |
|
+{"naap", {NULL}, 1340, "tcp"}, |
|
+{"naap", {NULL}, 1340, "udp"}, |
|
+{"qubes", {NULL}, 1341, "tcp"}, |
|
+{"qubes", {NULL}, 1341, "udp"}, |
|
+{"esbroker", {NULL}, 1342, "tcp"}, |
|
+{"esbroker", {NULL}, 1342, "udp"}, |
|
+{"re101", {NULL}, 1343, "tcp"}, |
|
+{"re101", {NULL}, 1343, "udp"}, |
|
+{"icap", {NULL}, 1344, "tcp"}, |
|
+{"icap", {NULL}, 1344, "udp"}, |
|
+{"vpjp", {NULL}, 1345, "tcp"}, |
|
+{"vpjp", {NULL}, 1345, "udp"}, |
|
+{"alta-ana-lm", {NULL}, 1346, "tcp"}, |
|
+{"alta-ana-lm", {NULL}, 1346, "udp"}, |
|
+{"bbn-mmc", {NULL}, 1347, "tcp"}, |
|
+{"bbn-mmc", {NULL}, 1347, "udp"}, |
|
+{"bbn-mmx", {NULL}, 1348, "tcp"}, |
|
+{"bbn-mmx", {NULL}, 1348, "udp"}, |
|
+{"sbook", {NULL}, 1349, "tcp"}, |
|
+{"sbook", {NULL}, 1349, "udp"}, |
|
+{"editbench", {NULL}, 1350, "tcp"}, |
|
+{"editbench", {NULL}, 1350, "udp"}, |
|
+{"equationbuilder", {NULL}, 1351, "tcp"}, |
|
+{"equationbuilder", {NULL}, 1351, "udp"}, |
|
+{"lotusnote", {NULL}, 1352, "tcp"}, |
|
+{"lotusnote", {NULL}, 1352, "udp"}, |
|
+{"relief", {NULL}, 1353, "tcp"}, |
|
+{"relief", {NULL}, 1353, "udp"}, |
|
+{"XSIP-network", {NULL}, 1354, "tcp"}, |
|
+{"XSIP-network", {NULL}, 1354, "udp"}, |
|
+{"intuitive-edge", {NULL}, 1355, "tcp"}, |
|
+{"intuitive-edge", {NULL}, 1355, "udp"}, |
|
+{"cuillamartin", {NULL}, 1356, "tcp"}, |
|
+{"cuillamartin", {NULL}, 1356, "udp"}, |
|
+{"pegboard", {NULL}, 1357, "tcp"}, |
|
+{"pegboard", {NULL}, 1357, "udp"}, |
|
+{"connlcli", {NULL}, 1358, "tcp"}, |
|
+{"connlcli", {NULL}, 1358, "udp"}, |
|
+{"ftsrv", {NULL}, 1359, "tcp"}, |
|
+{"ftsrv", {NULL}, 1359, "udp"}, |
|
+{"mimer", {NULL}, 1360, "tcp"}, |
|
+{"mimer", {NULL}, 1360, "udp"}, |
|
+{"linx", {NULL}, 1361, "tcp"}, |
|
+{"linx", {NULL}, 1361, "udp"}, |
|
+{"timeflies", {NULL}, 1362, "tcp"}, |
|
+{"timeflies", {NULL}, 1362, "udp"}, |
|
+{"ndm-requester", {NULL}, 1363, "tcp"}, |
|
+{"ndm-requester", {NULL}, 1363, "udp"}, |
|
+{"ndm-server", {NULL}, 1364, "tcp"}, |
|
+{"ndm-server", {NULL}, 1364, "udp"}, |
|
+{"adapt-sna", {NULL}, 1365, "tcp"}, |
|
+{"adapt-sna", {NULL}, 1365, "udp"}, |
|
+{"netware-csp", {NULL}, 1366, "tcp"}, |
|
+{"netware-csp", {NULL}, 1366, "udp"}, |
|
+{"dcs", {NULL}, 1367, "tcp"}, |
|
+{"dcs", {NULL}, 1367, "udp"}, |
|
+{"screencast", {NULL}, 1368, "tcp"}, |
|
+{"screencast", {NULL}, 1368, "udp"}, |
|
+{"gv-us", {NULL}, 1369, "tcp"}, |
|
+{"gv-us", {NULL}, 1369, "udp"}, |
|
+{"us-gv", {NULL}, 1370, "tcp"}, |
|
+{"us-gv", {NULL}, 1370, "udp"}, |
|
+{"fc-cli", {NULL}, 1371, "tcp"}, |
|
+{"fc-cli", {NULL}, 1371, "udp"}, |
|
+{"fc-ser", {NULL}, 1372, "tcp"}, |
|
+{"fc-ser", {NULL}, 1372, "udp"}, |
|
+{"chromagrafx", {NULL}, 1373, "tcp"}, |
|
+{"chromagrafx", {NULL}, 1373, "udp"}, |
|
+{"molly", {NULL}, 1374, "tcp"}, |
|
+{"molly", {NULL}, 1374, "udp"}, |
|
+{"bytex", {NULL}, 1375, "tcp"}, |
|
+{"bytex", {NULL}, 1375, "udp"}, |
|
+{"ibm-pps", {NULL}, 1376, "tcp"}, |
|
+{"ibm-pps", {NULL}, 1376, "udp"}, |
|
+{"cichlid", {NULL}, 1377, "tcp"}, |
|
+{"cichlid", {NULL}, 1377, "udp"}, |
|
+{"elan", {NULL}, 1378, "tcp"}, |
|
+{"elan", {NULL}, 1378, "udp"}, |
|
+{"dbreporter", {NULL}, 1379, "tcp"}, |
|
+{"dbreporter", {NULL}, 1379, "udp"}, |
|
+{"telesis-licman", {NULL}, 1380, "tcp"}, |
|
+{"telesis-licman", {NULL}, 1380, "udp"}, |
|
+{"apple-licman", {NULL}, 1381, "tcp"}, |
|
+{"apple-licman", {NULL}, 1381, "udp"}, |
|
+{"udt_os", {NULL}, 1382, "tcp"}, |
|
+{"udt_os", {NULL}, 1382, "udp"}, |
|
+{"gwha", {NULL}, 1383, "tcp"}, |
|
+{"gwha", {NULL}, 1383, "udp"}, |
|
+{"os-licman", {NULL}, 1384, "tcp"}, |
|
+{"os-licman", {NULL}, 1384, "udp"}, |
|
+{"atex_elmd", {NULL}, 1385, "tcp"}, |
|
+{"atex_elmd", {NULL}, 1385, "udp"}, |
|
+{"checksum", {NULL}, 1386, "tcp"}, |
|
+{"checksum", {NULL}, 1386, "udp"}, |
|
+{"cadsi-lm", {NULL}, 1387, "tcp"}, |
|
+{"cadsi-lm", {NULL}, 1387, "udp"}, |
|
+{"objective-dbc", {NULL}, 1388, "tcp"}, |
|
+{"objective-dbc", {NULL}, 1388, "udp"}, |
|
+{"iclpv-dm", {NULL}, 1389, "tcp"}, |
|
+{"iclpv-dm", {NULL}, 1389, "udp"}, |
|
+{"iclpv-sc", {NULL}, 1390, "tcp"}, |
|
+{"iclpv-sc", {NULL}, 1390, "udp"}, |
|
+{"iclpv-sas", {NULL}, 1391, "tcp"}, |
|
+{"iclpv-sas", {NULL}, 1391, "udp"}, |
|
+{"iclpv-pm", {NULL}, 1392, "tcp"}, |
|
+{"iclpv-pm", {NULL}, 1392, "udp"}, |
|
+{"iclpv-nls", {NULL}, 1393, "tcp"}, |
|
+{"iclpv-nls", {NULL}, 1393, "udp"}, |
|
+{"iclpv-nlc", {NULL}, 1394, "tcp"}, |
|
+{"iclpv-nlc", {NULL}, 1394, "udp"}, |
|
+{"iclpv-wsm", {NULL}, 1395, "tcp"}, |
|
+{"iclpv-wsm", {NULL}, 1395, "udp"}, |
|
+{"dvl-activemail", {NULL}, 1396, "tcp"}, |
|
+{"dvl-activemail", {NULL}, 1396, "udp"}, |
|
+{"audio-activmail", {NULL}, 1397, "tcp"}, |
|
+{"audio-activmail", {NULL}, 1397, "udp"}, |
|
+{"video-activmail", {NULL}, 1398, "tcp"}, |
|
+{"video-activmail", {NULL}, 1398, "udp"}, |
|
+{"cadkey-licman", {NULL}, 1399, "tcp"}, |
|
+{"cadkey-licman", {NULL}, 1399, "udp"}, |
|
+{"cadkey-tablet", {NULL}, 1400, "tcp"}, |
|
+{"cadkey-tablet", {NULL}, 1400, "udp"}, |
|
+{"goldleaf-licman", {NULL}, 1401, "tcp"}, |
|
+{"goldleaf-licman", {NULL}, 1401, "udp"}, |
|
+{"prm-sm-np", {NULL}, 1402, "tcp"}, |
|
+{"prm-sm-np", {NULL}, 1402, "udp"}, |
|
+{"prm-nm-np", {NULL}, 1403, "tcp"}, |
|
+{"prm-nm-np", {NULL}, 1403, "udp"}, |
|
+{"igi-lm", {NULL}, 1404, "tcp"}, |
|
+{"igi-lm", {NULL}, 1404, "udp"}, |
|
+{"ibm-res", {NULL}, 1405, "tcp"}, |
|
+{"ibm-res", {NULL}, 1405, "udp"}, |
|
+{"netlabs-lm", {NULL}, 1406, "tcp"}, |
|
+{"netlabs-lm", {NULL}, 1406, "udp"}, |
|
+{"dbsa-lm", {NULL}, 1407, "tcp"}, |
|
+{"dbsa-lm", {NULL}, 1407, "udp"}, |
|
+{"sophia-lm", {NULL}, 1408, "tcp"}, |
|
+{"sophia-lm", {NULL}, 1408, "udp"}, |
|
+{"here-lm", {NULL}, 1409, "tcp"}, |
|
+{"here-lm", {NULL}, 1409, "udp"}, |
|
+{"hiq", {NULL}, 1410, "tcp"}, |
|
+{"hiq", {NULL}, 1410, "udp"}, |
|
+{"af", {NULL}, 1411, "tcp"}, |
|
+{"af", {NULL}, 1411, "udp"}, |
|
+{"innosys", {NULL}, 1412, "tcp"}, |
|
+{"innosys", {NULL}, 1412, "udp"}, |
|
+{"innosys-acl", {NULL}, 1413, "tcp"}, |
|
+{"innosys-acl", {NULL}, 1413, "udp"}, |
|
+{"ibm-mqseries", {NULL}, 1414, "tcp"}, |
|
+{"ibm-mqseries", {NULL}, 1414, "udp"}, |
|
+{"dbstar", {NULL}, 1415, "tcp"}, |
|
+{"dbstar", {NULL}, 1415, "udp"}, |
|
+{"novell-lu6.2", {NULL}, 1416, "tcp"}, |
|
+{"novell-lu6.2", {NULL}, 1416, "udp"}, |
|
+{"timbuktu-srv1", {NULL}, 1417, "tcp"}, |
|
+{"timbuktu-srv1", {NULL}, 1417, "udp"}, |
|
+{"timbuktu-srv2", {NULL}, 1418, "tcp"}, |
|
+{"timbuktu-srv2", {NULL}, 1418, "udp"}, |
|
+{"timbuktu-srv3", {NULL}, 1419, "tcp"}, |
|
+{"timbuktu-srv3", {NULL}, 1419, "udp"}, |
|
+{"timbuktu-srv4", {NULL}, 1420, "tcp"}, |
|
+{"timbuktu-srv4", {NULL}, 1420, "udp"}, |
|
+{"gandalf-lm", {NULL}, 1421, "tcp"}, |
|
+{"gandalf-lm", {NULL}, 1421, "udp"}, |
|
+{"autodesk-lm", {NULL}, 1422, "tcp"}, |
|
+{"autodesk-lm", {NULL}, 1422, "udp"}, |
|
+{"essbase", {NULL}, 1423, "tcp"}, |
|
+{"essbase", {NULL}, 1423, "udp"}, |
|
+{"hybrid", {NULL}, 1424, "tcp"}, |
|
+{"hybrid", {NULL}, 1424, "udp"}, |
|
+{"zion-lm", {NULL}, 1425, "tcp"}, |
|
+{"zion-lm", {NULL}, 1425, "udp"}, |
|
+{"sais", {NULL}, 1426, "tcp"}, |
|
+{"sais", {NULL}, 1426, "udp"}, |
|
+{"mloadd", {NULL}, 1427, "tcp"}, |
|
+{"mloadd", {NULL}, 1427, "udp"}, |
|
+{"informatik-lm", {NULL}, 1428, "tcp"}, |
|
+{"informatik-lm", {NULL}, 1428, "udp"}, |
|
+{"nms", {NULL}, 1429, "tcp"}, |
|
+{"nms", {NULL}, 1429, "udp"}, |
|
+{"tpdu", {NULL}, 1430, "tcp"}, |
|
+{"tpdu", {NULL}, 1430, "udp"}, |
|
+{"rgtp", {NULL}, 1431, "tcp"}, |
|
+{"rgtp", {NULL}, 1431, "udp"}, |
|
+{"blueberry-lm", {NULL}, 1432, "tcp"}, |
|
+{"blueberry-lm", {NULL}, 1432, "udp"}, |
|
+{"ms-sql-s", {NULL}, 1433, "tcp"}, |
|
+{"ms-sql-s", {NULL}, 1433, "udp"}, |
|
+{"ms-sql-m", {NULL}, 1434, "tcp"}, |
|
+{"ms-sql-m", {NULL}, 1434, "udp"}, |
|
+{"ibm-cics", {NULL}, 1435, "tcp"}, |
|
+{"ibm-cics", {NULL}, 1435, "udp"}, |
|
+{"saism", {NULL}, 1436, "tcp"}, |
|
+{"saism", {NULL}, 1436, "udp"}, |
|
+{"tabula", {NULL}, 1437, "tcp"}, |
|
+{"tabula", {NULL}, 1437, "udp"}, |
|
+{"eicon-server", {NULL}, 1438, "tcp"}, |
|
+{"eicon-server", {NULL}, 1438, "udp"}, |
|
+{"eicon-x25", {NULL}, 1439, "tcp"}, |
|
+{"eicon-x25", {NULL}, 1439, "udp"}, |
|
+{"eicon-slp", {NULL}, 1440, "tcp"}, |
|
+{"eicon-slp", {NULL}, 1440, "udp"}, |
|
+{"cadis-1", {NULL}, 1441, "tcp"}, |
|
+{"cadis-1", {NULL}, 1441, "udp"}, |
|
+{"cadis-2", {NULL}, 1442, "tcp"}, |
|
+{"cadis-2", {NULL}, 1442, "udp"}, |
|
+{"ies-lm", {NULL}, 1443, "tcp"}, |
|
+{"ies-lm", {NULL}, 1443, "udp"}, |
|
+{"marcam-lm", {NULL}, 1444, "tcp"}, |
|
+{"marcam-lm", {NULL}, 1444, "udp"}, |
|
+{"proxima-lm", {NULL}, 1445, "tcp"}, |
|
+{"proxima-lm", {NULL}, 1445, "udp"}, |
|
+{"ora-lm", {NULL}, 1446, "tcp"}, |
|
+{"ora-lm", {NULL}, 1446, "udp"}, |
|
+{"apri-lm", {NULL}, 1447, "tcp"}, |
|
+{"apri-lm", {NULL}, 1447, "udp"}, |
|
+{"oc-lm", {NULL}, 1448, "tcp"}, |
|
+{"oc-lm", {NULL}, 1448, "udp"}, |
|
+{"peport", {NULL}, 1449, "tcp"}, |
|
+{"peport", {NULL}, 1449, "udp"}, |
|
+{"dwf", {NULL}, 1450, "tcp"}, |
|
+{"dwf", {NULL}, 1450, "udp"}, |
|
+{"infoman", {NULL}, 1451, "tcp"}, |
|
+{"infoman", {NULL}, 1451, "udp"}, |
|
+{"gtegsc-lm", {NULL}, 1452, "tcp"}, |
|
+{"gtegsc-lm", {NULL}, 1452, "udp"}, |
|
+{"genie-lm", {NULL}, 1453, "tcp"}, |
|
+{"genie-lm", {NULL}, 1453, "udp"}, |
|
+{"interhdl_elmd", {NULL}, 1454, "tcp"}, |
|
+{"interhdl_elmd", {NULL}, 1454, "udp"}, |
|
+{"esl-lm", {NULL}, 1455, "tcp"}, |
|
+{"esl-lm", {NULL}, 1455, "udp"}, |
|
+{"dca", {NULL}, 1456, "tcp"}, |
|
+{"dca", {NULL}, 1456, "udp"}, |
|
+{"valisys-lm", {NULL}, 1457, "tcp"}, |
|
+{"valisys-lm", {NULL}, 1457, "udp"}, |
|
+{"nrcabq-lm", {NULL}, 1458, "tcp"}, |
|
+{"nrcabq-lm", {NULL}, 1458, "udp"}, |
|
+{"proshare1", {NULL}, 1459, "tcp"}, |
|
+{"proshare1", {NULL}, 1459, "udp"}, |
|
+{"proshare2", {NULL}, 1460, "tcp"}, |
|
+{"proshare2", {NULL}, 1460, "udp"}, |
|
+{"ibm_wrless_lan", {NULL}, 1461, "tcp"}, |
|
+{"ibm_wrless_lan", {NULL}, 1461, "udp"}, |
|
+{"world-lm", {NULL}, 1462, "tcp"}, |
|
+{"world-lm", {NULL}, 1462, "udp"}, |
|
+{"nucleus", {NULL}, 1463, "tcp"}, |
|
+{"nucleus", {NULL}, 1463, "udp"}, |
|
+{"msl_lmd", {NULL}, 1464, "tcp"}, |
|
+{"msl_lmd", {NULL}, 1464, "udp"}, |
|
+{"pipes", {NULL}, 1465, "tcp"}, |
|
+{"pipes", {NULL}, 1465, "udp"}, |
|
+{"oceansoft-lm", {NULL}, 1466, "tcp"}, |
|
+{"oceansoft-lm", {NULL}, 1466, "udp"}, |
|
+{"csdmbase", {NULL}, 1467, "tcp"}, |
|
+{"csdmbase", {NULL}, 1467, "udp"}, |
|
+{"csdm", {NULL}, 1468, "tcp"}, |
|
+{"csdm", {NULL}, 1468, "udp"}, |
|
+{"aal-lm", {NULL}, 1469, "tcp"}, |
|
+{"aal-lm", {NULL}, 1469, "udp"}, |
|
+{"uaiact", {NULL}, 1470, "tcp"}, |
|
+{"uaiact", {NULL}, 1470, "udp"}, |
|
+{"csdmbase", {NULL}, 1471, "tcp"}, |
|
+{"csdmbase", {NULL}, 1471, "udp"}, |
|
+{"csdm", {NULL}, 1472, "tcp"}, |
|
+{"csdm", {NULL}, 1472, "udp"}, |
|
+{"openmath", {NULL}, 1473, "tcp"}, |
|
+{"openmath", {NULL}, 1473, "udp"}, |
|
+{"telefinder", {NULL}, 1474, "tcp"}, |
|
+{"telefinder", {NULL}, 1474, "udp"}, |
|
+{"taligent-lm", {NULL}, 1475, "tcp"}, |
|
+{"taligent-lm", {NULL}, 1475, "udp"}, |
|
+{"clvm-cfg", {NULL}, 1476, "tcp"}, |
|
+{"clvm-cfg", {NULL}, 1476, "udp"}, |
|
+{"ms-sna-server", {NULL}, 1477, "tcp"}, |
|
+{"ms-sna-server", {NULL}, 1477, "udp"}, |
|
+{"ms-sna-base", {NULL}, 1478, "tcp"}, |
|
+{"ms-sna-base", {NULL}, 1478, "udp"}, |
|
+{"dberegister", {NULL}, 1479, "tcp"}, |
|
+{"dberegister", {NULL}, 1479, "udp"}, |
|
+{"pacerforum", {NULL}, 1480, "tcp"}, |
|
+{"pacerforum", {NULL}, 1480, "udp"}, |
|
+{"airs", {NULL}, 1481, "tcp"}, |
|
+{"airs", {NULL}, 1481, "udp"}, |
|
+{"miteksys-lm", {NULL}, 1482, "tcp"}, |
|
+{"miteksys-lm", {NULL}, 1482, "udp"}, |
|
+{"afs", {NULL}, 1483, "tcp"}, |
|
+{"afs", {NULL}, 1483, "udp"}, |
|
+{"confluent", {NULL}, 1484, "tcp"}, |
|
+{"confluent", {NULL}, 1484, "udp"}, |
|
+{"lansource", {NULL}, 1485, "tcp"}, |
|
+{"lansource", {NULL}, 1485, "udp"}, |
|
+{"nms_topo_serv", {NULL}, 1486, "tcp"}, |
|
+{"nms_topo_serv", {NULL}, 1486, "udp"}, |
|
+{"localinfosrvr", {NULL}, 1487, "tcp"}, |
|
+{"localinfosrvr", {NULL}, 1487, "udp"}, |
|
+{"docstor", {NULL}, 1488, "tcp"}, |
|
+{"docstor", {NULL}, 1488, "udp"}, |
|
+{"dmdocbroker", {NULL}, 1489, "tcp"}, |
|
+{"dmdocbroker", {NULL}, 1489, "udp"}, |
|
+{"insitu-conf", {NULL}, 1490, "tcp"}, |
|
+{"insitu-conf", {NULL}, 1490, "udp"}, |
|
+{"stone-design-1", {NULL}, 1492, "tcp"}, |
|
+{"stone-design-1", {NULL}, 1492, "udp"}, |
|
+{"netmap_lm", {NULL}, 1493, "tcp"}, |
|
+{"netmap_lm", {NULL}, 1493, "udp"}, |
|
+{"ica", {NULL}, 1494, "tcp"}, |
|
+{"ica", {NULL}, 1494, "udp"}, |
|
+{"cvc", {NULL}, 1495, "tcp"}, |
|
+{"cvc", {NULL}, 1495, "udp"}, |
|
+{"liberty-lm", {NULL}, 1496, "tcp"}, |
|
+{"liberty-lm", {NULL}, 1496, "udp"}, |
|
+{"rfx-lm", {NULL}, 1497, "tcp"}, |
|
+{"rfx-lm", {NULL}, 1497, "udp"}, |
|
+{"sybase-sqlany", {NULL}, 1498, "tcp"}, |
|
+{"sybase-sqlany", {NULL}, 1498, "udp"}, |
|
+{"fhc", {NULL}, 1499, "tcp"}, |
|
+{"fhc", {NULL}, 1499, "udp"}, |
|
+{"vlsi-lm", {NULL}, 1500, "tcp"}, |
|
+{"vlsi-lm", {NULL}, 1500, "udp"}, |
|
+{"saiscm", {NULL}, 1501, "tcp"}, |
|
+{"saiscm", {NULL}, 1501, "udp"}, |
|
+{"shivadiscovery", {NULL}, 1502, "tcp"}, |
|
+{"shivadiscovery", {NULL}, 1502, "udp"}, |
|
+{"imtc-mcs", {NULL}, 1503, "tcp"}, |
|
+{"imtc-mcs", {NULL}, 1503, "udp"}, |
|
+{"evb-elm", {NULL}, 1504, "tcp"}, |
|
+{"evb-elm", {NULL}, 1504, "udp"}, |
|
+{"funkproxy", {NULL}, 1505, "tcp"}, |
|
+{"funkproxy", {NULL}, 1505, "udp"}, |
|
+{"utcd", {NULL}, 1506, "tcp"}, |
|
+{"utcd", {NULL}, 1506, "udp"}, |
|
+{"symplex", {NULL}, 1507, "tcp"}, |
|
+{"symplex", {NULL}, 1507, "udp"}, |
|
+{"diagmond", {NULL}, 1508, "tcp"}, |
|
+{"diagmond", {NULL}, 1508, "udp"}, |
|
+{"robcad-lm", {NULL}, 1509, "tcp"}, |
|
+{"robcad-lm", {NULL}, 1509, "udp"}, |
|
+{"mvx-lm", {NULL}, 1510, "tcp"}, |
|
+{"mvx-lm", {NULL}, 1510, "udp"}, |
|
+{"3l-l1", {NULL}, 1511, "tcp"}, |
|
+{"3l-l1", {NULL}, 1511, "udp"}, |
|
+{"wins", {NULL}, 1512, "tcp"}, |
|
+{"wins", {NULL}, 1512, "udp"}, |
|
+{"fujitsu-dtc", {NULL}, 1513, "tcp"}, |
|
+{"fujitsu-dtc", {NULL}, 1513, "udp"}, |
|
+{"fujitsu-dtcns", {NULL}, 1514, "tcp"}, |
|
+{"fujitsu-dtcns", {NULL}, 1514, "udp"}, |
|
+{"ifor-protocol", {NULL}, 1515, "tcp"}, |
|
+{"ifor-protocol", {NULL}, 1515, "udp"}, |
|
+{"vpad", {NULL}, 1516, "tcp"}, |
|
+{"vpad", {NULL}, 1516, "udp"}, |
|
+{"vpac", {NULL}, 1517, "tcp"}, |
|
+{"vpac", {NULL}, 1517, "udp"}, |
|
+{"vpvd", {NULL}, 1518, "tcp"}, |
|
+{"vpvd", {NULL}, 1518, "udp"}, |
|
+{"vpvc", {NULL}, 1519, "tcp"}, |
|
+{"vpvc", {NULL}, 1519, "udp"}, |
|
+{"atm-zip-office", {NULL}, 1520, "tcp"}, |
|
+{"atm-zip-office", {NULL}, 1520, "udp"}, |
|
+{"ncube-lm", {NULL}, 1521, "tcp"}, |
|
+{"ncube-lm", {NULL}, 1521, "udp"}, |
|
+{"ricardo-lm", {NULL}, 1522, "tcp"}, |
|
+{"ricardo-lm", {NULL}, 1522, "udp"}, |
|
+{"cichild-lm", {NULL}, 1523, "tcp"}, |
|
+{"cichild-lm", {NULL}, 1523, "udp"}, |
|
+{"ingreslock", {NULL}, 1524, "tcp"}, |
|
+{"ingreslock", {NULL}, 1524, "udp"}, |
|
+{"orasrv", {NULL}, 1525, "tcp"}, |
|
+{"orasrv", {NULL}, 1525, "udp"}, |
|
+{"prospero-np", {NULL}, 1525, "tcp"}, |
|
+{"prospero-np", {NULL}, 1525, "udp"}, |
|
+{"pdap-np", {NULL}, 1526, "tcp"}, |
|
+{"pdap-np", {NULL}, 1526, "udp"}, |
|
+{"tlisrv", {NULL}, 1527, "tcp"}, |
|
+{"tlisrv", {NULL}, 1527, "udp"}, |
|
+{"coauthor", {NULL}, 1529, "tcp"}, |
|
+{"coauthor", {NULL}, 1529, "udp"}, |
|
+{"rap-service", {NULL}, 1530, "tcp"}, |
|
+{"rap-service", {NULL}, 1530, "udp"}, |
|
+{"rap-listen", {NULL}, 1531, "tcp"}, |
|
+{"rap-listen", {NULL}, 1531, "udp"}, |
|
+{"miroconnect", {NULL}, 1532, "tcp"}, |
|
+{"miroconnect", {NULL}, 1532, "udp"}, |
|
+{"virtual-places", {NULL}, 1533, "tcp"}, |
|
+{"virtual-places", {NULL}, 1533, "udp"}, |
|
+{"micromuse-lm", {NULL}, 1534, "tcp"}, |
|
+{"micromuse-lm", {NULL}, 1534, "udp"}, |
|
+{"ampr-info", {NULL}, 1535, "tcp"}, |
|
+{"ampr-info", {NULL}, 1535, "udp"}, |
|
+{"ampr-inter", {NULL}, 1536, "tcp"}, |
|
+{"ampr-inter", {NULL}, 1536, "udp"}, |
|
+{"sdsc-lm", {NULL}, 1537, "tcp"}, |
|
+{"sdsc-lm", {NULL}, 1537, "udp"}, |
|
+{"3ds-lm", {NULL}, 1538, "tcp"}, |
|
+{"3ds-lm", {NULL}, 1538, "udp"}, |
|
+{"intellistor-lm", {NULL}, 1539, "tcp"}, |
|
+{"intellistor-lm", {NULL}, 1539, "udp"}, |
|
+{"rds", {NULL}, 1540, "tcp"}, |
|
+{"rds", {NULL}, 1540, "udp"}, |
|
+{"rds2", {NULL}, 1541, "tcp"}, |
|
+{"rds2", {NULL}, 1541, "udp"}, |
|
+{"gridgen-elmd", {NULL}, 1542, "tcp"}, |
|
+{"gridgen-elmd", {NULL}, 1542, "udp"}, |
|
+{"simba-cs", {NULL}, 1543, "tcp"}, |
|
+{"simba-cs", {NULL}, 1543, "udp"}, |
|
+{"aspeclmd", {NULL}, 1544, "tcp"}, |
|
+{"aspeclmd", {NULL}, 1544, "udp"}, |
|
+{"vistium-share", {NULL}, 1545, "tcp"}, |
|
+{"vistium-share", {NULL}, 1545, "udp"}, |
|
+{"abbaccuray", {NULL}, 1546, "tcp"}, |
|
+{"abbaccuray", {NULL}, 1546, "udp"}, |
|
+{"laplink", {NULL}, 1547, "tcp"}, |
|
+{"laplink", {NULL}, 1547, "udp"}, |
|
+{"axon-lm", {NULL}, 1548, "tcp"}, |
|
+{"axon-lm", {NULL}, 1548, "udp"}, |
|
+{"shivahose", {NULL}, 1549, "tcp"}, |
|
+{"shivasound", {NULL}, 1549, "udp"}, |
|
+{"3m-image-lm", {NULL}, 1550, "tcp"}, |
|
+{"3m-image-lm", {NULL}, 1550, "udp"}, |
|
+{"hecmtl-db", {NULL}, 1551, "tcp"}, |
|
+{"hecmtl-db", {NULL}, 1551, "udp"}, |
|
+{"pciarray", {NULL}, 1552, "tcp"}, |
|
+{"pciarray", {NULL}, 1552, "udp"}, |
|
+{"sna-cs", {NULL}, 1553, "tcp"}, |
|
+{"sna-cs", {NULL}, 1553, "udp"}, |
|
+{"caci-lm", {NULL}, 1554, "tcp"}, |
|
+{"caci-lm", {NULL}, 1554, "udp"}, |
|
+{"livelan", {NULL}, 1555, "tcp"}, |
|
+{"livelan", {NULL}, 1555, "udp"}, |
|
+{"veritas_pbx", {NULL}, 1556, "tcp"}, |
|
+{"veritas_pbx", {NULL}, 1556, "udp"}, |
|
+{"arbortext-lm", {NULL}, 1557, "tcp"}, |
|
+{"arbortext-lm", {NULL}, 1557, "udp"}, |
|
+{"xingmpeg", {NULL}, 1558, "tcp"}, |
|
+{"xingmpeg", {NULL}, 1558, "udp"}, |
|
+{"web2host", {NULL}, 1559, "tcp"}, |
|
+{"web2host", {NULL}, 1559, "udp"}, |
|
+{"asci-val", {NULL}, 1560, "tcp"}, |
|
+{"asci-val", {NULL}, 1560, "udp"}, |
|
+{"facilityview", {NULL}, 1561, "tcp"}, |
|
+{"facilityview", {NULL}, 1561, "udp"}, |
|
+{"pconnectmgr", {NULL}, 1562, "tcp"}, |
|
+{"pconnectmgr", {NULL}, 1562, "udp"}, |
|
+{"cadabra-lm", {NULL}, 1563, "tcp"}, |
|
+{"cadabra-lm", {NULL}, 1563, "udp"}, |
|
+{"pay-per-view", {NULL}, 1564, "tcp"}, |
|
+{"pay-per-view", {NULL}, 1564, "udp"}, |
|
+{"winddlb", {NULL}, 1565, "tcp"}, |
|
+{"winddlb", {NULL}, 1565, "udp"}, |
|
+{"corelvideo", {NULL}, 1566, "tcp"}, |
|
+{"corelvideo", {NULL}, 1566, "udp"}, |
|
+{"jlicelmd", {NULL}, 1567, "tcp"}, |
|
+{"jlicelmd", {NULL}, 1567, "udp"}, |
|
+{"tsspmap", {NULL}, 1568, "tcp"}, |
|
+{"tsspmap", {NULL}, 1568, "udp"}, |
|
+{"ets", {NULL}, 1569, "tcp"}, |
|
+{"ets", {NULL}, 1569, "udp"}, |
|
+{"orbixd", {NULL}, 1570, "tcp"}, |
|
+{"orbixd", {NULL}, 1570, "udp"}, |
|
+{"rdb-dbs-disp", {NULL}, 1571, "tcp"}, |
|
+{"rdb-dbs-disp", {NULL}, 1571, "udp"}, |
|
+{"chip-lm", {NULL}, 1572, "tcp"}, |
|
+{"chip-lm", {NULL}, 1572, "udp"}, |
|
+{"itscomm-ns", {NULL}, 1573, "tcp"}, |
|
+{"itscomm-ns", {NULL}, 1573, "udp"}, |
|
+{"mvel-lm", {NULL}, 1574, "tcp"}, |
|
+{"mvel-lm", {NULL}, 1574, "udp"}, |
|
+{"oraclenames", {NULL}, 1575, "tcp"}, |
|
+{"oraclenames", {NULL}, 1575, "udp"}, |
|
+{"moldflow-lm", {NULL}, 1576, "tcp"}, |
|
+{"moldflow-lm", {NULL}, 1576, "udp"}, |
|
+{"hypercube-lm", {NULL}, 1577, "tcp"}, |
|
+{"hypercube-lm", {NULL}, 1577, "udp"}, |
|
+{"jacobus-lm", {NULL}, 1578, "tcp"}, |
|
+{"jacobus-lm", {NULL}, 1578, "udp"}, |
|
+{"ioc-sea-lm", {NULL}, 1579, "tcp"}, |
|
+{"ioc-sea-lm", {NULL}, 1579, "udp"}, |
|
+{"tn-tl-r1", {NULL}, 1580, "tcp"}, |
|
+{"tn-tl-r2", {NULL}, 1580, "udp"}, |
|
+{"mil-2045-47001", {NULL}, 1581, "tcp"}, |
|
+{"mil-2045-47001", {NULL}, 1581, "udp"}, |
|
+{"msims", {NULL}, 1582, "tcp"}, |
|
+{"msims", {NULL}, 1582, "udp"}, |
|
+{"simbaexpress", {NULL}, 1583, "tcp"}, |
|
+{"simbaexpress", {NULL}, 1583, "udp"}, |
|
+{"tn-tl-fd2", {NULL}, 1584, "tcp"}, |
|
+{"tn-tl-fd2", {NULL}, 1584, "udp"}, |
|
+{"intv", {NULL}, 1585, "tcp"}, |
|
+{"intv", {NULL}, 1585, "udp"}, |
|
+{"ibm-abtact", {NULL}, 1586, "tcp"}, |
|
+{"ibm-abtact", {NULL}, 1586, "udp"}, |
|
+{"pra_elmd", {NULL}, 1587, "tcp"}, |
|
+{"pra_elmd", {NULL}, 1587, "udp"}, |
|
+{"triquest-lm", {NULL}, 1588, "tcp"}, |
|
+{"triquest-lm", {NULL}, 1588, "udp"}, |
|
+{"vqp", {NULL}, 1589, "tcp"}, |
|
+{"vqp", {NULL}, 1589, "udp"}, |
|
+{"gemini-lm", {NULL}, 1590, "tcp"}, |
|
+{"gemini-lm", {NULL}, 1590, "udp"}, |
|
+{"ncpm-pm", {NULL}, 1591, "tcp"}, |
|
+{"ncpm-pm", {NULL}, 1591, "udp"}, |
|
+{"commonspace", {NULL}, 1592, "tcp"}, |
|
+{"commonspace", {NULL}, 1592, "udp"}, |
|
+{"mainsoft-lm", {NULL}, 1593, "tcp"}, |
|
+{"mainsoft-lm", {NULL}, 1593, "udp"}, |
|
+{"sixtrak", {NULL}, 1594, "tcp"}, |
|
+{"sixtrak", {NULL}, 1594, "udp"}, |
|
+{"radio", {NULL}, 1595, "tcp"}, |
|
+{"radio", {NULL}, 1595, "udp"}, |
|
+{"radio-sm", {NULL}, 1596, "tcp"}, |
|
+{"radio-bc", {NULL}, 1596, "udp"}, |
|
+{"orbplus-iiop", {NULL}, 1597, "tcp"}, |
|
+{"orbplus-iiop", {NULL}, 1597, "udp"}, |
|
+{"picknfs", {NULL}, 1598, "tcp"}, |
|
+{"picknfs", {NULL}, 1598, "udp"}, |
|
+{"simbaservices", {NULL}, 1599, "tcp"}, |
|
+{"simbaservices", {NULL}, 1599, "udp"}, |
|
+{"issd", {NULL}, 1600, "tcp"}, |
|
+{"issd", {NULL}, 1600, "udp"}, |
|
+{"aas", {NULL}, 1601, "tcp"}, |
|
+{"aas", {NULL}, 1601, "udp"}, |
|
+{"inspect", {NULL}, 1602, "tcp"}, |
|
+{"inspect", {NULL}, 1602, "udp"}, |
|
+{"picodbc", {NULL}, 1603, "tcp"}, |
|
+{"picodbc", {NULL}, 1603, "udp"}, |
|
+{"icabrowser", {NULL}, 1604, "tcp"}, |
|
+{"icabrowser", {NULL}, 1604, "udp"}, |
|
+{"slp", {NULL}, 1605, "tcp"}, |
|
+{"slp", {NULL}, 1605, "udp"}, |
|
+{"slm-api", {NULL}, 1606, "tcp"}, |
|
+{"slm-api", {NULL}, 1606, "udp"}, |
|
+{"stt", {NULL}, 1607, "tcp"}, |
|
+{"stt", {NULL}, 1607, "udp"}, |
|
+{"smart-lm", {NULL}, 1608, "tcp"}, |
|
+{"smart-lm", {NULL}, 1608, "udp"}, |
|
+{"isysg-lm", {NULL}, 1609, "tcp"}, |
|
+{"isysg-lm", {NULL}, 1609, "udp"}, |
|
+{"taurus-wh", {NULL}, 1610, "tcp"}, |
|
+{"taurus-wh", {NULL}, 1610, "udp"}, |
|
+{"ill", {NULL}, 1611, "tcp"}, |
|
+{"ill", {NULL}, 1611, "udp"}, |
|
+{"netbill-trans", {NULL}, 1612, "tcp"}, |
|
+{"netbill-trans", {NULL}, 1612, "udp"}, |
|
+{"netbill-keyrep", {NULL}, 1613, "tcp"}, |
|
+{"netbill-keyrep", {NULL}, 1613, "udp"}, |
|
+{"netbill-cred", {NULL}, 1614, "tcp"}, |
|
+{"netbill-cred", {NULL}, 1614, "udp"}, |
|
+{"netbill-auth", {NULL}, 1615, "tcp"}, |
|
+{"netbill-auth", {NULL}, 1615, "udp"}, |
|
+{"netbill-prod", {NULL}, 1616, "tcp"}, |
|
+{"netbill-prod", {NULL}, 1616, "udp"}, |
|
+{"nimrod-agent", {NULL}, 1617, "tcp"}, |
|
+{"nimrod-agent", {NULL}, 1617, "udp"}, |
|
+{"skytelnet", {NULL}, 1618, "tcp"}, |
|
+{"skytelnet", {NULL}, 1618, "udp"}, |
|
+{"xs-openstorage", {NULL}, 1619, "tcp"}, |
|
+{"xs-openstorage", {NULL}, 1619, "udp"}, |
|
+{"faxportwinport", {NULL}, 1620, "tcp"}, |
|
+{"faxportwinport", {NULL}, 1620, "udp"}, |
|
+{"softdataphone", {NULL}, 1621, "tcp"}, |
|
+{"softdataphone", {NULL}, 1621, "udp"}, |
|
+{"ontime", {NULL}, 1622, "tcp"}, |
|
+{"ontime", {NULL}, 1622, "udp"}, |
|
+{"jaleosnd", {NULL}, 1623, "tcp"}, |
|
+{"jaleosnd", {NULL}, 1623, "udp"}, |
|
+{"udp-sr-port", {NULL}, 1624, "tcp"}, |
|
+{"udp-sr-port", {NULL}, 1624, "udp"}, |
|
+{"svs-omagent", {NULL}, 1625, "tcp"}, |
|
+{"svs-omagent", {NULL}, 1625, "udp"}, |
|
+{"shockwave", {NULL}, 1626, "tcp"}, |
|
+{"shockwave", {NULL}, 1626, "udp"}, |
|
+{"t128-gateway", {NULL}, 1627, "tcp"}, |
|
+{"t128-gateway", {NULL}, 1627, "udp"}, |
|
+{"lontalk-norm", {NULL}, 1628, "tcp"}, |
|
+{"lontalk-norm", {NULL}, 1628, "udp"}, |
|
+{"lontalk-urgnt", {NULL}, 1629, "tcp"}, |
|
+{"lontalk-urgnt", {NULL}, 1629, "udp"}, |
|
+{"oraclenet8cman", {NULL}, 1630, "tcp"}, |
|
+{"oraclenet8cman", {NULL}, 1630, "udp"}, |
|
+{"visitview", {NULL}, 1631, "tcp"}, |
|
+{"visitview", {NULL}, 1631, "udp"}, |
|
+{"pammratc", {NULL}, 1632, "tcp"}, |
|
+{"pammratc", {NULL}, 1632, "udp"}, |
|
+{"pammrpc", {NULL}, 1633, "tcp"}, |
|
+{"pammrpc", {NULL}, 1633, "udp"}, |
|
+{"loaprobe", {NULL}, 1634, "tcp"}, |
|
+{"loaprobe", {NULL}, 1634, "udp"}, |
|
+{"edb-server1", {NULL}, 1635, "tcp"}, |
|
+{"edb-server1", {NULL}, 1635, "udp"}, |
|
+{"isdc", {NULL}, 1636, "tcp"}, |
|
+{"isdc", {NULL}, 1636, "udp"}, |
|
+{"islc", {NULL}, 1637, "tcp"}, |
|
+{"islc", {NULL}, 1637, "udp"}, |
|
+{"ismc", {NULL}, 1638, "tcp"}, |
|
+{"ismc", {NULL}, 1638, "udp"}, |
|
+{"cert-initiator", {NULL}, 1639, "tcp"}, |
|
+{"cert-initiator", {NULL}, 1639, "udp"}, |
|
+{"cert-responder", {NULL}, 1640, "tcp"}, |
|
+{"cert-responder", {NULL}, 1640, "udp"}, |
|
+{"invision", {NULL}, 1641, "tcp"}, |
|
+{"invision", {NULL}, 1641, "udp"}, |
|
+{"isis-am", {NULL}, 1642, "tcp"}, |
|
+{"isis-am", {NULL}, 1642, "udp"}, |
|
+{"isis-ambc", {NULL}, 1643, "tcp"}, |
|
+{"isis-ambc", {NULL}, 1643, "udp"}, |
|
+{"saiseh", {NULL}, 1644, "tcp"}, |
|
+{"sightline", {NULL}, 1645, "tcp"}, |
|
+{"sightline", {NULL}, 1645, "udp"}, |
|
+{"sa-msg-port", {NULL}, 1646, "tcp"}, |
|
+{"sa-msg-port", {NULL}, 1646, "udp"}, |
|
+{"rsap", {NULL}, 1647, "tcp"}, |
|
+{"rsap", {NULL}, 1647, "udp"}, |
|
+{"concurrent-lm", {NULL}, 1648, "tcp"}, |
|
+{"concurrent-lm", {NULL}, 1648, "udp"}, |
|
+{"kermit", {NULL}, 1649, "tcp"}, |
|
+{"kermit", {NULL}, 1649, "udp"}, |
|
+{"nkd", {NULL}, 1650, "tcp"}, |
|
+{"nkd", {NULL}, 1650, "udp"}, |
|
+{"shiva_confsrvr", {NULL}, 1651, "tcp"}, |
|
+{"shiva_confsrvr", {NULL}, 1651, "udp"}, |
|
+{"xnmp", {NULL}, 1652, "tcp"}, |
|
+{"xnmp", {NULL}, 1652, "udp"}, |
|
+{"alphatech-lm", {NULL}, 1653, "tcp"}, |
|
+{"alphatech-lm", {NULL}, 1653, "udp"}, |
|
+{"stargatealerts", {NULL}, 1654, "tcp"}, |
|
+{"stargatealerts", {NULL}, 1654, "udp"}, |
|
+{"dec-mbadmin", {NULL}, 1655, "tcp"}, |
|
+{"dec-mbadmin", {NULL}, 1655, "udp"}, |
|
+{"dec-mbadmin-h", {NULL}, 1656, "tcp"}, |
|
+{"dec-mbadmin-h", {NULL}, 1656, "udp"}, |
|
+{"fujitsu-mmpdc", {NULL}, 1657, "tcp"}, |
|
+{"fujitsu-mmpdc", {NULL}, 1657, "udp"}, |
|
+{"sixnetudr", {NULL}, 1658, "tcp"}, |
|
+{"sixnetudr", {NULL}, 1658, "udp"}, |
|
+{"sg-lm", {NULL}, 1659, "tcp"}, |
|
+{"sg-lm", {NULL}, 1659, "udp"}, |
|
+{"skip-mc-gikreq", {NULL}, 1660, "tcp"}, |
|
+{"skip-mc-gikreq", {NULL}, 1660, "udp"}, |
|
+{"netview-aix-1", {NULL}, 1661, "tcp"}, |
|
+{"netview-aix-1", {NULL}, 1661, "udp"}, |
|
+{"netview-aix-2", {NULL}, 1662, "tcp"}, |
|
+{"netview-aix-2", {NULL}, 1662, "udp"}, |
|
+{"netview-aix-3", {NULL}, 1663, "tcp"}, |
|
+{"netview-aix-3", {NULL}, 1663, "udp"}, |
|
+{"netview-aix-4", {NULL}, 1664, "tcp"}, |
|
+{"netview-aix-4", {NULL}, 1664, "udp"}, |
|
+{"netview-aix-5", {NULL}, 1665, "tcp"}, |
|
+{"netview-aix-5", {NULL}, 1665, "udp"}, |
|
+{"netview-aix-6", {NULL}, 1666, "tcp"}, |
|
+{"netview-aix-6", {NULL}, 1666, "udp"}, |
|
+{"netview-aix-7", {NULL}, 1667, "tcp"}, |
|
+{"netview-aix-7", {NULL}, 1667, "udp"}, |
|
+{"netview-aix-8", {NULL}, 1668, "tcp"}, |
|
+{"netview-aix-8", {NULL}, 1668, "udp"}, |
|
+{"netview-aix-9", {NULL}, 1669, "tcp"}, |
|
+{"netview-aix-9", {NULL}, 1669, "udp"}, |
|
+{"netview-aix-10", {NULL}, 1670, "tcp"}, |
|
+{"netview-aix-10", {NULL}, 1670, "udp"}, |
|
+{"netview-aix-11", {NULL}, 1671, "tcp"}, |
|
+{"netview-aix-11", {NULL}, 1671, "udp"}, |
|
+{"netview-aix-12", {NULL}, 1672, "tcp"}, |
|
+{"netview-aix-12", {NULL}, 1672, "udp"}, |
|
+{"proshare-mc-1", {NULL}, 1673, "tcp"}, |
|
+{"proshare-mc-1", {NULL}, 1673, "udp"}, |
|
+{"proshare-mc-2", {NULL}, 1674, "tcp"}, |
|
+{"proshare-mc-2", {NULL}, 1674, "udp"}, |
|
+{"pdp", {NULL}, 1675, "tcp"}, |
|
+{"pdp", {NULL}, 1675, "udp"}, |
|
+{"netcomm1", {NULL}, 1676, "tcp"}, |
|
+{"netcomm2", {NULL}, 1676, "udp"}, |
|
+{"groupwise", {NULL}, 1677, "tcp"}, |
|
+{"groupwise", {NULL}, 1677, "udp"}, |
|
+{"prolink", {NULL}, 1678, "tcp"}, |
|
+{"prolink", {NULL}, 1678, "udp"}, |
|
+{"darcorp-lm", {NULL}, 1679, "tcp"}, |
|
+{"darcorp-lm", {NULL}, 1679, "udp"}, |
|
+{"microcom-sbp", {NULL}, 1680, "tcp"}, |
|
+{"microcom-sbp", {NULL}, 1680, "udp"}, |
|
+{"sd-elmd", {NULL}, 1681, "tcp"}, |
|
+{"sd-elmd", {NULL}, 1681, "udp"}, |
|
+{"lanyon-lantern", {NULL}, 1682, "tcp"}, |
|
+{"lanyon-lantern", {NULL}, 1682, "udp"}, |
|
+{"ncpm-hip", {NULL}, 1683, "tcp"}, |
|
+{"ncpm-hip", {NULL}, 1683, "udp"}, |
|
+{"snaresecure", {NULL}, 1684, "tcp"}, |
|
+{"snaresecure", {NULL}, 1684, "udp"}, |
|
+{"n2nremote", {NULL}, 1685, "tcp"}, |
|
+{"n2nremote", {NULL}, 1685, "udp"}, |
|
+{"cvmon", {NULL}, 1686, "tcp"}, |
|
+{"cvmon", {NULL}, 1686, "udp"}, |
|
+{"nsjtp-ctrl", {NULL}, 1687, "tcp"}, |
|
+{"nsjtp-ctrl", {NULL}, 1687, "udp"}, |
|
+{"nsjtp-data", {NULL}, 1688, "tcp"}, |
|
+{"nsjtp-data", {NULL}, 1688, "udp"}, |
|
+{"firefox", {NULL}, 1689, "tcp"}, |
|
+{"firefox", {NULL}, 1689, "udp"}, |
|
+{"ng-umds", {NULL}, 1690, "tcp"}, |
|
+{"ng-umds", {NULL}, 1690, "udp"}, |
|
+{"empire-empuma", {NULL}, 1691, "tcp"}, |
|
+{"empire-empuma", {NULL}, 1691, "udp"}, |
|
+{"sstsys-lm", {NULL}, 1692, "tcp"}, |
|
+{"sstsys-lm", {NULL}, 1692, "udp"}, |
|
+{"rrirtr", {NULL}, 1693, "tcp"}, |
|
+{"rrirtr", {NULL}, 1693, "udp"}, |
|
+{"rrimwm", {NULL}, 1694, "tcp"}, |
|
+{"rrimwm", {NULL}, 1694, "udp"}, |
|
+{"rrilwm", {NULL}, 1695, "tcp"}, |
|
+{"rrilwm", {NULL}, 1695, "udp"}, |
|
+{"rrifmm", {NULL}, 1696, "tcp"}, |
|
+{"rrifmm", {NULL}, 1696, "udp"}, |
|
+{"rrisat", {NULL}, 1697, "tcp"}, |
|
+{"rrisat", {NULL}, 1697, "udp"}, |
|
+{"rsvp-encap-1", {NULL}, 1698, "tcp"}, |
|
+{"rsvp-encap-1", {NULL}, 1698, "udp"}, |
|
+{"rsvp-encap-2", {NULL}, 1699, "tcp"}, |
|
+{"rsvp-encap-2", {NULL}, 1699, "udp"}, |
|
+{"mps-raft", {NULL}, 1700, "tcp"}, |
|
+{"mps-raft", {NULL}, 1700, "udp"}, |
|
+{"l2f", {NULL}, 1701, "tcp"}, |
|
+{"l2f", {NULL}, 1701, "udp"}, |
|
+{"l2tp", {NULL}, 1701, "tcp"}, |
|
+{"l2tp", {NULL}, 1701, "udp"}, |
|
+{"deskshare", {NULL}, 1702, "tcp"}, |
|
+{"deskshare", {NULL}, 1702, "udp"}, |
|
+{"hb-engine", {NULL}, 1703, "tcp"}, |
|
+{"hb-engine", {NULL}, 1703, "udp"}, |
|
+{"bcs-broker", {NULL}, 1704, "tcp"}, |
|
+{"bcs-broker", {NULL}, 1704, "udp"}, |
|
+{"slingshot", {NULL}, 1705, "tcp"}, |
|
+{"slingshot", {NULL}, 1705, "udp"}, |
|
+{"jetform", {NULL}, 1706, "tcp"}, |
|
+{"jetform", {NULL}, 1706, "udp"}, |
|
+{"vdmplay", {NULL}, 1707, "tcp"}, |
|
+{"vdmplay", {NULL}, 1707, "udp"}, |
|
+{"gat-lmd", {NULL}, 1708, "tcp"}, |
|
+{"gat-lmd", {NULL}, 1708, "udp"}, |
|
+{"centra", {NULL}, 1709, "tcp"}, |
|
+{"centra", {NULL}, 1709, "udp"}, |
|
+{"impera", {NULL}, 1710, "tcp"}, |
|
+{"impera", {NULL}, 1710, "udp"}, |
|
+{"pptconference", {NULL}, 1711, "tcp"}, |
|
+{"pptconference", {NULL}, 1711, "udp"}, |
|
+{"registrar", {NULL}, 1712, "tcp"}, |
|
+{"registrar", {NULL}, 1712, "udp"}, |
|
+{"conferencetalk", {NULL}, 1713, "tcp"}, |
|
+{"conferencetalk", {NULL}, 1713, "udp"}, |
|
+{"sesi-lm", {NULL}, 1714, "tcp"}, |
|
+{"sesi-lm", {NULL}, 1714, "udp"}, |
|
+{"houdini-lm", {NULL}, 1715, "tcp"}, |
|
+{"houdini-lm", {NULL}, 1715, "udp"}, |
|
+{"xmsg", {NULL}, 1716, "tcp"}, |
|
+{"xmsg", {NULL}, 1716, "udp"}, |
|
+{"fj-hdnet", {NULL}, 1717, "tcp"}, |
|
+{"fj-hdnet", {NULL}, 1717, "udp"}, |
|
+{"h323gatedisc", {NULL}, 1718, "tcp"}, |
|
+{"h323gatedisc", {NULL}, 1718, "udp"}, |
|
+{"h323gatestat", {NULL}, 1719, "tcp"}, |
|
+{"h323gatestat", {NULL}, 1719, "udp"}, |
|
+{"h323hostcall", {NULL}, 1720, "tcp"}, |
|
+{"h323hostcall", {NULL}, 1720, "udp"}, |
|
+{"caicci", {NULL}, 1721, "tcp"}, |
|
+{"caicci", {NULL}, 1721, "udp"}, |
|
+{"hks-lm", {NULL}, 1722, "tcp"}, |
|
+{"hks-lm", {NULL}, 1722, "udp"}, |
|
+{"pptp", {NULL}, 1723, "tcp"}, |
|
+{"pptp", {NULL}, 1723, "udp"}, |
|
+{"csbphonemaster", {NULL}, 1724, "tcp"}, |
|
+{"csbphonemaster", {NULL}, 1724, "udp"}, |
|
+{"iden-ralp", {NULL}, 1725, "tcp"}, |
|
+{"iden-ralp", {NULL}, 1725, "udp"}, |
|
+{"iberiagames", {NULL}, 1726, "tcp"}, |
|
+{"iberiagames", {NULL}, 1726, "udp"}, |
|
+{"winddx", {NULL}, 1727, "tcp"}, |
|
+{"winddx", {NULL}, 1727, "udp"}, |
|
+{"telindus", {NULL}, 1728, "tcp"}, |
|
+{"telindus", {NULL}, 1728, "udp"}, |
|
+{"citynl", {NULL}, 1729, "tcp"}, |
|
+{"citynl", {NULL}, 1729, "udp"}, |
|
+{"roketz", {NULL}, 1730, "tcp"}, |
|
+{"roketz", {NULL}, 1730, "udp"}, |
|
+{"msiccp", {NULL}, 1731, "tcp"}, |
|
+{"msiccp", {NULL}, 1731, "udp"}, |
|
+{"proxim", {NULL}, 1732, "tcp"}, |
|
+{"proxim", {NULL}, 1732, "udp"}, |
|
+{"siipat", {NULL}, 1733, "tcp"}, |
|
+{"siipat", {NULL}, 1733, "udp"}, |
|
+{"cambertx-lm", {NULL}, 1734, "tcp"}, |
|
+{"cambertx-lm", {NULL}, 1734, "udp"}, |
|
+{"privatechat", {NULL}, 1735, "tcp"}, |
|
+{"privatechat", {NULL}, 1735, "udp"}, |
|
+{"street-stream", {NULL}, 1736, "tcp"}, |
|
+{"street-stream", {NULL}, 1736, "udp"}, |
|
+{"ultimad", {NULL}, 1737, "tcp"}, |
|
+{"ultimad", {NULL}, 1737, "udp"}, |
|
+{"gamegen1", {NULL}, 1738, "tcp"}, |
|
+{"gamegen1", {NULL}, 1738, "udp"}, |
|
+{"webaccess", {NULL}, 1739, "tcp"}, |
|
+{"webaccess", {NULL}, 1739, "udp"}, |
|
+{"encore", {NULL}, 1740, "tcp"}, |
|
+{"encore", {NULL}, 1740, "udp"}, |
|
+{"cisco-net-mgmt", {NULL}, 1741, "tcp"}, |
|
+{"cisco-net-mgmt", {NULL}, 1741, "udp"}, |
|
+{"3Com-nsd", {NULL}, 1742, "tcp"}, |
|
+{"3Com-nsd", {NULL}, 1742, "udp"}, |
|
+{"cinegrfx-lm", {NULL}, 1743, "tcp"}, |
|
+{"cinegrfx-lm", {NULL}, 1743, "udp"}, |
|
+{"ncpm-ft", {NULL}, 1744, "tcp"}, |
|
+{"ncpm-ft", {NULL}, 1744, "udp"}, |
|
+{"remote-winsock", {NULL}, 1745, "tcp"}, |
|
+{"remote-winsock", {NULL}, 1745, "udp"}, |
|
+{"ftrapid-1", {NULL}, 1746, "tcp"}, |
|
+{"ftrapid-1", {NULL}, 1746, "udp"}, |
|
+{"ftrapid-2", {NULL}, 1747, "tcp"}, |
|
+{"ftrapid-2", {NULL}, 1747, "udp"}, |
|
+{"oracle-em1", {NULL}, 1748, "tcp"}, |
|
+{"oracle-em1", {NULL}, 1748, "udp"}, |
|
+{"aspen-services", {NULL}, 1749, "tcp"}, |
|
+{"aspen-services", {NULL}, 1749, "udp"}, |
|
+{"sslp", {NULL}, 1750, "tcp"}, |
|
+{"sslp", {NULL}, 1750, "udp"}, |
|
+{"swiftnet", {NULL}, 1751, "tcp"}, |
|
+{"swiftnet", {NULL}, 1751, "udp"}, |
|
+{"lofr-lm", {NULL}, 1752, "tcp"}, |
|
+{"lofr-lm", {NULL}, 1752, "udp"}, |
|
+{"oracle-em2", {NULL}, 1754, "tcp"}, |
|
+{"oracle-em2", {NULL}, 1754, "udp"}, |
|
+{"ms-streaming", {NULL}, 1755, "tcp"}, |
|
+{"ms-streaming", {NULL}, 1755, "udp"}, |
|
+{"capfast-lmd", {NULL}, 1756, "tcp"}, |
|
+{"capfast-lmd", {NULL}, 1756, "udp"}, |
|
+{"cnhrp", {NULL}, 1757, "tcp"}, |
|
+{"cnhrp", {NULL}, 1757, "udp"}, |
|
+{"tftp-mcast", {NULL}, 1758, "tcp"}, |
|
+{"tftp-mcast", {NULL}, 1758, "udp"}, |
|
+{"spss-lm", {NULL}, 1759, "tcp"}, |
|
+{"spss-lm", {NULL}, 1759, "udp"}, |
|
+{"www-ldap-gw", {NULL}, 1760, "tcp"}, |
|
+{"www-ldap-gw", {NULL}, 1760, "udp"}, |
|
+{"cft-0", {NULL}, 1761, "tcp"}, |
|
+{"cft-0", {NULL}, 1761, "udp"}, |
|
+{"cft-1", {NULL}, 1762, "tcp"}, |
|
+{"cft-1", {NULL}, 1762, "udp"}, |
|
+{"cft-2", {NULL}, 1763, "tcp"}, |
|
+{"cft-2", {NULL}, 1763, "udp"}, |
|
+{"cft-3", {NULL}, 1764, "tcp"}, |
|
+{"cft-3", {NULL}, 1764, "udp"}, |
|
+{"cft-4", {NULL}, 1765, "tcp"}, |
|
+{"cft-4", {NULL}, 1765, "udp"}, |
|
+{"cft-5", {NULL}, 1766, "tcp"}, |
|
+{"cft-5", {NULL}, 1766, "udp"}, |
|
+{"cft-6", {NULL}, 1767, "tcp"}, |
|
+{"cft-6", {NULL}, 1767, "udp"}, |
|
+{"cft-7", {NULL}, 1768, "tcp"}, |
|
+{"cft-7", {NULL}, 1768, "udp"}, |
|
+{"bmc-net-adm", {NULL}, 1769, "tcp"}, |
|
+{"bmc-net-adm", {NULL}, 1769, "udp"}, |
|
+{"bmc-net-svc", {NULL}, 1770, "tcp"}, |
|
+{"bmc-net-svc", {NULL}, 1770, "udp"}, |
|
+{"vaultbase", {NULL}, 1771, "tcp"}, |
|
+{"vaultbase", {NULL}, 1771, "udp"}, |
|
+{"essweb-gw", {NULL}, 1772, "tcp"}, |
|
+{"essweb-gw", {NULL}, 1772, "udp"}, |
|
+{"kmscontrol", {NULL}, 1773, "tcp"}, |
|
+{"kmscontrol", {NULL}, 1773, "udp"}, |
|
+{"global-dtserv", {NULL}, 1774, "tcp"}, |
|
+{"global-dtserv", {NULL}, 1774, "udp"}, |
|
+{"femis", {NULL}, 1776, "tcp"}, |
|
+{"femis", {NULL}, 1776, "udp"}, |
|
+{"powerguardian", {NULL}, 1777, "tcp"}, |
|
+{"powerguardian", {NULL}, 1777, "udp"}, |
|
+{"prodigy-intrnet", {NULL}, 1778, "tcp"}, |
|
+{"prodigy-intrnet", {NULL}, 1778, "udp"}, |
|
+{"pharmasoft", {NULL}, 1779, "tcp"}, |
|
+{"pharmasoft", {NULL}, 1779, "udp"}, |
|
+{"dpkeyserv", {NULL}, 1780, "tcp"}, |
|
+{"dpkeyserv", {NULL}, 1780, "udp"}, |
|
+{"answersoft-lm", {NULL}, 1781, "tcp"}, |
|
+{"answersoft-lm", {NULL}, 1781, "udp"}, |
|
+{"hp-hcip", {NULL}, 1782, "tcp"}, |
|
+{"hp-hcip", {NULL}, 1782, "udp"}, |
|
+{"finle-lm", {NULL}, 1784, "tcp"}, |
|
+{"finle-lm", {NULL}, 1784, "udp"}, |
|
+{"windlm", {NULL}, 1785, "tcp"}, |
|
+{"windlm", {NULL}, 1785, "udp"}, |
|
+{"funk-logger", {NULL}, 1786, "tcp"}, |
|
+{"funk-logger", {NULL}, 1786, "udp"}, |
|
+{"funk-license", {NULL}, 1787, "tcp"}, |
|
+{"funk-license", {NULL}, 1787, "udp"}, |
|
+{"psmond", {NULL}, 1788, "tcp"}, |
|
+{"psmond", {NULL}, 1788, "udp"}, |
|
+{"hello", {NULL}, 1789, "tcp"}, |
|
+{"hello", {NULL}, 1789, "udp"}, |
|
+{"nmsp", {NULL}, 1790, "tcp"}, |
|
+{"nmsp", {NULL}, 1790, "udp"}, |
|
+{"ea1", {NULL}, 1791, "tcp"}, |
|
+{"ea1", {NULL}, 1791, "udp"}, |
|
+{"ibm-dt-2", {NULL}, 1792, "tcp"}, |
|
+{"ibm-dt-2", {NULL}, 1792, "udp"}, |
|
+{"rsc-robot", {NULL}, 1793, "tcp"}, |
|
+{"rsc-robot", {NULL}, 1793, "udp"}, |
|
+{"cera-bcm", {NULL}, 1794, "tcp"}, |
|
+{"cera-bcm", {NULL}, 1794, "udp"}, |
|
+{"dpi-proxy", {NULL}, 1795, "tcp"}, |
|
+{"dpi-proxy", {NULL}, 1795, "udp"}, |
|
+{"vocaltec-admin", {NULL}, 1796, "tcp"}, |
|
+{"vocaltec-admin", {NULL}, 1796, "udp"}, |
|
+{"uma", {NULL}, 1797, "tcp"}, |
|
+{"uma", {NULL}, 1797, "udp"}, |
|
+{"etp", {NULL}, 1798, "tcp"}, |
|
+{"etp", {NULL}, 1798, "udp"}, |
|
+{"netrisk", {NULL}, 1799, "tcp"}, |
|
+{"netrisk", {NULL}, 1799, "udp"}, |
|
+{"ansys-lm", {NULL}, 1800, "tcp"}, |
|
+{"ansys-lm", {NULL}, 1800, "udp"}, |
|
+{"msmq", {NULL}, 1801, "tcp"}, |
|
+{"msmq", {NULL}, 1801, "udp"}, |
|
+{"concomp1", {NULL}, 1802, "tcp"}, |
|
+{"concomp1", {NULL}, 1802, "udp"}, |
|
+{"hp-hcip-gwy", {NULL}, 1803, "tcp"}, |
|
+{"hp-hcip-gwy", {NULL}, 1803, "udp"}, |
|
+{"enl", {NULL}, 1804, "tcp"}, |
|
+{"enl", {NULL}, 1804, "udp"}, |
|
+{"enl-name", {NULL}, 1805, "tcp"}, |
|
+{"enl-name", {NULL}, 1805, "udp"}, |
|
+{"musiconline", {NULL}, 1806, "tcp"}, |
|
+{"musiconline", {NULL}, 1806, "udp"}, |
|
+{"fhsp", {NULL}, 1807, "tcp"}, |
|
+{"fhsp", {NULL}, 1807, "udp"}, |
|
+{"oracle-vp2", {NULL}, 1808, "tcp"}, |
|
+{"oracle-vp2", {NULL}, 1808, "udp"}, |
|
+{"oracle-vp1", {NULL}, 1809, "tcp"}, |
|
+{"oracle-vp1", {NULL}, 1809, "udp"}, |
|
+{"jerand-lm", {NULL}, 1810, "tcp"}, |
|
+{"jerand-lm", {NULL}, 1810, "udp"}, |
|
+{"scientia-sdb", {NULL}, 1811, "tcp"}, |
|
+{"scientia-sdb", {NULL}, 1811, "udp"}, |
|
+{"radius", {NULL}, 1812, "tcp"}, |
|
+{"radius", {NULL}, 1812, "udp"}, |
|
+{"radius-acct", {NULL}, 1813, "tcp"}, |
|
+{"radius-acct", {NULL}, 1813, "udp"}, |
|
+{"tdp-suite", {NULL}, 1814, "tcp"}, |
|
+{"tdp-suite", {NULL}, 1814, "udp"}, |
|
+{"mmpft", {NULL}, 1815, "tcp"}, |
|
+{"mmpft", {NULL}, 1815, "udp"}, |
|
+{"harp", {NULL}, 1816, "tcp"}, |
|
+{"harp", {NULL}, 1816, "udp"}, |
|
+{"rkb-oscs", {NULL}, 1817, "tcp"}, |
|
+{"rkb-oscs", {NULL}, 1817, "udp"}, |
|
+{"etftp", {NULL}, 1818, "tcp"}, |
|
+{"etftp", {NULL}, 1818, "udp"}, |
|
+{"plato-lm", {NULL}, 1819, "tcp"}, |
|
+{"plato-lm", {NULL}, 1819, "udp"}, |
|
+{"mcagent", {NULL}, 1820, "tcp"}, |
|
+{"mcagent", {NULL}, 1820, "udp"}, |
|
+{"donnyworld", {NULL}, 1821, "tcp"}, |
|
+{"donnyworld", {NULL}, 1821, "udp"}, |
|
+{"es-elmd", {NULL}, 1822, "tcp"}, |
|
+{"es-elmd", {NULL}, 1822, "udp"}, |
|
+{"unisys-lm", {NULL}, 1823, "tcp"}, |
|
+{"unisys-lm", {NULL}, 1823, "udp"}, |
|
+{"metrics-pas", {NULL}, 1824, "tcp"}, |
|
+{"metrics-pas", {NULL}, 1824, "udp"}, |
|
+{"direcpc-video", {NULL}, 1825, "tcp"}, |
|
+{"direcpc-video", {NULL}, 1825, "udp"}, |
|
+{"ardt", {NULL}, 1826, "tcp"}, |
|
+{"ardt", {NULL}, 1826, "udp"}, |
|
+{"asi", {NULL}, 1827, "tcp"}, |
|
+{"asi", {NULL}, 1827, "udp"}, |
|
+{"itm-mcell-u", {NULL}, 1828, "tcp"}, |
|
+{"itm-mcell-u", {NULL}, 1828, "udp"}, |
|
+{"optika-emedia", {NULL}, 1829, "tcp"}, |
|
+{"optika-emedia", {NULL}, 1829, "udp"}, |
|
+{"net8-cman", {NULL}, 1830, "tcp"}, |
|
+{"net8-cman", {NULL}, 1830, "udp"}, |
|
+{"myrtle", {NULL}, 1831, "tcp"}, |
|
+{"myrtle", {NULL}, 1831, "udp"}, |
|
+{"tht-treasure", {NULL}, 1832, "tcp"}, |
|
+{"tht-treasure", {NULL}, 1832, "udp"}, |
|
+{"udpradio", {NULL}, 1833, "tcp"}, |
|
+{"udpradio", {NULL}, 1833, "udp"}, |
|
+{"ardusuni", {NULL}, 1834, "tcp"}, |
|
+{"ardusuni", {NULL}, 1834, "udp"}, |
|
+{"ardusmul", {NULL}, 1835, "tcp"}, |
|
+{"ardusmul", {NULL}, 1835, "udp"}, |
|
+{"ste-smsc", {NULL}, 1836, "tcp"}, |
|
+{"ste-smsc", {NULL}, 1836, "udp"}, |
|
+{"csoft1", {NULL}, 1837, "tcp"}, |
|
+{"csoft1", {NULL}, 1837, "udp"}, |
|
+{"talnet", {NULL}, 1838, "tcp"}, |
|
+{"talnet", {NULL}, 1838, "udp"}, |
|
+{"netopia-vo1", {NULL}, 1839, "tcp"}, |
|
+{"netopia-vo1", {NULL}, 1839, "udp"}, |
|
+{"netopia-vo2", {NULL}, 1840, "tcp"}, |
|
+{"netopia-vo2", {NULL}, 1840, "udp"}, |
|
+{"netopia-vo3", {NULL}, 1841, "tcp"}, |
|
+{"netopia-vo3", {NULL}, 1841, "udp"}, |
|
+{"netopia-vo4", {NULL}, 1842, "tcp"}, |
|
+{"netopia-vo4", {NULL}, 1842, "udp"}, |
|
+{"netopia-vo5", {NULL}, 1843, "tcp"}, |
|
+{"netopia-vo5", {NULL}, 1843, "udp"}, |
|
+{"direcpc-dll", {NULL}, 1844, "tcp"}, |
|
+{"direcpc-dll", {NULL}, 1844, "udp"}, |
|
+{"altalink", {NULL}, 1845, "tcp"}, |
|
+{"altalink", {NULL}, 1845, "udp"}, |
|
+{"tunstall-pnc", {NULL}, 1846, "tcp"}, |
|
+{"tunstall-pnc", {NULL}, 1846, "udp"}, |
|
+{"slp-notify", {NULL}, 1847, "tcp"}, |
|
+{"slp-notify", {NULL}, 1847, "udp"}, |
|
+{"fjdocdist", {NULL}, 1848, "tcp"}, |
|
+{"fjdocdist", {NULL}, 1848, "udp"}, |
|
+{"alpha-sms", {NULL}, 1849, "tcp"}, |
|
+{"alpha-sms", {NULL}, 1849, "udp"}, |
|
+{"gsi", {NULL}, 1850, "tcp"}, |
|
+{"gsi", {NULL}, 1850, "udp"}, |
|
+{"ctcd", {NULL}, 1851, "tcp"}, |
|
+{"ctcd", {NULL}, 1851, "udp"}, |
|
+{"virtual-time", {NULL}, 1852, "tcp"}, |
|
+{"virtual-time", {NULL}, 1852, "udp"}, |
|
+{"vids-avtp", {NULL}, 1853, "tcp"}, |
|
+{"vids-avtp", {NULL}, 1853, "udp"}, |
|
+{"buddy-draw", {NULL}, 1854, "tcp"}, |
|
+{"buddy-draw", {NULL}, 1854, "udp"}, |
|
+{"fiorano-rtrsvc", {NULL}, 1855, "tcp"}, |
|
+{"fiorano-rtrsvc", {NULL}, 1855, "udp"}, |
|
+{"fiorano-msgsvc", {NULL}, 1856, "tcp"}, |
|
+{"fiorano-msgsvc", {NULL}, 1856, "udp"}, |
|
+{"datacaptor", {NULL}, 1857, "tcp"}, |
|
+{"datacaptor", {NULL}, 1857, "udp"}, |
|
+{"privateark", {NULL}, 1858, "tcp"}, |
|
+{"privateark", {NULL}, 1858, "udp"}, |
|
+{"gammafetchsvr", {NULL}, 1859, "tcp"}, |
|
+{"gammafetchsvr", {NULL}, 1859, "udp"}, |
|
+{"sunscalar-svc", {NULL}, 1860, "tcp"}, |
|
+{"sunscalar-svc", {NULL}, 1860, "udp"}, |
|
+{"lecroy-vicp", {NULL}, 1861, "tcp"}, |
|
+{"lecroy-vicp", {NULL}, 1861, "udp"}, |
|
+{"mysql-cm-agent", {NULL}, 1862, "tcp"}, |
|
+{"mysql-cm-agent", {NULL}, 1862, "udp"}, |
|
+{"msnp", {NULL}, 1863, "tcp"}, |
|
+{"msnp", {NULL}, 1863, "udp"}, |
|
+{"paradym-31port", {NULL}, 1864, "tcp"}, |
|
+{"paradym-31port", {NULL}, 1864, "udp"}, |
|
+{"entp", {NULL}, 1865, "tcp"}, |
|
+{"entp", {NULL}, 1865, "udp"}, |
|
+{"swrmi", {NULL}, 1866, "tcp"}, |
|
+{"swrmi", {NULL}, 1866, "udp"}, |
|
+{"udrive", {NULL}, 1867, "tcp"}, |
|
+{"udrive", {NULL}, 1867, "udp"}, |
|
+{"viziblebrowser", {NULL}, 1868, "tcp"}, |
|
+{"viziblebrowser", {NULL}, 1868, "udp"}, |
|
+{"transact", {NULL}, 1869, "tcp"}, |
|
+{"transact", {NULL}, 1869, "udp"}, |
|
+{"sunscalar-dns", {NULL}, 1870, "tcp"}, |
|
+{"sunscalar-dns", {NULL}, 1870, "udp"}, |
|
+{"canocentral0", {NULL}, 1871, "tcp"}, |
|
+{"canocentral0", {NULL}, 1871, "udp"}, |
|
+{"canocentral1", {NULL}, 1872, "tcp"}, |
|
+{"canocentral1", {NULL}, 1872, "udp"}, |
|
+{"fjmpjps", {NULL}, 1873, "tcp"}, |
|
+{"fjmpjps", {NULL}, 1873, "udp"}, |
|
+{"fjswapsnp", {NULL}, 1874, "tcp"}, |
|
+{"fjswapsnp", {NULL}, 1874, "udp"}, |
|
+{"westell-stats", {NULL}, 1875, "tcp"}, |
|
+{"westell-stats", {NULL}, 1875, "udp"}, |
|
+{"ewcappsrv", {NULL}, 1876, "tcp"}, |
|
+{"ewcappsrv", {NULL}, 1876, "udp"}, |
|
+{"hp-webqosdb", {NULL}, 1877, "tcp"}, |
|
+{"hp-webqosdb", {NULL}, 1877, "udp"}, |
|
+{"drmsmc", {NULL}, 1878, "tcp"}, |
|
+{"drmsmc", {NULL}, 1878, "udp"}, |
|
+{"nettgain-nms", {NULL}, 1879, "tcp"}, |
|
+{"nettgain-nms", {NULL}, 1879, "udp"}, |
|
+{"vsat-control", {NULL}, 1880, "tcp"}, |
|
+{"vsat-control", {NULL}, 1880, "udp"}, |
|
+{"ibm-mqseries2", {NULL}, 1881, "tcp"}, |
|
+{"ibm-mqseries2", {NULL}, 1881, "udp"}, |
|
+{"ecsqdmn", {NULL}, 1882, "tcp"}, |
|
+{"ecsqdmn", {NULL}, 1882, "udp"}, |
|
+{"ibm-mqisdp", {NULL}, 1883, "tcp"}, |
|
+{"ibm-mqisdp", {NULL}, 1883, "udp"}, |
|
+{"idmaps", {NULL}, 1884, "tcp"}, |
|
+{"idmaps", {NULL}, 1884, "udp"}, |
|
+{"vrtstrapserver", {NULL}, 1885, "tcp"}, |
|
+{"vrtstrapserver", {NULL}, 1885, "udp"}, |
|
+{"leoip", {NULL}, 1886, "tcp"}, |
|
+{"leoip", {NULL}, 1886, "udp"}, |
|
+{"filex-lport", {NULL}, 1887, "tcp"}, |
|
+{"filex-lport", {NULL}, 1887, "udp"}, |
|
+{"ncconfig", {NULL}, 1888, "tcp"}, |
|
+{"ncconfig", {NULL}, 1888, "udp"}, |
|
+{"unify-adapter", {NULL}, 1889, "tcp"}, |
|
+{"unify-adapter", {NULL}, 1889, "udp"}, |
|
+{"wilkenlistener", {NULL}, 1890, "tcp"}, |
|
+{"wilkenlistener", {NULL}, 1890, "udp"}, |
|
+{"childkey-notif", {NULL}, 1891, "tcp"}, |
|
+{"childkey-notif", {NULL}, 1891, "udp"}, |
|
+{"childkey-ctrl", {NULL}, 1892, "tcp"}, |
|
+{"childkey-ctrl", {NULL}, 1892, "udp"}, |
|
+{"elad", {NULL}, 1893, "tcp"}, |
|
+{"elad", {NULL}, 1893, "udp"}, |
|
+{"o2server-port", {NULL}, 1894, "tcp"}, |
|
+{"o2server-port", {NULL}, 1894, "udp"}, |
|
+{"b-novative-ls", {NULL}, 1896, "tcp"}, |
|
+{"b-novative-ls", {NULL}, 1896, "udp"}, |
|
+{"metaagent", {NULL}, 1897, "tcp"}, |
|
+{"metaagent", {NULL}, 1897, "udp"}, |
|
+{"cymtec-port", {NULL}, 1898, "tcp"}, |
|
+{"cymtec-port", {NULL}, 1898, "udp"}, |
|
+{"mc2studios", {NULL}, 1899, "tcp"}, |
|
+{"mc2studios", {NULL}, 1899, "udp"}, |
|
+{"ssdp", {NULL}, 1900, "tcp"}, |
|
+{"ssdp", {NULL}, 1900, "udp"}, |
|
+{"fjicl-tep-a", {NULL}, 1901, "tcp"}, |
|
+{"fjicl-tep-a", {NULL}, 1901, "udp"}, |
|
+{"fjicl-tep-b", {NULL}, 1902, "tcp"}, |
|
+{"fjicl-tep-b", {NULL}, 1902, "udp"}, |
|
+{"linkname", {NULL}, 1903, "tcp"}, |
|
+{"linkname", {NULL}, 1903, "udp"}, |
|
+{"fjicl-tep-c", {NULL}, 1904, "tcp"}, |
|
+{"fjicl-tep-c", {NULL}, 1904, "udp"}, |
|
+{"sugp", {NULL}, 1905, "tcp"}, |
|
+{"sugp", {NULL}, 1905, "udp"}, |
|
+{"tpmd", {NULL}, 1906, "tcp"}, |
|
+{"tpmd", {NULL}, 1906, "udp"}, |
|
+{"intrastar", {NULL}, 1907, "tcp"}, |
|
+{"intrastar", {NULL}, 1907, "udp"}, |
|
+{"dawn", {NULL}, 1908, "tcp"}, |
|
+{"dawn", {NULL}, 1908, "udp"}, |
|
+{"global-wlink", {NULL}, 1909, "tcp"}, |
|
+{"global-wlink", {NULL}, 1909, "udp"}, |
|
+{"ultrabac", {NULL}, 1910, "tcp"}, |
|
+{"ultrabac", {NULL}, 1910, "udp"}, |
|
+{"mtp", {NULL}, 1911, "tcp"}, |
|
+{"mtp", {NULL}, 1911, "udp"}, |
|
+{"rhp-iibp", {NULL}, 1912, "tcp"}, |
|
+{"rhp-iibp", {NULL}, 1912, "udp"}, |
|
+{"armadp", {NULL}, 1913, "tcp"}, |
|
+{"armadp", {NULL}, 1913, "udp"}, |
|
+{"elm-momentum", {NULL}, 1914, "tcp"}, |
|
+{"elm-momentum", {NULL}, 1914, "udp"}, |
|
+{"facelink", {NULL}, 1915, "tcp"}, |
|
+{"facelink", {NULL}, 1915, "udp"}, |
|
+{"persona", {NULL}, 1916, "tcp"}, |
|
+{"persona", {NULL}, 1916, "udp"}, |
|
+{"noagent", {NULL}, 1917, "tcp"}, |
|
+{"noagent", {NULL}, 1917, "udp"}, |
|
+{"can-nds", {NULL}, 1918, "tcp"}, |
|
+{"can-nds", {NULL}, 1918, "udp"}, |
|
+{"can-dch", {NULL}, 1919, "tcp"}, |
|
+{"can-dch", {NULL}, 1919, "udp"}, |
|
+{"can-ferret", {NULL}, 1920, "tcp"}, |
|
+{"can-ferret", {NULL}, 1920, "udp"}, |
|
+{"noadmin", {NULL}, 1921, "tcp"}, |
|
+{"noadmin", {NULL}, 1921, "udp"}, |
|
+{"tapestry", {NULL}, 1922, "tcp"}, |
|
+{"tapestry", {NULL}, 1922, "udp"}, |
|
+{"spice", {NULL}, 1923, "tcp"}, |
|
+{"spice", {NULL}, 1923, "udp"}, |
|
+{"xiip", {NULL}, 1924, "tcp"}, |
|
+{"xiip", {NULL}, 1924, "udp"}, |
|
+{"discovery-port", {NULL}, 1925, "tcp"}, |
|
+{"discovery-port", {NULL}, 1925, "udp"}, |
|
+{"egs", {NULL}, 1926, "tcp"}, |
|
+{"egs", {NULL}, 1926, "udp"}, |
|
+{"videte-cipc", {NULL}, 1927, "tcp"}, |
|
+{"videte-cipc", {NULL}, 1927, "udp"}, |
|
+{"emsd-port", {NULL}, 1928, "tcp"}, |
|
+{"emsd-port", {NULL}, 1928, "udp"}, |
|
+{"bandwiz-system", {NULL}, 1929, "tcp"}, |
|
+{"bandwiz-system", {NULL}, 1929, "udp"}, |
|
+{"driveappserver", {NULL}, 1930, "tcp"}, |
|
+{"driveappserver", {NULL}, 1930, "udp"}, |
|
+{"amdsched", {NULL}, 1931, "tcp"}, |
|
+{"amdsched", {NULL}, 1931, "udp"}, |
|
+{"ctt-broker", {NULL}, 1932, "tcp"}, |
|
+{"ctt-broker", {NULL}, 1932, "udp"}, |
|
+{"xmapi", {NULL}, 1933, "tcp"}, |
|
+{"xmapi", {NULL}, 1933, "udp"}, |
|
+{"xaapi", {NULL}, 1934, "tcp"}, |
|
+{"xaapi", {NULL}, 1934, "udp"}, |
|
+{"macromedia-fcs", {NULL}, 1935, "tcp"}, |
|
+{"macromedia-fcs", {NULL}, 1935, "udp"}, |
|
+{"jetcmeserver", {NULL}, 1936, "tcp"}, |
|
+{"jetcmeserver", {NULL}, 1936, "udp"}, |
|
+{"jwserver", {NULL}, 1937, "tcp"}, |
|
+{"jwserver", {NULL}, 1937, "udp"}, |
|
+{"jwclient", {NULL}, 1938, "tcp"}, |
|
+{"jwclient", {NULL}, 1938, "udp"}, |
|
+{"jvserver", {NULL}, 1939, "tcp"}, |
|
+{"jvserver", {NULL}, 1939, "udp"}, |
|
+{"jvclient", {NULL}, 1940, "tcp"}, |
|
+{"jvclient", {NULL}, 1940, "udp"}, |
|
+{"dic-aida", {NULL}, 1941, "tcp"}, |
|
+{"dic-aida", {NULL}, 1941, "udp"}, |
|
+{"res", {NULL}, 1942, "tcp"}, |
|
+{"res", {NULL}, 1942, "udp"}, |
|
+{"beeyond-media", {NULL}, 1943, "tcp"}, |
|
+{"beeyond-media", {NULL}, 1943, "udp"}, |
|
+{"close-combat", {NULL}, 1944, "tcp"}, |
|
+{"close-combat", {NULL}, 1944, "udp"}, |
|
+{"dialogic-elmd", {NULL}, 1945, "tcp"}, |
|
+{"dialogic-elmd", {NULL}, 1945, "udp"}, |
|
+{"tekpls", {NULL}, 1946, "tcp"}, |
|
+{"tekpls", {NULL}, 1946, "udp"}, |
|
+{"sentinelsrm", {NULL}, 1947, "tcp"}, |
|
+{"sentinelsrm", {NULL}, 1947, "udp"}, |
|
+{"eye2eye", {NULL}, 1948, "tcp"}, |
|
+{"eye2eye", {NULL}, 1948, "udp"}, |
|
+{"ismaeasdaqlive", {NULL}, 1949, "tcp"}, |
|
+{"ismaeasdaqlive", {NULL}, 1949, "udp"}, |
|
+{"ismaeasdaqtest", {NULL}, 1950, "tcp"}, |
|
+{"ismaeasdaqtest", {NULL}, 1950, "udp"}, |
|
+{"bcs-lmserver", {NULL}, 1951, "tcp"}, |
|
+{"bcs-lmserver", {NULL}, 1951, "udp"}, |
|
+{"mpnjsc", {NULL}, 1952, "tcp"}, |
|
+{"mpnjsc", {NULL}, 1952, "udp"}, |
|
+{"rapidbase", {NULL}, 1953, "tcp"}, |
|
+{"rapidbase", {NULL}, 1953, "udp"}, |
|
+{"abr-api", {NULL}, 1954, "tcp"}, |
|
+{"abr-api", {NULL}, 1954, "udp"}, |
|
+{"abr-secure", {NULL}, 1955, "tcp"}, |
|
+{"abr-secure", {NULL}, 1955, "udp"}, |
|
+{"vrtl-vmf-ds", {NULL}, 1956, "tcp"}, |
|
+{"vrtl-vmf-ds", {NULL}, 1956, "udp"}, |
|
+{"unix-status", {NULL}, 1957, "tcp"}, |
|
+{"unix-status", {NULL}, 1957, "udp"}, |
|
+{"dxadmind", {NULL}, 1958, "tcp"}, |
|
+{"dxadmind", {NULL}, 1958, "udp"}, |
|
+{"simp-all", {NULL}, 1959, "tcp"}, |
|
+{"simp-all", {NULL}, 1959, "udp"}, |
|
+{"nasmanager", {NULL}, 1960, "tcp"}, |
|
+{"nasmanager", {NULL}, 1960, "udp"}, |
|
+{"bts-appserver", {NULL}, 1961, "tcp"}, |
|
+{"bts-appserver", {NULL}, 1961, "udp"}, |
|
+{"biap-mp", {NULL}, 1962, "tcp"}, |
|
+{"biap-mp", {NULL}, 1962, "udp"}, |
|
+{"webmachine", {NULL}, 1963, "tcp"}, |
|
+{"webmachine", {NULL}, 1963, "udp"}, |
|
+{"solid-e-engine", {NULL}, 1964, "tcp"}, |
|
+{"solid-e-engine", {NULL}, 1964, "udp"}, |
|
+{"tivoli-npm", {NULL}, 1965, "tcp"}, |
|
+{"tivoli-npm", {NULL}, 1965, "udp"}, |
|
+{"slush", {NULL}, 1966, "tcp"}, |
|
+{"slush", {NULL}, 1966, "udp"}, |
|
+{"sns-quote", {NULL}, 1967, "tcp"}, |
|
+{"sns-quote", {NULL}, 1967, "udp"}, |
|
+{"lipsinc", {NULL}, 1968, "tcp"}, |
|
+{"lipsinc", {NULL}, 1968, "udp"}, |
|
+{"lipsinc1", {NULL}, 1969, "tcp"}, |
|
+{"lipsinc1", {NULL}, 1969, "udp"}, |
|
+{"netop-rc", {NULL}, 1970, "tcp"}, |
|
+{"netop-rc", {NULL}, 1970, "udp"}, |
|
+{"netop-school", {NULL}, 1971, "tcp"}, |
|
+{"netop-school", {NULL}, 1971, "udp"}, |
|
+{"intersys-cache", {NULL}, 1972, "tcp"}, |
|
+{"intersys-cache", {NULL}, 1972, "udp"}, |
|
+{"dlsrap", {NULL}, 1973, "tcp"}, |
|
+{"dlsrap", {NULL}, 1973, "udp"}, |
|
+{"drp", {NULL}, 1974, "tcp"}, |
|
+{"drp", {NULL}, 1974, "udp"}, |
|
+{"tcoflashagent", {NULL}, 1975, "tcp"}, |
|
+{"tcoflashagent", {NULL}, 1975, "udp"}, |
|
+{"tcoregagent", {NULL}, 1976, "tcp"}, |
|
+{"tcoregagent", {NULL}, 1976, "udp"}, |
|
+{"tcoaddressbook", {NULL}, 1977, "tcp"}, |
|
+{"tcoaddressbook", {NULL}, 1977, "udp"}, |
|
+{"unisql", {NULL}, 1978, "tcp"}, |
|
+{"unisql", {NULL}, 1978, "udp"}, |
|
+{"unisql-java", {NULL}, 1979, "tcp"}, |
|
+{"unisql-java", {NULL}, 1979, "udp"}, |
|
+{"pearldoc-xact", {NULL}, 1980, "tcp"}, |
|
+{"pearldoc-xact", {NULL}, 1980, "udp"}, |
|
+{"p2pq", {NULL}, 1981, "tcp"}, |
|
+{"p2pq", {NULL}, 1981, "udp"}, |
|
+{"estamp", {NULL}, 1982, "tcp"}, |
|
+{"estamp", {NULL}, 1982, "udp"}, |
|
+{"lhtp", {NULL}, 1983, "tcp"}, |
|
+{"lhtp", {NULL}, 1983, "udp"}, |
|
+{"bb", {NULL}, 1984, "tcp"}, |
|
+{"bb", {NULL}, 1984, "udp"}, |
|
+{"hsrp", {NULL}, 1985, "tcp"}, |
|
+{"hsrp", {NULL}, 1985, "udp"}, |
|
+{"licensedaemon", {NULL}, 1986, "tcp"}, |
|
+{"licensedaemon", {NULL}, 1986, "udp"}, |
|
+{"tr-rsrb-p1", {NULL}, 1987, "tcp"}, |
|
+{"tr-rsrb-p1", {NULL}, 1987, "udp"}, |
|
+{"tr-rsrb-p2", {NULL}, 1988, "tcp"}, |
|
+{"tr-rsrb-p2", {NULL}, 1988, "udp"}, |
|
+{"tr-rsrb-p3", {NULL}, 1989, "tcp"}, |
|
+{"tr-rsrb-p3", {NULL}, 1989, "udp"}, |
|
+{"mshnet", {NULL}, 1989, "tcp"}, |
|
+{"mshnet", {NULL}, 1989, "udp"}, |
|
+{"stun-p1", {NULL}, 1990, "tcp"}, |
|
+{"stun-p1", {NULL}, 1990, "udp"}, |
|
+{"stun-p2", {NULL}, 1991, "tcp"}, |
|
+{"stun-p2", {NULL}, 1991, "udp"}, |
|
+{"stun-p3", {NULL}, 1992, "tcp"}, |
|
+{"stun-p3", {NULL}, 1992, "udp"}, |
|
+{"ipsendmsg", {NULL}, 1992, "tcp"}, |
|
+{"ipsendmsg", {NULL}, 1992, "udp"}, |
|
+{"snmp-tcp-port", {NULL}, 1993, "tcp"}, |
|
+{"snmp-tcp-port", {NULL}, 1993, "udp"}, |
|
+{"stun-port", {NULL}, 1994, "tcp"}, |
|
+{"stun-port", {NULL}, 1994, "udp"}, |
|
+{"perf-port", {NULL}, 1995, "tcp"}, |
|
+{"perf-port", {NULL}, 1995, "udp"}, |
|
+{"tr-rsrb-port", {NULL}, 1996, "tcp"}, |
|
+{"tr-rsrb-port", {NULL}, 1996, "udp"}, |
|
+{"gdp-port", {NULL}, 1997, "tcp"}, |
|
+{"gdp-port", {NULL}, 1997, "udp"}, |
|
+{"x25-svc-port", {NULL}, 1998, "tcp"}, |
|
+{"x25-svc-port", {NULL}, 1998, "udp"}, |
|
+{"tcp-id-port", {NULL}, 1999, "tcp"}, |
|
+{"tcp-id-port", {NULL}, 1999, "udp"}, |
|
+{"cisco-sccp", {NULL}, 2000, "tcp"}, |
|
+{"cisco-sccp", {NULL}, 2000, "udp"}, |
|
+{"dc", {NULL}, 2001, "tcp"}, |
|
+{"wizard", {NULL}, 2001, "udp"}, |
|
+{"globe", {NULL}, 2002, "tcp"}, |
|
+{"globe", {NULL}, 2002, "udp"}, |
|
+{"brutus", {NULL}, 2003, "tcp"}, |
|
+{"brutus", {NULL}, 2003, "udp"}, |
|
+{"mailbox", {NULL}, 2004, "tcp"}, |
|
+{"emce", {NULL}, 2004, "udp"}, |
|
+{"berknet", {NULL}, 2005, "tcp"}, |
|
+{"oracle", {NULL}, 2005, "udp"}, |
|
+{"invokator", {NULL}, 2006, "tcp"}, |
|
+{"raid-cd", {NULL}, 2006, "udp"}, |
|
+{"dectalk", {NULL}, 2007, "tcp"}, |
|
+{"raid-am", {NULL}, 2007, "udp"}, |
|
+{"conf", {NULL}, 2008, "tcp"}, |
|
+{"terminaldb", {NULL}, 2008, "udp"}, |
|
+{"news", {NULL}, 2009, "tcp"}, |
|
+{"whosockami", {NULL}, 2009, "udp"}, |
|
+{"search", {NULL}, 2010, "tcp"}, |
|
+{"pipe_server", {NULL}, 2010, "udp"}, |
|
+{"raid-cc", {NULL}, 2011, "tcp"}, |
|
+{"servserv", {NULL}, 2011, "udp"}, |
|
+{"ttyinfo", {NULL}, 2012, "tcp"}, |
|
+{"raid-ac", {NULL}, 2012, "udp"}, |
|
+{"raid-am", {NULL}, 2013, "tcp"}, |
|
+{"raid-cd", {NULL}, 2013, "udp"}, |
|
+{"troff", {NULL}, 2014, "tcp"}, |
|
+{"raid-sf", {NULL}, 2014, "udp"}, |
|
+{"cypress", {NULL}, 2015, "tcp"}, |
|
+{"raid-cs", {NULL}, 2015, "udp"}, |
|
+{"bootserver", {NULL}, 2016, "tcp"}, |
|
+{"bootserver", {NULL}, 2016, "udp"}, |
|
+{"cypress-stat", {NULL}, 2017, "tcp"}, |
|
+{"bootclient", {NULL}, 2017, "udp"}, |
|
+{"terminaldb", {NULL}, 2018, "tcp"}, |
|
+{"rellpack", {NULL}, 2018, "udp"}, |
|
+{"whosockami", {NULL}, 2019, "tcp"}, |
|
+{"about", {NULL}, 2019, "udp"}, |
|
+{"xinupageserver", {NULL}, 2020, "tcp"}, |
|
+{"xinupageserver", {NULL}, 2020, "udp"}, |
|
+{"servexec", {NULL}, 2021, "tcp"}, |
|
+{"xinuexpansion1", {NULL}, 2021, "udp"}, |
|
+{"down", {NULL}, 2022, "tcp"}, |
|
+{"xinuexpansion2", {NULL}, 2022, "udp"}, |
|
+{"xinuexpansion3", {NULL}, 2023, "tcp"}, |
|
+{"xinuexpansion3", {NULL}, 2023, "udp"}, |
|
+{"xinuexpansion4", {NULL}, 2024, "tcp"}, |
|
+{"xinuexpansion4", {NULL}, 2024, "udp"}, |
|
+{"ellpack", {NULL}, 2025, "tcp"}, |
|
+{"xribs", {NULL}, 2025, "udp"}, |
|
+{"scrabble", {NULL}, 2026, "tcp"}, |
|
+{"scrabble", {NULL}, 2026, "udp"}, |
|
+{"shadowserver", {NULL}, 2027, "tcp"}, |
|
+{"shadowserver", {NULL}, 2027, "udp"}, |
|
+{"submitserver", {NULL}, 2028, "tcp"}, |
|
+{"submitserver", {NULL}, 2028, "udp"}, |
|
+{"hsrpv6", {NULL}, 2029, "tcp"}, |
|
+{"hsrpv6", {NULL}, 2029, "udp"}, |
|
+{"device2", {NULL}, 2030, "tcp"}, |
|
+{"device2", {NULL}, 2030, "udp"}, |
|
+{"mobrien-chat", {NULL}, 2031, "tcp"}, |
|
+{"mobrien-chat", {NULL}, 2031, "udp"}, |
|
+{"blackboard", {NULL}, 2032, "tcp"}, |
|
+{"blackboard", {NULL}, 2032, "udp"}, |
|
+{"glogger", {NULL}, 2033, "tcp"}, |
|
+{"glogger", {NULL}, 2033, "udp"}, |
|
+{"scoremgr", {NULL}, 2034, "tcp"}, |
|
+{"scoremgr", {NULL}, 2034, "udp"}, |
|
+{"imsldoc", {NULL}, 2035, "tcp"}, |
|
+{"imsldoc", {NULL}, 2035, "udp"}, |
|
+{"e-dpnet", {NULL}, 2036, "tcp"}, |
|
+{"e-dpnet", {NULL}, 2036, "udp"}, |
|
+{"applus", {NULL}, 2037, "tcp"}, |
|
+{"applus", {NULL}, 2037, "udp"}, |
|
+{"objectmanager", {NULL}, 2038, "tcp"}, |
|
+{"objectmanager", {NULL}, 2038, "udp"}, |
|
+{"prizma", {NULL}, 2039, "tcp"}, |
|
+{"prizma", {NULL}, 2039, "udp"}, |
|
+{"lam", {NULL}, 2040, "tcp"}, |
|
+{"lam", {NULL}, 2040, "udp"}, |
|
+{"interbase", {NULL}, 2041, "tcp"}, |
|
+{"interbase", {NULL}, 2041, "udp"}, |
|
+{"isis", {NULL}, 2042, "tcp"}, |
|
+{"isis", {NULL}, 2042, "udp"}, |
|
+{"isis-bcast", {NULL}, 2043, "tcp"}, |
|
+{"isis-bcast", {NULL}, 2043, "udp"}, |
|
+{"rimsl", {NULL}, 2044, "tcp"}, |
|
+{"rimsl", {NULL}, 2044, "udp"}, |
|
+{"cdfunc", {NULL}, 2045, "tcp"}, |
|
+{"cdfunc", {NULL}, 2045, "udp"}, |
|
+{"sdfunc", {NULL}, 2046, "tcp"}, |
|
+{"sdfunc", {NULL}, 2046, "udp"}, |
|
+{"dls", {NULL}, 2047, "tcp"}, |
|
+{"dls", {NULL}, 2047, "udp"}, |
|
+{"dls-monitor", {NULL}, 2048, "tcp"}, |
|
+{"dls-monitor", {NULL}, 2048, "udp"}, |
|
+{"shilp", {NULL}, 2049, "tcp"}, |
|
+{"shilp", {NULL}, 2049, "udp"}, |
|
+{"nfs", {NULL}, 2049, "tcp"}, |
|
+{"nfs", {NULL}, 2049, "udp"}, |
|
+{"nfs", {NULL}, 2049, "sctp"}, |
|
+{"av-emb-config", {NULL}, 2050, "tcp"}, |
|
+{"av-emb-config", {NULL}, 2050, "udp"}, |
|
+{"epnsdp", {NULL}, 2051, "tcp"}, |
|
+{"epnsdp", {NULL}, 2051, "udp"}, |
|
+{"clearvisn", {NULL}, 2052, "tcp"}, |
|
+{"clearvisn", {NULL}, 2052, "udp"}, |
|
+{"lot105-ds-upd", {NULL}, 2053, "tcp"}, |
|
+{"lot105-ds-upd", {NULL}, 2053, "udp"}, |
|
+{"weblogin", {NULL}, 2054, "tcp"}, |
|
+{"weblogin", {NULL}, 2054, "udp"}, |
|
+{"iop", {NULL}, 2055, "tcp"}, |
|
+{"iop", {NULL}, 2055, "udp"}, |
|
+{"omnisky", {NULL}, 2056, "tcp"}, |
|
+{"omnisky", {NULL}, 2056, "udp"}, |
|
+{"rich-cp", {NULL}, 2057, "tcp"}, |
|
+{"rich-cp", {NULL}, 2057, "udp"}, |
|
+{"newwavesearch", {NULL}, 2058, "tcp"}, |
|
+{"newwavesearch", {NULL}, 2058, "udp"}, |
|
+{"bmc-messaging", {NULL}, 2059, "tcp"}, |
|
+{"bmc-messaging", {NULL}, 2059, "udp"}, |
|
+{"teleniumdaemon", {NULL}, 2060, "tcp"}, |
|
+{"teleniumdaemon", {NULL}, 2060, "udp"}, |
|
+{"netmount", {NULL}, 2061, "tcp"}, |
|
+{"netmount", {NULL}, 2061, "udp"}, |
|
+{"icg-swp", {NULL}, 2062, "tcp"}, |
|
+{"icg-swp", {NULL}, 2062, "udp"}, |
|
+{"icg-bridge", {NULL}, 2063, "tcp"}, |
|
+{"icg-bridge", {NULL}, 2063, "udp"}, |
|
+{"icg-iprelay", {NULL}, 2064, "tcp"}, |
|
+{"icg-iprelay", {NULL}, 2064, "udp"}, |
|
+{"dlsrpn", {NULL}, 2065, "tcp"}, |
|
+{"dlsrpn", {NULL}, 2065, "udp"}, |
|
+{"aura", {NULL}, 2066, "tcp"}, |
|
+{"aura", {NULL}, 2066, "udp"}, |
|
+{"dlswpn", {NULL}, 2067, "tcp"}, |
|
+{"dlswpn", {NULL}, 2067, "udp"}, |
|
+{"avauthsrvprtcl", {NULL}, 2068, "tcp"}, |
|
+{"avauthsrvprtcl", {NULL}, 2068, "udp"}, |
|
+{"event-port", {NULL}, 2069, "tcp"}, |
|
+{"event-port", {NULL}, 2069, "udp"}, |
|
+{"ah-esp-encap", {NULL}, 2070, "tcp"}, |
|
+{"ah-esp-encap", {NULL}, 2070, "udp"}, |
|
+{"acp-port", {NULL}, 2071, "tcp"}, |
|
+{"acp-port", {NULL}, 2071, "udp"}, |
|
+{"msync", {NULL}, 2072, "tcp"}, |
|
+{"msync", {NULL}, 2072, "udp"}, |
|
+{"gxs-data-port", {NULL}, 2073, "tcp"}, |
|
+{"gxs-data-port", {NULL}, 2073, "udp"}, |
|
+{"vrtl-vmf-sa", {NULL}, 2074, "tcp"}, |
|
+{"vrtl-vmf-sa", {NULL}, 2074, "udp"}, |
|
+{"newlixengine", {NULL}, 2075, "tcp"}, |
|
+{"newlixengine", {NULL}, 2075, "udp"}, |
|
+{"newlixconfig", {NULL}, 2076, "tcp"}, |
|
+{"newlixconfig", {NULL}, 2076, "udp"}, |
|
+{"tsrmagt", {NULL}, 2077, "tcp"}, |
|
+{"tsrmagt", {NULL}, 2077, "udp"}, |
|
+{"tpcsrvr", {NULL}, 2078, "tcp"}, |
|
+{"tpcsrvr", {NULL}, 2078, "udp"}, |
|
+{"idware-router", {NULL}, 2079, "tcp"}, |
|
+{"idware-router", {NULL}, 2079, "udp"}, |
|
+{"autodesk-nlm", {NULL}, 2080, "tcp"}, |
|
+{"autodesk-nlm", {NULL}, 2080, "udp"}, |
|
+{"kme-trap-port", {NULL}, 2081, "tcp"}, |
|
+{"kme-trap-port", {NULL}, 2081, "udp"}, |
|
+{"infowave", {NULL}, 2082, "tcp"}, |
|
+{"infowave", {NULL}, 2082, "udp"}, |
|
+{"radsec", {NULL}, 2083, "tcp"}, |
|
+{"radsec", {NULL}, 2083, "udp"}, |
|
+{"sunclustergeo", {NULL}, 2084, "tcp"}, |
|
+{"sunclustergeo", {NULL}, 2084, "udp"}, |
|
+{"ada-cip", {NULL}, 2085, "tcp"}, |
|
+{"ada-cip", {NULL}, 2085, "udp"}, |
|
+{"gnunet", {NULL}, 2086, "tcp"}, |
|
+{"gnunet", {NULL}, 2086, "udp"}, |
|
+{"eli", {NULL}, 2087, "tcp"}, |
|
+{"eli", {NULL}, 2087, "udp"}, |
|
+{"ip-blf", {NULL}, 2088, "tcp"}, |
|
+{"ip-blf", {NULL}, 2088, "udp"}, |
|
+{"sep", {NULL}, 2089, "tcp"}, |
|
+{"sep", {NULL}, 2089, "udp"}, |
|
+{"lrp", {NULL}, 2090, "tcp"}, |
|
+{"lrp", {NULL}, 2090, "udp"}, |
|
+{"prp", {NULL}, 2091, "tcp"}, |
|
+{"prp", {NULL}, 2091, "udp"}, |
|
+{"descent3", {NULL}, 2092, "tcp"}, |
|
+{"descent3", {NULL}, 2092, "udp"}, |
|
+{"nbx-cc", {NULL}, 2093, "tcp"}, |
|
+{"nbx-cc", {NULL}, 2093, "udp"}, |
|
+{"nbx-au", {NULL}, 2094, "tcp"}, |
|
+{"nbx-au", {NULL}, 2094, "udp"}, |
|
+{"nbx-ser", {NULL}, 2095, "tcp"}, |
|
+{"nbx-ser", {NULL}, 2095, "udp"}, |
|
+{"nbx-dir", {NULL}, 2096, "tcp"}, |
|
+{"nbx-dir", {NULL}, 2096, "udp"}, |
|
+{"jetformpreview", {NULL}, 2097, "tcp"}, |
|
+{"jetformpreview", {NULL}, 2097, "udp"}, |
|
+{"dialog-port", {NULL}, 2098, "tcp"}, |
|
+{"dialog-port", {NULL}, 2098, "udp"}, |
|
+{"h2250-annex-g", {NULL}, 2099, "tcp"}, |
|
+{"h2250-annex-g", {NULL}, 2099, "udp"}, |
|
+{"amiganetfs", {NULL}, 2100, "tcp"}, |
|
+{"amiganetfs", {NULL}, 2100, "udp"}, |
|
+{"rtcm-sc104", {NULL}, 2101, "tcp"}, |
|
+{"rtcm-sc104", {NULL}, 2101, "udp"}, |
|
+{"zephyr-srv", {NULL}, 2102, "tcp"}, |
|
+{"zephyr-srv", {NULL}, 2102, "udp"}, |
|
+{"zephyr-clt", {NULL}, 2103, "tcp"}, |
|
+{"zephyr-clt", {NULL}, 2103, "udp"}, |
|
+{"zephyr-hm", {NULL}, 2104, "tcp"}, |
|
+{"zephyr-hm", {NULL}, 2104, "udp"}, |
|
+{"minipay", {NULL}, 2105, "tcp"}, |
|
+{"minipay", {NULL}, 2105, "udp"}, |
|
+{"mzap", {NULL}, 2106, "tcp"}, |
|
+{"mzap", {NULL}, 2106, "udp"}, |
|
+{"bintec-admin", {NULL}, 2107, "tcp"}, |
|
+{"bintec-admin", {NULL}, 2107, "udp"}, |
|
+{"comcam", {NULL}, 2108, "tcp"}, |
|
+{"comcam", {NULL}, 2108, "udp"}, |
|
+{"ergolight", {NULL}, 2109, "tcp"}, |
|
+{"ergolight", {NULL}, 2109, "udp"}, |
|
+{"umsp", {NULL}, 2110, "tcp"}, |
|
+{"umsp", {NULL}, 2110, "udp"}, |
|
+{"dsatp", {NULL}, 2111, "tcp"}, |
|
+{"dsatp", {NULL}, 2111, "udp"}, |
|
+{"idonix-metanet", {NULL}, 2112, "tcp"}, |
|
+{"idonix-metanet", {NULL}, 2112, "udp"}, |
|
+{"hsl-storm", {NULL}, 2113, "tcp"}, |
|
+{"hsl-storm", {NULL}, 2113, "udp"}, |
|
+{"newheights", {NULL}, 2114, "tcp"}, |
|
+{"newheights", {NULL}, 2114, "udp"}, |
|
+{"kdm", {NULL}, 2115, "tcp"}, |
|
+{"kdm", {NULL}, 2115, "udp"}, |
|
+{"ccowcmr", {NULL}, 2116, "tcp"}, |
|
+{"ccowcmr", {NULL}, 2116, "udp"}, |
|
+{"mentaclient", {NULL}, 2117, "tcp"}, |
|
+{"mentaclient", {NULL}, 2117, "udp"}, |
|
+{"mentaserver", {NULL}, 2118, "tcp"}, |
|
+{"mentaserver", {NULL}, 2118, "udp"}, |
|
+{"gsigatekeeper", {NULL}, 2119, "tcp"}, |
|
+{"gsigatekeeper", {NULL}, 2119, "udp"}, |
|
+{"qencp", {NULL}, 2120, "tcp"}, |
|
+{"qencp", {NULL}, 2120, "udp"}, |
|
+{"scientia-ssdb", {NULL}, 2121, "tcp"}, |
|
+{"scientia-ssdb", {NULL}, 2121, "udp"}, |
|
+{"caupc-remote", {NULL}, 2122, "tcp"}, |
|
+{"caupc-remote", {NULL}, 2122, "udp"}, |
|
+{"gtp-control", {NULL}, 2123, "tcp"}, |
|
+{"gtp-control", {NULL}, 2123, "udp"}, |
|
+{"elatelink", {NULL}, 2124, "tcp"}, |
|
+{"elatelink", {NULL}, 2124, "udp"}, |
|
+{"lockstep", {NULL}, 2125, "tcp"}, |
|
+{"lockstep", {NULL}, 2125, "udp"}, |
|
+{"pktcable-cops", {NULL}, 2126, "tcp"}, |
|
+{"pktcable-cops", {NULL}, 2126, "udp"}, |
|
+{"index-pc-wb", {NULL}, 2127, "tcp"}, |
|
+{"index-pc-wb", {NULL}, 2127, "udp"}, |
|
+{"net-steward", {NULL}, 2128, "tcp"}, |
|
+{"net-steward", {NULL}, 2128, "udp"}, |
|
+{"cs-live", {NULL}, 2129, "tcp"}, |
|
+{"cs-live", {NULL}, 2129, "udp"}, |
|
+{"xds", {NULL}, 2130, "tcp"}, |
|
+{"xds", {NULL}, 2130, "udp"}, |
|
+{"avantageb2b", {NULL}, 2131, "tcp"}, |
|
+{"avantageb2b", {NULL}, 2131, "udp"}, |
|
+{"solera-epmap", {NULL}, 2132, "tcp"}, |
|
+{"solera-epmap", {NULL}, 2132, "udp"}, |
|
+{"zymed-zpp", {NULL}, 2133, "tcp"}, |
|
+{"zymed-zpp", {NULL}, 2133, "udp"}, |
|
+{"avenue", {NULL}, 2134, "tcp"}, |
|
+{"avenue", {NULL}, 2134, "udp"}, |
|
+{"gris", {NULL}, 2135, "tcp"}, |
|
+{"gris", {NULL}, 2135, "udp"}, |
|
+{"appworxsrv", {NULL}, 2136, "tcp"}, |
|
+{"appworxsrv", {NULL}, 2136, "udp"}, |
|
+{"connect", {NULL}, 2137, "tcp"}, |
|
+{"connect", {NULL}, 2137, "udp"}, |
|
+{"unbind-cluster", {NULL}, 2138, "tcp"}, |
|
+{"unbind-cluster", {NULL}, 2138, "udp"}, |
|
+{"ias-auth", {NULL}, 2139, "tcp"}, |
|
+{"ias-auth", {NULL}, 2139, "udp"}, |
|
+{"ias-reg", {NULL}, 2140, "tcp"}, |
|
+{"ias-reg", {NULL}, 2140, "udp"}, |
|
+{"ias-admind", {NULL}, 2141, "tcp"}, |
|
+{"ias-admind", {NULL}, 2141, "udp"}, |
|
+{"tdmoip", {NULL}, 2142, "tcp"}, |
|
+{"tdmoip", {NULL}, 2142, "udp"}, |
|
+{"lv-jc", {NULL}, 2143, "tcp"}, |
|
+{"lv-jc", {NULL}, 2143, "udp"}, |
|
+{"lv-ffx", {NULL}, 2144, "tcp"}, |
|
+{"lv-ffx", {NULL}, 2144, "udp"}, |
|
+{"lv-pici", {NULL}, 2145, "tcp"}, |
|
+{"lv-pici", {NULL}, 2145, "udp"}, |
|
+{"lv-not", {NULL}, 2146, "tcp"}, |
|
+{"lv-not", {NULL}, 2146, "udp"}, |
|
+{"lv-auth", {NULL}, 2147, "tcp"}, |
|
+{"lv-auth", {NULL}, 2147, "udp"}, |
|
+{"veritas-ucl", {NULL}, 2148, "tcp"}, |
|
+{"veritas-ucl", {NULL}, 2148, "udp"}, |
|
+{"acptsys", {NULL}, 2149, "tcp"}, |
|
+{"acptsys", {NULL}, 2149, "udp"}, |
|
+{"dynamic3d", {NULL}, 2150, "tcp"}, |
|
+{"dynamic3d", {NULL}, 2150, "udp"}, |
|
+{"docent", {NULL}, 2151, "tcp"}, |
|
+{"docent", {NULL}, 2151, "udp"}, |
|
+{"gtp-user", {NULL}, 2152, "tcp"}, |
|
+{"gtp-user", {NULL}, 2152, "udp"}, |
|
+{"ctlptc", {NULL}, 2153, "tcp"}, |
|
+{"ctlptc", {NULL}, 2153, "udp"}, |
|
+{"stdptc", {NULL}, 2154, "tcp"}, |
|
+{"stdptc", {NULL}, 2154, "udp"}, |
|
+{"brdptc", {NULL}, 2155, "tcp"}, |
|
+{"brdptc", {NULL}, 2155, "udp"}, |
|
+{"trp", {NULL}, 2156, "tcp"}, |
|
+{"trp", {NULL}, 2156, "udp"}, |
|
+{"xnds", {NULL}, 2157, "tcp"}, |
|
+{"xnds", {NULL}, 2157, "udp"}, |
|
+{"touchnetplus", {NULL}, 2158, "tcp"}, |
|
+{"touchnetplus", {NULL}, 2158, "udp"}, |
|
+{"gdbremote", {NULL}, 2159, "tcp"}, |
|
+{"gdbremote", {NULL}, 2159, "udp"}, |
|
+{"apc-2160", {NULL}, 2160, "tcp"}, |
|
+{"apc-2160", {NULL}, 2160, "udp"}, |
|
+{"apc-2161", {NULL}, 2161, "tcp"}, |
|
+{"apc-2161", {NULL}, 2161, "udp"}, |
|
+{"navisphere", {NULL}, 2162, "tcp"}, |
|
+{"navisphere", {NULL}, 2162, "udp"}, |
|
+{"navisphere-sec", {NULL}, 2163, "tcp"}, |
|
+{"navisphere-sec", {NULL}, 2163, "udp"}, |
|
+{"ddns-v3", {NULL}, 2164, "tcp"}, |
|
+{"ddns-v3", {NULL}, 2164, "udp"}, |
|
+{"x-bone-api", {NULL}, 2165, "tcp"}, |
|
+{"x-bone-api", {NULL}, 2165, "udp"}, |
|
+{"iwserver", {NULL}, 2166, "tcp"}, |
|
+{"iwserver", {NULL}, 2166, "udp"}, |
|
+{"raw-serial", {NULL}, 2167, "tcp"}, |
|
+{"raw-serial", {NULL}, 2167, "udp"}, |
|
+{"easy-soft-mux", {NULL}, 2168, "tcp"}, |
|
+{"easy-soft-mux", {NULL}, 2168, "udp"}, |
|
+{"brain", {NULL}, 2169, "tcp"}, |
|
+{"brain", {NULL}, 2169, "udp"}, |
|
+{"eyetv", {NULL}, 2170, "tcp"}, |
|
+{"eyetv", {NULL}, 2170, "udp"}, |
|
+{"msfw-storage", {NULL}, 2171, "tcp"}, |
|
+{"msfw-storage", {NULL}, 2171, "udp"}, |
|
+{"msfw-s-storage", {NULL}, 2172, "tcp"}, |
|
+{"msfw-s-storage", {NULL}, 2172, "udp"}, |
|
+{"msfw-replica", {NULL}, 2173, "tcp"}, |
|
+{"msfw-replica", {NULL}, 2173, "udp"}, |
|
+{"msfw-array", {NULL}, 2174, "tcp"}, |
|
+{"msfw-array", {NULL}, 2174, "udp"}, |
|
+{"airsync", {NULL}, 2175, "tcp"}, |
|
+{"airsync", {NULL}, 2175, "udp"}, |
|
+{"rapi", {NULL}, 2176, "tcp"}, |
|
+{"rapi", {NULL}, 2176, "udp"}, |
|
+{"qwave", {NULL}, 2177, "tcp"}, |
|
+{"qwave", {NULL}, 2177, "udp"}, |
|
+{"bitspeer", {NULL}, 2178, "tcp"}, |
|
+{"bitspeer", {NULL}, 2178, "udp"}, |
|
+{"vmrdp", {NULL}, 2179, "tcp"}, |
|
+{"vmrdp", {NULL}, 2179, "udp"}, |
|
+{"mc-gt-srv", {NULL}, 2180, "tcp"}, |
|
+{"mc-gt-srv", {NULL}, 2180, "udp"}, |
|
+{"eforward", {NULL}, 2181, "tcp"}, |
|
+{"eforward", {NULL}, 2181, "udp"}, |
|
+{"cgn-stat", {NULL}, 2182, "tcp"}, |
|
+{"cgn-stat", {NULL}, 2182, "udp"}, |
|
+{"cgn-config", {NULL}, 2183, "tcp"}, |
|
+{"cgn-config", {NULL}, 2183, "udp"}, |
|
+{"nvd", {NULL}, 2184, "tcp"}, |
|
+{"nvd", {NULL}, 2184, "udp"}, |
|
+{"onbase-dds", {NULL}, 2185, "tcp"}, |
|
+{"onbase-dds", {NULL}, 2185, "udp"}, |
|
+{"gtaua", {NULL}, 2186, "tcp"}, |
|
+{"gtaua", {NULL}, 2186, "udp"}, |
|
+{"ssmc", {NULL}, 2187, "tcp"}, |
|
+{"ssmd", {NULL}, 2187, "udp"}, |
|
+{"tivoconnect", {NULL}, 2190, "tcp"}, |
|
+{"tivoconnect", {NULL}, 2190, "udp"}, |
|
+{"tvbus", {NULL}, 2191, "tcp"}, |
|
+{"tvbus", {NULL}, 2191, "udp"}, |
|
+{"asdis", {NULL}, 2192, "tcp"}, |
|
+{"asdis", {NULL}, 2192, "udp"}, |
|
+{"drwcs", {NULL}, 2193, "tcp"}, |
|
+{"drwcs", {NULL}, 2193, "udp"}, |
|
+{"mnp-exchange", {NULL}, 2197, "tcp"}, |
|
+{"mnp-exchange", {NULL}, 2197, "udp"}, |
|
+{"onehome-remote", {NULL}, 2198, "tcp"}, |
|
+{"onehome-remote", {NULL}, 2198, "udp"}, |
|
+{"onehome-help", {NULL}, 2199, "tcp"}, |
|
+{"onehome-help", {NULL}, 2199, "udp"}, |
|
+{"ici", {NULL}, 2200, "tcp"}, |
|
+{"ici", {NULL}, 2200, "udp"}, |
|
+{"ats", {NULL}, 2201, "tcp"}, |
|
+{"ats", {NULL}, 2201, "udp"}, |
|
+{"imtc-map", {NULL}, 2202, "tcp"}, |
|
+{"imtc-map", {NULL}, 2202, "udp"}, |
|
+{"b2-runtime", {NULL}, 2203, "tcp"}, |
|
+{"b2-runtime", {NULL}, 2203, "udp"}, |
|
+{"b2-license", {NULL}, 2204, "tcp"}, |
|
+{"b2-license", {NULL}, 2204, "udp"}, |
|
+{"jps", {NULL}, 2205, "tcp"}, |
|
+{"jps", {NULL}, 2205, "udp"}, |
|
+{"hpocbus", {NULL}, 2206, "tcp"}, |
|
+{"hpocbus", {NULL}, 2206, "udp"}, |
|
+{"hpssd", {NULL}, 2207, "tcp"}, |
|
+{"hpssd", {NULL}, 2207, "udp"}, |
|
+{"hpiod", {NULL}, 2208, "tcp"}, |
|
+{"hpiod", {NULL}, 2208, "udp"}, |
|
+{"rimf-ps", {NULL}, 2209, "tcp"}, |
|
+{"rimf-ps", {NULL}, 2209, "udp"}, |
|
+{"noaaport", {NULL}, 2210, "tcp"}, |
|
+{"noaaport", {NULL}, 2210, "udp"}, |
|
+{"emwin", {NULL}, 2211, "tcp"}, |
|
+{"emwin", {NULL}, 2211, "udp"}, |
|
+{"leecoposserver", {NULL}, 2212, "tcp"}, |
|
+{"leecoposserver", {NULL}, 2212, "udp"}, |
|
+{"kali", {NULL}, 2213, "tcp"}, |
|
+{"kali", {NULL}, 2213, "udp"}, |
|
+{"rpi", {NULL}, 2214, "tcp"}, |
|
+{"rpi", {NULL}, 2214, "udp"}, |
|
+{"ipcore", {NULL}, 2215, "tcp"}, |
|
+{"ipcore", {NULL}, 2215, "udp"}, |
|
+{"vtu-comms", {NULL}, 2216, "tcp"}, |
|
+{"vtu-comms", {NULL}, 2216, "udp"}, |
|
+{"gotodevice", {NULL}, 2217, "tcp"}, |
|
+{"gotodevice", {NULL}, 2217, "udp"}, |
|
+{"bounzza", {NULL}, 2218, "tcp"}, |
|
+{"bounzza", {NULL}, 2218, "udp"}, |
|
+{"netiq-ncap", {NULL}, 2219, "tcp"}, |
|
+{"netiq-ncap", {NULL}, 2219, "udp"}, |
|
+{"netiq", {NULL}, 2220, "tcp"}, |
|
+{"netiq", {NULL}, 2220, "udp"}, |
|
+{"rockwell-csp1", {NULL}, 2221, "tcp"}, |
|
+{"rockwell-csp1", {NULL}, 2221, "udp"}, |
|
+{"EtherNet/IP-1", {NULL}, 2222, "tcp"}, |
|
+{"EtherNet/IP-1", {NULL}, 2222, "udp"}, |
|
+{"rockwell-csp2", {NULL}, 2223, "tcp"}, |
|
+{"rockwell-csp2", {NULL}, 2223, "udp"}, |
|
+{"efi-mg", {NULL}, 2224, "tcp"}, |
|
+{"efi-mg", {NULL}, 2224, "udp"}, |
|
+{"rcip-itu", {NULL}, 2225, "tcp"}, |
|
+{"rcip-itu", {NULL}, 2225, "sctp"}, |
|
+{"di-drm", {NULL}, 2226, "tcp"}, |
|
+{"di-drm", {NULL}, 2226, "udp"}, |
|
+{"di-msg", {NULL}, 2227, "tcp"}, |
|
+{"di-msg", {NULL}, 2227, "udp"}, |
|
+{"ehome-ms", {NULL}, 2228, "tcp"}, |
|
+{"ehome-ms", {NULL}, 2228, "udp"}, |
|
+{"datalens", {NULL}, 2229, "tcp"}, |
|
+{"datalens", {NULL}, 2229, "udp"}, |
|
+{"queueadm", {NULL}, 2230, "tcp"}, |
|
+{"queueadm", {NULL}, 2230, "udp"}, |
|
+{"wimaxasncp", {NULL}, 2231, "tcp"}, |
|
+{"wimaxasncp", {NULL}, 2231, "udp"}, |
|
+{"ivs-video", {NULL}, 2232, "tcp"}, |
|
+{"ivs-video", {NULL}, 2232, "udp"}, |
|
+{"infocrypt", {NULL}, 2233, "tcp"}, |
|
+{"infocrypt", {NULL}, 2233, "udp"}, |
|
+{"directplay", {NULL}, 2234, "tcp"}, |
|
+{"directplay", {NULL}, 2234, "udp"}, |
|
+{"sercomm-wlink", {NULL}, 2235, "tcp"}, |
|
+{"sercomm-wlink", {NULL}, 2235, "udp"}, |
|
+{"nani", {NULL}, 2236, "tcp"}, |
|
+{"nani", {NULL}, 2236, "udp"}, |
|
+{"optech-port1-lm", {NULL}, 2237, "tcp"}, |
|
+{"optech-port1-lm", {NULL}, 2237, "udp"}, |
|
+{"aviva-sna", {NULL}, 2238, "tcp"}, |
|
+{"aviva-sna", {NULL}, 2238, "udp"}, |
|
+{"imagequery", {NULL}, 2239, "tcp"}, |
|
+{"imagequery", {NULL}, 2239, "udp"}, |
|
+{"recipe", {NULL}, 2240, "tcp"}, |
|
+{"recipe", {NULL}, 2240, "udp"}, |
|
+{"ivsd", {NULL}, 2241, "tcp"}, |
|
+{"ivsd", {NULL}, 2241, "udp"}, |
|
+{"foliocorp", {NULL}, 2242, "tcp"}, |
|
+{"foliocorp", {NULL}, 2242, "udp"}, |
|
+{"magicom", {NULL}, 2243, "tcp"}, |
|
+{"magicom", {NULL}, 2243, "udp"}, |
|
+{"nmsserver", {NULL}, 2244, "tcp"}, |
|
+{"nmsserver", {NULL}, 2244, "udp"}, |
|
+{"hao", {NULL}, 2245, "tcp"}, |
|
+{"hao", {NULL}, 2245, "udp"}, |
|
+{"pc-mta-addrmap", {NULL}, 2246, "tcp"}, |
|
+{"pc-mta-addrmap", {NULL}, 2246, "udp"}, |
|
+{"antidotemgrsvr", {NULL}, 2247, "tcp"}, |
|
+{"antidotemgrsvr", {NULL}, 2247, "udp"}, |
|
+{"ums", {NULL}, 2248, "tcp"}, |
|
+{"ums", {NULL}, 2248, "udp"}, |
|
+{"rfmp", {NULL}, 2249, "tcp"}, |
|
+{"rfmp", {NULL}, 2249, "udp"}, |
|
+{"remote-collab", {NULL}, 2250, "tcp"}, |
|
+{"remote-collab", {NULL}, 2250, "udp"}, |
|
+{"dif-port", {NULL}, 2251, "tcp"}, |
|
+{"dif-port", {NULL}, 2251, "udp"}, |
|
+{"njenet-ssl", {NULL}, 2252, "tcp"}, |
|
+{"njenet-ssl", {NULL}, 2252, "udp"}, |
|
+{"dtv-chan-req", {NULL}, 2253, "tcp"}, |
|
+{"dtv-chan-req", {NULL}, 2253, "udp"}, |
|
+{"seispoc", {NULL}, 2254, "tcp"}, |
|
+{"seispoc", {NULL}, 2254, "udp"}, |
|
+{"vrtp", {NULL}, 2255, "tcp"}, |
|
+{"vrtp", {NULL}, 2255, "udp"}, |
|
+{"pcc-mfp", {NULL}, 2256, "tcp"}, |
|
+{"pcc-mfp", {NULL}, 2256, "udp"}, |
|
+{"simple-tx-rx", {NULL}, 2257, "tcp"}, |
|
+{"simple-tx-rx", {NULL}, 2257, "udp"}, |
|
+{"rcts", {NULL}, 2258, "tcp"}, |
|
+{"rcts", {NULL}, 2258, "udp"}, |
|
+{"acd-pm", {NULL}, 2259, "tcp"}, |
|
+{"acd-pm", {NULL}, 2259, "udp"}, |
|
+{"apc-2260", {NULL}, 2260, "tcp"}, |
|
+{"apc-2260", {NULL}, 2260, "udp"}, |
|
+{"comotionmaster", {NULL}, 2261, "tcp"}, |
|
+{"comotionmaster", {NULL}, 2261, "udp"}, |
|
+{"comotionback", {NULL}, 2262, "tcp"}, |
|
+{"comotionback", {NULL}, 2262, "udp"}, |
|
+{"ecwcfg", {NULL}, 2263, "tcp"}, |
|
+{"ecwcfg", {NULL}, 2263, "udp"}, |
|
+{"apx500api-1", {NULL}, 2264, "tcp"}, |
|
+{"apx500api-1", {NULL}, 2264, "udp"}, |
|
+{"apx500api-2", {NULL}, 2265, "tcp"}, |
|
+{"apx500api-2", {NULL}, 2265, "udp"}, |
|
+{"mfserver", {NULL}, 2266, "tcp"}, |
|
+{"mfserver", {NULL}, 2266, "udp"}, |
|
+{"ontobroker", {NULL}, 2267, "tcp"}, |
|
+{"ontobroker", {NULL}, 2267, "udp"}, |
|
+{"amt", {NULL}, 2268, "tcp"}, |
|
+{"amt", {NULL}, 2268, "udp"}, |
|
+{"mikey", {NULL}, 2269, "tcp"}, |
|
+{"mikey", {NULL}, 2269, "udp"}, |
|
+{"starschool", {NULL}, 2270, "tcp"}, |
|
+{"starschool", {NULL}, 2270, "udp"}, |
|
+{"mmcals", {NULL}, 2271, "tcp"}, |
|
+{"mmcals", {NULL}, 2271, "udp"}, |
|
+{"mmcal", {NULL}, 2272, "tcp"}, |
|
+{"mmcal", {NULL}, 2272, "udp"}, |
|
+{"mysql-im", {NULL}, 2273, "tcp"}, |
|
+{"mysql-im", {NULL}, 2273, "udp"}, |
|
+{"pcttunnell", {NULL}, 2274, "tcp"}, |
|
+{"pcttunnell", {NULL}, 2274, "udp"}, |
|
+{"ibridge-data", {NULL}, 2275, "tcp"}, |
|
+{"ibridge-data", {NULL}, 2275, "udp"}, |
|
+{"ibridge-mgmt", {NULL}, 2276, "tcp"}, |
|
+{"ibridge-mgmt", {NULL}, 2276, "udp"}, |
|
+{"bluectrlproxy", {NULL}, 2277, "tcp"}, |
|
+{"bluectrlproxy", {NULL}, 2277, "udp"}, |
|
+{"s3db", {NULL}, 2278, "tcp"}, |
|
+{"s3db", {NULL}, 2278, "udp"}, |
|
+{"xmquery", {NULL}, 2279, "tcp"}, |
|
+{"xmquery", {NULL}, 2279, "udp"}, |
|
+{"lnvpoller", {NULL}, 2280, "tcp"}, |
|
+{"lnvpoller", {NULL}, 2280, "udp"}, |
|
+{"lnvconsole", {NULL}, 2281, "tcp"}, |
|
+{"lnvconsole", {NULL}, 2281, "udp"}, |
|
+{"lnvalarm", {NULL}, 2282, "tcp"}, |
|
+{"lnvalarm", {NULL}, 2282, "udp"}, |
|
+{"lnvstatus", {NULL}, 2283, "tcp"}, |
|
+{"lnvstatus", {NULL}, 2283, "udp"}, |
|
+{"lnvmaps", {NULL}, 2284, "tcp"}, |
|
+{"lnvmaps", {NULL}, 2284, "udp"}, |
|
+{"lnvmailmon", {NULL}, 2285, "tcp"}, |
|
+{"lnvmailmon", {NULL}, 2285, "udp"}, |
|
+{"nas-metering", {NULL}, 2286, "tcp"}, |
|
+{"nas-metering", {NULL}, 2286, "udp"}, |
|
+{"dna", {NULL}, 2287, "tcp"}, |
|
+{"dna", {NULL}, 2287, "udp"}, |
|
+{"netml", {NULL}, 2288, "tcp"}, |
|
+{"netml", {NULL}, 2288, "udp"}, |
|
+{"dict-lookup", {NULL}, 2289, "tcp"}, |
|
+{"dict-lookup", {NULL}, 2289, "udp"}, |
|
+{"sonus-logging", {NULL}, 2290, "tcp"}, |
|
+{"sonus-logging", {NULL}, 2290, "udp"}, |
|
+{"eapsp", {NULL}, 2291, "tcp"}, |
|
+{"eapsp", {NULL}, 2291, "udp"}, |
|
+{"mib-streaming", {NULL}, 2292, "tcp"}, |
|
+{"mib-streaming", {NULL}, 2292, "udp"}, |
|
+{"npdbgmngr", {NULL}, 2293, "tcp"}, |
|
+{"npdbgmngr", {NULL}, 2293, "udp"}, |
|
+{"konshus-lm", {NULL}, 2294, "tcp"}, |
|
+{"konshus-lm", {NULL}, 2294, "udp"}, |
|
+{"advant-lm", {NULL}, 2295, "tcp"}, |
|
+{"advant-lm", {NULL}, 2295, "udp"}, |
|
+{"theta-lm", {NULL}, 2296, "tcp"}, |
|
+{"theta-lm", {NULL}, 2296, "udp"}, |
|
+{"d2k-datamover1", {NULL}, 2297, "tcp"}, |
|
+{"d2k-datamover1", {NULL}, 2297, "udp"}, |
|
+{"d2k-datamover2", {NULL}, 2298, "tcp"}, |
|
+{"d2k-datamover2", {NULL}, 2298, "udp"}, |
|
+{"pc-telecommute", {NULL}, 2299, "tcp"}, |
|
+{"pc-telecommute", {NULL}, 2299, "udp"}, |
|
+{"cvmmon", {NULL}, 2300, "tcp"}, |
|
+{"cvmmon", {NULL}, 2300, "udp"}, |
|
+{"cpq-wbem", {NULL}, 2301, "tcp"}, |
|
+{"cpq-wbem", {NULL}, 2301, "udp"}, |
|
+{"binderysupport", {NULL}, 2302, "tcp"}, |
|
+{"binderysupport", {NULL}, 2302, "udp"}, |
|
+{"proxy-gateway", {NULL}, 2303, "tcp"}, |
|
+{"proxy-gateway", {NULL}, 2303, "udp"}, |
|
+{"attachmate-uts", {NULL}, 2304, "tcp"}, |
|
+{"attachmate-uts", {NULL}, 2304, "udp"}, |
|
+{"mt-scaleserver", {NULL}, 2305, "tcp"}, |
|
+{"mt-scaleserver", {NULL}, 2305, "udp"}, |
|
+{"tappi-boxnet", {NULL}, 2306, "tcp"}, |
|
+{"tappi-boxnet", {NULL}, 2306, "udp"}, |
|
+{"pehelp", {NULL}, 2307, "tcp"}, |
|
+{"pehelp", {NULL}, 2307, "udp"}, |
|
+{"sdhelp", {NULL}, 2308, "tcp"}, |
|
+{"sdhelp", {NULL}, 2308, "udp"}, |
|
+{"sdserver", {NULL}, 2309, "tcp"}, |
|
+{"sdserver", {NULL}, 2309, "udp"}, |
|
+{"sdclient", {NULL}, 2310, "tcp"}, |
|
+{"sdclient", {NULL}, 2310, "udp"}, |
|
+{"messageservice", {NULL}, 2311, "tcp"}, |
|
+{"messageservice", {NULL}, 2311, "udp"}, |
|
+{"wanscaler", {NULL}, 2312, "tcp"}, |
|
+{"wanscaler", {NULL}, 2312, "udp"}, |
|
+{"iapp", {NULL}, 2313, "tcp"}, |
|
+{"iapp", {NULL}, 2313, "udp"}, |
|
+{"cr-websystems", {NULL}, 2314, "tcp"}, |
|
+{"cr-websystems", {NULL}, 2314, "udp"}, |
|
+{"precise-sft", {NULL}, 2315, "tcp"}, |
|
+{"precise-sft", {NULL}, 2315, "udp"}, |
|
+{"sent-lm", {NULL}, 2316, "tcp"}, |
|
+{"sent-lm", {NULL}, 2316, "udp"}, |
|
+{"attachmate-g32", {NULL}, 2317, "tcp"}, |
|
+{"attachmate-g32", {NULL}, 2317, "udp"}, |
|
+{"cadencecontrol", {NULL}, 2318, "tcp"}, |
|
+{"cadencecontrol", {NULL}, 2318, "udp"}, |
|
+{"infolibria", {NULL}, 2319, "tcp"}, |
|
+{"infolibria", {NULL}, 2319, "udp"}, |
|
+{"siebel-ns", {NULL}, 2320, "tcp"}, |
|
+{"siebel-ns", {NULL}, 2320, "udp"}, |
|
+{"rdlap", {NULL}, 2321, "tcp"}, |
|
+{"rdlap", {NULL}, 2321, "udp"}, |
|
+{"ofsd", {NULL}, 2322, "tcp"}, |
|
+{"ofsd", {NULL}, 2322, "udp"}, |
|
+{"3d-nfsd", {NULL}, 2323, "tcp"}, |
|
+{"3d-nfsd", {NULL}, 2323, "udp"}, |
|
+{"cosmocall", {NULL}, 2324, "tcp"}, |
|
+{"cosmocall", {NULL}, 2324, "udp"}, |
|
+{"ansysli", {NULL}, 2325, "tcp"}, |
|
+{"ansysli", {NULL}, 2325, "udp"}, |
|
+{"idcp", {NULL}, 2326, "tcp"}, |
|
+{"idcp", {NULL}, 2326, "udp"}, |
|
+{"xingcsm", {NULL}, 2327, "tcp"}, |
|
+{"xingcsm", {NULL}, 2327, "udp"}, |
|
+{"netrix-sftm", {NULL}, 2328, "tcp"}, |
|
+{"netrix-sftm", {NULL}, 2328, "udp"}, |
|
+{"nvd", {NULL}, 2329, "tcp"}, |
|
+{"nvd", {NULL}, 2329, "udp"}, |
|
+{"tscchat", {NULL}, 2330, "tcp"}, |
|
+{"tscchat", {NULL}, 2330, "udp"}, |
|
+{"agentview", {NULL}, 2331, "tcp"}, |
|
+{"agentview", {NULL}, 2331, "udp"}, |
|
+{"rcc-host", {NULL}, 2332, "tcp"}, |
|
+{"rcc-host", {NULL}, 2332, "udp"}, |
|
+{"snapp", {NULL}, 2333, "tcp"}, |
|
+{"snapp", {NULL}, 2333, "udp"}, |
|
+{"ace-client", {NULL}, 2334, "tcp"}, |
|
+{"ace-client", {NULL}, 2334, "udp"}, |
|
+{"ace-proxy", {NULL}, 2335, "tcp"}, |
|
+{"ace-proxy", {NULL}, 2335, "udp"}, |
|
+{"appleugcontrol", {NULL}, 2336, "tcp"}, |
|
+{"appleugcontrol", {NULL}, 2336, "udp"}, |
|
+{"ideesrv", {NULL}, 2337, "tcp"}, |
|
+{"ideesrv", {NULL}, 2337, "udp"}, |
|
+{"norton-lambert", {NULL}, 2338, "tcp"}, |
|
+{"norton-lambert", {NULL}, 2338, "udp"}, |
|
+{"3com-webview", {NULL}, 2339, "tcp"}, |
|
+{"3com-webview", {NULL}, 2339, "udp"}, |
|
+{"wrs_registry", {NULL}, 2340, "tcp"}, |
|
+{"wrs_registry", {NULL}, 2340, "udp"}, |
|
+{"xiostatus", {NULL}, 2341, "tcp"}, |
|
+{"xiostatus", {NULL}, 2341, "udp"}, |
|
+{"manage-exec", {NULL}, 2342, "tcp"}, |
|
+{"manage-exec", {NULL}, 2342, "udp"}, |
|
+{"nati-logos", {NULL}, 2343, "tcp"}, |
|
+{"nati-logos", {NULL}, 2343, "udp"}, |
|
+{"fcmsys", {NULL}, 2344, "tcp"}, |
|
+{"fcmsys", {NULL}, 2344, "udp"}, |
|
+{"dbm", {NULL}, 2345, "tcp"}, |
|
+{"dbm", {NULL}, 2345, "udp"}, |
|
+{"redstorm_join", {NULL}, 2346, "tcp"}, |
|
+{"redstorm_join", {NULL}, 2346, "udp"}, |
|
+{"redstorm_find", {NULL}, 2347, "tcp"}, |
|
+{"redstorm_find", {NULL}, 2347, "udp"}, |
|
+{"redstorm_info", {NULL}, 2348, "tcp"}, |
|
+{"redstorm_info", {NULL}, 2348, "udp"}, |
|
+{"redstorm_diag", {NULL}, 2349, "tcp"}, |
|
+{"redstorm_diag", {NULL}, 2349, "udp"}, |
|
+{"psbserver", {NULL}, 2350, "tcp"}, |
|
+{"psbserver", {NULL}, 2350, "udp"}, |
|
+{"psrserver", {NULL}, 2351, "tcp"}, |
|
+{"psrserver", {NULL}, 2351, "udp"}, |
|
+{"pslserver", {NULL}, 2352, "tcp"}, |
|
+{"pslserver", {NULL}, 2352, "udp"}, |
|
+{"pspserver", {NULL}, 2353, "tcp"}, |
|
+{"pspserver", {NULL}, 2353, "udp"}, |
|
+{"psprserver", {NULL}, 2354, "tcp"}, |
|
+{"psprserver", {NULL}, 2354, "udp"}, |
|
+{"psdbserver", {NULL}, 2355, "tcp"}, |
|
+{"psdbserver", {NULL}, 2355, "udp"}, |
|
+{"gxtelmd", {NULL}, 2356, "tcp"}, |
|
+{"gxtelmd", {NULL}, 2356, "udp"}, |
|
+{"unihub-server", {NULL}, 2357, "tcp"}, |
|
+{"unihub-server", {NULL}, 2357, "udp"}, |
|
+{"futrix", {NULL}, 2358, "tcp"}, |
|
+{"futrix", {NULL}, 2358, "udp"}, |
|
+{"flukeserver", {NULL}, 2359, "tcp"}, |
|
+{"flukeserver", {NULL}, 2359, "udp"}, |
|
+{"nexstorindltd", {NULL}, 2360, "tcp"}, |
|
+{"nexstorindltd", {NULL}, 2360, "udp"}, |
|
+{"tl1", {NULL}, 2361, "tcp"}, |
|
+{"tl1", {NULL}, 2361, "udp"}, |
|
+{"digiman", {NULL}, 2362, "tcp"}, |
|
+{"digiman", {NULL}, 2362, "udp"}, |
|
+{"mediacntrlnfsd", {NULL}, 2363, "tcp"}, |
|
+{"mediacntrlnfsd", {NULL}, 2363, "udp"}, |
|
+{"oi-2000", {NULL}, 2364, "tcp"}, |
|
+{"oi-2000", {NULL}, 2364, "udp"}, |
|
+{"dbref", {NULL}, 2365, "tcp"}, |
|
+{"dbref", {NULL}, 2365, "udp"}, |
|
+{"qip-login", {NULL}, 2366, "tcp"}, |
|
+{"qip-login", {NULL}, 2366, "udp"}, |
|
+{"service-ctrl", {NULL}, 2367, "tcp"}, |
|
+{"service-ctrl", {NULL}, 2367, "udp"}, |
|
+{"opentable", {NULL}, 2368, "tcp"}, |
|
+{"opentable", {NULL}, 2368, "udp"}, |
|
+{"l3-hbmon", {NULL}, 2370, "tcp"}, |
|
+{"l3-hbmon", {NULL}, 2370, "udp"}, |
|
+{"worldwire", {NULL}, 2371, "tcp"}, |
|
+{"worldwire", {NULL}, 2371, "udp"}, |
|
+{"lanmessenger", {NULL}, 2372, "tcp"}, |
|
+{"lanmessenger", {NULL}, 2372, "udp"}, |
|
+{"remographlm", {NULL}, 2373, "tcp"}, |
|
+{"hydra", {NULL}, 2374, "tcp"}, |
|
+{"compaq-https", {NULL}, 2381, "tcp"}, |
|
+{"compaq-https", {NULL}, 2381, "udp"}, |
|
+{"ms-olap3", {NULL}, 2382, "tcp"}, |
|
+{"ms-olap3", {NULL}, 2382, "udp"}, |
|
+{"ms-olap4", {NULL}, 2383, "tcp"}, |
|
+{"ms-olap4", {NULL}, 2383, "udp"}, |
|
+{"sd-request", {NULL}, 2384, "tcp"}, |
|
+{"sd-capacity", {NULL}, 2384, "udp"}, |
|
+{"sd-data", {NULL}, 2385, "tcp"}, |
|
+{"sd-data", {NULL}, 2385, "udp"}, |
|
+{"virtualtape", {NULL}, 2386, "tcp"}, |
|
+{"virtualtape", {NULL}, 2386, "udp"}, |
|
+{"vsamredirector", {NULL}, 2387, "tcp"}, |
|
+{"vsamredirector", {NULL}, 2387, "udp"}, |
|
+{"mynahautostart", {NULL}, 2388, "tcp"}, |
|
+{"mynahautostart", {NULL}, 2388, "udp"}, |
|
+{"ovsessionmgr", {NULL}, 2389, "tcp"}, |
|
+{"ovsessionmgr", {NULL}, 2389, "udp"}, |
|
+{"rsmtp", {NULL}, 2390, "tcp"}, |
|
+{"rsmtp", {NULL}, 2390, "udp"}, |
|
+{"3com-net-mgmt", {NULL}, 2391, "tcp"}, |
|
+{"3com-net-mgmt", {NULL}, 2391, "udp"}, |
|
+{"tacticalauth", {NULL}, 2392, "tcp"}, |
|
+{"tacticalauth", {NULL}, 2392, "udp"}, |
|
+{"ms-olap1", {NULL}, 2393, "tcp"}, |
|
+{"ms-olap1", {NULL}, 2393, "udp"}, |
|
+{"ms-olap2", {NULL}, 2394, "tcp"}, |
|
+{"ms-olap2", {NULL}, 2394, "udp"}, |
|
+{"lan900_remote", {NULL}, 2395, "tcp"}, |
|
+{"lan900_remote", {NULL}, 2395, "udp"}, |
|
+{"wusage", {NULL}, 2396, "tcp"}, |
|
+{"wusage", {NULL}, 2396, "udp"}, |
|
+{"ncl", {NULL}, 2397, "tcp"}, |
|
+{"ncl", {NULL}, 2397, "udp"}, |
|
+{"orbiter", {NULL}, 2398, "tcp"}, |
|
+{"orbiter", {NULL}, 2398, "udp"}, |
|
+{"fmpro-fdal", {NULL}, 2399, "tcp"}, |
|
+{"fmpro-fdal", {NULL}, 2399, "udp"}, |
|
+{"opequus-server", {NULL}, 2400, "tcp"}, |
|
+{"opequus-server", {NULL}, 2400, "udp"}, |
|
+{"cvspserver", {NULL}, 2401, "tcp"}, |
|
+{"cvspserver", {NULL}, 2401, "udp"}, |
|
+{"taskmaster2000", {NULL}, 2402, "tcp"}, |
|
+{"taskmaster2000", {NULL}, 2402, "udp"}, |
|
+{"taskmaster2000", {NULL}, 2403, "tcp"}, |
|
+{"taskmaster2000", {NULL}, 2403, "udp"}, |
|
+{"iec-104", {NULL}, 2404, "tcp"}, |
|
+{"iec-104", {NULL}, 2404, "udp"}, |
|
+{"trc-netpoll", {NULL}, 2405, "tcp"}, |
|
+{"trc-netpoll", {NULL}, 2405, "udp"}, |
|
+{"jediserver", {NULL}, 2406, "tcp"}, |
|
+{"jediserver", {NULL}, 2406, "udp"}, |
|
+{"orion", {NULL}, 2407, "tcp"}, |
|
+{"orion", {NULL}, 2407, "udp"}, |
|
+{"optimanet", {NULL}, 2408, "tcp"}, |
|
+{"optimanet", {NULL}, 2408, "udp"}, |
|
+{"sns-protocol", {NULL}, 2409, "tcp"}, |
|
+{"sns-protocol", {NULL}, 2409, "udp"}, |
|
+{"vrts-registry", {NULL}, 2410, "tcp"}, |
|
+{"vrts-registry", {NULL}, 2410, "udp"}, |
|
+{"netwave-ap-mgmt", {NULL}, 2411, "tcp"}, |
|
+{"netwave-ap-mgmt", {NULL}, 2411, "udp"}, |
|
+{"cdn", {NULL}, 2412, "tcp"}, |
|
+{"cdn", {NULL}, 2412, "udp"}, |
|
+{"orion-rmi-reg", {NULL}, 2413, "tcp"}, |
|
+{"orion-rmi-reg", {NULL}, 2413, "udp"}, |
|
+{"beeyond", {NULL}, 2414, "tcp"}, |
|
+{"beeyond", {NULL}, 2414, "udp"}, |
|
+{"codima-rtp", {NULL}, 2415, "tcp"}, |
|
+{"codima-rtp", {NULL}, 2415, "udp"}, |
|
+{"rmtserver", {NULL}, 2416, "tcp"}, |
|
+{"rmtserver", {NULL}, 2416, "udp"}, |
|
+{"composit-server", {NULL}, 2417, "tcp"}, |
|
+{"composit-server", {NULL}, 2417, "udp"}, |
|
+{"cas", {NULL}, 2418, "tcp"}, |
|
+{"cas", {NULL}, 2418, "udp"}, |
|
+{"attachmate-s2s", {NULL}, 2419, "tcp"}, |
|
+{"attachmate-s2s", {NULL}, 2419, "udp"}, |
|
+{"dslremote-mgmt", {NULL}, 2420, "tcp"}, |
|
+{"dslremote-mgmt", {NULL}, 2420, "udp"}, |
|
+{"g-talk", {NULL}, 2421, "tcp"}, |
|
+{"g-talk", {NULL}, 2421, "udp"}, |
|
+{"crmsbits", {NULL}, 2422, "tcp"}, |
|
+{"crmsbits", {NULL}, 2422, "udp"}, |
|
+{"rnrp", {NULL}, 2423, "tcp"}, |
|
+{"rnrp", {NULL}, 2423, "udp"}, |
|
+{"kofax-svr", {NULL}, 2424, "tcp"}, |
|
+{"kofax-svr", {NULL}, 2424, "udp"}, |
|
+{"fjitsuappmgr", {NULL}, 2425, "tcp"}, |
|
+{"fjitsuappmgr", {NULL}, 2425, "udp"}, |
|
+{"mgcp-gateway", {NULL}, 2427, "tcp"}, |
|
+{"mgcp-gateway", {NULL}, 2427, "udp"}, |
|
+{"ott", {NULL}, 2428, "tcp"}, |
|
+{"ott", {NULL}, 2428, "udp"}, |
|
+{"ft-role", {NULL}, 2429, "tcp"}, |
|
+{"ft-role", {NULL}, 2429, "udp"}, |
|
+{"venus", {NULL}, 2430, "tcp"}, |
|
+{"venus", {NULL}, 2430, "udp"}, |
|
+{"venus-se", {NULL}, 2431, "tcp"}, |
|
+{"venus-se", {NULL}, 2431, "udp"}, |
|
+{"codasrv", {NULL}, 2432, "tcp"}, |
|
+{"codasrv", {NULL}, 2432, "udp"}, |
|
+{"codasrv-se", {NULL}, 2433, "tcp"}, |
|
+{"codasrv-se", {NULL}, 2433, "udp"}, |
|
+{"pxc-epmap", {NULL}, 2434, "tcp"}, |
|
+{"pxc-epmap", {NULL}, 2434, "udp"}, |
|
+{"optilogic", {NULL}, 2435, "tcp"}, |
|
+{"optilogic", {NULL}, 2435, "udp"}, |
|
+{"topx", {NULL}, 2436, "tcp"}, |
|
+{"topx", {NULL}, 2436, "udp"}, |
|
+{"unicontrol", {NULL}, 2437, "tcp"}, |
|
+{"unicontrol", {NULL}, 2437, "udp"}, |
|
+{"msp", {NULL}, 2438, "tcp"}, |
|
+{"msp", {NULL}, 2438, "udp"}, |
|
+{"sybasedbsynch", {NULL}, 2439, "tcp"}, |
|
+{"sybasedbsynch", {NULL}, 2439, "udp"}, |
|
+{"spearway", {NULL}, 2440, "tcp"}, |
|
+{"spearway", {NULL}, 2440, "udp"}, |
|
+{"pvsw-inet", {NULL}, 2441, "tcp"}, |
|
+{"pvsw-inet", {NULL}, 2441, "udp"}, |
|
+{"netangel", {NULL}, 2442, "tcp"}, |
|
+{"netangel", {NULL}, 2442, "udp"}, |
|
+{"powerclientcsf", {NULL}, 2443, "tcp"}, |
|
+{"powerclientcsf", {NULL}, 2443, "udp"}, |
|
+{"btpp2sectrans", {NULL}, 2444, "tcp"}, |
|
+{"btpp2sectrans", {NULL}, 2444, "udp"}, |
|
+{"dtn1", {NULL}, 2445, "tcp"}, |
|
+{"dtn1", {NULL}, 2445, "udp"}, |
|
+{"bues_service", {NULL}, 2446, "tcp"}, |
|
+{"bues_service", {NULL}, 2446, "udp"}, |
|
+{"ovwdb", {NULL}, 2447, "tcp"}, |
|
+{"ovwdb", {NULL}, 2447, "udp"}, |
|
+{"hpppssvr", {NULL}, 2448, "tcp"}, |
|
+{"hpppssvr", {NULL}, 2448, "udp"}, |
|
+{"ratl", {NULL}, 2449, "tcp"}, |
|
+{"ratl", {NULL}, 2449, "udp"}, |
|
+{"netadmin", {NULL}, 2450, "tcp"}, |
|
+{"netadmin", {NULL}, 2450, "udp"}, |
|
+{"netchat", {NULL}, 2451, "tcp"}, |
|
+{"netchat", {NULL}, 2451, "udp"}, |
|
+{"snifferclient", {NULL}, 2452, "tcp"}, |
|
+{"snifferclient", {NULL}, 2452, "udp"}, |
|
+{"madge-ltd", {NULL}, 2453, "tcp"}, |
|
+{"madge-ltd", {NULL}, 2453, "udp"}, |
|
+{"indx-dds", {NULL}, 2454, "tcp"}, |
|
+{"indx-dds", {NULL}, 2454, "udp"}, |
|
+{"wago-io-system", {NULL}, 2455, "tcp"}, |
|
+{"wago-io-system", {NULL}, 2455, "udp"}, |
|
+{"altav-remmgt", {NULL}, 2456, "tcp"}, |
|
+{"altav-remmgt", {NULL}, 2456, "udp"}, |
|
+{"rapido-ip", {NULL}, 2457, "tcp"}, |
|
+{"rapido-ip", {NULL}, 2457, "udp"}, |
|
+{"griffin", {NULL}, 2458, "tcp"}, |
|
+{"griffin", {NULL}, 2458, "udp"}, |
|
+{"community", {NULL}, 2459, "tcp"}, |
|
+{"community", {NULL}, 2459, "udp"}, |
|
+{"ms-theater", {NULL}, 2460, "tcp"}, |
|
+{"ms-theater", {NULL}, 2460, "udp"}, |
|
+{"qadmifoper", {NULL}, 2461, "tcp"}, |
|
+{"qadmifoper", {NULL}, 2461, "udp"}, |
|
+{"qadmifevent", {NULL}, 2462, "tcp"}, |
|
+{"qadmifevent", {NULL}, 2462, "udp"}, |
|
+{"lsi-raid-mgmt", {NULL}, 2463, "tcp"}, |
|
+{"lsi-raid-mgmt", {NULL}, 2463, "udp"}, |
|
+{"direcpc-si", {NULL}, 2464, "tcp"}, |
|
+{"direcpc-si", {NULL}, 2464, "udp"}, |
|
+{"lbm", {NULL}, 2465, "tcp"}, |
|
+{"lbm", {NULL}, 2465, "udp"}, |
|
+{"lbf", {NULL}, 2466, "tcp"}, |
|
+{"lbf", {NULL}, 2466, "udp"}, |
|
+{"high-criteria", {NULL}, 2467, "tcp"}, |
|
+{"high-criteria", {NULL}, 2467, "udp"}, |
|
+{"qip-msgd", {NULL}, 2468, "tcp"}, |
|
+{"qip-msgd", {NULL}, 2468, "udp"}, |
|
+{"mti-tcs-comm", {NULL}, 2469, "tcp"}, |
|
+{"mti-tcs-comm", {NULL}, 2469, "udp"}, |
|
+{"taskman-port", {NULL}, 2470, "tcp"}, |
|
+{"taskman-port", {NULL}, 2470, "udp"}, |
|
+{"seaodbc", {NULL}, 2471, "tcp"}, |
|
+{"seaodbc", {NULL}, 2471, "udp"}, |
|
+{"c3", {NULL}, 2472, "tcp"}, |
|
+{"c3", {NULL}, 2472, "udp"}, |
|
+{"aker-cdp", {NULL}, 2473, "tcp"}, |
|
+{"aker-cdp", {NULL}, 2473, "udp"}, |
|
+{"vitalanalysis", {NULL}, 2474, "tcp"}, |
|
+{"vitalanalysis", {NULL}, 2474, "udp"}, |
|
+{"ace-server", {NULL}, 2475, "tcp"}, |
|
+{"ace-server", {NULL}, 2475, "udp"}, |
|
+{"ace-svr-prop", {NULL}, 2476, "tcp"}, |
|
+{"ace-svr-prop", {NULL}, 2476, "udp"}, |
|
+{"ssm-cvs", {NULL}, 2477, "tcp"}, |
|
+{"ssm-cvs", {NULL}, 2477, "udp"}, |
|
+{"ssm-cssps", {NULL}, 2478, "tcp"}, |
|
+{"ssm-cssps", {NULL}, 2478, "udp"}, |
|
+{"ssm-els", {NULL}, 2479, "tcp"}, |
|
+{"ssm-els", {NULL}, 2479, "udp"}, |
|
+{"powerexchange", {NULL}, 2480, "tcp"}, |
|
+{"powerexchange", {NULL}, 2480, "udp"}, |
|
+{"giop", {NULL}, 2481, "tcp"}, |
|
+{"giop", {NULL}, 2481, "udp"}, |
|
+{"giop-ssl", {NULL}, 2482, "tcp"}, |
|
+{"giop-ssl", {NULL}, 2482, "udp"}, |
|
+{"ttc", {NULL}, 2483, "tcp"}, |
|
+{"ttc", {NULL}, 2483, "udp"}, |
|
+{"ttc-ssl", {NULL}, 2484, "tcp"}, |
|
+{"ttc-ssl", {NULL}, 2484, "udp"}, |
|
+{"netobjects1", {NULL}, 2485, "tcp"}, |
|
+{"netobjects1", {NULL}, 2485, "udp"}, |
|
+{"netobjects2", {NULL}, 2486, "tcp"}, |
|
+{"netobjects2", {NULL}, 2486, "udp"}, |
|
+{"pns", {NULL}, 2487, "tcp"}, |
|
+{"pns", {NULL}, 2487, "udp"}, |
|
+{"moy-corp", {NULL}, 2488, "tcp"}, |
|
+{"moy-corp", {NULL}, 2488, "udp"}, |
|
+{"tsilb", {NULL}, 2489, "tcp"}, |
|
+{"tsilb", {NULL}, 2489, "udp"}, |
|
+{"qip-qdhcp", {NULL}, 2490, "tcp"}, |
|
+{"qip-qdhcp", {NULL}, 2490, "udp"}, |
|
+{"conclave-cpp", {NULL}, 2491, "tcp"}, |
|
+{"conclave-cpp", {NULL}, 2491, "udp"}, |
|
+{"groove", {NULL}, 2492, "tcp"}, |
|
+{"groove", {NULL}, 2492, "udp"}, |
|
+{"talarian-mqs", {NULL}, 2493, "tcp"}, |
|
+{"talarian-mqs", {NULL}, 2493, "udp"}, |
|
+{"bmc-ar", {NULL}, 2494, "tcp"}, |
|
+{"bmc-ar", {NULL}, 2494, "udp"}, |
|
+{"fast-rem-serv", {NULL}, 2495, "tcp"}, |
|
+{"fast-rem-serv", {NULL}, 2495, "udp"}, |
|
+{"dirgis", {NULL}, 2496, "tcp"}, |
|
+{"dirgis", {NULL}, 2496, "udp"}, |
|
+{"quaddb", {NULL}, 2497, "tcp"}, |
|
+{"quaddb", {NULL}, 2497, "udp"}, |
|
+{"odn-castraq", {NULL}, 2498, "tcp"}, |
|
+{"odn-castraq", {NULL}, 2498, "udp"}, |
|
+{"unicontrol", {NULL}, 2499, "tcp"}, |
|
+{"unicontrol", {NULL}, 2499, "udp"}, |
|
+{"rtsserv", {NULL}, 2500, "tcp"}, |
|
+{"rtsserv", {NULL}, 2500, "udp"}, |
|
+{"rtsclient", {NULL}, 2501, "tcp"}, |
|
+{"rtsclient", {NULL}, 2501, "udp"}, |
|
+{"kentrox-prot", {NULL}, 2502, "tcp"}, |
|
+{"kentrox-prot", {NULL}, 2502, "udp"}, |
|
+{"nms-dpnss", {NULL}, 2503, "tcp"}, |
|
+{"nms-dpnss", {NULL}, 2503, "udp"}, |
|
+{"wlbs", {NULL}, 2504, "tcp"}, |
|
+{"wlbs", {NULL}, 2504, "udp"}, |
|
+{"ppcontrol", {NULL}, 2505, "tcp"}, |
|
+{"ppcontrol", {NULL}, 2505, "udp"}, |
|
+{"jbroker", {NULL}, 2506, "tcp"}, |
|
+{"jbroker", {NULL}, 2506, "udp"}, |
|
+{"spock", {NULL}, 2507, "tcp"}, |
|
+{"spock", {NULL}, 2507, "udp"}, |
|
+{"jdatastore", {NULL}, 2508, "tcp"}, |
|
+{"jdatastore", {NULL}, 2508, "udp"}, |
|
+{"fjmpss", {NULL}, 2509, "tcp"}, |
|
+{"fjmpss", {NULL}, 2509, "udp"}, |
|
+{"fjappmgrbulk", {NULL}, 2510, "tcp"}, |
|
+{"fjappmgrbulk", {NULL}, 2510, "udp"}, |
|
+{"metastorm", {NULL}, 2511, "tcp"}, |
|
+{"metastorm", {NULL}, 2511, "udp"}, |
|
+{"citrixima", {NULL}, 2512, "tcp"}, |
|
+{"citrixima", {NULL}, 2512, "udp"}, |
|
+{"citrixadmin", {NULL}, 2513, "tcp"}, |
|
+{"citrixadmin", {NULL}, 2513, "udp"}, |
|
+{"facsys-ntp", {NULL}, 2514, "tcp"}, |
|
+{"facsys-ntp", {NULL}, 2514, "udp"}, |
|
+{"facsys-router", {NULL}, 2515, "tcp"}, |
|
+{"facsys-router", {NULL}, 2515, "udp"}, |
|
+{"maincontrol", {NULL}, 2516, "tcp"}, |
|
+{"maincontrol", {NULL}, 2516, "udp"}, |
|
+{"call-sig-trans", {NULL}, 2517, "tcp"}, |
|
+{"call-sig-trans", {NULL}, 2517, "udp"}, |
|
+{"willy", {NULL}, 2518, "tcp"}, |
|
+{"willy", {NULL}, 2518, "udp"}, |
|
+{"globmsgsvc", {NULL}, 2519, "tcp"}, |
|
+{"globmsgsvc", {NULL}, 2519, "udp"}, |
|
+{"pvsw", {NULL}, 2520, "tcp"}, |
|
+{"pvsw", {NULL}, 2520, "udp"}, |
|
+{"adaptecmgr", {NULL}, 2521, "tcp"}, |
|
+{"adaptecmgr", {NULL}, 2521, "udp"}, |
|
+{"windb", {NULL}, 2522, "tcp"}, |
|
+{"windb", {NULL}, 2522, "udp"}, |
|
+{"qke-llc-v3", {NULL}, 2523, "tcp"}, |
|
+{"qke-llc-v3", {NULL}, 2523, "udp"}, |
|
+{"optiwave-lm", {NULL}, 2524, "tcp"}, |
|
+{"optiwave-lm", {NULL}, 2524, "udp"}, |
|
+{"ms-v-worlds", {NULL}, 2525, "tcp"}, |
|
+{"ms-v-worlds", {NULL}, 2525, "udp"}, |
|
+{"ema-sent-lm", {NULL}, 2526, "tcp"}, |
|
+{"ema-sent-lm", {NULL}, 2526, "udp"}, |
|
+{"iqserver", {NULL}, 2527, "tcp"}, |
|
+{"iqserver", {NULL}, 2527, "udp"}, |
|
+{"ncr_ccl", {NULL}, 2528, "tcp"}, |
|
+{"ncr_ccl", {NULL}, 2528, "udp"}, |
|
+{"utsftp", {NULL}, 2529, "tcp"}, |
|
+{"utsftp", {NULL}, 2529, "udp"}, |
|
+{"vrcommerce", {NULL}, 2530, "tcp"}, |
|
+{"vrcommerce", {NULL}, 2530, "udp"}, |
|
+{"ito-e-gui", {NULL}, 2531, "tcp"}, |
|
+{"ito-e-gui", {NULL}, 2531, "udp"}, |
|
+{"ovtopmd", {NULL}, 2532, "tcp"}, |
|
+{"ovtopmd", {NULL}, 2532, "udp"}, |
|
+{"snifferserver", {NULL}, 2533, "tcp"}, |
|
+{"snifferserver", {NULL}, 2533, "udp"}, |
|
+{"combox-web-acc", {NULL}, 2534, "tcp"}, |
|
+{"combox-web-acc", {NULL}, 2534, "udp"}, |
|
+{"madcap", {NULL}, 2535, "tcp"}, |
|
+{"madcap", {NULL}, 2535, "udp"}, |
|
+{"btpp2audctr1", {NULL}, 2536, "tcp"}, |
|
+{"btpp2audctr1", {NULL}, 2536, "udp"}, |
|
+{"upgrade", {NULL}, 2537, "tcp"}, |
|
+{"upgrade", {NULL}, 2537, "udp"}, |
|
+{"vnwk-prapi", {NULL}, 2538, "tcp"}, |
|
+{"vnwk-prapi", {NULL}, 2538, "udp"}, |
|
+{"vsiadmin", {NULL}, 2539, "tcp"}, |
|
+{"vsiadmin", {NULL}, 2539, "udp"}, |
|
+{"lonworks", {NULL}, 2540, "tcp"}, |
|
+{"lonworks", {NULL}, 2540, "udp"}, |
|
+{"lonworks2", {NULL}, 2541, "tcp"}, |
|
+{"lonworks2", {NULL}, 2541, "udp"}, |
|
+{"udrawgraph", {NULL}, 2542, "tcp"}, |
|
+{"udrawgraph", {NULL}, 2542, "udp"}, |
|
+{"reftek", {NULL}, 2543, "tcp"}, |
|
+{"reftek", {NULL}, 2543, "udp"}, |
|
+{"novell-zen", {NULL}, 2544, "tcp"}, |
|
+{"novell-zen", {NULL}, 2544, "udp"}, |
|
+{"sis-emt", {NULL}, 2545, "tcp"}, |
|
+{"sis-emt", {NULL}, 2545, "udp"}, |
|
+{"vytalvaultbrtp", {NULL}, 2546, "tcp"}, |
|
+{"vytalvaultbrtp", {NULL}, 2546, "udp"}, |
|
+{"vytalvaultvsmp", {NULL}, 2547, "tcp"}, |
|
+{"vytalvaultvsmp", {NULL}, 2547, "udp"}, |
|
+{"vytalvaultpipe", {NULL}, 2548, "tcp"}, |
|
+{"vytalvaultpipe", {NULL}, 2548, "udp"}, |
|
+{"ipass", {NULL}, 2549, "tcp"}, |
|
+{"ipass", {NULL}, 2549, "udp"}, |
|
+{"ads", {NULL}, 2550, "tcp"}, |
|
+{"ads", {NULL}, 2550, "udp"}, |
|
+{"isg-uda-server", {NULL}, 2551, "tcp"}, |
|
+{"isg-uda-server", {NULL}, 2551, "udp"}, |
|
+{"call-logging", {NULL}, 2552, "tcp"}, |
|
+{"call-logging", {NULL}, 2552, "udp"}, |
|
+{"efidiningport", {NULL}, 2553, "tcp"}, |
|
+{"efidiningport", {NULL}, 2553, "udp"}, |
|
+{"vcnet-link-v10", {NULL}, 2554, "tcp"}, |
|
+{"vcnet-link-v10", {NULL}, 2554, "udp"}, |
|
+{"compaq-wcp", {NULL}, 2555, "tcp"}, |
|
+{"compaq-wcp", {NULL}, 2555, "udp"}, |
|
+{"nicetec-nmsvc", {NULL}, 2556, "tcp"}, |
|
+{"nicetec-nmsvc", {NULL}, 2556, "udp"}, |
|
+{"nicetec-mgmt", {NULL}, 2557, "tcp"}, |
|
+{"nicetec-mgmt", {NULL}, 2557, "udp"}, |
|
+{"pclemultimedia", {NULL}, 2558, "tcp"}, |
|
+{"pclemultimedia", {NULL}, 2558, "udp"}, |
|
+{"lstp", {NULL}, 2559, "tcp"}, |
|
+{"lstp", {NULL}, 2559, "udp"}, |
|
+{"labrat", {NULL}, 2560, "tcp"}, |
|
+{"labrat", {NULL}, 2560, "udp"}, |
|
+{"mosaixcc", {NULL}, 2561, "tcp"}, |
|
+{"mosaixcc", {NULL}, 2561, "udp"}, |
|
+{"delibo", {NULL}, 2562, "tcp"}, |
|
+{"delibo", {NULL}, 2562, "udp"}, |
|
+{"cti-redwood", {NULL}, 2563, "tcp"}, |
|
+{"cti-redwood", {NULL}, 2563, "udp"}, |
|
+{"hp-3000-telnet", {NULL}, 2564, "tcp"}, |
|
+{"coord-svr", {NULL}, 2565, "tcp"}, |
|
+{"coord-svr", {NULL}, 2565, "udp"}, |
|
+{"pcs-pcw", {NULL}, 2566, "tcp"}, |
|
+{"pcs-pcw", {NULL}, 2566, "udp"}, |
|
+{"clp", {NULL}, 2567, "tcp"}, |
|
+{"clp", {NULL}, 2567, "udp"}, |
|
+{"spamtrap", {NULL}, 2568, "tcp"}, |
|
+{"spamtrap", {NULL}, 2568, "udp"}, |
|
+{"sonuscallsig", {NULL}, 2569, "tcp"}, |
|
+{"sonuscallsig", {NULL}, 2569, "udp"}, |
|
+{"hs-port", {NULL}, 2570, "tcp"}, |
|
+{"hs-port", {NULL}, 2570, "udp"}, |
|
+{"cecsvc", {NULL}, 2571, "tcp"}, |
|
+{"cecsvc", {NULL}, 2571, "udp"}, |
|
+{"ibp", {NULL}, 2572, "tcp"}, |
|
+{"ibp", {NULL}, 2572, "udp"}, |
|
+{"trustestablish", {NULL}, 2573, "tcp"}, |
|
+{"trustestablish", {NULL}, 2573, "udp"}, |
|
+{"blockade-bpsp", {NULL}, 2574, "tcp"}, |
|
+{"blockade-bpsp", {NULL}, 2574, "udp"}, |
|
+{"hl7", {NULL}, 2575, "tcp"}, |
|
+{"hl7", {NULL}, 2575, "udp"}, |
|
+{"tclprodebugger", {NULL}, 2576, "tcp"}, |
|
+{"tclprodebugger", {NULL}, 2576, "udp"}, |
|
+{"scipticslsrvr", {NULL}, 2577, "tcp"}, |
|
+{"scipticslsrvr", {NULL}, 2577, "udp"}, |
|
+{"rvs-isdn-dcp", {NULL}, 2578, "tcp"}, |
|
+{"rvs-isdn-dcp", {NULL}, 2578, "udp"}, |
|
+{"mpfoncl", {NULL}, 2579, "tcp"}, |
|
+{"mpfoncl", {NULL}, 2579, "udp"}, |
|
+{"tributary", {NULL}, 2580, "tcp"}, |
|
+{"tributary", {NULL}, 2580, "udp"}, |
|
+{"argis-te", {NULL}, 2581, "tcp"}, |
|
+{"argis-te", {NULL}, 2581, "udp"}, |
|
+{"argis-ds", {NULL}, 2582, "tcp"}, |
|
+{"argis-ds", {NULL}, 2582, "udp"}, |
|
+{"mon", {NULL}, 2583, "tcp"}, |
|
+{"mon", {NULL}, 2583, "udp"}, |
|
+{"cyaserv", {NULL}, 2584, "tcp"}, |
|
+{"cyaserv", {NULL}, 2584, "udp"}, |
|
+{"netx-server", {NULL}, 2585, "tcp"}, |
|
+{"netx-server", {NULL}, 2585, "udp"}, |
|
+{"netx-agent", {NULL}, 2586, "tcp"}, |
|
+{"netx-agent", {NULL}, 2586, "udp"}, |
|
+{"masc", {NULL}, 2587, "tcp"}, |
|
+{"masc", {NULL}, 2587, "udp"}, |
|
+{"privilege", {NULL}, 2588, "tcp"}, |
|
+{"privilege", {NULL}, 2588, "udp"}, |
|
+{"quartus-tcl", {NULL}, 2589, "tcp"}, |
|
+{"quartus-tcl", {NULL}, 2589, "udp"}, |
|
+{"idotdist", {NULL}, 2590, "tcp"}, |
|
+{"idotdist", {NULL}, 2590, "udp"}, |
|
+{"maytagshuffle", {NULL}, 2591, "tcp"}, |
|
+{"maytagshuffle", {NULL}, 2591, "udp"}, |
|
+{"netrek", {NULL}, 2592, "tcp"}, |
|
+{"netrek", {NULL}, 2592, "udp"}, |
|
+{"mns-mail", {NULL}, 2593, "tcp"}, |
|
+{"mns-mail", {NULL}, 2593, "udp"}, |
|
+{"dts", {NULL}, 2594, "tcp"}, |
|
+{"dts", {NULL}, 2594, "udp"}, |
|
+{"worldfusion1", {NULL}, 2595, "tcp"}, |
|
+{"worldfusion1", {NULL}, 2595, "udp"}, |
|
+{"worldfusion2", {NULL}, 2596, "tcp"}, |
|
+{"worldfusion2", {NULL}, 2596, "udp"}, |
|
+{"homesteadglory", {NULL}, 2597, "tcp"}, |
|
+{"homesteadglory", {NULL}, 2597, "udp"}, |
|
+{"citriximaclient", {NULL}, 2598, "tcp"}, |
|
+{"citriximaclient", {NULL}, 2598, "udp"}, |
|
+{"snapd", {NULL}, 2599, "tcp"}, |
|
+{"snapd", {NULL}, 2599, "udp"}, |
|
+{"hpstgmgr", {NULL}, 2600, "tcp"}, |
|
+{"hpstgmgr", {NULL}, 2600, "udp"}, |
|
+{"discp-client", {NULL}, 2601, "tcp"}, |
|
+{"discp-client", {NULL}, 2601, "udp"}, |
|
+{"discp-server", {NULL}, 2602, "tcp"}, |
|
+{"discp-server", {NULL}, 2602, "udp"}, |
|
+{"servicemeter", {NULL}, 2603, "tcp"}, |
|
+{"servicemeter", {NULL}, 2603, "udp"}, |
|
+{"nsc-ccs", {NULL}, 2604, "tcp"}, |
|
+{"nsc-ccs", {NULL}, 2604, "udp"}, |
|
+{"nsc-posa", {NULL}, 2605, "tcp"}, |
|
+{"nsc-posa", {NULL}, 2605, "udp"}, |
|
+{"netmon", {NULL}, 2606, "tcp"}, |
|
+{"netmon", {NULL}, 2606, "udp"}, |
|
+{"connection", {NULL}, 2607, "tcp"}, |
|
+{"connection", {NULL}, 2607, "udp"}, |
|
+{"wag-service", {NULL}, 2608, "tcp"}, |
|
+{"wag-service", {NULL}, 2608, "udp"}, |
|
+{"system-monitor", {NULL}, 2609, "tcp"}, |
|
+{"system-monitor", {NULL}, 2609, "udp"}, |
|
+{"versa-tek", {NULL}, 2610, "tcp"}, |
|
+{"versa-tek", {NULL}, 2610, "udp"}, |
|
+{"lionhead", {NULL}, 2611, "tcp"}, |
|
+{"lionhead", {NULL}, 2611, "udp"}, |
|
+{"qpasa-agent", {NULL}, 2612, "tcp"}, |
|
+{"qpasa-agent", {NULL}, 2612, "udp"}, |
|
+{"smntubootstrap", {NULL}, 2613, "tcp"}, |
|
+{"smntubootstrap", {NULL}, 2613, "udp"}, |
|
+{"neveroffline", {NULL}, 2614, "tcp"}, |
|
+{"neveroffline", {NULL}, 2614, "udp"}, |
|
+{"firepower", {NULL}, 2615, "tcp"}, |
|
+{"firepower", {NULL}, 2615, "udp"}, |
|
+{"appswitch-emp", {NULL}, 2616, "tcp"}, |
|
+{"appswitch-emp", {NULL}, 2616, "udp"}, |
|
+{"cmadmin", {NULL}, 2617, "tcp"}, |
|
+{"cmadmin", {NULL}, 2617, "udp"}, |
|
+{"priority-e-com", {NULL}, 2618, "tcp"}, |
|
+{"priority-e-com", {NULL}, 2618, "udp"}, |
|
+{"bruce", {NULL}, 2619, "tcp"}, |
|
+{"bruce", {NULL}, 2619, "udp"}, |
|
+{"lpsrecommender", {NULL}, 2620, "tcp"}, |
|
+{"lpsrecommender", {NULL}, 2620, "udp"}, |
|
+{"miles-apart", {NULL}, 2621, "tcp"}, |
|
+{"miles-apart", {NULL}, 2621, "udp"}, |
|
+{"metricadbc", {NULL}, 2622, "tcp"}, |
|
+{"metricadbc", {NULL}, 2622, "udp"}, |
|
+{"lmdp", {NULL}, 2623, "tcp"}, |
|
+{"lmdp", {NULL}, 2623, "udp"}, |
|
+{"aria", {NULL}, 2624, "tcp"}, |
|
+{"aria", {NULL}, 2624, "udp"}, |
|
+{"blwnkl-port", {NULL}, 2625, "tcp"}, |
|
+{"blwnkl-port", {NULL}, 2625, "udp"}, |
|
+{"gbjd816", {NULL}, 2626, "tcp"}, |
|
+{"gbjd816", {NULL}, 2626, "udp"}, |
|
+{"moshebeeri", {NULL}, 2627, "tcp"}, |
|
+{"moshebeeri", {NULL}, 2627, "udp"}, |
|
+{"dict", {NULL}, 2628, "tcp"}, |
|
+{"dict", {NULL}, 2628, "udp"}, |
|
+{"sitaraserver", {NULL}, 2629, "tcp"}, |
|
+{"sitaraserver", {NULL}, 2629, "udp"}, |
|
+{"sitaramgmt", {NULL}, 2630, "tcp"}, |
|
+{"sitaramgmt", {NULL}, 2630, "udp"}, |
|
+{"sitaradir", {NULL}, 2631, "tcp"}, |
|
+{"sitaradir", {NULL}, 2631, "udp"}, |
|
+{"irdg-post", {NULL}, 2632, "tcp"}, |
|
+{"irdg-post", {NULL}, 2632, "udp"}, |
|
+{"interintelli", {NULL}, 2633, "tcp"}, |
|
+{"interintelli", {NULL}, 2633, "udp"}, |
|
+{"pk-electronics", {NULL}, 2634, "tcp"}, |
|
+{"pk-electronics", {NULL}, 2634, "udp"}, |
|
+{"backburner", {NULL}, 2635, "tcp"}, |
|
+{"backburner", {NULL}, 2635, "udp"}, |
|
+{"solve", {NULL}, 2636, "tcp"}, |
|
+{"solve", {NULL}, 2636, "udp"}, |
|
+{"imdocsvc", {NULL}, 2637, "tcp"}, |
|
+{"imdocsvc", {NULL}, 2637, "udp"}, |
|
+{"sybaseanywhere", {NULL}, 2638, "tcp"}, |
|
+{"sybaseanywhere", {NULL}, 2638, "udp"}, |
|
+{"aminet", {NULL}, 2639, "tcp"}, |
|
+{"aminet", {NULL}, 2639, "udp"}, |
|
+{"sai_sentlm", {NULL}, 2640, "tcp"}, |
|
+{"sai_sentlm", {NULL}, 2640, "udp"}, |
|
+{"hdl-srv", {NULL}, 2641, "tcp"}, |
|
+{"hdl-srv", {NULL}, 2641, "udp"}, |
|
+{"tragic", {NULL}, 2642, "tcp"}, |
|
+{"tragic", {NULL}, 2642, "udp"}, |
|
+{"gte-samp", {NULL}, 2643, "tcp"}, |
|
+{"gte-samp", {NULL}, 2643, "udp"}, |
|
+{"travsoft-ipx-t", {NULL}, 2644, "tcp"}, |
|
+{"travsoft-ipx-t", {NULL}, 2644, "udp"}, |
|
+{"novell-ipx-cmd", {NULL}, 2645, "tcp"}, |
|
+{"novell-ipx-cmd", {NULL}, 2645, "udp"}, |
|
+{"and-lm", {NULL}, 2646, "tcp"}, |
|
+{"and-lm", {NULL}, 2646, "udp"}, |
|
+{"syncserver", {NULL}, 2647, "tcp"}, |
|
+{"syncserver", {NULL}, 2647, "udp"}, |
|
+{"upsnotifyprot", {NULL}, 2648, "tcp"}, |
|
+{"upsnotifyprot", {NULL}, 2648, "udp"}, |
|
+{"vpsipport", {NULL}, 2649, "tcp"}, |
|
+{"vpsipport", {NULL}, 2649, "udp"}, |
|
+{"eristwoguns", {NULL}, 2650, "tcp"}, |
|
+{"eristwoguns", {NULL}, 2650, "udp"}, |
|
+{"ebinsite", {NULL}, 2651, "tcp"}, |
|
+{"ebinsite", {NULL}, 2651, "udp"}, |
|
+{"interpathpanel", {NULL}, 2652, "tcp"}, |
|
+{"interpathpanel", {NULL}, 2652, "udp"}, |
|
+{"sonus", {NULL}, 2653, "tcp"}, |
|
+{"sonus", {NULL}, 2653, "udp"}, |
|
+{"corel_vncadmin", {NULL}, 2654, "tcp"}, |
|
+{"corel_vncadmin", {NULL}, 2654, "udp"}, |
|
+{"unglue", {NULL}, 2655, "tcp"}, |
|
+{"unglue", {NULL}, 2655, "udp"}, |
|
+{"kana", {NULL}, 2656, "tcp"}, |
|
+{"kana", {NULL}, 2656, "udp"}, |
|
+{"sns-dispatcher", {NULL}, 2657, "tcp"}, |
|
+{"sns-dispatcher", {NULL}, 2657, "udp"}, |
|
+{"sns-admin", {NULL}, 2658, "tcp"}, |
|
+{"sns-admin", {NULL}, 2658, "udp"}, |
|
+{"sns-query", {NULL}, 2659, "tcp"}, |
|
+{"sns-query", {NULL}, 2659, "udp"}, |
|
+{"gcmonitor", {NULL}, 2660, "tcp"}, |
|
+{"gcmonitor", {NULL}, 2660, "udp"}, |
|
+{"olhost", {NULL}, 2661, "tcp"}, |
|
+{"olhost", {NULL}, 2661, "udp"}, |
|
+{"bintec-capi", {NULL}, 2662, "tcp"}, |
|
+{"bintec-capi", {NULL}, 2662, "udp"}, |
|
+{"bintec-tapi", {NULL}, 2663, "tcp"}, |
|
+{"bintec-tapi", {NULL}, 2663, "udp"}, |
|
+{"patrol-mq-gm", {NULL}, 2664, "tcp"}, |
|
+{"patrol-mq-gm", {NULL}, 2664, "udp"}, |
|
+{"patrol-mq-nm", {NULL}, 2665, "tcp"}, |
|
+{"patrol-mq-nm", {NULL}, 2665, "udp"}, |
|
+{"extensis", {NULL}, 2666, "tcp"}, |
|
+{"extensis", {NULL}, 2666, "udp"}, |
|
+{"alarm-clock-s", {NULL}, 2667, "tcp"}, |
|
+{"alarm-clock-s", {NULL}, 2667, "udp"}, |
|
+{"alarm-clock-c", {NULL}, 2668, "tcp"}, |
|
+{"alarm-clock-c", {NULL}, 2668, "udp"}, |
|
+{"toad", {NULL}, 2669, "tcp"}, |
|
+{"toad", {NULL}, 2669, "udp"}, |
|
+{"tve-announce", {NULL}, 2670, "tcp"}, |
|
+{"tve-announce", {NULL}, 2670, "udp"}, |
|
+{"newlixreg", {NULL}, 2671, "tcp"}, |
|
+{"newlixreg", {NULL}, 2671, "udp"}, |
|
+{"nhserver", {NULL}, 2672, "tcp"}, |
|
+{"nhserver", {NULL}, 2672, "udp"}, |
|
+{"firstcall42", {NULL}, 2673, "tcp"}, |
|
+{"firstcall42", {NULL}, 2673, "udp"}, |
|
+{"ewnn", {NULL}, 2674, "tcp"}, |
|
+{"ewnn", {NULL}, 2674, "udp"}, |
|
+{"ttc-etap", {NULL}, 2675, "tcp"}, |
|
+{"ttc-etap", {NULL}, 2675, "udp"}, |
|
+{"simslink", {NULL}, 2676, "tcp"}, |
|
+{"simslink", {NULL}, 2676, "udp"}, |
|
+{"gadgetgate1way", {NULL}, 2677, "tcp"}, |
|
+{"gadgetgate1way", {NULL}, 2677, "udp"}, |
|
+{"gadgetgate2way", {NULL}, 2678, "tcp"}, |
|
+{"gadgetgate2way", {NULL}, 2678, "udp"}, |
|
+{"syncserverssl", {NULL}, 2679, "tcp"}, |
|
+{"syncserverssl", {NULL}, 2679, "udp"}, |
|
+{"pxc-sapxom", {NULL}, 2680, "tcp"}, |
|
+{"pxc-sapxom", {NULL}, 2680, "udp"}, |
|
+{"mpnjsomb", {NULL}, 2681, "tcp"}, |
|
+{"mpnjsomb", {NULL}, 2681, "udp"}, |
|
+{"ncdloadbalance", {NULL}, 2683, "tcp"}, |
|
+{"ncdloadbalance", {NULL}, 2683, "udp"}, |
|
+{"mpnjsosv", {NULL}, 2684, "tcp"}, |
|
+{"mpnjsosv", {NULL}, 2684, "udp"}, |
|
+{"mpnjsocl", {NULL}, 2685, "tcp"}, |
|
+{"mpnjsocl", {NULL}, 2685, "udp"}, |
|
+{"mpnjsomg", {NULL}, 2686, "tcp"}, |
|
+{"mpnjsomg", {NULL}, 2686, "udp"}, |
|
+{"pq-lic-mgmt", {NULL}, 2687, "tcp"}, |
|
+{"pq-lic-mgmt", {NULL}, 2687, "udp"}, |
|
+{"md-cg-http", {NULL}, 2688, "tcp"}, |
|
+{"md-cg-http", {NULL}, 2688, "udp"}, |
|
+{"fastlynx", {NULL}, 2689, "tcp"}, |
|
+{"fastlynx", {NULL}, 2689, "udp"}, |
|
+{"hp-nnm-data", {NULL}, 2690, "tcp"}, |
|
+{"hp-nnm-data", {NULL}, 2690, "udp"}, |
|
+{"itinternet", {NULL}, 2691, "tcp"}, |
|
+{"itinternet", {NULL}, 2691, "udp"}, |
|
+{"admins-lms", {NULL}, 2692, "tcp"}, |
|
+{"admins-lms", {NULL}, 2692, "udp"}, |
|
+{"pwrsevent", {NULL}, 2694, "tcp"}, |
|
+{"pwrsevent", {NULL}, 2694, "udp"}, |
|
+{"vspread", {NULL}, 2695, "tcp"}, |
|
+{"vspread", {NULL}, 2695, "udp"}, |
|
+{"unifyadmin", {NULL}, 2696, "tcp"}, |
|
+{"unifyadmin", {NULL}, 2696, "udp"}, |
|
+{"oce-snmp-trap", {NULL}, 2697, "tcp"}, |
|
+{"oce-snmp-trap", {NULL}, 2697, "udp"}, |
|
+{"mck-ivpip", {NULL}, 2698, "tcp"}, |
|
+{"mck-ivpip", {NULL}, 2698, "udp"}, |
|
+{"csoft-plusclnt", {NULL}, 2699, "tcp"}, |
|
+{"csoft-plusclnt", {NULL}, 2699, "udp"}, |
|
+{"tqdata", {NULL}, 2700, "tcp"}, |
|
+{"tqdata", {NULL}, 2700, "udp"}, |
|
+{"sms-rcinfo", {NULL}, 2701, "tcp"}, |
|
+{"sms-rcinfo", {NULL}, 2701, "udp"}, |
|
+{"sms-xfer", {NULL}, 2702, "tcp"}, |
|
+{"sms-xfer", {NULL}, 2702, "udp"}, |
|
+{"sms-chat", {NULL}, 2703, "tcp"}, |
|
+{"sms-chat", {NULL}, 2703, "udp"}, |
|
+{"sms-remctrl", {NULL}, 2704, "tcp"}, |
|
+{"sms-remctrl", {NULL}, 2704, "udp"}, |
|
+{"sds-admin", {NULL}, 2705, "tcp"}, |
|
+{"sds-admin", {NULL}, 2705, "udp"}, |
|
+{"ncdmirroring", {NULL}, 2706, "tcp"}, |
|
+{"ncdmirroring", {NULL}, 2706, "udp"}, |
|
+{"emcsymapiport", {NULL}, 2707, "tcp"}, |
|
+{"emcsymapiport", {NULL}, 2707, "udp"}, |
|
+{"banyan-net", {NULL}, 2708, "tcp"}, |
|
+{"banyan-net", {NULL}, 2708, "udp"}, |
|
+{"supermon", {NULL}, 2709, "tcp"}, |
|
+{"supermon", {NULL}, 2709, "udp"}, |
|
+{"sso-service", {NULL}, 2710, "tcp"}, |
|
+{"sso-service", {NULL}, 2710, "udp"}, |
|
+{"sso-control", {NULL}, 2711, "tcp"}, |
|
+{"sso-control", {NULL}, 2711, "udp"}, |
|
+{"aocp", {NULL}, 2712, "tcp"}, |
|
+{"aocp", {NULL}, 2712, "udp"}, |
|
+{"raventbs", {NULL}, 2713, "tcp"}, |
|
+{"raventbs", {NULL}, 2713, "udp"}, |
|
+{"raventdm", {NULL}, 2714, "tcp"}, |
|
+{"raventdm", {NULL}, 2714, "udp"}, |
|
+{"hpstgmgr2", {NULL}, 2715, "tcp"}, |
|
+{"hpstgmgr2", {NULL}, 2715, "udp"}, |
|
+{"inova-ip-disco", {NULL}, 2716, "tcp"}, |
|
+{"inova-ip-disco", {NULL}, 2716, "udp"}, |
|
+{"pn-requester", {NULL}, 2717, "tcp"}, |
|
+{"pn-requester", {NULL}, 2717, "udp"}, |
|
+{"pn-requester2", {NULL}, 2718, "tcp"}, |
|
+{"pn-requester2", {NULL}, 2718, "udp"}, |
|
+{"scan-change", {NULL}, 2719, "tcp"}, |
|
+{"scan-change", {NULL}, 2719, "udp"}, |
|
+{"wkars", {NULL}, 2720, "tcp"}, |
|
+{"wkars", {NULL}, 2720, "udp"}, |
|
+{"smart-diagnose", {NULL}, 2721, "tcp"}, |
|
+{"smart-diagnose", {NULL}, 2721, "udp"}, |
|
+{"proactivesrvr", {NULL}, 2722, "tcp"}, |
|
+{"proactivesrvr", {NULL}, 2722, "udp"}, |
|
+{"watchdog-nt", {NULL}, 2723, "tcp"}, |
|
+{"watchdog-nt", {NULL}, 2723, "udp"}, |
|
+{"qotps", {NULL}, 2724, "tcp"}, |
|
+{"qotps", {NULL}, 2724, "udp"}, |
|
+{"msolap-ptp2", {NULL}, 2725, "tcp"}, |
|
+{"msolap-ptp2", {NULL}, 2725, "udp"}, |
|
+{"tams", {NULL}, 2726, "tcp"}, |
|
+{"tams", {NULL}, 2726, "udp"}, |
|
+{"mgcp-callagent", {NULL}, 2727, "tcp"}, |
|
+{"mgcp-callagent", {NULL}, 2727, "udp"}, |
|
+{"sqdr", {NULL}, 2728, "tcp"}, |
|
+{"sqdr", {NULL}, 2728, "udp"}, |
|
+{"tcim-control", {NULL}, 2729, "tcp"}, |
|
+{"tcim-control", {NULL}, 2729, "udp"}, |
|
+{"nec-raidplus", {NULL}, 2730, "tcp"}, |
|
+{"nec-raidplus", {NULL}, 2730, "udp"}, |
|
+{"fyre-messanger", {NULL}, 2731, "tcp"}, |
|
+{"fyre-messanger", {NULL}, 2731, "udp"}, |
|
+{"g5m", {NULL}, 2732, "tcp"}, |
|
+{"g5m", {NULL}, 2732, "udp"}, |
|
+{"signet-ctf", {NULL}, 2733, "tcp"}, |
|
+{"signet-ctf", {NULL}, 2733, "udp"}, |
|
+{"ccs-software", {NULL}, 2734, "tcp"}, |
|
+{"ccs-software", {NULL}, 2734, "udp"}, |
|
+{"netiq-mc", {NULL}, 2735, "tcp"}, |
|
+{"netiq-mc", {NULL}, 2735, "udp"}, |
|
+{"radwiz-nms-srv", {NULL}, 2736, "tcp"}, |
|
+{"radwiz-nms-srv", {NULL}, 2736, "udp"}, |
|
+{"srp-feedback", {NULL}, 2737, "tcp"}, |
|
+{"srp-feedback", {NULL}, 2737, "udp"}, |
|
+{"ndl-tcp-ois-gw", {NULL}, 2738, "tcp"}, |
|
+{"ndl-tcp-ois-gw", {NULL}, 2738, "udp"}, |
|
+{"tn-timing", {NULL}, 2739, "tcp"}, |
|
+{"tn-timing", {NULL}, 2739, "udp"}, |
|
+{"alarm", {NULL}, 2740, "tcp"}, |
|
+{"alarm", {NULL}, 2740, "udp"}, |
|
+{"tsb", {NULL}, 2741, "tcp"}, |
|
+{"tsb", {NULL}, 2741, "udp"}, |
|
+{"tsb2", {NULL}, 2742, "tcp"}, |
|
+{"tsb2", {NULL}, 2742, "udp"}, |
|
+{"murx", {NULL}, 2743, "tcp"}, |
|
+{"murx", {NULL}, 2743, "udp"}, |
|
+{"honyaku", {NULL}, 2744, "tcp"}, |
|
+{"honyaku", {NULL}, 2744, "udp"}, |
|
+{"urbisnet", {NULL}, 2745, "tcp"}, |
|
+{"urbisnet", {NULL}, 2745, "udp"}, |
|
+{"cpudpencap", {NULL}, 2746, "tcp"}, |
|
+{"cpudpencap", {NULL}, 2746, "udp"}, |
|
+{"fjippol-swrly", {NULL}, 2747, "tcp"}, |
|
+{"fjippol-swrly", {NULL}, 2747, "udp"}, |
|
+{"fjippol-polsvr", {NULL}, 2748, "tcp"}, |
|
+{"fjippol-polsvr", {NULL}, 2748, "udp"}, |
|
+{"fjippol-cnsl", {NULL}, 2749, "tcp"}, |
|
+{"fjippol-cnsl", {NULL}, 2749, "udp"}, |
|
+{"fjippol-port1", {NULL}, 2750, "tcp"}, |
|
+{"fjippol-port1", {NULL}, 2750, "udp"}, |
|
+{"fjippol-port2", {NULL}, 2751, "tcp"}, |
|
+{"fjippol-port2", {NULL}, 2751, "udp"}, |
|
+{"rsisysaccess", {NULL}, 2752, "tcp"}, |
|
+{"rsisysaccess", {NULL}, 2752, "udp"}, |
|
+{"de-spot", {NULL}, 2753, "tcp"}, |
|
+{"de-spot", {NULL}, 2753, "udp"}, |
|
+{"apollo-cc", {NULL}, 2754, "tcp"}, |
|
+{"apollo-cc", {NULL}, 2754, "udp"}, |
|
+{"expresspay", {NULL}, 2755, "tcp"}, |
|
+{"expresspay", {NULL}, 2755, "udp"}, |
|
+{"simplement-tie", {NULL}, 2756, "tcp"}, |
|
+{"simplement-tie", {NULL}, 2756, "udp"}, |
|
+{"cnrp", {NULL}, 2757, "tcp"}, |
|
+{"cnrp", {NULL}, 2757, "udp"}, |
|
+{"apollo-status", {NULL}, 2758, "tcp"}, |
|
+{"apollo-status", {NULL}, 2758, "udp"}, |
|
+{"apollo-gms", {NULL}, 2759, "tcp"}, |
|
+{"apollo-gms", {NULL}, 2759, "udp"}, |
|
+{"sabams", {NULL}, 2760, "tcp"}, |
|
+{"sabams", {NULL}, 2760, "udp"}, |
|
+{"dicom-iscl", {NULL}, 2761, "tcp"}, |
|
+{"dicom-iscl", {NULL}, 2761, "udp"}, |
|
+{"dicom-tls", {NULL}, 2762, "tcp"}, |
|
+{"dicom-tls", {NULL}, 2762, "udp"}, |
|
+{"desktop-dna", {NULL}, 2763, "tcp"}, |
|
+{"desktop-dna", {NULL}, 2763, "udp"}, |
|
+{"data-insurance", {NULL}, 2764, "tcp"}, |
|
+{"data-insurance", {NULL}, 2764, "udp"}, |
|
+{"qip-audup", {NULL}, 2765, "tcp"}, |
|
+{"qip-audup", {NULL}, 2765, "udp"}, |
|
+{"compaq-scp", {NULL}, 2766, "tcp"}, |
|
+{"compaq-scp", {NULL}, 2766, "udp"}, |
|
+{"uadtc", {NULL}, 2767, "tcp"}, |
|
+{"uadtc", {NULL}, 2767, "udp"}, |
|
+{"uacs", {NULL}, 2768, "tcp"}, |
|
+{"uacs", {NULL}, 2768, "udp"}, |
|
+{"exce", {NULL}, 2769, "tcp"}, |
|
+{"exce", {NULL}, 2769, "udp"}, |
|
+{"veronica", {NULL}, 2770, "tcp"}, |
|
+{"veronica", {NULL}, 2770, "udp"}, |
|
+{"vergencecm", {NULL}, 2771, "tcp"}, |
|
+{"vergencecm", {NULL}, 2771, "udp"}, |
|
+{"auris", {NULL}, 2772, "tcp"}, |
|
+{"auris", {NULL}, 2772, "udp"}, |
|
+{"rbakcup1", {NULL}, 2773, "tcp"}, |
|
+{"rbakcup1", {NULL}, 2773, "udp"}, |
|
+{"rbakcup2", {NULL}, 2774, "tcp"}, |
|
+{"rbakcup2", {NULL}, 2774, "udp"}, |
|
+{"smpp", {NULL}, 2775, "tcp"}, |
|
+{"smpp", {NULL}, 2775, "udp"}, |
|
+{"ridgeway1", {NULL}, 2776, "tcp"}, |
|
+{"ridgeway1", {NULL}, 2776, "udp"}, |
|
+{"ridgeway2", {NULL}, 2777, "tcp"}, |
|
+{"ridgeway2", {NULL}, 2777, "udp"}, |
|
+{"gwen-sonya", {NULL}, 2778, "tcp"}, |
|
+{"gwen-sonya", {NULL}, 2778, "udp"}, |
|
+{"lbc-sync", {NULL}, 2779, "tcp"}, |
|
+{"lbc-sync", {NULL}, 2779, "udp"}, |
|
+{"lbc-control", {NULL}, 2780, "tcp"}, |
|
+{"lbc-control", {NULL}, 2780, "udp"}, |
|
+{"whosells", {NULL}, 2781, "tcp"}, |
|
+{"whosells", {NULL}, 2781, "udp"}, |
|
+{"everydayrc", {NULL}, 2782, "tcp"}, |
|
+{"everydayrc", {NULL}, 2782, "udp"}, |
|
+{"aises", {NULL}, 2783, "tcp"}, |
|
+{"aises", {NULL}, 2783, "udp"}, |
|
+{"www-dev", {NULL}, 2784, "tcp"}, |
|
+{"www-dev", {NULL}, 2784, "udp"}, |
|
+{"aic-np", {NULL}, 2785, "tcp"}, |
|
+{"aic-np", {NULL}, 2785, "udp"}, |
|
+{"aic-oncrpc", {NULL}, 2786, "tcp"}, |
|
+{"aic-oncrpc", {NULL}, 2786, "udp"}, |
|
+{"piccolo", {NULL}, 2787, "tcp"}, |
|
+{"piccolo", {NULL}, 2787, "udp"}, |
|
+{"fryeserv", {NULL}, 2788, "tcp"}, |
|
+{"fryeserv", {NULL}, 2788, "udp"}, |
|
+{"media-agent", {NULL}, 2789, "tcp"}, |
|
+{"media-agent", {NULL}, 2789, "udp"}, |
|
+{"plgproxy", {NULL}, 2790, "tcp"}, |
|
+{"plgproxy", {NULL}, 2790, "udp"}, |
|
+{"mtport-regist", {NULL}, 2791, "tcp"}, |
|
+{"mtport-regist", {NULL}, 2791, "udp"}, |
|
+{"f5-globalsite", {NULL}, 2792, "tcp"}, |
|
+{"f5-globalsite", {NULL}, 2792, "udp"}, |
|
+{"initlsmsad", {NULL}, 2793, "tcp"}, |
|
+{"initlsmsad", {NULL}, 2793, "udp"}, |
|
+{"livestats", {NULL}, 2795, "tcp"}, |
|
+{"livestats", {NULL}, 2795, "udp"}, |
|
+{"ac-tech", {NULL}, 2796, "tcp"}, |
|
+{"ac-tech", {NULL}, 2796, "udp"}, |
|
+{"esp-encap", {NULL}, 2797, "tcp"}, |
|
+{"esp-encap", {NULL}, 2797, "udp"}, |
|
+{"tmesis-upshot", {NULL}, 2798, "tcp"}, |
|
+{"tmesis-upshot", {NULL}, 2798, "udp"}, |
|
+{"icon-discover", {NULL}, 2799, "tcp"}, |
|
+{"icon-discover", {NULL}, 2799, "udp"}, |
|
+{"acc-raid", {NULL}, 2800, "tcp"}, |
|
+{"acc-raid", {NULL}, 2800, "udp"}, |
|
+{"igcp", {NULL}, 2801, "tcp"}, |
|
+{"igcp", {NULL}, 2801, "udp"}, |
|
+{"veritas-tcp1", {NULL}, 2802, "tcp"}, |
|
+{"veritas-udp1", {NULL}, 2802, "udp"}, |
|
+{"btprjctrl", {NULL}, 2803, "tcp"}, |
|
+{"btprjctrl", {NULL}, 2803, "udp"}, |
|
+{"dvr-esm", {NULL}, 2804, "tcp"}, |
|
+{"dvr-esm", {NULL}, 2804, "udp"}, |
|
+{"wta-wsp-s", {NULL}, 2805, "tcp"}, |
|
+{"wta-wsp-s", {NULL}, 2805, "udp"}, |
|
+{"cspuni", {NULL}, 2806, "tcp"}, |
|
+{"cspuni", {NULL}, 2806, "udp"}, |
|
+{"cspmulti", {NULL}, 2807, "tcp"}, |
|
+{"cspmulti", {NULL}, 2807, "udp"}, |
|
+{"j-lan-p", {NULL}, 2808, "tcp"}, |
|
+{"j-lan-p", {NULL}, 2808, "udp"}, |
|
+{"corbaloc", {NULL}, 2809, "tcp"}, |
|
+{"corbaloc", {NULL}, 2809, "udp"}, |
|
+{"netsteward", {NULL}, 2810, "tcp"}, |
|
+{"netsteward", {NULL}, 2810, "udp"}, |
|
+{"gsiftp", {NULL}, 2811, "tcp"}, |
|
+{"gsiftp", {NULL}, 2811, "udp"}, |
|
+{"atmtcp", {NULL}, 2812, "tcp"}, |
|
+{"atmtcp", {NULL}, 2812, "udp"}, |
|
+{"llm-pass", {NULL}, 2813, "tcp"}, |
|
+{"llm-pass", {NULL}, 2813, "udp"}, |
|
+{"llm-csv", {NULL}, 2814, "tcp"}, |
|
+{"llm-csv", {NULL}, 2814, "udp"}, |
|
+{"lbc-measure", {NULL}, 2815, "tcp"}, |
|
+{"lbc-measure", {NULL}, 2815, "udp"}, |
|
+{"lbc-watchdog", {NULL}, 2816, "tcp"}, |
|
+{"lbc-watchdog", {NULL}, 2816, "udp"}, |
|
+{"nmsigport", {NULL}, 2817, "tcp"}, |
|
+{"nmsigport", {NULL}, 2817, "udp"}, |
|
+{"rmlnk", {NULL}, 2818, "tcp"}, |
|
+{"rmlnk", {NULL}, 2818, "udp"}, |
|
+{"fc-faultnotify", {NULL}, 2819, "tcp"}, |
|
+{"fc-faultnotify", {NULL}, 2819, "udp"}, |
|
+{"univision", {NULL}, 2820, "tcp"}, |
|
+{"univision", {NULL}, 2820, "udp"}, |
|
+{"vrts-at-port", {NULL}, 2821, "tcp"}, |
|
+{"vrts-at-port", {NULL}, 2821, "udp"}, |
|
+{"ka0wuc", {NULL}, 2822, "tcp"}, |
|
+{"ka0wuc", {NULL}, 2822, "udp"}, |
|
+{"cqg-netlan", {NULL}, 2823, "tcp"}, |
|
+{"cqg-netlan", {NULL}, 2823, "udp"}, |
|
+{"cqg-netlan-1", {NULL}, 2824, "tcp"}, |
|
+{"cqg-netlan-1", {NULL}, 2824, "udp"}, |
|
+{"slc-systemlog", {NULL}, 2826, "tcp"}, |
|
+{"slc-systemlog", {NULL}, 2826, "udp"}, |
|
+{"slc-ctrlrloops", {NULL}, 2827, "tcp"}, |
|
+{"slc-ctrlrloops", {NULL}, 2827, "udp"}, |
|
+{"itm-lm", {NULL}, 2828, "tcp"}, |
|
+{"itm-lm", {NULL}, 2828, "udp"}, |
|
+{"silkp1", {NULL}, 2829, "tcp"}, |
|
+{"silkp1", {NULL}, 2829, "udp"}, |
|
+{"silkp2", {NULL}, 2830, "tcp"}, |
|
+{"silkp2", {NULL}, 2830, "udp"}, |
|
+{"silkp3", {NULL}, 2831, "tcp"}, |
|
+{"silkp3", {NULL}, 2831, "udp"}, |
|
+{"silkp4", {NULL}, 2832, "tcp"}, |
|
+{"silkp4", {NULL}, 2832, "udp"}, |
|
+{"glishd", {NULL}, 2833, "tcp"}, |
|
+{"glishd", {NULL}, 2833, "udp"}, |
|
+{"evtp", {NULL}, 2834, "tcp"}, |
|
+{"evtp", {NULL}, 2834, "udp"}, |
|
+{"evtp-data", {NULL}, 2835, "tcp"}, |
|
+{"evtp-data", {NULL}, 2835, "udp"}, |
|
+{"catalyst", {NULL}, 2836, "tcp"}, |
|
+{"catalyst", {NULL}, 2836, "udp"}, |
|
+{"repliweb", {NULL}, 2837, "tcp"}, |
|
+{"repliweb", {NULL}, 2837, "udp"}, |
|
+{"starbot", {NULL}, 2838, "tcp"}, |
|
+{"starbot", {NULL}, 2838, "udp"}, |
|
+{"nmsigport", {NULL}, 2839, "tcp"}, |
|
+{"nmsigport", {NULL}, 2839, "udp"}, |
|
+{"l3-exprt", {NULL}, 2840, "tcp"}, |
|
+{"l3-exprt", {NULL}, 2840, "udp"}, |
|
+{"l3-ranger", {NULL}, 2841, "tcp"}, |
|
+{"l3-ranger", {NULL}, 2841, "udp"}, |
|
+{"l3-hawk", {NULL}, 2842, "tcp"}, |
|
+{"l3-hawk", {NULL}, 2842, "udp"}, |
|
+{"pdnet", {NULL}, 2843, "tcp"}, |
|
+{"pdnet", {NULL}, 2843, "udp"}, |
|
+{"bpcp-poll", {NULL}, 2844, "tcp"}, |
|
+{"bpcp-poll", {NULL}, 2844, "udp"}, |
|
+{"bpcp-trap", {NULL}, 2845, "tcp"}, |
|
+{"bpcp-trap", {NULL}, 2845, "udp"}, |
|
+{"aimpp-hello", {NULL}, 2846, "tcp"}, |
|
+{"aimpp-hello", {NULL}, 2846, "udp"}, |
|
+{"aimpp-port-req", {NULL}, 2847, "tcp"}, |
|
+{"aimpp-port-req", {NULL}, 2847, "udp"}, |
|
+{"amt-blc-port", {NULL}, 2848, "tcp"}, |
|
+{"amt-blc-port", {NULL}, 2848, "udp"}, |
|
+{"fxp", {NULL}, 2849, "tcp"}, |
|
+{"fxp", {NULL}, 2849, "udp"}, |
|
+{"metaconsole", {NULL}, 2850, "tcp"}, |
|
+{"metaconsole", {NULL}, 2850, "udp"}, |
|
+{"webemshttp", {NULL}, 2851, "tcp"}, |
|
+{"webemshttp", {NULL}, 2851, "udp"}, |
|
+{"bears-01", {NULL}, 2852, "tcp"}, |
|
+{"bears-01", {NULL}, 2852, "udp"}, |
|
+{"ispipes", {NULL}, 2853, "tcp"}, |
|
+{"ispipes", {NULL}, 2853, "udp"}, |
|
+{"infomover", {NULL}, 2854, "tcp"}, |
|
+{"infomover", {NULL}, 2854, "udp"}, |
|
+{"msrp", {NULL}, 2855, "tcp"}, |
|
+{"msrp", {NULL}, 2855, "udp"}, |
|
+{"cesdinv", {NULL}, 2856, "tcp"}, |
|
+{"cesdinv", {NULL}, 2856, "udp"}, |
|
+{"simctlp", {NULL}, 2857, "tcp"}, |
|
+{"simctlp", {NULL}, 2857, "udp"}, |
|
+{"ecnp", {NULL}, 2858, "tcp"}, |
|
+{"ecnp", {NULL}, 2858, "udp"}, |
|
+{"activememory", {NULL}, 2859, "tcp"}, |
|
+{"activememory", {NULL}, 2859, "udp"}, |
|
+{"dialpad-voice1", {NULL}, 2860, "tcp"}, |
|
+{"dialpad-voice1", {NULL}, 2860, "udp"}, |
|
+{"dialpad-voice2", {NULL}, 2861, "tcp"}, |
|
+{"dialpad-voice2", {NULL}, 2861, "udp"}, |
|
+{"ttg-protocol", {NULL}, 2862, "tcp"}, |
|
+{"ttg-protocol", {NULL}, 2862, "udp"}, |
|
+{"sonardata", {NULL}, 2863, "tcp"}, |
|
+{"sonardata", {NULL}, 2863, "udp"}, |
|
+{"astromed-main", {NULL}, 2864, "tcp"}, |
|
+{"astromed-main", {NULL}, 2864, "udp"}, |
|
+{"pit-vpn", {NULL}, 2865, "tcp"}, |
|
+{"pit-vpn", {NULL}, 2865, "udp"}, |
|
+{"iwlistener", {NULL}, 2866, "tcp"}, |
|
+{"iwlistener", {NULL}, 2866, "udp"}, |
|
+{"esps-portal", {NULL}, 2867, "tcp"}, |
|
+{"esps-portal", {NULL}, 2867, "udp"}, |
|
+{"npep-messaging", {NULL}, 2868, "tcp"}, |
|
+{"npep-messaging", {NULL}, 2868, "udp"}, |
|
+{"icslap", {NULL}, 2869, "tcp"}, |
|
+{"icslap", {NULL}, 2869, "udp"}, |
|
+{"daishi", {NULL}, 2870, "tcp"}, |
|
+{"daishi", {NULL}, 2870, "udp"}, |
|
+{"msi-selectplay", {NULL}, 2871, "tcp"}, |
|
+{"msi-selectplay", {NULL}, 2871, "udp"}, |
|
+{"radix", {NULL}, 2872, "tcp"}, |
|
+{"radix", {NULL}, 2872, "udp"}, |
|
+{"dxmessagebase1", {NULL}, 2874, "tcp"}, |
|
+{"dxmessagebase1", {NULL}, 2874, "udp"}, |
|
+{"dxmessagebase2", {NULL}, 2875, "tcp"}, |
|
+{"dxmessagebase2", {NULL}, 2875, "udp"}, |
|
+{"sps-tunnel", {NULL}, 2876, "tcp"}, |
|
+{"sps-tunnel", {NULL}, 2876, "udp"}, |
|
+{"bluelance", {NULL}, 2877, "tcp"}, |
|
+{"bluelance", {NULL}, 2877, "udp"}, |
|
+{"aap", {NULL}, 2878, "tcp"}, |
|
+{"aap", {NULL}, 2878, "udp"}, |
|
+{"ucentric-ds", {NULL}, 2879, "tcp"}, |
|
+{"ucentric-ds", {NULL}, 2879, "udp"}, |
|
+{"synapse", {NULL}, 2880, "tcp"}, |
|
+{"synapse", {NULL}, 2880, "udp"}, |
|
+{"ndsp", {NULL}, 2881, "tcp"}, |
|
+{"ndsp", {NULL}, 2881, "udp"}, |
|
+{"ndtp", {NULL}, 2882, "tcp"}, |
|
+{"ndtp", {NULL}, 2882, "udp"}, |
|
+{"ndnp", {NULL}, 2883, "tcp"}, |
|
+{"ndnp", {NULL}, 2883, "udp"}, |
|
+{"flashmsg", {NULL}, 2884, "tcp"}, |
|
+{"flashmsg", {NULL}, 2884, "udp"}, |
|
+{"topflow", {NULL}, 2885, "tcp"}, |
|
+{"topflow", {NULL}, 2885, "udp"}, |
|
+{"responselogic", {NULL}, 2886, "tcp"}, |
|
+{"responselogic", {NULL}, 2886, "udp"}, |
|
+{"aironetddp", {NULL}, 2887, "tcp"}, |
|
+{"aironetddp", {NULL}, 2887, "udp"}, |
|
+{"spcsdlobby", {NULL}, 2888, "tcp"}, |
|
+{"spcsdlobby", {NULL}, 2888, "udp"}, |
|
+{"rsom", {NULL}, 2889, "tcp"}, |
|
+{"rsom", {NULL}, 2889, "udp"}, |
|
+{"cspclmulti", {NULL}, 2890, "tcp"}, |
|
+{"cspclmulti", {NULL}, 2890, "udp"}, |
|
+{"cinegrfx-elmd", {NULL}, 2891, "tcp"}, |
|
+{"cinegrfx-elmd", {NULL}, 2891, "udp"}, |
|
+{"snifferdata", {NULL}, 2892, "tcp"}, |
|
+{"snifferdata", {NULL}, 2892, "udp"}, |
|
+{"vseconnector", {NULL}, 2893, "tcp"}, |
|
+{"vseconnector", {NULL}, 2893, "udp"}, |
|
+{"abacus-remote", {NULL}, 2894, "tcp"}, |
|
+{"abacus-remote", {NULL}, 2894, "udp"}, |
|
+{"natuslink", {NULL}, 2895, "tcp"}, |
|
+{"natuslink", {NULL}, 2895, "udp"}, |
|
+{"ecovisiong6-1", {NULL}, 2896, "tcp"}, |
|
+{"ecovisiong6-1", {NULL}, 2896, "udp"}, |
|
+{"citrix-rtmp", {NULL}, 2897, "tcp"}, |
|
+{"citrix-rtmp", {NULL}, 2897, "udp"}, |
|
+{"appliance-cfg", {NULL}, 2898, "tcp"}, |
|
+{"appliance-cfg", {NULL}, 2898, "udp"}, |
|
+{"powergemplus", {NULL}, 2899, "tcp"}, |
|
+{"powergemplus", {NULL}, 2899, "udp"}, |
|
+{"quicksuite", {NULL}, 2900, "tcp"}, |
|
+{"quicksuite", {NULL}, 2900, "udp"}, |
|
+{"allstorcns", {NULL}, 2901, "tcp"}, |
|
+{"allstorcns", {NULL}, 2901, "udp"}, |
|
+{"netaspi", {NULL}, 2902, "tcp"}, |
|
+{"netaspi", {NULL}, 2902, "udp"}, |
|
+{"suitcase", {NULL}, 2903, "tcp"}, |
|
+{"suitcase", {NULL}, 2903, "udp"}, |
|
+{"m2ua", {NULL}, 2904, "tcp"}, |
|
+{"m2ua", {NULL}, 2904, "udp"}, |
|
+{"m2ua", {NULL}, 2904, "sctp"}, |
|
+{"m3ua", {NULL}, 2905, "tcp"}, |
|
+{"m3ua", {NULL}, 2905, "sctp"}, |
|
+{"caller9", {NULL}, 2906, "tcp"}, |
|
+{"caller9", {NULL}, 2906, "udp"}, |
|
+{"webmethods-b2b", {NULL}, 2907, "tcp"}, |
|
+{"webmethods-b2b", {NULL}, 2907, "udp"}, |
|
+{"mao", {NULL}, 2908, "tcp"}, |
|
+{"mao", {NULL}, 2908, "udp"}, |
|
+{"funk-dialout", {NULL}, 2909, "tcp"}, |
|
+{"funk-dialout", {NULL}, 2909, "udp"}, |
|
+{"tdaccess", {NULL}, 2910, "tcp"}, |
|
+{"tdaccess", {NULL}, 2910, "udp"}, |
|
+{"blockade", {NULL}, 2911, "tcp"}, |
|
+{"blockade", {NULL}, 2911, "udp"}, |
|
+{"epicon", {NULL}, 2912, "tcp"}, |
|
+{"epicon", {NULL}, 2912, "udp"}, |
|
+{"boosterware", {NULL}, 2913, "tcp"}, |
|
+{"boosterware", {NULL}, 2913, "udp"}, |
|
+{"gamelobby", {NULL}, 2914, "tcp"}, |
|
+{"gamelobby", {NULL}, 2914, "udp"}, |
|
+{"tksocket", {NULL}, 2915, "tcp"}, |
|
+{"tksocket", {NULL}, 2915, "udp"}, |
|
+{"elvin_server", {NULL}, 2916, "tcp"}, |
|
+{"elvin_server", {NULL}, 2916, "udp"}, |
|
+{"elvin_client", {NULL}, 2917, "tcp"}, |
|
+{"elvin_client", {NULL}, 2917, "udp"}, |
|
+{"kastenchasepad", {NULL}, 2918, "tcp"}, |
|
+{"kastenchasepad", {NULL}, 2918, "udp"}, |
|
+{"roboer", {NULL}, 2919, "tcp"}, |
|
+{"roboer", {NULL}, 2919, "udp"}, |
|
+{"roboeda", {NULL}, 2920, "tcp"}, |
|
+{"roboeda", {NULL}, 2920, "udp"}, |
|
+{"cesdcdman", {NULL}, 2921, "tcp"}, |
|
+{"cesdcdman", {NULL}, 2921, "udp"}, |
|
+{"cesdcdtrn", {NULL}, 2922, "tcp"}, |
|
+{"cesdcdtrn", {NULL}, 2922, "udp"}, |
|
+{"wta-wsp-wtp-s", {NULL}, 2923, "tcp"}, |
|
+{"wta-wsp-wtp-s", {NULL}, 2923, "udp"}, |
|
+{"precise-vip", {NULL}, 2924, "tcp"}, |
|
+{"precise-vip", {NULL}, 2924, "udp"}, |
|
+{"mobile-file-dl", {NULL}, 2926, "tcp"}, |
|
+{"mobile-file-dl", {NULL}, 2926, "udp"}, |
|
+{"unimobilectrl", {NULL}, 2927, "tcp"}, |
|
+{"unimobilectrl", {NULL}, 2927, "udp"}, |
|
+{"redstone-cpss", {NULL}, 2928, "tcp"}, |
|
+{"redstone-cpss", {NULL}, 2928, "udp"}, |
|
+{"amx-webadmin", {NULL}, 2929, "tcp"}, |
|
+{"amx-webadmin", {NULL}, 2929, "udp"}, |
|
+{"amx-weblinx", {NULL}, 2930, "tcp"}, |
|
+{"amx-weblinx", {NULL}, 2930, "udp"}, |
|
+{"circle-x", {NULL}, 2931, "tcp"}, |
|
+{"circle-x", {NULL}, 2931, "udp"}, |
|
+{"incp", {NULL}, 2932, "tcp"}, |
|
+{"incp", {NULL}, 2932, "udp"}, |
|
+{"4-tieropmgw", {NULL}, 2933, "tcp"}, |
|
+{"4-tieropmgw", {NULL}, 2933, "udp"}, |
|
+{"4-tieropmcli", {NULL}, 2934, "tcp"}, |
|
+{"4-tieropmcli", {NULL}, 2934, "udp"}, |
|
+{"qtp", {NULL}, 2935, "tcp"}, |
|
+{"qtp", {NULL}, 2935, "udp"}, |
|
+{"otpatch", {NULL}, 2936, "tcp"}, |
|
+{"otpatch", {NULL}, 2936, "udp"}, |
|
+{"pnaconsult-lm", {NULL}, 2937, "tcp"}, |
|
+{"pnaconsult-lm", {NULL}, 2937, "udp"}, |
|
+{"sm-pas-1", {NULL}, 2938, "tcp"}, |
|
+{"sm-pas-1", {NULL}, 2938, "udp"}, |
|
+{"sm-pas-2", {NULL}, 2939, "tcp"}, |
|
+{"sm-pas-2", {NULL}, 2939, "udp"}, |
|
+{"sm-pas-3", {NULL}, 2940, "tcp"}, |
|
+{"sm-pas-3", {NULL}, 2940, "udp"}, |
|
+{"sm-pas-4", {NULL}, 2941, "tcp"}, |
|
+{"sm-pas-4", {NULL}, 2941, "udp"}, |
|
+{"sm-pas-5", {NULL}, 2942, "tcp"}, |
|
+{"sm-pas-5", {NULL}, 2942, "udp"}, |
|
+{"ttnrepository", {NULL}, 2943, "tcp"}, |
|
+{"ttnrepository", {NULL}, 2943, "udp"}, |
|
+{"megaco-h248", {NULL}, 2944, "tcp"}, |
|
+{"megaco-h248", {NULL}, 2944, "udp"}, |
|
+{"megaco-h248", {NULL}, 2944, "sctp"}, |
|
+{"h248-binary", {NULL}, 2945, "tcp"}, |
|
+{"h248-binary", {NULL}, 2945, "udp"}, |
|
+{"h248-binary", {NULL}, 2945, "sctp"}, |
|
+{"fjsvmpor", {NULL}, 2946, "tcp"}, |
|
+{"fjsvmpor", {NULL}, 2946, "udp"}, |
|
+{"gpsd", {NULL}, 2947, "tcp"}, |
|
+{"gpsd", {NULL}, 2947, "udp"}, |
|
+{"wap-push", {NULL}, 2948, "tcp"}, |
|
+{"wap-push", {NULL}, 2948, "udp"}, |
|
+{"wap-pushsecure", {NULL}, 2949, "tcp"}, |
|
+{"wap-pushsecure", {NULL}, 2949, "udp"}, |
|
+{"esip", {NULL}, 2950, "tcp"}, |
|
+{"esip", {NULL}, 2950, "udp"}, |
|
+{"ottp", {NULL}, 2951, "tcp"}, |
|
+{"ottp", {NULL}, 2951, "udp"}, |
|
+{"mpfwsas", {NULL}, 2952, "tcp"}, |
|
+{"mpfwsas", {NULL}, 2952, "udp"}, |
|
+{"ovalarmsrv", {NULL}, 2953, "tcp"}, |
|
+{"ovalarmsrv", {NULL}, 2953, "udp"}, |
|
+{"ovalarmsrv-cmd", {NULL}, 2954, "tcp"}, |
|
+{"ovalarmsrv-cmd", {NULL}, 2954, "udp"}, |
|
+{"csnotify", {NULL}, 2955, "tcp"}, |
|
+{"csnotify", {NULL}, 2955, "udp"}, |
|
+{"ovrimosdbman", {NULL}, 2956, "tcp"}, |
|
+{"ovrimosdbman", {NULL}, 2956, "udp"}, |
|
+{"jmact5", {NULL}, 2957, "tcp"}, |
|
+{"jmact5", {NULL}, 2957, "udp"}, |
|
+{"jmact6", {NULL}, 2958, "tcp"}, |
|
+{"jmact6", {NULL}, 2958, "udp"}, |
|
+{"rmopagt", {NULL}, 2959, "tcp"}, |
|
+{"rmopagt", {NULL}, 2959, "udp"}, |
|
+{"dfoxserver", {NULL}, 2960, "tcp"}, |
|
+{"dfoxserver", {NULL}, 2960, "udp"}, |
|
+{"boldsoft-lm", {NULL}, 2961, "tcp"}, |
|
+{"boldsoft-lm", {NULL}, 2961, "udp"}, |
|
+{"iph-policy-cli", {NULL}, 2962, "tcp"}, |
|
+{"iph-policy-cli", {NULL}, 2962, "udp"}, |
|
+{"iph-policy-adm", {NULL}, 2963, "tcp"}, |
|
+{"iph-policy-adm", {NULL}, 2963, "udp"}, |
|
+{"bullant-srap", {NULL}, 2964, "tcp"}, |
|
+{"bullant-srap", {NULL}, 2964, "udp"}, |
|
+{"bullant-rap", {NULL}, 2965, "tcp"}, |
|
+{"bullant-rap", {NULL}, 2965, "udp"}, |
|
+{"idp-infotrieve", {NULL}, 2966, "tcp"}, |
|
+{"idp-infotrieve", {NULL}, 2966, "udp"}, |
|
+{"ssc-agent", {NULL}, 2967, "tcp"}, |
|
+{"ssc-agent", {NULL}, 2967, "udp"}, |
|
+{"enpp", {NULL}, 2968, "tcp"}, |
|
+{"enpp", {NULL}, 2968, "udp"}, |
|
+{"essp", {NULL}, 2969, "tcp"}, |
|
+{"essp", {NULL}, 2969, "udp"}, |
|
+{"index-net", {NULL}, 2970, "tcp"}, |
|
+{"index-net", {NULL}, 2970, "udp"}, |
|
+{"netclip", {NULL}, 2971, "tcp"}, |
|
+{"netclip", {NULL}, 2971, "udp"}, |
|
+{"pmsm-webrctl", {NULL}, 2972, "tcp"}, |
|
+{"pmsm-webrctl", {NULL}, 2972, "udp"}, |
|
+{"svnetworks", {NULL}, 2973, "tcp"}, |
|
+{"svnetworks", {NULL}, 2973, "udp"}, |
|
+{"signal", {NULL}, 2974, "tcp"}, |
|
+{"signal", {NULL}, 2974, "udp"}, |
|
+{"fjmpcm", {NULL}, 2975, "tcp"}, |
|
+{"fjmpcm", {NULL}, 2975, "udp"}, |
|
+{"cns-srv-port", {NULL}, 2976, "tcp"}, |
|
+{"cns-srv-port", {NULL}, 2976, "udp"}, |
|
+{"ttc-etap-ns", {NULL}, 2977, "tcp"}, |
|
+{"ttc-etap-ns", {NULL}, 2977, "udp"}, |
|
+{"ttc-etap-ds", {NULL}, 2978, "tcp"}, |
|
+{"ttc-etap-ds", {NULL}, 2978, "udp"}, |
|
+{"h263-video", {NULL}, 2979, "tcp"}, |
|
+{"h263-video", {NULL}, 2979, "udp"}, |
|
+{"wimd", {NULL}, 2980, "tcp"}, |
|
+{"wimd", {NULL}, 2980, "udp"}, |
|
+{"mylxamport", {NULL}, 2981, "tcp"}, |
|
+{"mylxamport", {NULL}, 2981, "udp"}, |
|
+{"iwb-whiteboard", {NULL}, 2982, "tcp"}, |
|
+{"iwb-whiteboard", {NULL}, 2982, "udp"}, |
|
+{"netplan", {NULL}, 2983, "tcp"}, |
|
+{"netplan", {NULL}, 2983, "udp"}, |
|
+{"hpidsadmin", {NULL}, 2984, "tcp"}, |
|
+{"hpidsadmin", {NULL}, 2984, "udp"}, |
|
+{"hpidsagent", {NULL}, 2985, "tcp"}, |
|
+{"hpidsagent", {NULL}, 2985, "udp"}, |
|
+{"stonefalls", {NULL}, 2986, "tcp"}, |
|
+{"stonefalls", {NULL}, 2986, "udp"}, |
|
+{"identify", {NULL}, 2987, "tcp"}, |
|
+{"identify", {NULL}, 2987, "udp"}, |
|
+{"hippad", {NULL}, 2988, "tcp"}, |
|
+{"hippad", {NULL}, 2988, "udp"}, |
|
+{"zarkov", {NULL}, 2989, "tcp"}, |
|
+{"zarkov", {NULL}, 2989, "udp"}, |
|
+{"boscap", {NULL}, 2990, "tcp"}, |
|
+{"boscap", {NULL}, 2990, "udp"}, |
|
+{"wkstn-mon", {NULL}, 2991, "tcp"}, |
|
+{"wkstn-mon", {NULL}, 2991, "udp"}, |
|
+{"avenyo", {NULL}, 2992, "tcp"}, |
|
+{"avenyo", {NULL}, 2992, "udp"}, |
|
+{"veritas-vis1", {NULL}, 2993, "tcp"}, |
|
+{"veritas-vis1", {NULL}, 2993, "udp"}, |
|
+{"veritas-vis2", {NULL}, 2994, "tcp"}, |
|
+{"veritas-vis2", {NULL}, 2994, "udp"}, |
|
+{"idrs", {NULL}, 2995, "tcp"}, |
|
+{"idrs", {NULL}, 2995, "udp"}, |
|
+{"vsixml", {NULL}, 2996, "tcp"}, |
|
+{"vsixml", {NULL}, 2996, "udp"}, |
|
+{"rebol", {NULL}, 2997, "tcp"}, |
|
+{"rebol", {NULL}, 2997, "udp"}, |
|
+{"realsecure", {NULL}, 2998, "tcp"}, |
|
+{"realsecure", {NULL}, 2998, "udp"}, |
|
+{"remoteware-un", {NULL}, 2999, "tcp"}, |
|
+{"remoteware-un", {NULL}, 2999, "udp"}, |
|
+{"hbci", {NULL}, 3000, "tcp"}, |
|
+{"hbci", {NULL}, 3000, "udp"}, |
|
+{"remoteware-cl", {NULL}, 3000, "tcp"}, |
|
+{"remoteware-cl", {NULL}, 3000, "udp"}, |
|
+{"exlm-agent", {NULL}, 3002, "tcp"}, |
|
+{"exlm-agent", {NULL}, 3002, "udp"}, |
|
+{"remoteware-srv", {NULL}, 3002, "tcp"}, |
|
+{"remoteware-srv", {NULL}, 3002, "udp"}, |
|
+{"cgms", {NULL}, 3003, "tcp"}, |
|
+{"cgms", {NULL}, 3003, "udp"}, |
|
+{"csoftragent", {NULL}, 3004, "tcp"}, |
|
+{"csoftragent", {NULL}, 3004, "udp"}, |
|
+{"geniuslm", {NULL}, 3005, "tcp"}, |
|
+{"geniuslm", {NULL}, 3005, "udp"}, |
|
+{"ii-admin", {NULL}, 3006, "tcp"}, |
|
+{"ii-admin", {NULL}, 3006, "udp"}, |
|
+{"lotusmtap", {NULL}, 3007, "tcp"}, |
|
+{"lotusmtap", {NULL}, 3007, "udp"}, |
|
+{"midnight-tech", {NULL}, 3008, "tcp"}, |
|
+{"midnight-tech", {NULL}, 3008, "udp"}, |
|
+{"pxc-ntfy", {NULL}, 3009, "tcp"}, |
|
+{"pxc-ntfy", {NULL}, 3009, "udp"}, |
|
+{"gw", {NULL}, 3010, "tcp"}, |
|
+{"ping-pong", {NULL}, 3010, "udp"}, |
|
+{"trusted-web", {NULL}, 3011, "tcp"}, |
|
+{"trusted-web", {NULL}, 3011, "udp"}, |
|
+{"twsdss", {NULL}, 3012, "tcp"}, |
|
+{"twsdss", {NULL}, 3012, "udp"}, |
|
+{"gilatskysurfer", {NULL}, 3013, "tcp"}, |
|
+{"gilatskysurfer", {NULL}, 3013, "udp"}, |
|
+{"broker_service", {NULL}, 3014, "tcp"}, |
|
+{"broker_service", {NULL}, 3014, "udp"}, |
|
+{"nati-dstp", {NULL}, 3015, "tcp"}, |
|
+{"nati-dstp", {NULL}, 3015, "udp"}, |
|
+{"notify_srvr", {NULL}, 3016, "tcp"}, |
|
+{"notify_srvr", {NULL}, 3016, "udp"}, |
|
+{"event_listener", {NULL}, 3017, "tcp"}, |
|
+{"event_listener", {NULL}, 3017, "udp"}, |
|
+{"srvc_registry", {NULL}, 3018, "tcp"}, |
|
+{"srvc_registry", {NULL}, 3018, "udp"}, |
|
+{"resource_mgr", {NULL}, 3019, "tcp"}, |
|
+{"resource_mgr", {NULL}, 3019, "udp"}, |
|
+{"cifs", {NULL}, 3020, "tcp"}, |
|
+{"cifs", {NULL}, 3020, "udp"}, |
|
+{"agriserver", {NULL}, 3021, "tcp"}, |
|
+{"agriserver", {NULL}, 3021, "udp"}, |
|
+{"csregagent", {NULL}, 3022, "tcp"}, |
|
+{"csregagent", {NULL}, 3022, "udp"}, |
|
+{"magicnotes", {NULL}, 3023, "tcp"}, |
|
+{"magicnotes", {NULL}, 3023, "udp"}, |
|
+{"nds_sso", {NULL}, 3024, "tcp"}, |
|
+{"nds_sso", {NULL}, 3024, "udp"}, |
|
+{"arepa-raft", {NULL}, 3025, "tcp"}, |
|
+{"arepa-raft", {NULL}, 3025, "udp"}, |
|
+{"agri-gateway", {NULL}, 3026, "tcp"}, |
|
+{"agri-gateway", {NULL}, 3026, "udp"}, |
|
+{"LiebDevMgmt_C", {NULL}, 3027, "tcp"}, |
|
+{"LiebDevMgmt_C", {NULL}, 3027, "udp"}, |
|
+{"LiebDevMgmt_DM", {NULL}, 3028, "tcp"}, |
|
+{"LiebDevMgmt_DM", {NULL}, 3028, "udp"}, |
|
+{"LiebDevMgmt_A", {NULL}, 3029, "tcp"}, |
|
+{"LiebDevMgmt_A", {NULL}, 3029, "udp"}, |
|
+{"arepa-cas", {NULL}, 3030, "tcp"}, |
|
+{"arepa-cas", {NULL}, 3030, "udp"}, |
|
+{"eppc", {NULL}, 3031, "tcp"}, |
|
+{"eppc", {NULL}, 3031, "udp"}, |
|
+{"redwood-chat", {NULL}, 3032, "tcp"}, |
|
+{"redwood-chat", {NULL}, 3032, "udp"}, |
|
+{"pdb", {NULL}, 3033, "tcp"}, |
|
+{"pdb", {NULL}, 3033, "udp"}, |
|
+{"osmosis-aeea", {NULL}, 3034, "tcp"}, |
|
+{"osmosis-aeea", {NULL}, 3034, "udp"}, |
|
+{"fjsv-gssagt", {NULL}, 3035, "tcp"}, |
|
+{"fjsv-gssagt", {NULL}, 3035, "udp"}, |
|
+{"hagel-dump", {NULL}, 3036, "tcp"}, |
|
+{"hagel-dump", {NULL}, 3036, "udp"}, |
|
+{"hp-san-mgmt", {NULL}, 3037, "tcp"}, |
|
+{"hp-san-mgmt", {NULL}, 3037, "udp"}, |
|
+{"santak-ups", {NULL}, 3038, "tcp"}, |
|
+{"santak-ups", {NULL}, 3038, "udp"}, |
|
+{"cogitate", {NULL}, 3039, "tcp"}, |
|
+{"cogitate", {NULL}, 3039, "udp"}, |
|
+{"tomato-springs", {NULL}, 3040, "tcp"}, |
|
+{"tomato-springs", {NULL}, 3040, "udp"}, |
|
+{"di-traceware", {NULL}, 3041, "tcp"}, |
|
+{"di-traceware", {NULL}, 3041, "udp"}, |
|
+{"journee", {NULL}, 3042, "tcp"}, |
|
+{"journee", {NULL}, 3042, "udp"}, |
|
+{"brp", {NULL}, 3043, "tcp"}, |
|
+{"brp", {NULL}, 3043, "udp"}, |
|
+{"epp", {NULL}, 3044, "tcp"}, |
|
+{"epp", {NULL}, 3044, "udp"}, |
|
+{"responsenet", {NULL}, 3045, "tcp"}, |
|
+{"responsenet", {NULL}, 3045, "udp"}, |
|
+{"di-ase", {NULL}, 3046, "tcp"}, |
|
+{"di-ase", {NULL}, 3046, "udp"}, |
|
+{"hlserver", {NULL}, 3047, "tcp"}, |
|
+{"hlserver", {NULL}, 3047, "udp"}, |
|
+{"pctrader", {NULL}, 3048, "tcp"}, |
|
+{"pctrader", {NULL}, 3048, "udp"}, |
|
+{"nsws", {NULL}, 3049, "tcp"}, |
|
+{"nsws", {NULL}, 3049, "udp"}, |
|
+{"gds_db", {NULL}, 3050, "tcp"}, |
|
+{"gds_db", {NULL}, 3050, "udp"}, |
|
+{"galaxy-server", {NULL}, 3051, "tcp"}, |
|
+{"galaxy-server", {NULL}, 3051, "udp"}, |
|
+{"apc-3052", {NULL}, 3052, "tcp"}, |
|
+{"apc-3052", {NULL}, 3052, "udp"}, |
|
+{"dsom-server", {NULL}, 3053, "tcp"}, |
|
+{"dsom-server", {NULL}, 3053, "udp"}, |
|
+{"amt-cnf-prot", {NULL}, 3054, "tcp"}, |
|
+{"amt-cnf-prot", {NULL}, 3054, "udp"}, |
|
+{"policyserver", {NULL}, 3055, "tcp"}, |
|
+{"policyserver", {NULL}, 3055, "udp"}, |
|
+{"cdl-server", {NULL}, 3056, "tcp"}, |
|
+{"cdl-server", {NULL}, 3056, "udp"}, |
|
+{"goahead-fldup", {NULL}, 3057, "tcp"}, |
|
+{"goahead-fldup", {NULL}, 3057, "udp"}, |
|
+{"videobeans", {NULL}, 3058, "tcp"}, |
|
+{"videobeans", {NULL}, 3058, "udp"}, |
|
+{"qsoft", {NULL}, 3059, "tcp"}, |
|
+{"qsoft", {NULL}, 3059, "udp"}, |
|
+{"interserver", {NULL}, 3060, "tcp"}, |
|
+{"interserver", {NULL}, 3060, "udp"}, |
|
+{"cautcpd", {NULL}, 3061, "tcp"}, |
|
+{"cautcpd", {NULL}, 3061, "udp"}, |
|
+{"ncacn-ip-tcp", {NULL}, 3062, "tcp"}, |
|
+{"ncacn-ip-tcp", {NULL}, 3062, "udp"}, |
|
+{"ncadg-ip-udp", {NULL}, 3063, "tcp"}, |
|
+{"ncadg-ip-udp", {NULL}, 3063, "udp"}, |
|
+{"rprt", {NULL}, 3064, "tcp"}, |
|
+{"rprt", {NULL}, 3064, "udp"}, |
|
+{"slinterbase", {NULL}, 3065, "tcp"}, |
|
+{"slinterbase", {NULL}, 3065, "udp"}, |
|
+{"netattachsdmp", {NULL}, 3066, "tcp"}, |
|
+{"netattachsdmp", {NULL}, 3066, "udp"}, |
|
+{"fjhpjp", {NULL}, 3067, "tcp"}, |
|
+{"fjhpjp", {NULL}, 3067, "udp"}, |
|
+{"ls3bcast", {NULL}, 3068, "tcp"}, |
|
+{"ls3bcast", {NULL}, 3068, "udp"}, |
|
+{"ls3", {NULL}, 3069, "tcp"}, |
|
+{"ls3", {NULL}, 3069, "udp"}, |
|
+{"mgxswitch", {NULL}, 3070, "tcp"}, |
|
+{"mgxswitch", {NULL}, 3070, "udp"}, |
|
+{"csd-mgmt-port", {NULL}, 3071, "tcp"}, |
|
+{"csd-mgmt-port", {NULL}, 3071, "udp"}, |
|
+{"csd-monitor", {NULL}, 3072, "tcp"}, |
|
+{"csd-monitor", {NULL}, 3072, "udp"}, |
|
+{"vcrp", {NULL}, 3073, "tcp"}, |
|
+{"vcrp", {NULL}, 3073, "udp"}, |
|
+{"xbox", {NULL}, 3074, "tcp"}, |
|
+{"xbox", {NULL}, 3074, "udp"}, |
|
+{"orbix-locator", {NULL}, 3075, "tcp"}, |
|
+{"orbix-locator", {NULL}, 3075, "udp"}, |
|
+{"orbix-config", {NULL}, 3076, "tcp"}, |
|
+{"orbix-config", {NULL}, 3076, "udp"}, |
|
+{"orbix-loc-ssl", {NULL}, 3077, "tcp"}, |
|
+{"orbix-loc-ssl", {NULL}, 3077, "udp"}, |
|
+{"orbix-cfg-ssl", {NULL}, 3078, "tcp"}, |
|
+{"orbix-cfg-ssl", {NULL}, 3078, "udp"}, |
|
+{"lv-frontpanel", {NULL}, 3079, "tcp"}, |
|
+{"lv-frontpanel", {NULL}, 3079, "udp"}, |
|
+{"stm_pproc", {NULL}, 3080, "tcp"}, |
|
+{"stm_pproc", {NULL}, 3080, "udp"}, |
|
+{"tl1-lv", {NULL}, 3081, "tcp"}, |
|
+{"tl1-lv", {NULL}, 3081, "udp"}, |
|
+{"tl1-raw", {NULL}, 3082, "tcp"}, |
|
+{"tl1-raw", {NULL}, 3082, "udp"}, |
|
+{"tl1-telnet", {NULL}, 3083, "tcp"}, |
|
+{"tl1-telnet", {NULL}, 3083, "udp"}, |
|
+{"itm-mccs", {NULL}, 3084, "tcp"}, |
|
+{"itm-mccs", {NULL}, 3084, "udp"}, |
|
+{"pcihreq", {NULL}, 3085, "tcp"}, |
|
+{"pcihreq", {NULL}, 3085, "udp"}, |
|
+{"jdl-dbkitchen", {NULL}, 3086, "tcp"}, |
|
+{"jdl-dbkitchen", {NULL}, 3086, "udp"}, |
|
+{"asoki-sma", {NULL}, 3087, "tcp"}, |
|
+{"asoki-sma", {NULL}, 3087, "udp"}, |
|
+{"xdtp", {NULL}, 3088, "tcp"}, |
|
+{"xdtp", {NULL}, 3088, "udp"}, |
|
+{"ptk-alink", {NULL}, 3089, "tcp"}, |
|
+{"ptk-alink", {NULL}, 3089, "udp"}, |
|
+{"stss", {NULL}, 3090, "tcp"}, |
|
+{"stss", {NULL}, 3090, "udp"}, |
|
+{"1ci-smcs", {NULL}, 3091, "tcp"}, |
|
+{"1ci-smcs", {NULL}, 3091, "udp"}, |
|
+{"rapidmq-center", {NULL}, 3093, "tcp"}, |
|
+{"rapidmq-center", {NULL}, 3093, "udp"}, |
|
+{"rapidmq-reg", {NULL}, 3094, "tcp"}, |
|
+{"rapidmq-reg", {NULL}, 3094, "udp"}, |
|
+{"panasas", {NULL}, 3095, "tcp"}, |
|
+{"panasas", {NULL}, 3095, "udp"}, |
|
+{"ndl-aps", {NULL}, 3096, "tcp"}, |
|
+{"ndl-aps", {NULL}, 3096, "udp"}, |
|
+{"itu-bicc-stc", {NULL}, 3097, "sctp"}, |
|
+{"umm-port", {NULL}, 3098, "tcp"}, |
|
+{"umm-port", {NULL}, 3098, "udp"}, |
|
+{"chmd", {NULL}, 3099, "tcp"}, |
|
+{"chmd", {NULL}, 3099, "udp"}, |
|
+{"opcon-xps", {NULL}, 3100, "tcp"}, |
|
+{"opcon-xps", {NULL}, 3100, "udp"}, |
|
+{"hp-pxpib", {NULL}, 3101, "tcp"}, |
|
+{"hp-pxpib", {NULL}, 3101, "udp"}, |
|
+{"slslavemon", {NULL}, 3102, "tcp"}, |
|
+{"slslavemon", {NULL}, 3102, "udp"}, |
|
+{"autocuesmi", {NULL}, 3103, "tcp"}, |
|
+{"autocuesmi", {NULL}, 3103, "udp"}, |
|
+{"autocuelog", {NULL}, 3104, "tcp"}, |
|
+{"autocuetime", {NULL}, 3104, "udp"}, |
|
+{"cardbox", {NULL}, 3105, "tcp"}, |
|
+{"cardbox", {NULL}, 3105, "udp"}, |
|
+{"cardbox-http", {NULL}, 3106, "tcp"}, |
|
+{"cardbox-http", {NULL}, 3106, "udp"}, |
|
+{"business", {NULL}, 3107, "tcp"}, |
|
+{"business", {NULL}, 3107, "udp"}, |
|
+{"geolocate", {NULL}, 3108, "tcp"}, |
|
+{"geolocate", {NULL}, 3108, "udp"}, |
|
+{"personnel", {NULL}, 3109, "tcp"}, |
|
+{"personnel", {NULL}, 3109, "udp"}, |
|
+{"sim-control", {NULL}, 3110, "tcp"}, |
|
+{"sim-control", {NULL}, 3110, "udp"}, |
|
+{"wsynch", {NULL}, 3111, "tcp"}, |
|
+{"wsynch", {NULL}, 3111, "udp"}, |
|
+{"ksysguard", {NULL}, 3112, "tcp"}, |
|
+{"ksysguard", {NULL}, 3112, "udp"}, |
|
+{"cs-auth-svr", {NULL}, 3113, "tcp"}, |
|
+{"cs-auth-svr", {NULL}, 3113, "udp"}, |
|
+{"ccmad", {NULL}, 3114, "tcp"}, |
|
+{"ccmad", {NULL}, 3114, "udp"}, |
|
+{"mctet-master", {NULL}, 3115, "tcp"}, |
|
+{"mctet-master", {NULL}, 3115, "udp"}, |
|
+{"mctet-gateway", {NULL}, 3116, "tcp"}, |
|
+{"mctet-gateway", {NULL}, 3116, "udp"}, |
|
+{"mctet-jserv", {NULL}, 3117, "tcp"}, |
|
+{"mctet-jserv", {NULL}, 3117, "udp"}, |
|
+{"pkagent", {NULL}, 3118, "tcp"}, |
|
+{"pkagent", {NULL}, 3118, "udp"}, |
|
+{"d2000kernel", {NULL}, 3119, "tcp"}, |
|
+{"d2000kernel", {NULL}, 3119, "udp"}, |
|
+{"d2000webserver", {NULL}, 3120, "tcp"}, |
|
+{"d2000webserver", {NULL}, 3120, "udp"}, |
|
+{"vtr-emulator", {NULL}, 3122, "tcp"}, |
|
+{"vtr-emulator", {NULL}, 3122, "udp"}, |
|
+{"edix", {NULL}, 3123, "tcp"}, |
|
+{"edix", {NULL}, 3123, "udp"}, |
|
+{"beacon-port", {NULL}, 3124, "tcp"}, |
|
+{"beacon-port", {NULL}, 3124, "udp"}, |
|
+{"a13-an", {NULL}, 3125, "tcp"}, |
|
+{"a13-an", {NULL}, 3125, "udp"}, |
|
+{"ctx-bridge", {NULL}, 3127, "tcp"}, |
|
+{"ctx-bridge", {NULL}, 3127, "udp"}, |
|
+{"ndl-aas", {NULL}, 3128, "tcp"}, |
|
+{"ndl-aas", {NULL}, 3128, "udp"}, |
|
+{"netport-id", {NULL}, 3129, "tcp"}, |
|
+{"netport-id", {NULL}, 3129, "udp"}, |
|
+{"icpv2", {NULL}, 3130, "tcp"}, |
|
+{"icpv2", {NULL}, 3130, "udp"}, |
|
+{"netbookmark", {NULL}, 3131, "tcp"}, |
|
+{"netbookmark", {NULL}, 3131, "udp"}, |
|
+{"ms-rule-engine", {NULL}, 3132, "tcp"}, |
|
+{"ms-rule-engine", {NULL}, 3132, "udp"}, |
|
+{"prism-deploy", {NULL}, 3133, "tcp"}, |
|
+{"prism-deploy", {NULL}, 3133, "udp"}, |
|
+{"ecp", {NULL}, 3134, "tcp"}, |
|
+{"ecp", {NULL}, 3134, "udp"}, |
|
+{"peerbook-port", {NULL}, 3135, "tcp"}, |
|
+{"peerbook-port", {NULL}, 3135, "udp"}, |
|
+{"grubd", {NULL}, 3136, "tcp"}, |
|
+{"grubd", {NULL}, 3136, "udp"}, |
|
+{"rtnt-1", {NULL}, 3137, "tcp"}, |
|
+{"rtnt-1", {NULL}, 3137, "udp"}, |
|
+{"rtnt-2", {NULL}, 3138, "tcp"}, |
|
+{"rtnt-2", {NULL}, 3138, "udp"}, |
|
+{"incognitorv", {NULL}, 3139, "tcp"}, |
|
+{"incognitorv", {NULL}, 3139, "udp"}, |
|
+{"ariliamulti", {NULL}, 3140, "tcp"}, |
|
+{"ariliamulti", {NULL}, 3140, "udp"}, |
|
+{"vmodem", {NULL}, 3141, "tcp"}, |
|
+{"vmodem", {NULL}, 3141, "udp"}, |
|
+{"rdc-wh-eos", {NULL}, 3142, "tcp"}, |
|
+{"rdc-wh-eos", {NULL}, 3142, "udp"}, |
|
+{"seaview", {NULL}, 3143, "tcp"}, |
|
+{"seaview", {NULL}, 3143, "udp"}, |
|
+{"tarantella", {NULL}, 3144, "tcp"}, |
|
+{"tarantella", {NULL}, 3144, "udp"}, |
|
+{"csi-lfap", {NULL}, 3145, "tcp"}, |
|
+{"csi-lfap", {NULL}, 3145, "udp"}, |
|
+{"bears-02", {NULL}, 3146, "tcp"}, |
|
+{"bears-02", {NULL}, 3146, "udp"}, |
|
+{"rfio", {NULL}, 3147, "tcp"}, |
|
+{"rfio", {NULL}, 3147, "udp"}, |
|
+{"nm-game-admin", {NULL}, 3148, "tcp"}, |
|
+{"nm-game-admin", {NULL}, 3148, "udp"}, |
|
+{"nm-game-server", {NULL}, 3149, "tcp"}, |
|
+{"nm-game-server", {NULL}, 3149, "udp"}, |
|
+{"nm-asses-admin", {NULL}, 3150, "tcp"}, |
|
+{"nm-asses-admin", {NULL}, 3150, "udp"}, |
|
+{"nm-assessor", {NULL}, 3151, "tcp"}, |
|
+{"nm-assessor", {NULL}, 3151, "udp"}, |
|
+{"feitianrockey", {NULL}, 3152, "tcp"}, |
|
+{"feitianrockey", {NULL}, 3152, "udp"}, |
|
+{"s8-client-port", {NULL}, 3153, "tcp"}, |
|
+{"s8-client-port", {NULL}, 3153, "udp"}, |
|
+{"ccmrmi", {NULL}, 3154, "tcp"}, |
|
+{"ccmrmi", {NULL}, 3154, "udp"}, |
|
+{"jpegmpeg", {NULL}, 3155, "tcp"}, |
|
+{"jpegmpeg", {NULL}, 3155, "udp"}, |
|
+{"indura", {NULL}, 3156, "tcp"}, |
|
+{"indura", {NULL}, 3156, "udp"}, |
|
+{"e3consultants", {NULL}, 3157, "tcp"}, |
|
+{"e3consultants", {NULL}, 3157, "udp"}, |
|
+{"stvp", {NULL}, 3158, "tcp"}, |
|
+{"stvp", {NULL}, 3158, "udp"}, |
|
+{"navegaweb-port", {NULL}, 3159, "tcp"}, |
|
+{"navegaweb-port", {NULL}, 3159, "udp"}, |
|
+{"tip-app-server", {NULL}, 3160, "tcp"}, |
|
+{"tip-app-server", {NULL}, 3160, "udp"}, |
|
+{"doc1lm", {NULL}, 3161, "tcp"}, |
|
+{"doc1lm", {NULL}, 3161, "udp"}, |
|
+{"sflm", {NULL}, 3162, "tcp"}, |
|
+{"sflm", {NULL}, 3162, "udp"}, |
|
+{"res-sap", {NULL}, 3163, "tcp"}, |
|
+{"res-sap", {NULL}, 3163, "udp"}, |
|
+{"imprs", {NULL}, 3164, "tcp"}, |
|
+{"imprs", {NULL}, 3164, "udp"}, |
|
+{"newgenpay", {NULL}, 3165, "tcp"}, |
|
+{"newgenpay", {NULL}, 3165, "udp"}, |
|
+{"sossecollector", {NULL}, 3166, "tcp"}, |
|
+{"sossecollector", {NULL}, 3166, "udp"}, |
|
+{"nowcontact", {NULL}, 3167, "tcp"}, |
|
+{"nowcontact", {NULL}, 3167, "udp"}, |
|
+{"poweronnud", {NULL}, 3168, "tcp"}, |
|
+{"poweronnud", {NULL}, 3168, "udp"}, |
|
+{"serverview-as", {NULL}, 3169, "tcp"}, |
|
+{"serverview-as", {NULL}, 3169, "udp"}, |
|
+{"serverview-asn", {NULL}, 3170, "tcp"}, |
|
+{"serverview-asn", {NULL}, 3170, "udp"}, |
|
+{"serverview-gf", {NULL}, 3171, "tcp"}, |
|
+{"serverview-gf", {NULL}, 3171, "udp"}, |
|
+{"serverview-rm", {NULL}, 3172, "tcp"}, |
|
+{"serverview-rm", {NULL}, 3172, "udp"}, |
|
+{"serverview-icc", {NULL}, 3173, "tcp"}, |
|
+{"serverview-icc", {NULL}, 3173, "udp"}, |
|
+{"armi-server", {NULL}, 3174, "tcp"}, |
|
+{"armi-server", {NULL}, 3174, "udp"}, |
|
+{"t1-e1-over-ip", {NULL}, 3175, "tcp"}, |
|
+{"t1-e1-over-ip", {NULL}, 3175, "udp"}, |
|
+{"ars-master", {NULL}, 3176, "tcp"}, |
|
+{"ars-master", {NULL}, 3176, "udp"}, |
|
+{"phonex-port", {NULL}, 3177, "tcp"}, |
|
+{"phonex-port", {NULL}, 3177, "udp"}, |
|
+{"radclientport", {NULL}, 3178, "tcp"}, |
|
+{"radclientport", {NULL}, 3178, "udp"}, |
|
+{"h2gf-w-2m", {NULL}, 3179, "tcp"}, |
|
+{"h2gf-w-2m", {NULL}, 3179, "udp"}, |
|
+{"mc-brk-srv", {NULL}, 3180, "tcp"}, |
|
+{"mc-brk-srv", {NULL}, 3180, "udp"}, |
|
+{"bmcpatrolagent", {NULL}, 3181, "tcp"}, |
|
+{"bmcpatrolagent", {NULL}, 3181, "udp"}, |
|
+{"bmcpatrolrnvu", {NULL}, 3182, "tcp"}, |
|
+{"bmcpatrolrnvu", {NULL}, 3182, "udp"}, |
|
+{"cops-tls", {NULL}, 3183, "tcp"}, |
|
+{"cops-tls", {NULL}, 3183, "udp"}, |
|
+{"apogeex-port", {NULL}, 3184, "tcp"}, |
|
+{"apogeex-port", {NULL}, 3184, "udp"}, |
|
+{"smpppd", {NULL}, 3185, "tcp"}, |
|
+{"smpppd", {NULL}, 3185, "udp"}, |
|
+{"iiw-port", {NULL}, 3186, "tcp"}, |
|
+{"iiw-port", {NULL}, 3186, "udp"}, |
|
+{"odi-port", {NULL}, 3187, "tcp"}, |
|
+{"odi-port", {NULL}, 3187, "udp"}, |
|
+{"brcm-comm-port", {NULL}, 3188, "tcp"}, |
|
+{"brcm-comm-port", {NULL}, 3188, "udp"}, |
|
+{"pcle-infex", {NULL}, 3189, "tcp"}, |
|
+{"pcle-infex", {NULL}, 3189, "udp"}, |
|
+{"csvr-proxy", {NULL}, 3190, "tcp"}, |
|
+{"csvr-proxy", {NULL}, 3190, "udp"}, |
|
+{"csvr-sslproxy", {NULL}, 3191, "tcp"}, |
|
+{"csvr-sslproxy", {NULL}, 3191, "udp"}, |
|
+{"firemonrcc", {NULL}, 3192, "tcp"}, |
|
+{"firemonrcc", {NULL}, 3192, "udp"}, |
|
+{"spandataport", {NULL}, 3193, "tcp"}, |
|
+{"spandataport", {NULL}, 3193, "udp"}, |
|
+{"magbind", {NULL}, 3194, "tcp"}, |
|
+{"magbind", {NULL}, 3194, "udp"}, |
|
+{"ncu-1", {NULL}, 3195, "tcp"}, |
|
+{"ncu-1", {NULL}, 3195, "udp"}, |
|
+{"ncu-2", {NULL}, 3196, "tcp"}, |
|
+{"ncu-2", {NULL}, 3196, "udp"}, |
|
+{"embrace-dp-s", {NULL}, 3197, "tcp"}, |
|
+{"embrace-dp-s", {NULL}, 3197, "udp"}, |
|
+{"embrace-dp-c", {NULL}, 3198, "tcp"}, |
|
+{"embrace-dp-c", {NULL}, 3198, "udp"}, |
|
+{"dmod-workspace", {NULL}, 3199, "tcp"}, |
|
+{"dmod-workspace", {NULL}, 3199, "udp"}, |
|
+{"tick-port", {NULL}, 3200, "tcp"}, |
|
+{"tick-port", {NULL}, 3200, "udp"}, |
|
+{"cpq-tasksmart", {NULL}, 3201, "tcp"}, |
|
+{"cpq-tasksmart", {NULL}, 3201, "udp"}, |
|
+{"intraintra", {NULL}, 3202, "tcp"}, |
|
+{"intraintra", {NULL}, 3202, "udp"}, |
|
+{"netwatcher-mon", {NULL}, 3203, "tcp"}, |
|
+{"netwatcher-mon", {NULL}, 3203, "udp"}, |
|
+{"netwatcher-db", {NULL}, 3204, "tcp"}, |
|
+{"netwatcher-db", {NULL}, 3204, "udp"}, |
|
+{"isns", {NULL}, 3205, "tcp"}, |
|
+{"isns", {NULL}, 3205, "udp"}, |
|
+{"ironmail", {NULL}, 3206, "tcp"}, |
|
+{"ironmail", {NULL}, 3206, "udp"}, |
|
+{"vx-auth-port", {NULL}, 3207, "tcp"}, |
|
+{"vx-auth-port", {NULL}, 3207, "udp"}, |
|
+{"pfu-prcallback", {NULL}, 3208, "tcp"}, |
|
+{"pfu-prcallback", {NULL}, 3208, "udp"}, |
|
+{"netwkpathengine", {NULL}, 3209, "tcp"}, |
|
+{"netwkpathengine", {NULL}, 3209, "udp"}, |
|
+{"flamenco-proxy", {NULL}, 3210, "tcp"}, |
|
+{"flamenco-proxy", {NULL}, 3210, "udp"}, |
|
+{"avsecuremgmt", {NULL}, 3211, "tcp"}, |
|
+{"avsecuremgmt", {NULL}, 3211, "udp"}, |
|
+{"surveyinst", {NULL}, 3212, "tcp"}, |
|
+{"surveyinst", {NULL}, 3212, "udp"}, |
|
+{"neon24x7", {NULL}, 3213, "tcp"}, |
|
+{"neon24x7", {NULL}, 3213, "udp"}, |
|
+{"jmq-daemon-1", {NULL}, 3214, "tcp"}, |
|
+{"jmq-daemon-1", {NULL}, 3214, "udp"}, |
|
+{"jmq-daemon-2", {NULL}, 3215, "tcp"}, |
|
+{"jmq-daemon-2", {NULL}, 3215, "udp"}, |
|
+{"ferrari-foam", {NULL}, 3216, "tcp"}, |
|
+{"ferrari-foam", {NULL}, 3216, "udp"}, |
|
+{"unite", {NULL}, 3217, "tcp"}, |
|
+{"unite", {NULL}, 3217, "udp"}, |
|
+{"smartpackets", {NULL}, 3218, "tcp"}, |
|
+{"smartpackets", {NULL}, 3218, "udp"}, |
|
+{"wms-messenger", {NULL}, 3219, "tcp"}, |
|
+{"wms-messenger", {NULL}, 3219, "udp"}, |
|
+{"xnm-ssl", {NULL}, 3220, "tcp"}, |
|
+{"xnm-ssl", {NULL}, 3220, "udp"}, |
|
+{"xnm-clear-text", {NULL}, 3221, "tcp"}, |
|
+{"xnm-clear-text", {NULL}, 3221, "udp"}, |
|
+{"glbp", {NULL}, 3222, "tcp"}, |
|
+{"glbp", {NULL}, 3222, "udp"}, |
|
+{"digivote", {NULL}, 3223, "tcp"}, |
|
+{"digivote", {NULL}, 3223, "udp"}, |
|
+{"aes-discovery", {NULL}, 3224, "tcp"}, |
|
+{"aes-discovery", {NULL}, 3224, "udp"}, |
|
+{"fcip-port", {NULL}, 3225, "tcp"}, |
|
+{"fcip-port", {NULL}, 3225, "udp"}, |
|
+{"isi-irp", {NULL}, 3226, "tcp"}, |
|
+{"isi-irp", {NULL}, 3226, "udp"}, |
|
+{"dwnmshttp", {NULL}, 3227, "tcp"}, |
|
+{"dwnmshttp", {NULL}, 3227, "udp"}, |
|
+{"dwmsgserver", {NULL}, 3228, "tcp"}, |
|
+{"dwmsgserver", {NULL}, 3228, "udp"}, |
|
+{"global-cd-port", {NULL}, 3229, "tcp"}, |
|
+{"global-cd-port", {NULL}, 3229, "udp"}, |
|
+{"sftdst-port", {NULL}, 3230, "tcp"}, |
|
+{"sftdst-port", {NULL}, 3230, "udp"}, |
|
+{"vidigo", {NULL}, 3231, "tcp"}, |
|
+{"vidigo", {NULL}, 3231, "udp"}, |
|
+{"mdtp", {NULL}, 3232, "tcp"}, |
|
+{"mdtp", {NULL}, 3232, "udp"}, |
|
+{"whisker", {NULL}, 3233, "tcp"}, |
|
+{"whisker", {NULL}, 3233, "udp"}, |
|
+{"alchemy", {NULL}, 3234, "tcp"}, |
|
+{"alchemy", {NULL}, 3234, "udp"}, |
|
+{"mdap-port", {NULL}, 3235, "tcp"}, |
|
+{"mdap-port", {NULL}, 3235, "udp"}, |
|
+{"apparenet-ts", {NULL}, 3236, "tcp"}, |
|
+{"apparenet-ts", {NULL}, 3236, "udp"}, |
|
+{"apparenet-tps", {NULL}, 3237, "tcp"}, |
|
+{"apparenet-tps", {NULL}, 3237, "udp"}, |
|
+{"apparenet-as", {NULL}, 3238, "tcp"}, |
|
+{"apparenet-as", {NULL}, 3238, "udp"}, |
|
+{"apparenet-ui", {NULL}, 3239, "tcp"}, |
|
+{"apparenet-ui", {NULL}, 3239, "udp"}, |
|
+{"triomotion", {NULL}, 3240, "tcp"}, |
|
+{"triomotion", {NULL}, 3240, "udp"}, |
|
+{"sysorb", {NULL}, 3241, "tcp"}, |
|
+{"sysorb", {NULL}, 3241, "udp"}, |
|
+{"sdp-id-port", {NULL}, 3242, "tcp"}, |
|
+{"sdp-id-port", {NULL}, 3242, "udp"}, |
|
+{"timelot", {NULL}, 3243, "tcp"}, |
|
+{"timelot", {NULL}, 3243, "udp"}, |
|
+{"onesaf", {NULL}, 3244, "tcp"}, |
|
+{"onesaf", {NULL}, 3244, "udp"}, |
|
+{"vieo-fe", {NULL}, 3245, "tcp"}, |
|
+{"vieo-fe", {NULL}, 3245, "udp"}, |
|
+{"dvt-system", {NULL}, 3246, "tcp"}, |
|
+{"dvt-system", {NULL}, 3246, "udp"}, |
|
+{"dvt-data", {NULL}, 3247, "tcp"}, |
|
+{"dvt-data", {NULL}, 3247, "udp"}, |
|
+{"procos-lm", {NULL}, 3248, "tcp"}, |
|
+{"procos-lm", {NULL}, 3248, "udp"}, |
|
+{"ssp", {NULL}, 3249, "tcp"}, |
|
+{"ssp", {NULL}, 3249, "udp"}, |
|
+{"hicp", {NULL}, 3250, "tcp"}, |
|
+{"hicp", {NULL}, 3250, "udp"}, |
|
+{"sysscanner", {NULL}, 3251, "tcp"}, |
|
+{"sysscanner", {NULL}, 3251, "udp"}, |
|
+{"dhe", {NULL}, 3252, "tcp"}, |
|
+{"dhe", {NULL}, 3252, "udp"}, |
|
+{"pda-data", {NULL}, 3253, "tcp"}, |
|
+{"pda-data", {NULL}, 3253, "udp"}, |
|
+{"pda-sys", {NULL}, 3254, "tcp"}, |
|
+{"pda-sys", {NULL}, 3254, "udp"}, |
|
+{"semaphore", {NULL}, 3255, "tcp"}, |
|
+{"semaphore", {NULL}, 3255, "udp"}, |
|
+{"cpqrpm-agent", {NULL}, 3256, "tcp"}, |
|
+{"cpqrpm-agent", {NULL}, 3256, "udp"}, |
|
+{"cpqrpm-server", {NULL}, 3257, "tcp"}, |
|
+{"cpqrpm-server", {NULL}, 3257, "udp"}, |
|
+{"ivecon-port", {NULL}, 3258, "tcp"}, |
|
+{"ivecon-port", {NULL}, 3258, "udp"}, |
|
+{"epncdp2", {NULL}, 3259, "tcp"}, |
|
+{"epncdp2", {NULL}, 3259, "udp"}, |
|
+{"iscsi-target", {NULL}, 3260, "tcp"}, |
|
+{"iscsi-target", {NULL}, 3260, "udp"}, |
|
+{"winshadow", {NULL}, 3261, "tcp"}, |
|
+{"winshadow", {NULL}, 3261, "udp"}, |
|
+{"necp", {NULL}, 3262, "tcp"}, |
|
+{"necp", {NULL}, 3262, "udp"}, |
|
+{"ecolor-imager", {NULL}, 3263, "tcp"}, |
|
+{"ecolor-imager", {NULL}, 3263, "udp"}, |
|
+{"ccmail", {NULL}, 3264, "tcp"}, |
|
+{"ccmail", {NULL}, 3264, "udp"}, |
|
+{"altav-tunnel", {NULL}, 3265, "tcp"}, |
|
+{"altav-tunnel", {NULL}, 3265, "udp"}, |
|
+{"ns-cfg-server", {NULL}, 3266, "tcp"}, |
|
+{"ns-cfg-server", {NULL}, 3266, "udp"}, |
|
+{"ibm-dial-out", {NULL}, 3267, "tcp"}, |
|
+{"ibm-dial-out", {NULL}, 3267, "udp"}, |
|
+{"msft-gc", {NULL}, 3268, "tcp"}, |
|
+{"msft-gc", {NULL}, 3268, "udp"}, |
|
+{"msft-gc-ssl", {NULL}, 3269, "tcp"}, |
|
+{"msft-gc-ssl", {NULL}, 3269, "udp"}, |
|
+{"verismart", {NULL}, 3270, "tcp"}, |
|
+{"verismart", {NULL}, 3270, "udp"}, |
|
+{"csoft-prev", {NULL}, 3271, "tcp"}, |
|
+{"csoft-prev", {NULL}, 3271, "udp"}, |
|
+{"user-manager", {NULL}, 3272, "tcp"}, |
|
+{"user-manager", {NULL}, 3272, "udp"}, |
|
+{"sxmp", {NULL}, 3273, "tcp"}, |
|
+{"sxmp", {NULL}, 3273, "udp"}, |
|
+{"ordinox-server", {NULL}, 3274, "tcp"}, |
|
+{"ordinox-server", {NULL}, 3274, "udp"}, |
|
+{"samd", {NULL}, 3275, "tcp"}, |
|
+{"samd", {NULL}, 3275, "udp"}, |
|
+{"maxim-asics", {NULL}, 3276, "tcp"}, |
|
+{"maxim-asics", {NULL}, 3276, "udp"}, |
|
+{"awg-proxy", {NULL}, 3277, "tcp"}, |
|
+{"awg-proxy", {NULL}, 3277, "udp"}, |
|
+{"lkcmserver", {NULL}, 3278, "tcp"}, |
|
+{"lkcmserver", {NULL}, 3278, "udp"}, |
|
+{"admind", {NULL}, 3279, "tcp"}, |
|
+{"admind", {NULL}, 3279, "udp"}, |
|
+{"vs-server", {NULL}, 3280, "tcp"}, |
|
+{"vs-server", {NULL}, 3280, "udp"}, |
|
+{"sysopt", {NULL}, 3281, "tcp"}, |
|
+{"sysopt", {NULL}, 3281, "udp"}, |
|
+{"datusorb", {NULL}, 3282, "tcp"}, |
|
+{"datusorb", {NULL}, 3282, "udp"}, |
|
+{"net-assistant", {NULL}, 3283, "tcp"}, |
|
+{"net-assistant", {NULL}, 3283, "udp"}, |
|
+{"4talk", {NULL}, 3284, "tcp"}, |
|
+{"4talk", {NULL}, 3284, "udp"}, |
|
+{"plato", {NULL}, 3285, "tcp"}, |
|
+{"plato", {NULL}, 3285, "udp"}, |
|
+{"e-net", {NULL}, 3286, "tcp"}, |
|
+{"e-net", {NULL}, 3286, "udp"}, |
|
+{"directvdata", {NULL}, 3287, "tcp"}, |
|
+{"directvdata", {NULL}, 3287, "udp"}, |
|
+{"cops", {NULL}, 3288, "tcp"}, |
|
+{"cops", {NULL}, 3288, "udp"}, |
|
+{"enpc", {NULL}, 3289, "tcp"}, |
|
+{"enpc", {NULL}, 3289, "udp"}, |
|
+{"caps-lm", {NULL}, 3290, "tcp"}, |
|
+{"caps-lm", {NULL}, 3290, "udp"}, |
|
+{"sah-lm", {NULL}, 3291, "tcp"}, |
|
+{"sah-lm", {NULL}, 3291, "udp"}, |
|
+{"cart-o-rama", {NULL}, 3292, "tcp"}, |
|
+{"cart-o-rama", {NULL}, 3292, "udp"}, |
|
+{"fg-fps", {NULL}, 3293, "tcp"}, |
|
+{"fg-fps", {NULL}, 3293, "udp"}, |
|
+{"fg-gip", {NULL}, 3294, "tcp"}, |
|
+{"fg-gip", {NULL}, 3294, "udp"}, |
|
+{"dyniplookup", {NULL}, 3295, "tcp"}, |
|
+{"dyniplookup", {NULL}, 3295, "udp"}, |
|
+{"rib-slm", {NULL}, 3296, "tcp"}, |
|
+{"rib-slm", {NULL}, 3296, "udp"}, |
|
+{"cytel-lm", {NULL}, 3297, "tcp"}, |
|
+{"cytel-lm", {NULL}, 3297, "udp"}, |
|
+{"deskview", {NULL}, 3298, "tcp"}, |
|
+{"deskview", {NULL}, 3298, "udp"}, |
|
+{"pdrncs", {NULL}, 3299, "tcp"}, |
|
+{"pdrncs", {NULL}, 3299, "udp"}, |
|
+{"mcs-fastmail", {NULL}, 3302, "tcp"}, |
|
+{"mcs-fastmail", {NULL}, 3302, "udp"}, |
|
+{"opsession-clnt", {NULL}, 3303, "tcp"}, |
|
+{"opsession-clnt", {NULL}, 3303, "udp"}, |
|
+{"opsession-srvr", {NULL}, 3304, "tcp"}, |
|
+{"opsession-srvr", {NULL}, 3304, "udp"}, |
|
+{"odette-ftp", {NULL}, 3305, "tcp"}, |
|
+{"odette-ftp", {NULL}, 3305, "udp"}, |
|
+{"mysql", {NULL}, 3306, "tcp"}, |
|
+{"mysql", {NULL}, 3306, "udp"}, |
|
+{"opsession-prxy", {NULL}, 3307, "tcp"}, |
|
+{"opsession-prxy", {NULL}, 3307, "udp"}, |
|
+{"tns-server", {NULL}, 3308, "tcp"}, |
|
+{"tns-server", {NULL}, 3308, "udp"}, |
|
+{"tns-adv", {NULL}, 3309, "tcp"}, |
|
+{"tns-adv", {NULL}, 3309, "udp"}, |
|
+{"dyna-access", {NULL}, 3310, "tcp"}, |
|
+{"dyna-access", {NULL}, 3310, "udp"}, |
|
+{"mcns-tel-ret", {NULL}, 3311, "tcp"}, |
|
+{"mcns-tel-ret", {NULL}, 3311, "udp"}, |
|
+{"appman-server", {NULL}, 3312, "tcp"}, |
|
+{"appman-server", {NULL}, 3312, "udp"}, |
|
+{"uorb", {NULL}, 3313, "tcp"}, |
|
+{"uorb", {NULL}, 3313, "udp"}, |
|
+{"uohost", {NULL}, 3314, "tcp"}, |
|
+{"uohost", {NULL}, 3314, "udp"}, |
|
+{"cdid", {NULL}, 3315, "tcp"}, |
|
+{"cdid", {NULL}, 3315, "udp"}, |
|
+{"aicc-cmi", {NULL}, 3316, "tcp"}, |
|
+{"aicc-cmi", {NULL}, 3316, "udp"}, |
|
+{"vsaiport", {NULL}, 3317, "tcp"}, |
|
+{"vsaiport", {NULL}, 3317, "udp"}, |
|
+{"ssrip", {NULL}, 3318, "tcp"}, |
|
+{"ssrip", {NULL}, 3318, "udp"}, |
|
+{"sdt-lmd", {NULL}, 3319, "tcp"}, |
|
+{"sdt-lmd", {NULL}, 3319, "udp"}, |
|
+{"officelink2000", {NULL}, 3320, "tcp"}, |
|
+{"officelink2000", {NULL}, 3320, "udp"}, |
|
+{"vnsstr", {NULL}, 3321, "tcp"}, |
|
+{"vnsstr", {NULL}, 3321, "udp"}, |
|
+{"sftu", {NULL}, 3326, "tcp"}, |
|
+{"sftu", {NULL}, 3326, "udp"}, |
|
+{"bbars", {NULL}, 3327, "tcp"}, |
|
+{"bbars", {NULL}, 3327, "udp"}, |
|
+{"egptlm", {NULL}, 3328, "tcp"}, |
|
+{"egptlm", {NULL}, 3328, "udp"}, |
|
+{"hp-device-disc", {NULL}, 3329, "tcp"}, |
|
+{"hp-device-disc", {NULL}, 3329, "udp"}, |
|
+{"mcs-calypsoicf", {NULL}, 3330, "tcp"}, |
|
+{"mcs-calypsoicf", {NULL}, 3330, "udp"}, |
|
+{"mcs-messaging", {NULL}, 3331, "tcp"}, |
|
+{"mcs-messaging", {NULL}, 3331, "udp"}, |
|
+{"mcs-mailsvr", {NULL}, 3332, "tcp"}, |
|
+{"mcs-mailsvr", {NULL}, 3332, "udp"}, |
|
+{"dec-notes", {NULL}, 3333, "tcp"}, |
|
+{"dec-notes", {NULL}, 3333, "udp"}, |
|
+{"directv-web", {NULL}, 3334, "tcp"}, |
|
+{"directv-web", {NULL}, 3334, "udp"}, |
|
+{"directv-soft", {NULL}, 3335, "tcp"}, |
|
+{"directv-soft", {NULL}, 3335, "udp"}, |
|
+{"directv-tick", {NULL}, 3336, "tcp"}, |
|
+{"directv-tick", {NULL}, 3336, "udp"}, |
|
+{"directv-catlg", {NULL}, 3337, "tcp"}, |
|
+{"directv-catlg", {NULL}, 3337, "udp"}, |
|
+{"anet-b", {NULL}, 3338, "tcp"}, |
|
+{"anet-b", {NULL}, 3338, "udp"}, |
|
+{"anet-l", {NULL}, 3339, "tcp"}, |
|
+{"anet-l", {NULL}, 3339, "udp"}, |
|
+{"anet-m", {NULL}, 3340, "tcp"}, |
|
+{"anet-m", {NULL}, 3340, "udp"}, |
|
+{"anet-h", {NULL}, 3341, "tcp"}, |
|
+{"anet-h", {NULL}, 3341, "udp"}, |
|
+{"webtie", {NULL}, 3342, "tcp"}, |
|
+{"webtie", {NULL}, 3342, "udp"}, |
|
+{"ms-cluster-net", {NULL}, 3343, "tcp"}, |
|
+{"ms-cluster-net", {NULL}, 3343, "udp"}, |
|
+{"bnt-manager", {NULL}, 3344, "tcp"}, |
|
+{"bnt-manager", {NULL}, 3344, "udp"}, |
|
+{"influence", {NULL}, 3345, "tcp"}, |
|
+{"influence", {NULL}, 3345, "udp"}, |
|
+{"trnsprntproxy", {NULL}, 3346, "tcp"}, |
|
+{"trnsprntproxy", {NULL}, 3346, "udp"}, |
|
+{"phoenix-rpc", {NULL}, 3347, "tcp"}, |
|
+{"phoenix-rpc", {NULL}, 3347, "udp"}, |
|
+{"pangolin-laser", {NULL}, 3348, "tcp"}, |
|
+{"pangolin-laser", {NULL}, 3348, "udp"}, |
|
+{"chevinservices", {NULL}, 3349, "tcp"}, |
|
+{"chevinservices", {NULL}, 3349, "udp"}, |
|
+{"findviatv", {NULL}, 3350, "tcp"}, |
|
+{"findviatv", {NULL}, 3350, "udp"}, |
|
+{"btrieve", {NULL}, 3351, "tcp"}, |
|
+{"btrieve", {NULL}, 3351, "udp"}, |
|
+{"ssql", {NULL}, 3352, "tcp"}, |
|
+{"ssql", {NULL}, 3352, "udp"}, |
|
+{"fatpipe", {NULL}, 3353, "tcp"}, |
|
+{"fatpipe", {NULL}, 3353, "udp"}, |
|
+{"suitjd", {NULL}, 3354, "tcp"}, |
|
+{"suitjd", {NULL}, 3354, "udp"}, |
|
+{"ordinox-dbase", {NULL}, 3355, "tcp"}, |
|
+{"ordinox-dbase", {NULL}, 3355, "udp"}, |
|
+{"upnotifyps", {NULL}, 3356, "tcp"}, |
|
+{"upnotifyps", {NULL}, 3356, "udp"}, |
|
+{"adtech-test", {NULL}, 3357, "tcp"}, |
|
+{"adtech-test", {NULL}, 3357, "udp"}, |
|
+{"mpsysrmsvr", {NULL}, 3358, "tcp"}, |
|
+{"mpsysrmsvr", {NULL}, 3358, "udp"}, |
|
+{"wg-netforce", {NULL}, 3359, "tcp"}, |
|
+{"wg-netforce", {NULL}, 3359, "udp"}, |
|
+{"kv-server", {NULL}, 3360, "tcp"}, |
|
+{"kv-server", {NULL}, 3360, "udp"}, |
|
+{"kv-agent", {NULL}, 3361, "tcp"}, |
|
+{"kv-agent", {NULL}, 3361, "udp"}, |
|
+{"dj-ilm", {NULL}, 3362, "tcp"}, |
|
+{"dj-ilm", {NULL}, 3362, "udp"}, |
|
+{"nati-vi-server", {NULL}, 3363, "tcp"}, |
|
+{"nati-vi-server", {NULL}, 3363, "udp"}, |
|
+{"creativeserver", {NULL}, 3364, "tcp"}, |
|
+{"creativeserver", {NULL}, 3364, "udp"}, |
|
+{"contentserver", {NULL}, 3365, "tcp"}, |
|
+{"contentserver", {NULL}, 3365, "udp"}, |
|
+{"creativepartnr", {NULL}, 3366, "tcp"}, |
|
+{"creativepartnr", {NULL}, 3366, "udp"}, |
|
+{"tip2", {NULL}, 3372, "tcp"}, |
|
+{"tip2", {NULL}, 3372, "udp"}, |
|
+{"lavenir-lm", {NULL}, 3373, "tcp"}, |
|
+{"lavenir-lm", {NULL}, 3373, "udp"}, |
|
+{"cluster-disc", {NULL}, 3374, "tcp"}, |
|
+{"cluster-disc", {NULL}, 3374, "udp"}, |
|
+{"vsnm-agent", {NULL}, 3375, "tcp"}, |
|
+{"vsnm-agent", {NULL}, 3375, "udp"}, |
|
+{"cdbroker", {NULL}, 3376, "tcp"}, |
|
+{"cdbroker", {NULL}, 3376, "udp"}, |
|
+{"cogsys-lm", {NULL}, 3377, "tcp"}, |
|
+{"cogsys-lm", {NULL}, 3377, "udp"}, |
|
+{"wsicopy", {NULL}, 3378, "tcp"}, |
|
+{"wsicopy", {NULL}, 3378, "udp"}, |
|
+{"socorfs", {NULL}, 3379, "tcp"}, |
|
+{"socorfs", {NULL}, 3379, "udp"}, |
|
+{"sns-channels", {NULL}, 3380, "tcp"}, |
|
+{"sns-channels", {NULL}, 3380, "udp"}, |
|
+{"geneous", {NULL}, 3381, "tcp"}, |
|
+{"geneous", {NULL}, 3381, "udp"}, |
|
+{"fujitsu-neat", {NULL}, 3382, "tcp"}, |
|
+{"fujitsu-neat", {NULL}, 3382, "udp"}, |
|
+{"esp-lm", {NULL}, 3383, "tcp"}, |
|
+{"esp-lm", {NULL}, 3383, "udp"}, |
|
+{"hp-clic", {NULL}, 3384, "tcp"}, |
|
+{"hp-clic", {NULL}, 3384, "udp"}, |
|
+{"qnxnetman", {NULL}, 3385, "tcp"}, |
|
+{"qnxnetman", {NULL}, 3385, "udp"}, |
|
+{"gprs-data", {NULL}, 3386, "tcp"}, |
|
+{"gprs-sig", {NULL}, 3386, "udp"}, |
|
+{"backroomnet", {NULL}, 3387, "tcp"}, |
|
+{"backroomnet", {NULL}, 3387, "udp"}, |
|
+{"cbserver", {NULL}, 3388, "tcp"}, |
|
+{"cbserver", {NULL}, 3388, "udp"}, |
|
+{"ms-wbt-server", {NULL}, 3389, "tcp"}, |
|
+{"ms-wbt-server", {NULL}, 3389, "udp"}, |
|
+{"dsc", {NULL}, 3390, "tcp"}, |
|
+{"dsc", {NULL}, 3390, "udp"}, |
|
+{"savant", {NULL}, 3391, "tcp"}, |
|
+{"savant", {NULL}, 3391, "udp"}, |
|
+{"efi-lm", {NULL}, 3392, "tcp"}, |
|
+{"efi-lm", {NULL}, 3392, "udp"}, |
|
+{"d2k-tapestry1", {NULL}, 3393, "tcp"}, |
|
+{"d2k-tapestry1", {NULL}, 3393, "udp"}, |
|
+{"d2k-tapestry2", {NULL}, 3394, "tcp"}, |
|
+{"d2k-tapestry2", {NULL}, 3394, "udp"}, |
|
+{"dyna-lm", {NULL}, 3395, "tcp"}, |
|
+{"dyna-lm", {NULL}, 3395, "udp"}, |
|
+{"printer_agent", {NULL}, 3396, "tcp"}, |
|
+{"printer_agent", {NULL}, 3396, "udp"}, |
|
+{"cloanto-lm", {NULL}, 3397, "tcp"}, |
|
+{"cloanto-lm", {NULL}, 3397, "udp"}, |
|
+{"mercantile", {NULL}, 3398, "tcp"}, |
|
+{"mercantile", {NULL}, 3398, "udp"}, |
|
+{"csms", {NULL}, 3399, "tcp"}, |
|
+{"csms", {NULL}, 3399, "udp"}, |
|
+{"csms2", {NULL}, 3400, "tcp"}, |
|
+{"csms2", {NULL}, 3400, "udp"}, |
|
+{"filecast", {NULL}, 3401, "tcp"}, |
|
+{"filecast", {NULL}, 3401, "udp"}, |
|
+{"fxaengine-net", {NULL}, 3402, "tcp"}, |
|
+{"fxaengine-net", {NULL}, 3402, "udp"}, |
|
+{"nokia-ann-ch1", {NULL}, 3405, "tcp"}, |
|
+{"nokia-ann-ch1", {NULL}, 3405, "udp"}, |
|
+{"nokia-ann-ch2", {NULL}, 3406, "tcp"}, |
|
+{"nokia-ann-ch2", {NULL}, 3406, "udp"}, |
|
+{"ldap-admin", {NULL}, 3407, "tcp"}, |
|
+{"ldap-admin", {NULL}, 3407, "udp"}, |
|
+{"BESApi", {NULL}, 3408, "tcp"}, |
|
+{"BESApi", {NULL}, 3408, "udp"}, |
|
+{"networklens", {NULL}, 3409, "tcp"}, |
|
+{"networklens", {NULL}, 3409, "udp"}, |
|
+{"networklenss", {NULL}, 3410, "tcp"}, |
|
+{"networklenss", {NULL}, 3410, "udp"}, |
|
+{"biolink-auth", {NULL}, 3411, "tcp"}, |
|
+{"biolink-auth", {NULL}, 3411, "udp"}, |
|
+{"xmlblaster", {NULL}, 3412, "tcp"}, |
|
+{"xmlblaster", {NULL}, 3412, "udp"}, |
|
+{"svnet", {NULL}, 3413, "tcp"}, |
|
+{"svnet", {NULL}, 3413, "udp"}, |
|
+{"wip-port", {NULL}, 3414, "tcp"}, |
|
+{"wip-port", {NULL}, 3414, "udp"}, |
|
+{"bcinameservice", {NULL}, 3415, "tcp"}, |
|
+{"bcinameservice", {NULL}, 3415, "udp"}, |
|
+{"commandport", {NULL}, 3416, "tcp"}, |
|
+{"commandport", {NULL}, 3416, "udp"}, |
|
+{"csvr", {NULL}, 3417, "tcp"}, |
|
+{"csvr", {NULL}, 3417, "udp"}, |
|
+{"rnmap", {NULL}, 3418, "tcp"}, |
|
+{"rnmap", {NULL}, 3418, "udp"}, |
|
+{"softaudit", {NULL}, 3419, "tcp"}, |
|
+{"softaudit", {NULL}, 3419, "udp"}, |
|
+{"ifcp-port", {NULL}, 3420, "tcp"}, |
|
+{"ifcp-port", {NULL}, 3420, "udp"}, |
|
+{"bmap", {NULL}, 3421, "tcp"}, |
|
+{"bmap", {NULL}, 3421, "udp"}, |
|
+{"rusb-sys-port", {NULL}, 3422, "tcp"}, |
|
+{"rusb-sys-port", {NULL}, 3422, "udp"}, |
|
+{"xtrm", {NULL}, 3423, "tcp"}, |
|
+{"xtrm", {NULL}, 3423, "udp"}, |
|
+{"xtrms", {NULL}, 3424, "tcp"}, |
|
+{"xtrms", {NULL}, 3424, "udp"}, |
|
+{"agps-port", {NULL}, 3425, "tcp"}, |
|
+{"agps-port", {NULL}, 3425, "udp"}, |
|
+{"arkivio", {NULL}, 3426, "tcp"}, |
|
+{"arkivio", {NULL}, 3426, "udp"}, |
|
+{"websphere-snmp", {NULL}, 3427, "tcp"}, |
|
+{"websphere-snmp", {NULL}, 3427, "udp"}, |
|
+{"twcss", {NULL}, 3428, "tcp"}, |
|
+{"twcss", {NULL}, 3428, "udp"}, |
|
+{"gcsp", {NULL}, 3429, "tcp"}, |
|
+{"gcsp", {NULL}, 3429, "udp"}, |
|
+{"ssdispatch", {NULL}, 3430, "tcp"}, |
|
+{"ssdispatch", {NULL}, 3430, "udp"}, |
|
+{"ndl-als", {NULL}, 3431, "tcp"}, |
|
+{"ndl-als", {NULL}, 3431, "udp"}, |
|
+{"osdcp", {NULL}, 3432, "tcp"}, |
|
+{"osdcp", {NULL}, 3432, "udp"}, |
|
+{"alta-smp", {NULL}, 3433, "tcp"}, |
|
+{"alta-smp", {NULL}, 3433, "udp"}, |
|
+{"opencm", {NULL}, 3434, "tcp"}, |
|
+{"opencm", {NULL}, 3434, "udp"}, |
|
+{"pacom", {NULL}, 3435, "tcp"}, |
|
+{"pacom", {NULL}, 3435, "udp"}, |
|
+{"gc-config", {NULL}, 3436, "tcp"}, |
|
+{"gc-config", {NULL}, 3436, "udp"}, |
|
+{"autocueds", {NULL}, 3437, "tcp"}, |
|
+{"autocueds", {NULL}, 3437, "udp"}, |
|
+{"spiral-admin", {NULL}, 3438, "tcp"}, |
|
+{"spiral-admin", {NULL}, 3438, "udp"}, |
|
+{"hri-port", {NULL}, 3439, "tcp"}, |
|
+{"hri-port", {NULL}, 3439, "udp"}, |
|
+{"ans-console", {NULL}, 3440, "tcp"}, |
|
+{"ans-console", {NULL}, 3440, "udp"}, |
|
+{"connect-client", {NULL}, 3441, "tcp"}, |
|
+{"connect-client", {NULL}, 3441, "udp"}, |
|
+{"connect-server", {NULL}, 3442, "tcp"}, |
|
+{"connect-server", {NULL}, 3442, "udp"}, |
|
+{"ov-nnm-websrv", {NULL}, 3443, "tcp"}, |
|
+{"ov-nnm-websrv", {NULL}, 3443, "udp"}, |
|
+{"denali-server", {NULL}, 3444, "tcp"}, |
|
+{"denali-server", {NULL}, 3444, "udp"}, |
|
+{"monp", {NULL}, 3445, "tcp"}, |
|
+{"monp", {NULL}, 3445, "udp"}, |
|
+{"3comfaxrpc", {NULL}, 3446, "tcp"}, |
|
+{"3comfaxrpc", {NULL}, 3446, "udp"}, |
|
+{"directnet", {NULL}, 3447, "tcp"}, |
|
+{"directnet", {NULL}, 3447, "udp"}, |
|
+{"dnc-port", {NULL}, 3448, "tcp"}, |
|
+{"dnc-port", {NULL}, 3448, "udp"}, |
|
+{"hotu-chat", {NULL}, 3449, "tcp"}, |
|
+{"hotu-chat", {NULL}, 3449, "udp"}, |
|
+{"castorproxy", {NULL}, 3450, "tcp"}, |
|
+{"castorproxy", {NULL}, 3450, "udp"}, |
|
+{"asam", {NULL}, 3451, "tcp"}, |
|
+{"asam", {NULL}, 3451, "udp"}, |
|
+{"sabp-signal", {NULL}, 3452, "tcp"}, |
|
+{"sabp-signal", {NULL}, 3452, "udp"}, |
|
+{"pscupd", {NULL}, 3453, "tcp"}, |
|
+{"pscupd", {NULL}, 3453, "udp"}, |
|
+{"mira", {NULL}, 3454, "tcp"}, |
|
+{"prsvp", {NULL}, 3455, "tcp"}, |
|
+{"prsvp", {NULL}, 3455, "udp"}, |
|
+{"vat", {NULL}, 3456, "tcp"}, |
|
+{"vat", {NULL}, 3456, "udp"}, |
|
+{"vat-control", {NULL}, 3457, "tcp"}, |
|
+{"vat-control", {NULL}, 3457, "udp"}, |
|
+{"d3winosfi", {NULL}, 3458, "tcp"}, |
|
+{"d3winosfi", {NULL}, 3458, "udp"}, |
|
+{"integral", {NULL}, 3459, "tcp"}, |
|
+{"integral", {NULL}, 3459, "udp"}, |
|
+{"edm-manager", {NULL}, 3460, "tcp"}, |
|
+{"edm-manager", {NULL}, 3460, "udp"}, |
|
+{"edm-stager", {NULL}, 3461, "tcp"}, |
|
+{"edm-stager", {NULL}, 3461, "udp"}, |
|
+{"edm-std-notify", {NULL}, 3462, "tcp"}, |
|
+{"edm-std-notify", {NULL}, 3462, "udp"}, |
|
+{"edm-adm-notify", {NULL}, 3463, "tcp"}, |
|
+{"edm-adm-notify", {NULL}, 3463, "udp"}, |
|
+{"edm-mgr-sync", {NULL}, 3464, "tcp"}, |
|
+{"edm-mgr-sync", {NULL}, 3464, "udp"}, |
|
+{"edm-mgr-cntrl", {NULL}, 3465, "tcp"}, |
|
+{"edm-mgr-cntrl", {NULL}, 3465, "udp"}, |
|
+{"workflow", {NULL}, 3466, "tcp"}, |
|
+{"workflow", {NULL}, 3466, "udp"}, |
|
+{"rcst", {NULL}, 3467, "tcp"}, |
|
+{"rcst", {NULL}, 3467, "udp"}, |
|
+{"ttcmremotectrl", {NULL}, 3468, "tcp"}, |
|
+{"ttcmremotectrl", {NULL}, 3468, "udp"}, |
|
+{"pluribus", {NULL}, 3469, "tcp"}, |
|
+{"pluribus", {NULL}, 3469, "udp"}, |
|
+{"jt400", {NULL}, 3470, "tcp"}, |
|
+{"jt400", {NULL}, 3470, "udp"}, |
|
+{"jt400-ssl", {NULL}, 3471, "tcp"}, |
|
+{"jt400-ssl", {NULL}, 3471, "udp"}, |
|
+{"jaugsremotec-1", {NULL}, 3472, "tcp"}, |
|
+{"jaugsremotec-1", {NULL}, 3472, "udp"}, |
|
+{"jaugsremotec-2", {NULL}, 3473, "tcp"}, |
|
+{"jaugsremotec-2", {NULL}, 3473, "udp"}, |
|
+{"ttntspauto", {NULL}, 3474, "tcp"}, |
|
+{"ttntspauto", {NULL}, 3474, "udp"}, |
|
+{"genisar-port", {NULL}, 3475, "tcp"}, |
|
+{"genisar-port", {NULL}, 3475, "udp"}, |
|
+{"nppmp", {NULL}, 3476, "tcp"}, |
|
+{"nppmp", {NULL}, 3476, "udp"}, |
|
+{"ecomm", {NULL}, 3477, "tcp"}, |
|
+{"ecomm", {NULL}, 3477, "udp"}, |
|
+{"stun", {NULL}, 3478, "tcp"}, |
|
+{"stun", {NULL}, 3478, "udp"}, |
|
+{"turn", {NULL}, 3478, "tcp"}, |
|
+{"turn", {NULL}, 3478, "udp"}, |
|
+{"stun-behavior", {NULL}, 3478, "tcp"}, |
|
+{"stun-behavior", {NULL}, 3478, "udp"}, |
|
+{"twrpc", {NULL}, 3479, "tcp"}, |
|
+{"twrpc", {NULL}, 3479, "udp"}, |
|
+{"plethora", {NULL}, 3480, "tcp"}, |
|
+{"plethora", {NULL}, 3480, "udp"}, |
|
+{"cleanerliverc", {NULL}, 3481, "tcp"}, |
|
+{"cleanerliverc", {NULL}, 3481, "udp"}, |
|
+{"vulture", {NULL}, 3482, "tcp"}, |
|
+{"vulture", {NULL}, 3482, "udp"}, |
|
+{"slim-devices", {NULL}, 3483, "tcp"}, |
|
+{"slim-devices", {NULL}, 3483, "udp"}, |
|
+{"gbs-stp", {NULL}, 3484, "tcp"}, |
|
+{"gbs-stp", {NULL}, 3484, "udp"}, |
|
+{"celatalk", {NULL}, 3485, "tcp"}, |
|
+{"celatalk", {NULL}, 3485, "udp"}, |
|
+{"ifsf-hb-port", {NULL}, 3486, "tcp"}, |
|
+{"ifsf-hb-port", {NULL}, 3486, "udp"}, |
|
+{"ltctcp", {NULL}, 3487, "tcp"}, |
|
+{"ltcudp", {NULL}, 3487, "udp"}, |
|
+{"fs-rh-srv", {NULL}, 3488, "tcp"}, |
|
+{"fs-rh-srv", {NULL}, 3488, "udp"}, |
|
+{"dtp-dia", {NULL}, 3489, "tcp"}, |
|
+{"dtp-dia", {NULL}, 3489, "udp"}, |
|
+{"colubris", {NULL}, 3490, "tcp"}, |
|
+{"colubris", {NULL}, 3490, "udp"}, |
|
+{"swr-port", {NULL}, 3491, "tcp"}, |
|
+{"swr-port", {NULL}, 3491, "udp"}, |
|
+{"tvdumtray-port", {NULL}, 3492, "tcp"}, |
|
+{"tvdumtray-port", {NULL}, 3492, "udp"}, |
|
+{"nut", {NULL}, 3493, "tcp"}, |
|
+{"nut", {NULL}, 3493, "udp"}, |
|
+{"ibm3494", {NULL}, 3494, "tcp"}, |
|
+{"ibm3494", {NULL}, 3494, "udp"}, |
|
+{"seclayer-tcp", {NULL}, 3495, "tcp"}, |
|
+{"seclayer-tcp", {NULL}, 3495, "udp"}, |
|
+{"seclayer-tls", {NULL}, 3496, "tcp"}, |
|
+{"seclayer-tls", {NULL}, 3496, "udp"}, |
|
+{"ipether232port", {NULL}, 3497, "tcp"}, |
|
+{"ipether232port", {NULL}, 3497, "udp"}, |
|
+{"dashpas-port", {NULL}, 3498, "tcp"}, |
|
+{"dashpas-port", {NULL}, 3498, "udp"}, |
|
+{"sccip-media", {NULL}, 3499, "tcp"}, |
|
+{"sccip-media", {NULL}, 3499, "udp"}, |
|
+{"rtmp-port", {NULL}, 3500, "tcp"}, |
|
+{"rtmp-port", {NULL}, 3500, "udp"}, |
|
+{"isoft-p2p", {NULL}, 3501, "tcp"}, |
|
+{"isoft-p2p", {NULL}, 3501, "udp"}, |
|
+{"avinstalldisc", {NULL}, 3502, "tcp"}, |
|
+{"avinstalldisc", {NULL}, 3502, "udp"}, |
|
+{"lsp-ping", {NULL}, 3503, "tcp"}, |
|
+{"lsp-ping", {NULL}, 3503, "udp"}, |
|
+{"ironstorm", {NULL}, 3504, "tcp"}, |
|
+{"ironstorm", {NULL}, 3504, "udp"}, |
|
+{"ccmcomm", {NULL}, 3505, "tcp"}, |
|
+{"ccmcomm", {NULL}, 3505, "udp"}, |
|
+{"apc-3506", {NULL}, 3506, "tcp"}, |
|
+{"apc-3506", {NULL}, 3506, "udp"}, |
|
+{"nesh-broker", {NULL}, 3507, "tcp"}, |
|
+{"nesh-broker", {NULL}, 3507, "udp"}, |
|
+{"interactionweb", {NULL}, 3508, "tcp"}, |
|
+{"interactionweb", {NULL}, 3508, "udp"}, |
|
+{"vt-ssl", {NULL}, 3509, "tcp"}, |
|
+{"vt-ssl", {NULL}, 3509, "udp"}, |
|
+{"xss-port", {NULL}, 3510, "tcp"}, |
|
+{"xss-port", {NULL}, 3510, "udp"}, |
|
+{"webmail-2", {NULL}, 3511, "tcp"}, |
|
+{"webmail-2", {NULL}, 3511, "udp"}, |
|
+{"aztec", {NULL}, 3512, "tcp"}, |
|
+{"aztec", {NULL}, 3512, "udp"}, |
|
+{"arcpd", {NULL}, 3513, "tcp"}, |
|
+{"arcpd", {NULL}, 3513, "udp"}, |
|
+{"must-p2p", {NULL}, 3514, "tcp"}, |
|
+{"must-p2p", {NULL}, 3514, "udp"}, |
|
+{"must-backplane", {NULL}, 3515, "tcp"}, |
|
+{"must-backplane", {NULL}, 3515, "udp"}, |
|
+{"smartcard-port", {NULL}, 3516, "tcp"}, |
|
+{"smartcard-port", {NULL}, 3516, "udp"}, |
|
+{"802-11-iapp", {NULL}, 3517, "tcp"}, |
|
+{"802-11-iapp", {NULL}, 3517, "udp"}, |
|
+{"artifact-msg", {NULL}, 3518, "tcp"}, |
|
+{"artifact-msg", {NULL}, 3518, "udp"}, |
|
+{"nvmsgd", {NULL}, 3519, "tcp"}, |
|
+{"galileo", {NULL}, 3519, "udp"}, |
|
+{"galileolog", {NULL}, 3520, "tcp"}, |
|
+{"galileolog", {NULL}, 3520, "udp"}, |
|
+{"mc3ss", {NULL}, 3521, "tcp"}, |
|
+{"mc3ss", {NULL}, 3521, "udp"}, |
|
+{"nssocketport", {NULL}, 3522, "tcp"}, |
|
+{"nssocketport", {NULL}, 3522, "udp"}, |
|
+{"odeumservlink", {NULL}, 3523, "tcp"}, |
|
+{"odeumservlink", {NULL}, 3523, "udp"}, |
|
+{"ecmport", {NULL}, 3524, "tcp"}, |
|
+{"ecmport", {NULL}, 3524, "udp"}, |
|
+{"eisport", {NULL}, 3525, "tcp"}, |
|
+{"eisport", {NULL}, 3525, "udp"}, |
|
+{"starquiz-port", {NULL}, 3526, "tcp"}, |
|
+{"starquiz-port", {NULL}, 3526, "udp"}, |
|
+{"beserver-msg-q", {NULL}, 3527, "tcp"}, |
|
+{"beserver-msg-q", {NULL}, 3527, "udp"}, |
|
+{"jboss-iiop", {NULL}, 3528, "tcp"}, |
|
+{"jboss-iiop", {NULL}, 3528, "udp"}, |
|
+{"jboss-iiop-ssl", {NULL}, 3529, "tcp"}, |
|
+{"jboss-iiop-ssl", {NULL}, 3529, "udp"}, |
|
+{"gf", {NULL}, 3530, "tcp"}, |
|
+{"gf", {NULL}, 3530, "udp"}, |
|
+{"joltid", {NULL}, 3531, "tcp"}, |
|
+{"joltid", {NULL}, 3531, "udp"}, |
|
+{"raven-rmp", {NULL}, 3532, "tcp"}, |
|
+{"raven-rmp", {NULL}, 3532, "udp"}, |
|
+{"raven-rdp", {NULL}, 3533, "tcp"}, |
|
+{"raven-rdp", {NULL}, 3533, "udp"}, |
|
+{"urld-port", {NULL}, 3534, "tcp"}, |
|
+{"urld-port", {NULL}, 3534, "udp"}, |
|
+{"ms-la", {NULL}, 3535, "tcp"}, |
|
+{"ms-la", {NULL}, 3535, "udp"}, |
|
+{"snac", {NULL}, 3536, "tcp"}, |
|
+{"snac", {NULL}, 3536, "udp"}, |
|
+{"ni-visa-remote", {NULL}, 3537, "tcp"}, |
|
+{"ni-visa-remote", {NULL}, 3537, "udp"}, |
|
+{"ibm-diradm", {NULL}, 3538, "tcp"}, |
|
+{"ibm-diradm", {NULL}, 3538, "udp"}, |
|
+{"ibm-diradm-ssl", {NULL}, 3539, "tcp"}, |
|
+{"ibm-diradm-ssl", {NULL}, 3539, "udp"}, |
|
+{"pnrp-port", {NULL}, 3540, "tcp"}, |
|
+{"pnrp-port", {NULL}, 3540, "udp"}, |
|
+{"voispeed-port", {NULL}, 3541, "tcp"}, |
|
+{"voispeed-port", {NULL}, 3541, "udp"}, |
|
+{"hacl-monitor", {NULL}, 3542, "tcp"}, |
|
+{"hacl-monitor", {NULL}, 3542, "udp"}, |
|
+{"qftest-lookup", {NULL}, 3543, "tcp"}, |
|
+{"qftest-lookup", {NULL}, 3543, "udp"}, |
|
+{"teredo", {NULL}, 3544, "tcp"}, |
|
+{"teredo", {NULL}, 3544, "udp"}, |
|
+{"camac", {NULL}, 3545, "tcp"}, |
|
+{"camac", {NULL}, 3545, "udp"}, |
|
+{"symantec-sim", {NULL}, 3547, "tcp"}, |
|
+{"symantec-sim", {NULL}, 3547, "udp"}, |
|
+{"interworld", {NULL}, 3548, "tcp"}, |
|
+{"interworld", {NULL}, 3548, "udp"}, |
|
+{"tellumat-nms", {NULL}, 3549, "tcp"}, |
|
+{"tellumat-nms", {NULL}, 3549, "udp"}, |
|
+{"ssmpp", {NULL}, 3550, "tcp"}, |
|
+{"ssmpp", {NULL}, 3550, "udp"}, |
|
+{"apcupsd", {NULL}, 3551, "tcp"}, |
|
+{"apcupsd", {NULL}, 3551, "udp"}, |
|
+{"taserver", {NULL}, 3552, "tcp"}, |
|
+{"taserver", {NULL}, 3552, "udp"}, |
|
+{"rbr-discovery", {NULL}, 3553, "tcp"}, |
|
+{"rbr-discovery", {NULL}, 3553, "udp"}, |
|
+{"questnotify", {NULL}, 3554, "tcp"}, |
|
+{"questnotify", {NULL}, 3554, "udp"}, |
|
+{"razor", {NULL}, 3555, "tcp"}, |
|
+{"razor", {NULL}, 3555, "udp"}, |
|
+{"sky-transport", {NULL}, 3556, "tcp"}, |
|
+{"sky-transport", {NULL}, 3556, "udp"}, |
|
+{"personalos-001", {NULL}, 3557, "tcp"}, |
|
+{"personalos-001", {NULL}, 3557, "udp"}, |
|
+{"mcp-port", {NULL}, 3558, "tcp"}, |
|
+{"mcp-port", {NULL}, 3558, "udp"}, |
|
+{"cctv-port", {NULL}, 3559, "tcp"}, |
|
+{"cctv-port", {NULL}, 3559, "udp"}, |
|
+{"iniserve-port", {NULL}, 3560, "tcp"}, |
|
+{"iniserve-port", {NULL}, 3560, "udp"}, |
|
+{"bmc-onekey", {NULL}, 3561, "tcp"}, |
|
+{"bmc-onekey", {NULL}, 3561, "udp"}, |
|
+{"sdbproxy", {NULL}, 3562, "tcp"}, |
|
+{"sdbproxy", {NULL}, 3562, "udp"}, |
|
+{"watcomdebug", {NULL}, 3563, "tcp"}, |
|
+{"watcomdebug", {NULL}, 3563, "udp"}, |
|
+{"esimport", {NULL}, 3564, "tcp"}, |
|
+{"esimport", {NULL}, 3564, "udp"}, |
|
+{"m2pa", {NULL}, 3565, "tcp"}, |
|
+{"m2pa", {NULL}, 3565, "sctp"}, |
|
+{"quest-data-hub", {NULL}, 3566, "tcp"}, |
|
+{"oap", {NULL}, 3567, "tcp"}, |
|
+{"oap", {NULL}, 3567, "udp"}, |
|
+{"oap-s", {NULL}, 3568, "tcp"}, |
|
+{"oap-s", {NULL}, 3568, "udp"}, |
|
+{"mbg-ctrl", {NULL}, 3569, "tcp"}, |
|
+{"mbg-ctrl", {NULL}, 3569, "udp"}, |
|
+{"mccwebsvr-port", {NULL}, 3570, "tcp"}, |
|
+{"mccwebsvr-port", {NULL}, 3570, "udp"}, |
|
+{"megardsvr-port", {NULL}, 3571, "tcp"}, |
|
+{"megardsvr-port", {NULL}, 3571, "udp"}, |
|
+{"megaregsvrport", {NULL}, 3572, "tcp"}, |
|
+{"megaregsvrport", {NULL}, 3572, "udp"}, |
|
+{"tag-ups-1", {NULL}, 3573, "tcp"}, |
|
+{"tag-ups-1", {NULL}, 3573, "udp"}, |
|
+{"dmaf-server", {NULL}, 3574, "tcp"}, |
|
+{"dmaf-caster", {NULL}, 3574, "udp"}, |
|
+{"ccm-port", {NULL}, 3575, "tcp"}, |
|
+{"ccm-port", {NULL}, 3575, "udp"}, |
|
+{"cmc-port", {NULL}, 3576, "tcp"}, |
|
+{"cmc-port", {NULL}, 3576, "udp"}, |
|
+{"config-port", {NULL}, 3577, "tcp"}, |
|
+{"config-port", {NULL}, 3577, "udp"}, |
|
+{"data-port", {NULL}, 3578, "tcp"}, |
|
+{"data-port", {NULL}, 3578, "udp"}, |
|
+{"ttat3lb", {NULL}, 3579, "tcp"}, |
|
+{"ttat3lb", {NULL}, 3579, "udp"}, |
|
+{"nati-svrloc", {NULL}, 3580, "tcp"}, |
|
+{"nati-svrloc", {NULL}, 3580, "udp"}, |
|
+{"kfxaclicensing", {NULL}, 3581, "tcp"}, |
|
+{"kfxaclicensing", {NULL}, 3581, "udp"}, |
|
+{"press", {NULL}, 3582, "tcp"}, |
|
+{"press", {NULL}, 3582, "udp"}, |
|
+{"canex-watch", {NULL}, 3583, "tcp"}, |
|
+{"canex-watch", {NULL}, 3583, "udp"}, |
|
+{"u-dbap", {NULL}, 3584, "tcp"}, |
|
+{"u-dbap", {NULL}, 3584, "udp"}, |
|
+{"emprise-lls", {NULL}, 3585, "tcp"}, |
|
+{"emprise-lls", {NULL}, 3585, "udp"}, |
|
+{"emprise-lsc", {NULL}, 3586, "tcp"}, |
|
+{"emprise-lsc", {NULL}, 3586, "udp"}, |
|
+{"p2pgroup", {NULL}, 3587, "tcp"}, |
|
+{"p2pgroup", {NULL}, 3587, "udp"}, |
|
+{"sentinel", {NULL}, 3588, "tcp"}, |
|
+{"sentinel", {NULL}, 3588, "udp"}, |
|
+{"isomair", {NULL}, 3589, "tcp"}, |
|
+{"isomair", {NULL}, 3589, "udp"}, |
|
+{"wv-csp-sms", {NULL}, 3590, "tcp"}, |
|
+{"wv-csp-sms", {NULL}, 3590, "udp"}, |
|
+{"gtrack-server", {NULL}, 3591, "tcp"}, |
|
+{"gtrack-server", {NULL}, 3591, "udp"}, |
|
+{"gtrack-ne", {NULL}, 3592, "tcp"}, |
|
+{"gtrack-ne", {NULL}, 3592, "udp"}, |
|
+{"bpmd", {NULL}, 3593, "tcp"}, |
|
+{"bpmd", {NULL}, 3593, "udp"}, |
|
+{"mediaspace", {NULL}, 3594, "tcp"}, |
|
+{"mediaspace", {NULL}, 3594, "udp"}, |
|
+{"shareapp", {NULL}, 3595, "tcp"}, |
|
+{"shareapp", {NULL}, 3595, "udp"}, |
|
+{"iw-mmogame", {NULL}, 3596, "tcp"}, |
|
+{"iw-mmogame", {NULL}, 3596, "udp"}, |
|
+{"a14", {NULL}, 3597, "tcp"}, |
|
+{"a14", {NULL}, 3597, "udp"}, |
|
+{"a15", {NULL}, 3598, "tcp"}, |
|
+{"a15", {NULL}, 3598, "udp"}, |
|
+{"quasar-server", {NULL}, 3599, "tcp"}, |
|
+{"quasar-server", {NULL}, 3599, "udp"}, |
|
+{"trap-daemon", {NULL}, 3600, "tcp"}, |
|
+{"trap-daemon", {NULL}, 3600, "udp"}, |
|
+{"visinet-gui", {NULL}, 3601, "tcp"}, |
|
+{"visinet-gui", {NULL}, 3601, "udp"}, |
|
+{"infiniswitchcl", {NULL}, 3602, "tcp"}, |
|
+{"infiniswitchcl", {NULL}, 3602, "udp"}, |
|
+{"int-rcv-cntrl", {NULL}, 3603, "tcp"}, |
|
+{"int-rcv-cntrl", {NULL}, 3603, "udp"}, |
|
+{"bmc-jmx-port", {NULL}, 3604, "tcp"}, |
|
+{"bmc-jmx-port", {NULL}, 3604, "udp"}, |
|
+{"comcam-io", {NULL}, 3605, "tcp"}, |
|
+{"comcam-io", {NULL}, 3605, "udp"}, |
|
+{"splitlock", {NULL}, 3606, "tcp"}, |
|
+{"splitlock", {NULL}, 3606, "udp"}, |
|
+{"precise-i3", {NULL}, 3607, "tcp"}, |
|
+{"precise-i3", {NULL}, 3607, "udp"}, |
|
+{"trendchip-dcp", {NULL}, 3608, "tcp"}, |
|
+{"trendchip-dcp", {NULL}, 3608, "udp"}, |
|
+{"cpdi-pidas-cm", {NULL}, 3609, "tcp"}, |
|
+{"cpdi-pidas-cm", {NULL}, 3609, "udp"}, |
|
+{"echonet", {NULL}, 3610, "tcp"}, |
|
+{"echonet", {NULL}, 3610, "udp"}, |
|
+{"six-degrees", {NULL}, 3611, "tcp"}, |
|
+{"six-degrees", {NULL}, 3611, "udp"}, |
|
+{"hp-dataprotect", {NULL}, 3612, "tcp"}, |
|
+{"hp-dataprotect", {NULL}, 3612, "udp"}, |
|
+{"alaris-disc", {NULL}, 3613, "tcp"}, |
|
+{"alaris-disc", {NULL}, 3613, "udp"}, |
|
+{"sigma-port", {NULL}, 3614, "tcp"}, |
|
+{"sigma-port", {NULL}, 3614, "udp"}, |
|
+{"start-network", {NULL}, 3615, "tcp"}, |
|
+{"start-network", {NULL}, 3615, "udp"}, |
|
+{"cd3o-protocol", {NULL}, 3616, "tcp"}, |
|
+{"cd3o-protocol", {NULL}, 3616, "udp"}, |
|
+{"sharp-server", {NULL}, 3617, "tcp"}, |
|
+{"sharp-server", {NULL}, 3617, "udp"}, |
|
+{"aairnet-1", {NULL}, 3618, "tcp"}, |
|
+{"aairnet-1", {NULL}, 3618, "udp"}, |
|
+{"aairnet-2", {NULL}, 3619, "tcp"}, |
|
+{"aairnet-2", {NULL}, 3619, "udp"}, |
|
+{"ep-pcp", {NULL}, 3620, "tcp"}, |
|
+{"ep-pcp", {NULL}, 3620, "udp"}, |
|
+{"ep-nsp", {NULL}, 3621, "tcp"}, |
|
+{"ep-nsp", {NULL}, 3621, "udp"}, |
|
+{"ff-lr-port", {NULL}, 3622, "tcp"}, |
|
+{"ff-lr-port", {NULL}, 3622, "udp"}, |
|
+{"haipe-discover", {NULL}, 3623, "tcp"}, |
|
+{"haipe-discover", {NULL}, 3623, "udp"}, |
|
+{"dist-upgrade", {NULL}, 3624, "tcp"}, |
|
+{"dist-upgrade", {NULL}, 3624, "udp"}, |
|
+{"volley", {NULL}, 3625, "tcp"}, |
|
+{"volley", {NULL}, 3625, "udp"}, |
|
+{"bvcdaemon-port", {NULL}, 3626, "tcp"}, |
|
+{"bvcdaemon-port", {NULL}, 3626, "udp"}, |
|
+{"jamserverport", {NULL}, 3627, "tcp"}, |
|
+{"jamserverport", {NULL}, 3627, "udp"}, |
|
+{"ept-machine", {NULL}, 3628, "tcp"}, |
|
+{"ept-machine", {NULL}, 3628, "udp"}, |
|
+{"escvpnet", {NULL}, 3629, "tcp"}, |
|
+{"escvpnet", {NULL}, 3629, "udp"}, |
|
+{"cs-remote-db", {NULL}, 3630, "tcp"}, |
|
+{"cs-remote-db", {NULL}, 3630, "udp"}, |
|
+{"cs-services", {NULL}, 3631, "tcp"}, |
|
+{"cs-services", {NULL}, 3631, "udp"}, |
|
+{"distcc", {NULL}, 3632, "tcp"}, |
|
+{"distcc", {NULL}, 3632, "udp"}, |
|
+{"wacp", {NULL}, 3633, "tcp"}, |
|
+{"wacp", {NULL}, 3633, "udp"}, |
|
+{"hlibmgr", {NULL}, 3634, "tcp"}, |
|
+{"hlibmgr", {NULL}, 3634, "udp"}, |
|
+{"sdo", {NULL}, 3635, "tcp"}, |
|
+{"sdo", {NULL}, 3635, "udp"}, |
|
+{"servistaitsm", {NULL}, 3636, "tcp"}, |
|
+{"servistaitsm", {NULL}, 3636, "udp"}, |
|
+{"scservp", {NULL}, 3637, "tcp"}, |
|
+{"scservp", {NULL}, 3637, "udp"}, |
|
+{"ehp-backup", {NULL}, 3638, "tcp"}, |
|
+{"ehp-backup", {NULL}, 3638, "udp"}, |
|
+{"xap-ha", {NULL}, 3639, "tcp"}, |
|
+{"xap-ha", {NULL}, 3639, "udp"}, |
|
+{"netplay-port1", {NULL}, 3640, "tcp"}, |
|
+{"netplay-port1", {NULL}, 3640, "udp"}, |
|
+{"netplay-port2", {NULL}, 3641, "tcp"}, |
|
+{"netplay-port2", {NULL}, 3641, "udp"}, |
|
+{"juxml-port", {NULL}, 3642, "tcp"}, |
|
+{"juxml-port", {NULL}, 3642, "udp"}, |
|
+{"audiojuggler", {NULL}, 3643, "tcp"}, |
|
+{"audiojuggler", {NULL}, 3643, "udp"}, |
|
+{"ssowatch", {NULL}, 3644, "tcp"}, |
|
+{"ssowatch", {NULL}, 3644, "udp"}, |
|
+{"cyc", {NULL}, 3645, "tcp"}, |
|
+{"cyc", {NULL}, 3645, "udp"}, |
|
+{"xss-srv-port", {NULL}, 3646, "tcp"}, |
|
+{"xss-srv-port", {NULL}, 3646, "udp"}, |
|
+{"splitlock-gw", {NULL}, 3647, "tcp"}, |
|
+{"splitlock-gw", {NULL}, 3647, "udp"}, |
|
+{"fjcp", {NULL}, 3648, "tcp"}, |
|
+{"fjcp", {NULL}, 3648, "udp"}, |
|
+{"nmmp", {NULL}, 3649, "tcp"}, |
|
+{"nmmp", {NULL}, 3649, "udp"}, |
|
+{"prismiq-plugin", {NULL}, 3650, "tcp"}, |
|
+{"prismiq-plugin", {NULL}, 3650, "udp"}, |
|
+{"xrpc-registry", {NULL}, 3651, "tcp"}, |
|
+{"xrpc-registry", {NULL}, 3651, "udp"}, |
|
+{"vxcrnbuport", {NULL}, 3652, "tcp"}, |
|
+{"vxcrnbuport", {NULL}, 3652, "udp"}, |
|
+{"tsp", {NULL}, 3653, "tcp"}, |
|
+{"tsp", {NULL}, 3653, "udp"}, |
|
+{"vaprtm", {NULL}, 3654, "tcp"}, |
|
+{"vaprtm", {NULL}, 3654, "udp"}, |
|
+{"abatemgr", {NULL}, 3655, "tcp"}, |
|
+{"abatemgr", {NULL}, 3655, "udp"}, |
|
+{"abatjss", {NULL}, 3656, "tcp"}, |
|
+{"abatjss", {NULL}, 3656, "udp"}, |
|
+{"immedianet-bcn", {NULL}, 3657, "tcp"}, |
|
+{"immedianet-bcn", {NULL}, 3657, "udp"}, |
|
+{"ps-ams", {NULL}, 3658, "tcp"}, |
|
+{"ps-ams", {NULL}, 3658, "udp"}, |
|
+{"apple-sasl", {NULL}, 3659, "tcp"}, |
|
+{"apple-sasl", {NULL}, 3659, "udp"}, |
|
+{"can-nds-ssl", {NULL}, 3660, "tcp"}, |
|
+{"can-nds-ssl", {NULL}, 3660, "udp"}, |
|
+{"can-ferret-ssl", {NULL}, 3661, "tcp"}, |
|
+{"can-ferret-ssl", {NULL}, 3661, "udp"}, |
|
+{"pserver", {NULL}, 3662, "tcp"}, |
|
+{"pserver", {NULL}, 3662, "udp"}, |
|
+{"dtp", {NULL}, 3663, "tcp"}, |
|
+{"dtp", {NULL}, 3663, "udp"}, |
|
+{"ups-engine", {NULL}, 3664, "tcp"}, |
|
+{"ups-engine", {NULL}, 3664, "udp"}, |
|
+{"ent-engine", {NULL}, 3665, "tcp"}, |
|
+{"ent-engine", {NULL}, 3665, "udp"}, |
|
+{"eserver-pap", {NULL}, 3666, "tcp"}, |
|
+{"eserver-pap", {NULL}, 3666, "udp"}, |
|
+{"infoexch", {NULL}, 3667, "tcp"}, |
|
+{"infoexch", {NULL}, 3667, "udp"}, |
|
+{"dell-rm-port", {NULL}, 3668, "tcp"}, |
|
+{"dell-rm-port", {NULL}, 3668, "udp"}, |
|
+{"casanswmgmt", {NULL}, 3669, "tcp"}, |
|
+{"casanswmgmt", {NULL}, 3669, "udp"}, |
|
+{"smile", {NULL}, 3670, "tcp"}, |
|
+{"smile", {NULL}, 3670, "udp"}, |
|
+{"efcp", {NULL}, 3671, "tcp"}, |
|
+{"efcp", {NULL}, 3671, "udp"}, |
|
+{"lispworks-orb", {NULL}, 3672, "tcp"}, |
|
+{"lispworks-orb", {NULL}, 3672, "udp"}, |
|
+{"mediavault-gui", {NULL}, 3673, "tcp"}, |
|
+{"mediavault-gui", {NULL}, 3673, "udp"}, |
|
+{"wininstall-ipc", {NULL}, 3674, "tcp"}, |
|
+{"wininstall-ipc", {NULL}, 3674, "udp"}, |
|
+{"calltrax", {NULL}, 3675, "tcp"}, |
|
+{"calltrax", {NULL}, 3675, "udp"}, |
|
+{"va-pacbase", {NULL}, 3676, "tcp"}, |
|
+{"va-pacbase", {NULL}, 3676, "udp"}, |
|
+{"roverlog", {NULL}, 3677, "tcp"}, |
|
+{"roverlog", {NULL}, 3677, "udp"}, |
|
+{"ipr-dglt", {NULL}, 3678, "tcp"}, |
|
+{"ipr-dglt", {NULL}, 3678, "udp"}, |
|
+{"newton-dock", {NULL}, 3679, "tcp"}, |
|
+{"newton-dock", {NULL}, 3679, "udp"}, |
|
+{"npds-tracker", {NULL}, 3680, "tcp"}, |
|
+{"npds-tracker", {NULL}, 3680, "udp"}, |
|
+{"bts-x73", {NULL}, 3681, "tcp"}, |
|
+{"bts-x73", {NULL}, 3681, "udp"}, |
|
+{"cas-mapi", {NULL}, 3682, "tcp"}, |
|
+{"cas-mapi", {NULL}, 3682, "udp"}, |
|
+{"bmc-ea", {NULL}, 3683, "tcp"}, |
|
+{"bmc-ea", {NULL}, 3683, "udp"}, |
|
+{"faxstfx-port", {NULL}, 3684, "tcp"}, |
|
+{"faxstfx-port", {NULL}, 3684, "udp"}, |
|
+{"dsx-agent", {NULL}, 3685, "tcp"}, |
|
+{"dsx-agent", {NULL}, 3685, "udp"}, |
|
+{"tnmpv2", {NULL}, 3686, "tcp"}, |
|
+{"tnmpv2", {NULL}, 3686, "udp"}, |
|
+{"simple-push", {NULL}, 3687, "tcp"}, |
|
+{"simple-push", {NULL}, 3687, "udp"}, |
|
+{"simple-push-s", {NULL}, 3688, "tcp"}, |
|
+{"simple-push-s", {NULL}, 3688, "udp"}, |
|
+{"daap", {NULL}, 3689, "tcp"}, |
|
+{"daap", {NULL}, 3689, "udp"}, |
|
+{"svn", {NULL}, 3690, "tcp"}, |
|
+{"svn", {NULL}, 3690, "udp"}, |
|
+{"magaya-network", {NULL}, 3691, "tcp"}, |
|
+{"magaya-network", {NULL}, 3691, "udp"}, |
|
+{"intelsync", {NULL}, 3692, "tcp"}, |
|
+{"intelsync", {NULL}, 3692, "udp"}, |
|
+{"bmc-data-coll", {NULL}, 3695, "tcp"}, |
|
+{"bmc-data-coll", {NULL}, 3695, "udp"}, |
|
+{"telnetcpcd", {NULL}, 3696, "tcp"}, |
|
+{"telnetcpcd", {NULL}, 3696, "udp"}, |
|
+{"nw-license", {NULL}, 3697, "tcp"}, |
|
+{"nw-license", {NULL}, 3697, "udp"}, |
|
+{"sagectlpanel", {NULL}, 3698, "tcp"}, |
|
+{"sagectlpanel", {NULL}, 3698, "udp"}, |
|
+{"kpn-icw", {NULL}, 3699, "tcp"}, |
|
+{"kpn-icw", {NULL}, 3699, "udp"}, |
|
+{"lrs-paging", {NULL}, 3700, "tcp"}, |
|
+{"lrs-paging", {NULL}, 3700, "udp"}, |
|
+{"netcelera", {NULL}, 3701, "tcp"}, |
|
+{"netcelera", {NULL}, 3701, "udp"}, |
|
+{"ws-discovery", {NULL}, 3702, "tcp"}, |
|
+{"ws-discovery", {NULL}, 3702, "udp"}, |
|
+{"adobeserver-3", {NULL}, 3703, "tcp"}, |
|
+{"adobeserver-3", {NULL}, 3703, "udp"}, |
|
+{"adobeserver-4", {NULL}, 3704, "tcp"}, |
|
+{"adobeserver-4", {NULL}, 3704, "udp"}, |
|
+{"adobeserver-5", {NULL}, 3705, "tcp"}, |
|
+{"adobeserver-5", {NULL}, 3705, "udp"}, |
|
+{"rt-event", {NULL}, 3706, "tcp"}, |
|
+{"rt-event", {NULL}, 3706, "udp"}, |
|
+{"rt-event-s", {NULL}, 3707, "tcp"}, |
|
+{"rt-event-s", {NULL}, 3707, "udp"}, |
|
+{"sun-as-iiops", {NULL}, 3708, "tcp"}, |
|
+{"sun-as-iiops", {NULL}, 3708, "udp"}, |
|
+{"ca-idms", {NULL}, 3709, "tcp"}, |
|
+{"ca-idms", {NULL}, 3709, "udp"}, |
|
+{"portgate-auth", {NULL}, 3710, "tcp"}, |
|
+{"portgate-auth", {NULL}, 3710, "udp"}, |
|
+{"edb-server2", {NULL}, 3711, "tcp"}, |
|
+{"edb-server2", {NULL}, 3711, "udp"}, |
|
+{"sentinel-ent", {NULL}, 3712, "tcp"}, |
|
+{"sentinel-ent", {NULL}, 3712, "udp"}, |
|
+{"tftps", {NULL}, 3713, "tcp"}, |
|
+{"tftps", {NULL}, 3713, "udp"}, |
|
+{"delos-dms", {NULL}, 3714, "tcp"}, |
|
+{"delos-dms", {NULL}, 3714, "udp"}, |
|
+{"anoto-rendezv", {NULL}, 3715, "tcp"}, |
|
+{"anoto-rendezv", {NULL}, 3715, "udp"}, |
|
+{"wv-csp-sms-cir", {NULL}, 3716, "tcp"}, |
|
+{"wv-csp-sms-cir", {NULL}, 3716, "udp"}, |
|
+{"wv-csp-udp-cir", {NULL}, 3717, "tcp"}, |
|
+{"wv-csp-udp-cir", {NULL}, 3717, "udp"}, |
|
+{"opus-services", {NULL}, 3718, "tcp"}, |
|
+{"opus-services", {NULL}, 3718, "udp"}, |
|
+{"itelserverport", {NULL}, 3719, "tcp"}, |
|
+{"itelserverport", {NULL}, 3719, "udp"}, |
|
+{"ufastro-instr", {NULL}, 3720, "tcp"}, |
|
+{"ufastro-instr", {NULL}, 3720, "udp"}, |
|
+{"xsync", {NULL}, 3721, "tcp"}, |
|
+{"xsync", {NULL}, 3721, "udp"}, |
|
+{"xserveraid", {NULL}, 3722, "tcp"}, |
|
+{"xserveraid", {NULL}, 3722, "udp"}, |
|
+{"sychrond", {NULL}, 3723, "tcp"}, |
|
+{"sychrond", {NULL}, 3723, "udp"}, |
|
+{"blizwow", {NULL}, 3724, "tcp"}, |
|
+{"blizwow", {NULL}, 3724, "udp"}, |
|
+{"na-er-tip", {NULL}, 3725, "tcp"}, |
|
+{"na-er-tip", {NULL}, 3725, "udp"}, |
|
+{"array-manager", {NULL}, 3726, "tcp"}, |
|
+{"array-manager", {NULL}, 3726, "udp"}, |
|
+{"e-mdu", {NULL}, 3727, "tcp"}, |
|
+{"e-mdu", {NULL}, 3727, "udp"}, |
|
+{"e-woa", {NULL}, 3728, "tcp"}, |
|
+{"e-woa", {NULL}, 3728, "udp"}, |
|
+{"fksp-audit", {NULL}, 3729, "tcp"}, |
|
+{"fksp-audit", {NULL}, 3729, "udp"}, |
|
+{"client-ctrl", {NULL}, 3730, "tcp"}, |
|
+{"client-ctrl", {NULL}, 3730, "udp"}, |
|
+{"smap", {NULL}, 3731, "tcp"}, |
|
+{"smap", {NULL}, 3731, "udp"}, |
|
+{"m-wnn", {NULL}, 3732, "tcp"}, |
|
+{"m-wnn", {NULL}, 3732, "udp"}, |
|
+{"multip-msg", {NULL}, 3733, "tcp"}, |
|
+{"multip-msg", {NULL}, 3733, "udp"}, |
|
+{"synel-data", {NULL}, 3734, "tcp"}, |
|
+{"synel-data", {NULL}, 3734, "udp"}, |
|
+{"pwdis", {NULL}, 3735, "tcp"}, |
|
+{"pwdis", {NULL}, 3735, "udp"}, |
|
+{"rs-rmi", {NULL}, 3736, "tcp"}, |
|
+{"rs-rmi", {NULL}, 3736, "udp"}, |
|
+{"xpanel", {NULL}, 3737, "tcp"}, |
|
+{"versatalk", {NULL}, 3738, "tcp"}, |
|
+{"versatalk", {NULL}, 3738, "udp"}, |
|
+{"launchbird-lm", {NULL}, 3739, "tcp"}, |
|
+{"launchbird-lm", {NULL}, 3739, "udp"}, |
|
+{"heartbeat", {NULL}, 3740, "tcp"}, |
|
+{"heartbeat", {NULL}, 3740, "udp"}, |
|
+{"wysdma", {NULL}, 3741, "tcp"}, |
|
+{"wysdma", {NULL}, 3741, "udp"}, |
|
+{"cst-port", {NULL}, 3742, "tcp"}, |
|
+{"cst-port", {NULL}, 3742, "udp"}, |
|
+{"ipcs-command", {NULL}, 3743, "tcp"}, |
|
+{"ipcs-command", {NULL}, 3743, "udp"}, |
|
+{"sasg", {NULL}, 3744, "tcp"}, |
|
+{"sasg", {NULL}, 3744, "udp"}, |
|
+{"gw-call-port", {NULL}, 3745, "tcp"}, |
|
+{"gw-call-port", {NULL}, 3745, "udp"}, |
|
+{"linktest", {NULL}, 3746, "tcp"}, |
|
+{"linktest", {NULL}, 3746, "udp"}, |
|
+{"linktest-s", {NULL}, 3747, "tcp"}, |
|
+{"linktest-s", {NULL}, 3747, "udp"}, |
|
+{"webdata", {NULL}, 3748, "tcp"}, |
|
+{"webdata", {NULL}, 3748, "udp"}, |
|
+{"cimtrak", {NULL}, 3749, "tcp"}, |
|
+{"cimtrak", {NULL}, 3749, "udp"}, |
|
+{"cbos-ip-port", {NULL}, 3750, "tcp"}, |
|
+{"cbos-ip-port", {NULL}, 3750, "udp"}, |
|
+{"gprs-cube", {NULL}, 3751, "tcp"}, |
|
+{"gprs-cube", {NULL}, 3751, "udp"}, |
|
+{"vipremoteagent", {NULL}, 3752, "tcp"}, |
|
+{"vipremoteagent", {NULL}, 3752, "udp"}, |
|
+{"nattyserver", {NULL}, 3753, "tcp"}, |
|
+{"nattyserver", {NULL}, 3753, "udp"}, |
|
+{"timestenbroker", {NULL}, 3754, "tcp"}, |
|
+{"timestenbroker", {NULL}, 3754, "udp"}, |
|
+{"sas-remote-hlp", {NULL}, 3755, "tcp"}, |
|
+{"sas-remote-hlp", {NULL}, 3755, "udp"}, |
|
+{"canon-capt", {NULL}, 3756, "tcp"}, |
|
+{"canon-capt", {NULL}, 3756, "udp"}, |
|
+{"grf-port", {NULL}, 3757, "tcp"}, |
|
+{"grf-port", {NULL}, 3757, "udp"}, |
|
+{"apw-registry", {NULL}, 3758, "tcp"}, |
|
+{"apw-registry", {NULL}, 3758, "udp"}, |
|
+{"exapt-lmgr", {NULL}, 3759, "tcp"}, |
|
+{"exapt-lmgr", {NULL}, 3759, "udp"}, |
|
+{"adtempusclient", {NULL}, 3760, "tcp"}, |
|
+{"adtempusclient", {NULL}, 3760, "udp"}, |
|
+{"gsakmp", {NULL}, 3761, "tcp"}, |
|
+{"gsakmp", {NULL}, 3761, "udp"}, |
|
+{"gbs-smp", {NULL}, 3762, "tcp"}, |
|
+{"gbs-smp", {NULL}, 3762, "udp"}, |
|
+{"xo-wave", {NULL}, 3763, "tcp"}, |
|
+{"xo-wave", {NULL}, 3763, "udp"}, |
|
+{"mni-prot-rout", {NULL}, 3764, "tcp"}, |
|
+{"mni-prot-rout", {NULL}, 3764, "udp"}, |
|
+{"rtraceroute", {NULL}, 3765, "tcp"}, |
|
+{"rtraceroute", {NULL}, 3765, "udp"}, |
|
+{"listmgr-port", {NULL}, 3767, "tcp"}, |
|
+{"listmgr-port", {NULL}, 3767, "udp"}, |
|
+{"rblcheckd", {NULL}, 3768, "tcp"}, |
|
+{"rblcheckd", {NULL}, 3768, "udp"}, |
|
+{"haipe-otnk", {NULL}, 3769, "tcp"}, |
|
+{"haipe-otnk", {NULL}, 3769, "udp"}, |
|
+{"cindycollab", {NULL}, 3770, "tcp"}, |
|
+{"cindycollab", {NULL}, 3770, "udp"}, |
|
+{"paging-port", {NULL}, 3771, "tcp"}, |
|
+{"paging-port", {NULL}, 3771, "udp"}, |
|
+{"ctp", {NULL}, 3772, "tcp"}, |
|
+{"ctp", {NULL}, 3772, "udp"}, |
|
+{"ctdhercules", {NULL}, 3773, "tcp"}, |
|
+{"ctdhercules", {NULL}, 3773, "udp"}, |
|
+{"zicom", {NULL}, 3774, "tcp"}, |
|
+{"zicom", {NULL}, 3774, "udp"}, |
|
+{"ispmmgr", {NULL}, 3775, "tcp"}, |
|
+{"ispmmgr", {NULL}, 3775, "udp"}, |
|
+{"dvcprov-port", {NULL}, 3776, "tcp"}, |
|
+{"dvcprov-port", {NULL}, 3776, "udp"}, |
|
+{"jibe-eb", {NULL}, 3777, "tcp"}, |
|
+{"jibe-eb", {NULL}, 3777, "udp"}, |
|
+{"c-h-it-port", {NULL}, 3778, "tcp"}, |
|
+{"c-h-it-port", {NULL}, 3778, "udp"}, |
|
+{"cognima", {NULL}, 3779, "tcp"}, |
|
+{"cognima", {NULL}, 3779, "udp"}, |
|
+{"nnp", {NULL}, 3780, "tcp"}, |
|
+{"nnp", {NULL}, 3780, "udp"}, |
|
+{"abcvoice-port", {NULL}, 3781, "tcp"}, |
|
+{"abcvoice-port", {NULL}, 3781, "udp"}, |
|
+{"iso-tp0s", {NULL}, 3782, "tcp"}, |
|
+{"iso-tp0s", {NULL}, 3782, "udp"}, |
|
+{"bim-pem", {NULL}, 3783, "tcp"}, |
|
+{"bim-pem", {NULL}, 3783, "udp"}, |
|
+{"bfd-control", {NULL}, 3784, "tcp"}, |
|
+{"bfd-control", {NULL}, 3784, "udp"}, |
|
+{"bfd-echo", {NULL}, 3785, "tcp"}, |
|
+{"bfd-echo", {NULL}, 3785, "udp"}, |
|
+{"upstriggervsw", {NULL}, 3786, "tcp"}, |
|
+{"upstriggervsw", {NULL}, 3786, "udp"}, |
|
+{"fintrx", {NULL}, 3787, "tcp"}, |
|
+{"fintrx", {NULL}, 3787, "udp"}, |
|
+{"isrp-port", {NULL}, 3788, "tcp"}, |
|
+{"isrp-port", {NULL}, 3788, "udp"}, |
|
+{"remotedeploy", {NULL}, 3789, "tcp"}, |
|
+{"remotedeploy", {NULL}, 3789, "udp"}, |
|
+{"quickbooksrds", {NULL}, 3790, "tcp"}, |
|
+{"quickbooksrds", {NULL}, 3790, "udp"}, |
|
+{"tvnetworkvideo", {NULL}, 3791, "tcp"}, |
|
+{"tvnetworkvideo", {NULL}, 3791, "udp"}, |
|
+{"sitewatch", {NULL}, 3792, "tcp"}, |
|
+{"sitewatch", {NULL}, 3792, "udp"}, |
|
+{"dcsoftware", {NULL}, 3793, "tcp"}, |
|
+{"dcsoftware", {NULL}, 3793, "udp"}, |
|
+{"jaus", {NULL}, 3794, "tcp"}, |
|
+{"jaus", {NULL}, 3794, "udp"}, |
|
+{"myblast", {NULL}, 3795, "tcp"}, |
|
+{"myblast", {NULL}, 3795, "udp"}, |
|
+{"spw-dialer", {NULL}, 3796, "tcp"}, |
|
+{"spw-dialer", {NULL}, 3796, "udp"}, |
|
+{"idps", {NULL}, 3797, "tcp"}, |
|
+{"idps", {NULL}, 3797, "udp"}, |
|
+{"minilock", {NULL}, 3798, "tcp"}, |
|
+{"minilock", {NULL}, 3798, "udp"}, |
|
+{"radius-dynauth", {NULL}, 3799, "tcp"}, |
|
+{"radius-dynauth", {NULL}, 3799, "udp"}, |
|
+{"pwgpsi", {NULL}, 3800, "tcp"}, |
|
+{"pwgpsi", {NULL}, 3800, "udp"}, |
|
+{"ibm-mgr", {NULL}, 3801, "tcp"}, |
|
+{"ibm-mgr", {NULL}, 3801, "udp"}, |
|
+{"vhd", {NULL}, 3802, "tcp"}, |
|
+{"vhd", {NULL}, 3802, "udp"}, |
|
+{"soniqsync", {NULL}, 3803, "tcp"}, |
|
+{"soniqsync", {NULL}, 3803, "udp"}, |
|
+{"iqnet-port", {NULL}, 3804, "tcp"}, |
|
+{"iqnet-port", {NULL}, 3804, "udp"}, |
|
+{"tcpdataserver", {NULL}, 3805, "tcp"}, |
|
+{"tcpdataserver", {NULL}, 3805, "udp"}, |
|
+{"wsmlb", {NULL}, 3806, "tcp"}, |
|
+{"wsmlb", {NULL}, 3806, "udp"}, |
|
+{"spugna", {NULL}, 3807, "tcp"}, |
|
+{"spugna", {NULL}, 3807, "udp"}, |
|
+{"sun-as-iiops-ca", {NULL}, 3808, "tcp"}, |
|
+{"sun-as-iiops-ca", {NULL}, 3808, "udp"}, |
|
+{"apocd", {NULL}, 3809, "tcp"}, |
|
+{"apocd", {NULL}, 3809, "udp"}, |
|
+{"wlanauth", {NULL}, 3810, "tcp"}, |
|
+{"wlanauth", {NULL}, 3810, "udp"}, |
|
+{"amp", {NULL}, 3811, "tcp"}, |
|
+{"amp", {NULL}, 3811, "udp"}, |
|
+{"neto-wol-server", {NULL}, 3812, "tcp"}, |
|
+{"neto-wol-server", {NULL}, 3812, "udp"}, |
|
+{"rap-ip", {NULL}, 3813, "tcp"}, |
|
+{"rap-ip", {NULL}, 3813, "udp"}, |
|
+{"neto-dcs", {NULL}, 3814, "tcp"}, |
|
+{"neto-dcs", {NULL}, 3814, "udp"}, |
|
+{"lansurveyorxml", {NULL}, 3815, "tcp"}, |
|
+{"lansurveyorxml", {NULL}, 3815, "udp"}, |
|
+{"sunlps-http", {NULL}, 3816, "tcp"}, |
|
+{"sunlps-http", {NULL}, 3816, "udp"}, |
|
+{"tapeware", {NULL}, 3817, "tcp"}, |
|
+{"tapeware", {NULL}, 3817, "udp"}, |
|
+{"crinis-hb", {NULL}, 3818, "tcp"}, |
|
+{"crinis-hb", {NULL}, 3818, "udp"}, |
|
+{"epl-slp", {NULL}, 3819, "tcp"}, |
|
+{"epl-slp", {NULL}, 3819, "udp"}, |
|
+{"scp", {NULL}, 3820, "tcp"}, |
|
+{"scp", {NULL}, 3820, "udp"}, |
|
+{"pmcp", {NULL}, 3821, "tcp"}, |
|
+{"pmcp", {NULL}, 3821, "udp"}, |
|
+{"acp-discovery", {NULL}, 3822, "tcp"}, |
|
+{"acp-discovery", {NULL}, 3822, "udp"}, |
|
+{"acp-conduit", {NULL}, 3823, "tcp"}, |
|
+{"acp-conduit", {NULL}, 3823, "udp"}, |
|
+{"acp-policy", {NULL}, 3824, "tcp"}, |
|
+{"acp-policy", {NULL}, 3824, "udp"}, |
|
+{"ffserver", {NULL}, 3825, "tcp"}, |
|
+{"ffserver", {NULL}, 3825, "udp"}, |
|
+{"wormux", {NULL}, 3826, "tcp"}, |
|
+{"wormux", {NULL}, 3826, "udp"}, |
|
+{"netmpi", {NULL}, 3827, "tcp"}, |
|
+{"netmpi", {NULL}, 3827, "udp"}, |
|
+{"neteh", {NULL}, 3828, "tcp"}, |
|
+{"neteh", {NULL}, 3828, "udp"}, |
|
+{"neteh-ext", {NULL}, 3829, "tcp"}, |
|
+{"neteh-ext", {NULL}, 3829, "udp"}, |
|
+{"cernsysmgmtagt", {NULL}, 3830, "tcp"}, |
|
+{"cernsysmgmtagt", {NULL}, 3830, "udp"}, |
|
+{"dvapps", {NULL}, 3831, "tcp"}, |
|
+{"dvapps", {NULL}, 3831, "udp"}, |
|
+{"xxnetserver", {NULL}, 3832, "tcp"}, |
|
+{"xxnetserver", {NULL}, 3832, "udp"}, |
|
+{"aipn-auth", {NULL}, 3833, "tcp"}, |
|
+{"aipn-auth", {NULL}, 3833, "udp"}, |
|
+{"spectardata", {NULL}, 3834, "tcp"}, |
|
+{"spectardata", {NULL}, 3834, "udp"}, |
|
+{"spectardb", {NULL}, 3835, "tcp"}, |
|
+{"spectardb", {NULL}, 3835, "udp"}, |
|
+{"markem-dcp", {NULL}, 3836, "tcp"}, |
|
+{"markem-dcp", {NULL}, 3836, "udp"}, |
|
+{"mkm-discovery", {NULL}, 3837, "tcp"}, |
|
+{"mkm-discovery", {NULL}, 3837, "udp"}, |
|
+{"sos", {NULL}, 3838, "tcp"}, |
|
+{"sos", {NULL}, 3838, "udp"}, |
|
+{"amx-rms", {NULL}, 3839, "tcp"}, |
|
+{"amx-rms", {NULL}, 3839, "udp"}, |
|
+{"flirtmitmir", {NULL}, 3840, "tcp"}, |
|
+{"flirtmitmir", {NULL}, 3840, "udp"}, |
|
+{"zfirm-shiprush3", {NULL}, 3841, "tcp"}, |
|
+{"zfirm-shiprush3", {NULL}, 3841, "udp"}, |
|
+{"nhci", {NULL}, 3842, "tcp"}, |
|
+{"nhci", {NULL}, 3842, "udp"}, |
|
+{"quest-agent", {NULL}, 3843, "tcp"}, |
|
+{"quest-agent", {NULL}, 3843, "udp"}, |
|
+{"rnm", {NULL}, 3844, "tcp"}, |
|
+{"rnm", {NULL}, 3844, "udp"}, |
|
+{"v-one-spp", {NULL}, 3845, "tcp"}, |
|
+{"v-one-spp", {NULL}, 3845, "udp"}, |
|
+{"an-pcp", {NULL}, 3846, "tcp"}, |
|
+{"an-pcp", {NULL}, 3846, "udp"}, |
|
+{"msfw-control", {NULL}, 3847, "tcp"}, |
|
+{"msfw-control", {NULL}, 3847, "udp"}, |
|
+{"item", {NULL}, 3848, "tcp"}, |
|
+{"item", {NULL}, 3848, "udp"}, |
|
+{"spw-dnspreload", {NULL}, 3849, "tcp"}, |
|
+{"spw-dnspreload", {NULL}, 3849, "udp"}, |
|
+{"qtms-bootstrap", {NULL}, 3850, "tcp"}, |
|
+{"qtms-bootstrap", {NULL}, 3850, "udp"}, |
|
+{"spectraport", {NULL}, 3851, "tcp"}, |
|
+{"spectraport", {NULL}, 3851, "udp"}, |
|
+{"sse-app-config", {NULL}, 3852, "tcp"}, |
|
+{"sse-app-config", {NULL}, 3852, "udp"}, |
|
+{"sscan", {NULL}, 3853, "tcp"}, |
|
+{"sscan", {NULL}, 3853, "udp"}, |
|
+{"stryker-com", {NULL}, 3854, "tcp"}, |
|
+{"stryker-com", {NULL}, 3854, "udp"}, |
|
+{"opentrac", {NULL}, 3855, "tcp"}, |
|
+{"opentrac", {NULL}, 3855, "udp"}, |
|
+{"informer", {NULL}, 3856, "tcp"}, |
|
+{"informer", {NULL}, 3856, "udp"}, |
|
+{"trap-port", {NULL}, 3857, "tcp"}, |
|
+{"trap-port", {NULL}, 3857, "udp"}, |
|
+{"trap-port-mom", {NULL}, 3858, "tcp"}, |
|
+{"trap-port-mom", {NULL}, 3858, "udp"}, |
|
+{"nav-port", {NULL}, 3859, "tcp"}, |
|
+{"nav-port", {NULL}, 3859, "udp"}, |
|
+{"sasp", {NULL}, 3860, "tcp"}, |
|
+{"sasp", {NULL}, 3860, "udp"}, |
|
+{"winshadow-hd", {NULL}, 3861, "tcp"}, |
|
+{"winshadow-hd", {NULL}, 3861, "udp"}, |
|
+{"giga-pocket", {NULL}, 3862, "tcp"}, |
|
+{"giga-pocket", {NULL}, 3862, "udp"}, |
|
+{"asap-tcp", {NULL}, 3863, "tcp"}, |
|
+{"asap-udp", {NULL}, 3863, "udp"}, |
|
+{"asap-sctp", {NULL}, 3863, "sctp"}, |
|
+{"asap-tcp-tls", {NULL}, 3864, "tcp"}, |
|
+{"asap-sctp-tls", {NULL}, 3864, "sctp"}, |
|
+{"xpl", {NULL}, 3865, "tcp"}, |
|
+{"xpl", {NULL}, 3865, "udp"}, |
|
+{"dzdaemon", {NULL}, 3866, "tcp"}, |
|
+{"dzdaemon", {NULL}, 3866, "udp"}, |
|
+{"dzoglserver", {NULL}, 3867, "tcp"}, |
|
+{"dzoglserver", {NULL}, 3867, "udp"}, |
|
+{"diameter", {NULL}, 3868, "tcp"}, |
|
+{"diameter", {NULL}, 3868, "sctp"}, |
|
+{"ovsam-mgmt", {NULL}, 3869, "tcp"}, |
|
+{"ovsam-mgmt", {NULL}, 3869, "udp"}, |
|
+{"ovsam-d-agent", {NULL}, 3870, "tcp"}, |
|
+{"ovsam-d-agent", {NULL}, 3870, "udp"}, |
|
+{"avocent-adsap", {NULL}, 3871, "tcp"}, |
|
+{"avocent-adsap", {NULL}, 3871, "udp"}, |
|
+{"oem-agent", {NULL}, 3872, "tcp"}, |
|
+{"oem-agent", {NULL}, 3872, "udp"}, |
|
+{"fagordnc", {NULL}, 3873, "tcp"}, |
|
+{"fagordnc", {NULL}, 3873, "udp"}, |
|
+{"sixxsconfig", {NULL}, 3874, "tcp"}, |
|
+{"sixxsconfig", {NULL}, 3874, "udp"}, |
|
+{"pnbscada", {NULL}, 3875, "tcp"}, |
|
+{"pnbscada", {NULL}, 3875, "udp"}, |
|
+{"dl_agent", {NULL}, 3876, "tcp"}, |
|
+{"dl_agent", {NULL}, 3876, "udp"}, |
|
+{"xmpcr-interface", {NULL}, 3877, "tcp"}, |
|
+{"xmpcr-interface", {NULL}, 3877, "udp"}, |
|
+{"fotogcad", {NULL}, 3878, "tcp"}, |
|
+{"fotogcad", {NULL}, 3878, "udp"}, |
|
+{"appss-lm", {NULL}, 3879, "tcp"}, |
|
+{"appss-lm", {NULL}, 3879, "udp"}, |
|
+{"igrs", {NULL}, 3880, "tcp"}, |
|
+{"igrs", {NULL}, 3880, "udp"}, |
|
+{"idac", {NULL}, 3881, "tcp"}, |
|
+{"idac", {NULL}, 3881, "udp"}, |
|
+{"msdts1", {NULL}, 3882, "tcp"}, |
|
+{"msdts1", {NULL}, 3882, "udp"}, |
|
+{"vrpn", {NULL}, 3883, "tcp"}, |
|
+{"vrpn", {NULL}, 3883, "udp"}, |
|
+{"softrack-meter", {NULL}, 3884, "tcp"}, |
|
+{"softrack-meter", {NULL}, 3884, "udp"}, |
|
+{"topflow-ssl", {NULL}, 3885, "tcp"}, |
|
+{"topflow-ssl", {NULL}, 3885, "udp"}, |
|
+{"nei-management", {NULL}, 3886, "tcp"}, |
|
+{"nei-management", {NULL}, 3886, "udp"}, |
|
+{"ciphire-data", {NULL}, 3887, "tcp"}, |
|
+{"ciphire-data", {NULL}, 3887, "udp"}, |
|
+{"ciphire-serv", {NULL}, 3888, "tcp"}, |
|
+{"ciphire-serv", {NULL}, 3888, "udp"}, |
|
+{"dandv-tester", {NULL}, 3889, "tcp"}, |
|
+{"dandv-tester", {NULL}, 3889, "udp"}, |
|
+{"ndsconnect", {NULL}, 3890, "tcp"}, |
|
+{"ndsconnect", {NULL}, 3890, "udp"}, |
|
+{"rtc-pm-port", {NULL}, 3891, "tcp"}, |
|
+{"rtc-pm-port", {NULL}, 3891, "udp"}, |
|
+{"pcc-image-port", {NULL}, 3892, "tcp"}, |
|
+{"pcc-image-port", {NULL}, 3892, "udp"}, |
|
+{"cgi-starapi", {NULL}, 3893, "tcp"}, |
|
+{"cgi-starapi", {NULL}, 3893, "udp"}, |
|
+{"syam-agent", {NULL}, 3894, "tcp"}, |
|
+{"syam-agent", {NULL}, 3894, "udp"}, |
|
+{"syam-smc", {NULL}, 3895, "tcp"}, |
|
+{"syam-smc", {NULL}, 3895, "udp"}, |
|
+{"sdo-tls", {NULL}, 3896, "tcp"}, |
|
+{"sdo-tls", {NULL}, 3896, "udp"}, |
|
+{"sdo-ssh", {NULL}, 3897, "tcp"}, |
|
+{"sdo-ssh", {NULL}, 3897, "udp"}, |
|
+{"senip", {NULL}, 3898, "tcp"}, |
|
+{"senip", {NULL}, 3898, "udp"}, |
|
+{"itv-control", {NULL}, 3899, "tcp"}, |
|
+{"itv-control", {NULL}, 3899, "udp"}, |
|
+{"udt_os", {NULL}, 3900, "tcp"}, |
|
+{"udt_os", {NULL}, 3900, "udp"}, |
|
+{"nimsh", {NULL}, 3901, "tcp"}, |
|
+{"nimsh", {NULL}, 3901, "udp"}, |
|
+{"nimaux", {NULL}, 3902, "tcp"}, |
|
+{"nimaux", {NULL}, 3902, "udp"}, |
|
+{"charsetmgr", {NULL}, 3903, "tcp"}, |
|
+{"charsetmgr", {NULL}, 3903, "udp"}, |
|
+{"omnilink-port", {NULL}, 3904, "tcp"}, |
|
+{"omnilink-port", {NULL}, 3904, "udp"}, |
|
+{"mupdate", {NULL}, 3905, "tcp"}, |
|
+{"mupdate", {NULL}, 3905, "udp"}, |
|
+{"topovista-data", {NULL}, 3906, "tcp"}, |
|
+{"topovista-data", {NULL}, 3906, "udp"}, |
|
+{"imoguia-port", {NULL}, 3907, "tcp"}, |
|
+{"imoguia-port", {NULL}, 3907, "udp"}, |
|
+{"hppronetman", {NULL}, 3908, "tcp"}, |
|
+{"hppronetman", {NULL}, 3908, "udp"}, |
|
+{"surfcontrolcpa", {NULL}, 3909, "tcp"}, |
|
+{"surfcontrolcpa", {NULL}, 3909, "udp"}, |
|
+{"prnrequest", {NULL}, 3910, "tcp"}, |
|
+{"prnrequest", {NULL}, 3910, "udp"}, |
|
+{"prnstatus", {NULL}, 3911, "tcp"}, |
|
+{"prnstatus", {NULL}, 3911, "udp"}, |
|
+{"gbmt-stars", {NULL}, 3912, "tcp"}, |
|
+{"gbmt-stars", {NULL}, 3912, "udp"}, |
|
+{"listcrt-port", {NULL}, 3913, "tcp"}, |
|
+{"listcrt-port", {NULL}, 3913, "udp"}, |
|
+{"listcrt-port-2", {NULL}, 3914, "tcp"}, |
|
+{"listcrt-port-2", {NULL}, 3914, "udp"}, |
|
+{"agcat", {NULL}, 3915, "tcp"}, |
|
+{"agcat", {NULL}, 3915, "udp"}, |
|
+{"wysdmc", {NULL}, 3916, "tcp"}, |
|
+{"wysdmc", {NULL}, 3916, "udp"}, |
|
+{"aftmux", {NULL}, 3917, "tcp"}, |
|
+{"aftmux", {NULL}, 3917, "udp"}, |
|
+{"pktcablemmcops", {NULL}, 3918, "tcp"}, |
|
+{"pktcablemmcops", {NULL}, 3918, "udp"}, |
|
+{"hyperip", {NULL}, 3919, "tcp"}, |
|
+{"hyperip", {NULL}, 3919, "udp"}, |
|
+{"exasoftport1", {NULL}, 3920, "tcp"}, |
|
+{"exasoftport1", {NULL}, 3920, "udp"}, |
|
+{"herodotus-net", {NULL}, 3921, "tcp"}, |
|
+{"herodotus-net", {NULL}, 3921, "udp"}, |
|
+{"sor-update", {NULL}, 3922, "tcp"}, |
|
+{"sor-update", {NULL}, 3922, "udp"}, |
|
+{"symb-sb-port", {NULL}, 3923, "tcp"}, |
|
+{"symb-sb-port", {NULL}, 3923, "udp"}, |
|
+{"mpl-gprs-port", {NULL}, 3924, "tcp"}, |
|
+{"mpl-gprs-port", {NULL}, 3924, "udp"}, |
|
+{"zmp", {NULL}, 3925, "tcp"}, |
|
+{"zmp", {NULL}, 3925, "udp"}, |
|
+{"winport", {NULL}, 3926, "tcp"}, |
|
+{"winport", {NULL}, 3926, "udp"}, |
|
+{"natdataservice", {NULL}, 3927, "tcp"}, |
|
+{"natdataservice", {NULL}, 3927, "udp"}, |
|
+{"netboot-pxe", {NULL}, 3928, "tcp"}, |
|
+{"netboot-pxe", {NULL}, 3928, "udp"}, |
|
+{"smauth-port", {NULL}, 3929, "tcp"}, |
|
+{"smauth-port", {NULL}, 3929, "udp"}, |
|
+{"syam-webserver", {NULL}, 3930, "tcp"}, |
|
+{"syam-webserver", {NULL}, 3930, "udp"}, |
|
+{"msr-plugin-port", {NULL}, 3931, "tcp"}, |
|
+{"msr-plugin-port", {NULL}, 3931, "udp"}, |
|
+{"dyn-site", {NULL}, 3932, "tcp"}, |
|
+{"dyn-site", {NULL}, 3932, "udp"}, |
|
+{"plbserve-port", {NULL}, 3933, "tcp"}, |
|
+{"plbserve-port", {NULL}, 3933, "udp"}, |
|
+{"sunfm-port", {NULL}, 3934, "tcp"}, |
|
+{"sunfm-port", {NULL}, 3934, "udp"}, |
|
+{"sdp-portmapper", {NULL}, 3935, "tcp"}, |
|
+{"sdp-portmapper", {NULL}, 3935, "udp"}, |
|
+{"mailprox", {NULL}, 3936, "tcp"}, |
|
+{"mailprox", {NULL}, 3936, "udp"}, |
|
+{"dvbservdsc", {NULL}, 3937, "tcp"}, |
|
+{"dvbservdsc", {NULL}, 3937, "udp"}, |
|
+{"dbcontrol_agent", {NULL}, 3938, "tcp"}, |
|
+{"dbcontrol_agent", {NULL}, 3938, "udp"}, |
|
+{"aamp", {NULL}, 3939, "tcp"}, |
|
+{"aamp", {NULL}, 3939, "udp"}, |
|
+{"xecp-node", {NULL}, 3940, "tcp"}, |
|
+{"xecp-node", {NULL}, 3940, "udp"}, |
|
+{"homeportal-web", {NULL}, 3941, "tcp"}, |
|
+{"homeportal-web", {NULL}, 3941, "udp"}, |
|
+{"srdp", {NULL}, 3942, "tcp"}, |
|
+{"srdp", {NULL}, 3942, "udp"}, |
|
+{"tig", {NULL}, 3943, "tcp"}, |
|
+{"tig", {NULL}, 3943, "udp"}, |
|
+{"sops", {NULL}, 3944, "tcp"}, |
|
+{"sops", {NULL}, 3944, "udp"}, |
|
+{"emcads", {NULL}, 3945, "tcp"}, |
|
+{"emcads", {NULL}, 3945, "udp"}, |
|
+{"backupedge", {NULL}, 3946, "tcp"}, |
|
+{"backupedge", {NULL}, 3946, "udp"}, |
|
+{"ccp", {NULL}, 3947, "tcp"}, |
|
+{"ccp", {NULL}, 3947, "udp"}, |
|
+{"apdap", {NULL}, 3948, "tcp"}, |
|
+{"apdap", {NULL}, 3948, "udp"}, |
|
+{"drip", {NULL}, 3949, "tcp"}, |
|
+{"drip", {NULL}, 3949, "udp"}, |
|
+{"namemunge", {NULL}, 3950, "tcp"}, |
|
+{"namemunge", {NULL}, 3950, "udp"}, |
|
+{"pwgippfax", {NULL}, 3951, "tcp"}, |
|
+{"pwgippfax", {NULL}, 3951, "udp"}, |
|
+{"i3-sessionmgr", {NULL}, 3952, "tcp"}, |
|
+{"i3-sessionmgr", {NULL}, 3952, "udp"}, |
|
+{"xmlink-connect", {NULL}, 3953, "tcp"}, |
|
+{"xmlink-connect", {NULL}, 3953, "udp"}, |
|
+{"adrep", {NULL}, 3954, "tcp"}, |
|
+{"adrep", {NULL}, 3954, "udp"}, |
|
+{"p2pcommunity", {NULL}, 3955, "tcp"}, |
|
+{"p2pcommunity", {NULL}, 3955, "udp"}, |
|
+{"gvcp", {NULL}, 3956, "tcp"}, |
|
+{"gvcp", {NULL}, 3956, "udp"}, |
|
+{"mqe-broker", {NULL}, 3957, "tcp"}, |
|
+{"mqe-broker", {NULL}, 3957, "udp"}, |
|
+{"mqe-agent", {NULL}, 3958, "tcp"}, |
|
+{"mqe-agent", {NULL}, 3958, "udp"}, |
|
+{"treehopper", {NULL}, 3959, "tcp"}, |
|
+{"treehopper", {NULL}, 3959, "udp"}, |
|
+{"bess", {NULL}, 3960, "tcp"}, |
|
+{"bess", {NULL}, 3960, "udp"}, |
|
+{"proaxess", {NULL}, 3961, "tcp"}, |
|
+{"proaxess", {NULL}, 3961, "udp"}, |
|
+{"sbi-agent", {NULL}, 3962, "tcp"}, |
|
+{"sbi-agent", {NULL}, 3962, "udp"}, |
|
+{"thrp", {NULL}, 3963, "tcp"}, |
|
+{"thrp", {NULL}, 3963, "udp"}, |
|
+{"sasggprs", {NULL}, 3964, "tcp"}, |
|
+{"sasggprs", {NULL}, 3964, "udp"}, |
|
+{"ati-ip-to-ncpe", {NULL}, 3965, "tcp"}, |
|
+{"ati-ip-to-ncpe", {NULL}, 3965, "udp"}, |
|
+{"bflckmgr", {NULL}, 3966, "tcp"}, |
|
+{"bflckmgr", {NULL}, 3966, "udp"}, |
|
+{"ppsms", {NULL}, 3967, "tcp"}, |
|
+{"ppsms", {NULL}, 3967, "udp"}, |
|
+{"ianywhere-dbns", {NULL}, 3968, "tcp"}, |
|
+{"ianywhere-dbns", {NULL}, 3968, "udp"}, |
|
+{"landmarks", {NULL}, 3969, "tcp"}, |
|
+{"landmarks", {NULL}, 3969, "udp"}, |
|
+{"lanrevagent", {NULL}, 3970, "tcp"}, |
|
+{"lanrevagent", {NULL}, 3970, "udp"}, |
|
+{"lanrevserver", {NULL}, 3971, "tcp"}, |
|
+{"lanrevserver", {NULL}, 3971, "udp"}, |
|
+{"iconp", {NULL}, 3972, "tcp"}, |
|
+{"iconp", {NULL}, 3972, "udp"}, |
|
+{"progistics", {NULL}, 3973, "tcp"}, |
|
+{"progistics", {NULL}, 3973, "udp"}, |
|
+{"citysearch", {NULL}, 3974, "tcp"}, |
|
+{"citysearch", {NULL}, 3974, "udp"}, |
|
+{"airshot", {NULL}, 3975, "tcp"}, |
|
+{"airshot", {NULL}, 3975, "udp"}, |
|
+{"opswagent", {NULL}, 3976, "tcp"}, |
|
+{"opswagent", {NULL}, 3976, "udp"}, |
|
+{"opswmanager", {NULL}, 3977, "tcp"}, |
|
+{"opswmanager", {NULL}, 3977, "udp"}, |
|
+{"secure-cfg-svr", {NULL}, 3978, "tcp"}, |
|
+{"secure-cfg-svr", {NULL}, 3978, "udp"}, |
|
+{"smwan", {NULL}, 3979, "tcp"}, |
|
+{"smwan", {NULL}, 3979, "udp"}, |
|
+{"acms", {NULL}, 3980, "tcp"}, |
|
+{"acms", {NULL}, 3980, "udp"}, |
|
+{"starfish", {NULL}, 3981, "tcp"}, |
|
+{"starfish", {NULL}, 3981, "udp"}, |
|
+{"eis", {NULL}, 3982, "tcp"}, |
|
+{"eis", {NULL}, 3982, "udp"}, |
|
+{"eisp", {NULL}, 3983, "tcp"}, |
|
+{"eisp", {NULL}, 3983, "udp"}, |
|
+{"mapper-nodemgr", {NULL}, 3984, "tcp"}, |
|
+{"mapper-nodemgr", {NULL}, 3984, "udp"}, |
|
+{"mapper-mapethd", {NULL}, 3985, "tcp"}, |
|
+{"mapper-mapethd", {NULL}, 3985, "udp"}, |
|
+{"mapper-ws_ethd", {NULL}, 3986, "tcp"}, |
|
+{"mapper-ws_ethd", {NULL}, 3986, "udp"}, |
|
+{"centerline", {NULL}, 3987, "tcp"}, |
|
+{"centerline", {NULL}, 3987, "udp"}, |
|
+{"dcs-config", {NULL}, 3988, "tcp"}, |
|
+{"dcs-config", {NULL}, 3988, "udp"}, |
|
+{"bv-queryengine", {NULL}, 3989, "tcp"}, |
|
+{"bv-queryengine", {NULL}, 3989, "udp"}, |
|
+{"bv-is", {NULL}, 3990, "tcp"}, |
|
+{"bv-is", {NULL}, 3990, "udp"}, |
|
+{"bv-smcsrv", {NULL}, 3991, "tcp"}, |
|
+{"bv-smcsrv", {NULL}, 3991, "udp"}, |
|
+{"bv-ds", {NULL}, 3992, "tcp"}, |
|
+{"bv-ds", {NULL}, 3992, "udp"}, |
|
+{"bv-agent", {NULL}, 3993, "tcp"}, |
|
+{"bv-agent", {NULL}, 3993, "udp"}, |
|
+{"iss-mgmt-ssl", {NULL}, 3995, "tcp"}, |
|
+{"iss-mgmt-ssl", {NULL}, 3995, "udp"}, |
|
+{"abcsoftware", {NULL}, 3996, "tcp"}, |
|
+{"abcsoftware", {NULL}, 3996, "udp"}, |
|
+{"agentsease-db", {NULL}, 3997, "tcp"}, |
|
+{"agentsease-db", {NULL}, 3997, "udp"}, |
|
+{"dnx", {NULL}, 3998, "tcp"}, |
|
+{"dnx", {NULL}, 3998, "udp"}, |
|
+{"nvcnet", {NULL}, 3999, "tcp"}, |
|
+{"nvcnet", {NULL}, 3999, "udp"}, |
|
+{"terabase", {NULL}, 4000, "tcp"}, |
|
+{"terabase", {NULL}, 4000, "udp"}, |
|
+{"newoak", {NULL}, 4001, "tcp"}, |
|
+{"newoak", {NULL}, 4001, "udp"}, |
|
+{"pxc-spvr-ft", {NULL}, 4002, "tcp"}, |
|
+{"pxc-spvr-ft", {NULL}, 4002, "udp"}, |
|
+{"pxc-splr-ft", {NULL}, 4003, "tcp"}, |
|
+{"pxc-splr-ft", {NULL}, 4003, "udp"}, |
|
+{"pxc-roid", {NULL}, 4004, "tcp"}, |
|
+{"pxc-roid", {NULL}, 4004, "udp"}, |
|
+{"pxc-pin", {NULL}, 4005, "tcp"}, |
|
+{"pxc-pin", {NULL}, 4005, "udp"}, |
|
+{"pxc-spvr", {NULL}, 4006, "tcp"}, |
|
+{"pxc-spvr", {NULL}, 4006, "udp"}, |
|
+{"pxc-splr", {NULL}, 4007, "tcp"}, |
|
+{"pxc-splr", {NULL}, 4007, "udp"}, |
|
+{"netcheque", {NULL}, 4008, "tcp"}, |
|
+{"netcheque", {NULL}, 4008, "udp"}, |
|
+{"chimera-hwm", {NULL}, 4009, "tcp"}, |
|
+{"chimera-hwm", {NULL}, 4009, "udp"}, |
|
+{"samsung-unidex", {NULL}, 4010, "tcp"}, |
|
+{"samsung-unidex", {NULL}, 4010, "udp"}, |
|
+{"altserviceboot", {NULL}, 4011, "tcp"}, |
|
+{"altserviceboot", {NULL}, 4011, "udp"}, |
|
+{"pda-gate", {NULL}, 4012, "tcp"}, |
|
+{"pda-gate", {NULL}, 4012, "udp"}, |
|
+{"acl-manager", {NULL}, 4013, "tcp"}, |
|
+{"acl-manager", {NULL}, 4013, "udp"}, |
|
+{"taiclock", {NULL}, 4014, "tcp"}, |
|
+{"taiclock", {NULL}, 4014, "udp"}, |
|
+{"talarian-mcast1", {NULL}, 4015, "tcp"}, |
|
+{"talarian-mcast1", {NULL}, 4015, "udp"}, |
|
+{"talarian-mcast2", {NULL}, 4016, "tcp"}, |
|
+{"talarian-mcast2", {NULL}, 4016, "udp"}, |
|
+{"talarian-mcast3", {NULL}, 4017, "tcp"}, |
|
+{"talarian-mcast3", {NULL}, 4017, "udp"}, |
|
+{"talarian-mcast4", {NULL}, 4018, "tcp"}, |
|
+{"talarian-mcast4", {NULL}, 4018, "udp"}, |
|
+{"talarian-mcast5", {NULL}, 4019, "tcp"}, |
|
+{"talarian-mcast5", {NULL}, 4019, "udp"}, |
|
+{"trap", {NULL}, 4020, "tcp"}, |
|
+{"trap", {NULL}, 4020, "udp"}, |
|
+{"nexus-portal", {NULL}, 4021, "tcp"}, |
|
+{"nexus-portal", {NULL}, 4021, "udp"}, |
|
+{"dnox", {NULL}, 4022, "tcp"}, |
|
+{"dnox", {NULL}, 4022, "udp"}, |
|
+{"esnm-zoning", {NULL}, 4023, "tcp"}, |
|
+{"esnm-zoning", {NULL}, 4023, "udp"}, |
|
+{"tnp1-port", {NULL}, 4024, "tcp"}, |
|
+{"tnp1-port", {NULL}, 4024, "udp"}, |
|
+{"partimage", {NULL}, 4025, "tcp"}, |
|
+{"partimage", {NULL}, 4025, "udp"}, |
|
+{"as-debug", {NULL}, 4026, "tcp"}, |
|
+{"as-debug", {NULL}, 4026, "udp"}, |
|
+{"bxp", {NULL}, 4027, "tcp"}, |
|
+{"bxp", {NULL}, 4027, "udp"}, |
|
+{"dtserver-port", {NULL}, 4028, "tcp"}, |
|
+{"dtserver-port", {NULL}, 4028, "udp"}, |
|
+{"ip-qsig", {NULL}, 4029, "tcp"}, |
|
+{"ip-qsig", {NULL}, 4029, "udp"}, |
|
+{"jdmn-port", {NULL}, 4030, "tcp"}, |
|
+{"jdmn-port", {NULL}, 4030, "udp"}, |
|
+{"suucp", {NULL}, 4031, "tcp"}, |
|
+{"suucp", {NULL}, 4031, "udp"}, |
|
+{"vrts-auth-port", {NULL}, 4032, "tcp"}, |
|
+{"vrts-auth-port", {NULL}, 4032, "udp"}, |
|
+{"sanavigator", {NULL}, 4033, "tcp"}, |
|
+{"sanavigator", {NULL}, 4033, "udp"}, |
|
+{"ubxd", {NULL}, 4034, "tcp"}, |
|
+{"ubxd", {NULL}, 4034, "udp"}, |
|
+{"wap-push-http", {NULL}, 4035, "tcp"}, |
|
+{"wap-push-http", {NULL}, 4035, "udp"}, |
|
+{"wap-push-https", {NULL}, 4036, "tcp"}, |
|
+{"wap-push-https", {NULL}, 4036, "udp"}, |
|
+{"ravehd", {NULL}, 4037, "tcp"}, |
|
+{"ravehd", {NULL}, 4037, "udp"}, |
|
+{"fazzt-ptp", {NULL}, 4038, "tcp"}, |
|
+{"fazzt-ptp", {NULL}, 4038, "udp"}, |
|
+{"fazzt-admin", {NULL}, 4039, "tcp"}, |
|
+{"fazzt-admin", {NULL}, 4039, "udp"}, |
|
+{"yo-main", {NULL}, 4040, "tcp"}, |
|
+{"yo-main", {NULL}, 4040, "udp"}, |
|
+{"houston", {NULL}, 4041, "tcp"}, |
|
+{"houston", {NULL}, 4041, "udp"}, |
|
+{"ldxp", {NULL}, 4042, "tcp"}, |
|
+{"ldxp", {NULL}, 4042, "udp"}, |
|
+{"nirp", {NULL}, 4043, "tcp"}, |
|
+{"nirp", {NULL}, 4043, "udp"}, |
|
+{"ltp", {NULL}, 4044, "tcp"}, |
|
+{"ltp", {NULL}, 4044, "udp"}, |
|
+{"npp", {NULL}, 4045, "tcp"}, |
|
+{"npp", {NULL}, 4045, "udp"}, |
|
+{"acp-proto", {NULL}, 4046, "tcp"}, |
|
+{"acp-proto", {NULL}, 4046, "udp"}, |
|
+{"ctp-state", {NULL}, 4047, "tcp"}, |
|
+{"ctp-state", {NULL}, 4047, "udp"}, |
|
+{"wafs", {NULL}, 4049, "tcp"}, |
|
+{"wafs", {NULL}, 4049, "udp"}, |
|
+{"cisco-wafs", {NULL}, 4050, "tcp"}, |
|
+{"cisco-wafs", {NULL}, 4050, "udp"}, |
|
+{"cppdp", {NULL}, 4051, "tcp"}, |
|
+{"cppdp", {NULL}, 4051, "udp"}, |
|
+{"interact", {NULL}, 4052, "tcp"}, |
|
+{"interact", {NULL}, 4052, "udp"}, |
|
+{"ccu-comm-1", {NULL}, 4053, "tcp"}, |
|
+{"ccu-comm-1", {NULL}, 4053, "udp"}, |
|
+{"ccu-comm-2", {NULL}, 4054, "tcp"}, |
|
+{"ccu-comm-2", {NULL}, 4054, "udp"}, |
|
+{"ccu-comm-3", {NULL}, 4055, "tcp"}, |
|
+{"ccu-comm-3", {NULL}, 4055, "udp"}, |
|
+{"lms", {NULL}, 4056, "tcp"}, |
|
+{"lms", {NULL}, 4056, "udp"}, |
|
+{"wfm", {NULL}, 4057, "tcp"}, |
|
+{"wfm", {NULL}, 4057, "udp"}, |
|
+{"kingfisher", {NULL}, 4058, "tcp"}, |
|
+{"kingfisher", {NULL}, 4058, "udp"}, |
|
+{"dlms-cosem", {NULL}, 4059, "tcp"}, |
|
+{"dlms-cosem", {NULL}, 4059, "udp"}, |
|
+{"dsmeter_iatc", {NULL}, 4060, "tcp"}, |
|
+{"dsmeter_iatc", {NULL}, 4060, "udp"}, |
|
+{"ice-location", {NULL}, 4061, "tcp"}, |
|
+{"ice-location", {NULL}, 4061, "udp"}, |
|
+{"ice-slocation", {NULL}, 4062, "tcp"}, |
|
+{"ice-slocation", {NULL}, 4062, "udp"}, |
|
+{"ice-router", {NULL}, 4063, "tcp"}, |
|
+{"ice-router", {NULL}, 4063, "udp"}, |
|
+{"ice-srouter", {NULL}, 4064, "tcp"}, |
|
+{"ice-srouter", {NULL}, 4064, "udp"}, |
|
+{"avanti_cdp", {NULL}, 4065, "tcp"}, |
|
+{"avanti_cdp", {NULL}, 4065, "udp"}, |
|
+{"pmas", {NULL}, 4066, "tcp"}, |
|
+{"pmas", {NULL}, 4066, "udp"}, |
|
+{"idp", {NULL}, 4067, "tcp"}, |
|
+{"idp", {NULL}, 4067, "udp"}, |
|
+{"ipfltbcst", {NULL}, 4068, "tcp"}, |
|
+{"ipfltbcst", {NULL}, 4068, "udp"}, |
|
+{"minger", {NULL}, 4069, "tcp"}, |
|
+{"minger", {NULL}, 4069, "udp"}, |
|
+{"tripe", {NULL}, 4070, "tcp"}, |
|
+{"tripe", {NULL}, 4070, "udp"}, |
|
+{"aibkup", {NULL}, 4071, "tcp"}, |
|
+{"aibkup", {NULL}, 4071, "udp"}, |
|
+{"zieto-sock", {NULL}, 4072, "tcp"}, |
|
+{"zieto-sock", {NULL}, 4072, "udp"}, |
|
+{"iRAPP", {NULL}, 4073, "tcp"}, |
|
+{"iRAPP", {NULL}, 4073, "udp"}, |
|
+{"cequint-cityid", {NULL}, 4074, "tcp"}, |
|
+{"cequint-cityid", {NULL}, 4074, "udp"}, |
|
+{"perimlan", {NULL}, 4075, "tcp"}, |
|
+{"perimlan", {NULL}, 4075, "udp"}, |
|
+{"seraph", {NULL}, 4076, "tcp"}, |
|
+{"seraph", {NULL}, 4076, "udp"}, |
|
+{"ascomalarm", {NULL}, 4077, "udp"}, |
|
+{"cssp", {NULL}, 4078, "tcp"}, |
|
+{"santools", {NULL}, 4079, "tcp"}, |
|
+{"santools", {NULL}, 4079, "udp"}, |
|
+{"lorica-in", {NULL}, 4080, "tcp"}, |
|
+{"lorica-in", {NULL}, 4080, "udp"}, |
|
+{"lorica-in-sec", {NULL}, 4081, "tcp"}, |
|
+{"lorica-in-sec", {NULL}, 4081, "udp"}, |
|
+{"lorica-out", {NULL}, 4082, "tcp"}, |
|
+{"lorica-out", {NULL}, 4082, "udp"}, |
|
+{"lorica-out-sec", {NULL}, 4083, "tcp"}, |
|
+{"lorica-out-sec", {NULL}, 4083, "udp"}, |
|
+{"fortisphere-vm", {NULL}, 4084, "udp"}, |
|
+{"ezmessagesrv", {NULL}, 4085, "tcp"}, |
|
+{"ftsync", {NULL}, 4086, "udp"}, |
|
+{"applusservice", {NULL}, 4087, "tcp"}, |
|
+{"npsp", {NULL}, 4088, "tcp"}, |
|
+{"opencore", {NULL}, 4089, "tcp"}, |
|
+{"opencore", {NULL}, 4089, "udp"}, |
|
+{"omasgport", {NULL}, 4090, "tcp"}, |
|
+{"omasgport", {NULL}, 4090, "udp"}, |
|
+{"ewinstaller", {NULL}, 4091, "tcp"}, |
|
+{"ewinstaller", {NULL}, 4091, "udp"}, |
|
+{"ewdgs", {NULL}, 4092, "tcp"}, |
|
+{"ewdgs", {NULL}, 4092, "udp"}, |
|
+{"pvxpluscs", {NULL}, 4093, "tcp"}, |
|
+{"pvxpluscs", {NULL}, 4093, "udp"}, |
|
+{"sysrqd", {NULL}, 4094, "tcp"}, |
|
+{"sysrqd", {NULL}, 4094, "udp"}, |
|
+{"xtgui", {NULL}, 4095, "tcp"}, |
|
+{"xtgui", {NULL}, 4095, "udp"}, |
|
+{"bre", {NULL}, 4096, "tcp"}, |
|
+{"bre", {NULL}, 4096, "udp"}, |
|
+{"patrolview", {NULL}, 4097, "tcp"}, |
|
+{"patrolview", {NULL}, 4097, "udp"}, |
|
+{"drmsfsd", {NULL}, 4098, "tcp"}, |
|
+{"drmsfsd", {NULL}, 4098, "udp"}, |
|
+{"dpcp", {NULL}, 4099, "tcp"}, |
|
+{"dpcp", {NULL}, 4099, "udp"}, |
|
+{"igo-incognito", {NULL}, 4100, "tcp"}, |
|
+{"igo-incognito", {NULL}, 4100, "udp"}, |
|
+{"brlp-0", {NULL}, 4101, "tcp"}, |
|
+{"brlp-0", {NULL}, 4101, "udp"}, |
|
+{"brlp-1", {NULL}, 4102, "tcp"}, |
|
+{"brlp-1", {NULL}, 4102, "udp"}, |
|
+{"brlp-2", {NULL}, 4103, "tcp"}, |
|
+{"brlp-2", {NULL}, 4103, "udp"}, |
|
+{"brlp-3", {NULL}, 4104, "tcp"}, |
|
+{"brlp-3", {NULL}, 4104, "udp"}, |
|
+{"shofarplayer", {NULL}, 4105, "tcp"}, |
|
+{"shofarplayer", {NULL}, 4105, "udp"}, |
|
+{"synchronite", {NULL}, 4106, "tcp"}, |
|
+{"synchronite", {NULL}, 4106, "udp"}, |
|
+{"j-ac", {NULL}, 4107, "tcp"}, |
|
+{"j-ac", {NULL}, 4107, "udp"}, |
|
+{"accel", {NULL}, 4108, "tcp"}, |
|
+{"accel", {NULL}, 4108, "udp"}, |
|
+{"izm", {NULL}, 4109, "tcp"}, |
|
+{"izm", {NULL}, 4109, "udp"}, |
|
+{"g2tag", {NULL}, 4110, "tcp"}, |
|
+{"g2tag", {NULL}, 4110, "udp"}, |
|
+{"xgrid", {NULL}, 4111, "tcp"}, |
|
+{"xgrid", {NULL}, 4111, "udp"}, |
|
+{"apple-vpns-rp", {NULL}, 4112, "tcp"}, |
|
+{"apple-vpns-rp", {NULL}, 4112, "udp"}, |
|
+{"aipn-reg", {NULL}, 4113, "tcp"}, |
|
+{"aipn-reg", {NULL}, 4113, "udp"}, |
|
+{"jomamqmonitor", {NULL}, 4114, "tcp"}, |
|
+{"jomamqmonitor", {NULL}, 4114, "udp"}, |
|
+{"cds", {NULL}, 4115, "tcp"}, |
|
+{"cds", {NULL}, 4115, "udp"}, |
|
+{"smartcard-tls", {NULL}, 4116, "tcp"}, |
|
+{"smartcard-tls", {NULL}, 4116, "udp"}, |
|
+{"hillrserv", {NULL}, 4117, "tcp"}, |
|
+{"hillrserv", {NULL}, 4117, "udp"}, |
|
+{"netscript", {NULL}, 4118, "tcp"}, |
|
+{"netscript", {NULL}, 4118, "udp"}, |
|
+{"assuria-slm", {NULL}, 4119, "tcp"}, |
|
+{"assuria-slm", {NULL}, 4119, "udp"}, |
|
+{"e-builder", {NULL}, 4121, "tcp"}, |
|
+{"e-builder", {NULL}, 4121, "udp"}, |
|
+{"fprams", {NULL}, 4122, "tcp"}, |
|
+{"fprams", |
trying it out :)