Skip to content

Instantly share code, notes, and snippets.

@MS-Interop
Created December 6, 2011 19:51
Show Gist options
  • Star 22 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save MS-Interop/1439660 to your computer and use it in GitHub Desktop.
Save MS-Interop/1439660 to your computer and use it in GitHub Desktop.

Redis + LibUV prototype README

Special thanks to Dušan Majkic (dmajkic, https://github.com/dmajkic/redis/) for his project on GitHub that gave us the opportunity to quickly learn some on the intricacies of Redis code. His project also helped us to build our prototype quickly.

Get source repository

First clone the Redis sources from https://github.com/antirez/redis.

  • On your computer create a working folder and cd into it.

  • Clone antirez/redis repository:

      git clone https://github.com/antirez/redis.git
    

    Note: on Windows this may take 2 minutes as the jemalloc folder contains an invalid file name (prn.h). This folder is not used for Windows, but the file may cause git to timeout.

  • Switch to commit 3fac86ff1d (the patch is based on this commit):

      cd redis
      git checkout 3fac86ff1d
    

    This command will cause HEAD to reference 3fac86ff1d commit directly, creating detached HEAD state. The next step will create a new branch, which will attach HEAD to that branch. Warnings about detached HEAD could be ignored.

  • Create a new branch:

      git checkout -b 2.4_win_uv
    

Apply the patch to support Windows using Libuv

  • Download and apply patch on this branch. This enables Redis to build for Windows. The patch includes a full copy of Libuv sources (the version included in the patch is different than the one available on github, some changes have been added to the code).

    The patch is included in this gist, and can be downloaded here.

    Assuming you have a copy of the patch (redis24_win_uv.patch) do:

      git am redis24_win_uv.patch
    

    The following warnings can be ignored:

      warning: squelched 210 whitespace errors
      warning: 215 lines add whitespace errors.
    

    Alternatively use curl to download the patch and apply it directly with 'git am':

curl https://raw.github.com/gist/1439660/d729b823a7ef50ef8ba54393675fb678e740ca4b/redis24_win_uv.patch | git am

How to build Redis

Once the patch is applied, Redis can be built in 3 different ways:

  • Windows:

    • With libuv backend using using Visual Studio
  • *nix:

    • With libuv backend
    • With existing backend (default)

Redis on Windows

Build pthreads library using Visual Studio

You can use the free Express Edition available at http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express.

Redis uses pthreads. The build assumes it is linked as a static library. You need to get Windows pthreads sources and build as a static library.

  1. You can download the code from ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-8-0-release.exe.

  2. Extract the files to a folder on your local drive.

  3. From your local folder, copy all the files from Pre-built.2/include to your redis folder under deps/pthreads-win32/include (the directory needs to be created).

  4. From Visual Studio, do Open Project, and navigate to the installed folder, and then pthreads.2.

  5. Open the pthread project file (pthread.dsp).

  6. VS will ask to convert to the current version format. Select Yes.

  7. Open project properties and change the following:

    • Change configuration type from Dynamic Library (.dll) to Static Library (.lib)
    • Change Target Extension for .dll to .lib
    • Under C-C++/Code Generation, change Runtime Library choice to Multi-threaded (/MT)
  8. Build the project. This will create a pthread.lib under pthreads.2 directory.

  9. Copy pthread.lib to your redis folder under deps/pthreads-win32/lib/release|debug (you have to create the directories).

###Build Redis using Visual Studio

  • Open the solution file msvs\redisserver.sln in Visual Studio 10, and build.

    This should create the following executables in the msvs$(Configuration) folder:

    • redis-server.exe
    • redis-benchmark.exe
    • redis-cli.exe
    • redis-check-dump.exe
    • redis-check-aof.exe

    If there is an error in finding the pthreads.lib file, check that you have selected the same configuration as used for building the pthreads.lib file, and that you copied it to the expected location.

Build Redis for Linux

  • With libuv backend:

      make USE_LIBUV=yes
    
  • With default backend:

      make
    

Release Notes

This is a pre-release version of the software and is not fully tested.
This is intended to be a 32bit release only. No work has been done in order to produce a 64bit version of Redis on Windows. To run the test suite requires some manual work:

  • The tests assume that the binaries are in the src folder, so you need to copy the binaries from the msvs folder to src.
  • The tests make use of TCL. This must be installed separately.
  • To run the tests in a command window: ‘tclsh8.5.exe tests/test_helper.tcl’.

Running the tests sometimes results in failures, and sometimes passes. We haven’t spent too much time investigating the failures but they could be related with issues with TCL on Windows. Persisting the Redis data to disk should be done as a background activity. Currently in Windows this is done as a foreground activity and may cause delays in responding to other commands when it is running. If you want to use a client on the same machine as redis-server on Windows, you can use a named pipe instead of a socket for client-server communication.

  • To do this a configuration file must be provided to the server.

  • To specify a pipe named 'redis.sock' in the configuration file set the following:

      port 0
      unixsocket \\.\pipe\redis.sock
    

TODO

  • Snapshotting (Fork and Write) is not perfect, right now we simply block requests while memory is dumped on disk. We are working on a solution that will give us better performance. An update will be released soon.
This file has been truncated, but you can view the full file.
From 7fb847bc420024cbdf5e361423e78207358113ec Mon Sep 17 00:00:00 2001
From: Henry Rawas <v-herawa@microsoft.com>
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
+<rm@joyent.com> <rm@fingolfin.org>
+<ryan@joyent.com> <ry@tinyclouds.org>
+<bertbelder@gmail.com> <info@2bs.nl>
+<alan@prettyrobots.com> <alan@blogometer.com>
+San-Tai Hsu <vanilla@fatpipi.com>
+Isaac Z. Schlueter <i@izs.me>
+Saúl Ibarra Corretgé <saghul@gmail.com>
+Yuki OKUMURA <mjt@cltn.org>
+Frank Denis <github@pureftpd.org>
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 <ryan@joyent.com>
+Bert Belder <bertbelder@gmail.com>
+Josh Roesslein <jroesslein@gmail.com>
+Alan Gutierrez <alan@prettyrobots.com>
+Joshua Peek <josh@joshpeek.com>
+Igor Zinkovsky <igorzi@microsoft.com>
+San-Tai Hsu <vanilla@fatpipi.com>
+Ben Noordhuis <info@bnoordhuis.nl>
+Henry Rawas <henryr@schakra.com>
+Robert Mustacchi <rm@joyent.com>
+Matt Stevens <matt@alloysoft.com>
+Paul Querna <pquerna@apache.org>
+Shigeki Ohtsu <ohtsu@iij.ad.jp>
+Tom Hughes <tom.hughes@palm.com>
+Peter Bright <drpizza@quiscalusmexicanus.org>
+Jeroen Janssen <jeroen.janssen@gmail.com>
+Andrea Lattuada <ndr.lattuada@gmail.com>
+Augusto Henrique Hentz <ahhentz@gmail.com>
+Clifford Heath <clifford.heath@gmail.com>
+Jorge Chamorro Bieling <jorge@jorgechamorro.com>
+Luis Lavena <luislavena@gmail.com>
+Matthew Sporleder <msporleder@gmail.com>
+Erick Tryzelaar <erick.tryzelaar@gmail.com>
+Isaac Z. Schlueter <i@izs.me>
+Pieter Noordhuis <pcnoordhuis@gmail.com>
+Marek Jelen <marek@jelen.biz>
+Fedor Indutny <fedor.indutny@gmail.com>
+Saúl Ibarra Corretgé <saghul@gmail.com>
+Felix Geisendörfer <felix@debuggable.com>
+Yuki OKUMURA <mjt@cltn.org>
+Roman Shtylman <shtylman@gmail.com>
+Frank Denis <github@pureftpd.org>
+Carter Allen <CarterA@opt-6.com>
+Tj Holowaychuk <tj@vision-media.ca>
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, <daniel@haxx.se>."
+
+#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 <libeio@schmorp.de>
+ * 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 <libev@schmorp.de>
+ * 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 <provos@citi.umich.edu>
+ * 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 *)&in;
+ }
+ 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 <kapouer@melix.org>
+ *
+ * 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 <vlad.dinulescu@avira.com>
+ * 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 <jhrozek@redhat.com>
+ *
+ * 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 <jhrozek@redhat.com>
+ *
+ * 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",
@Seldaek
Copy link

Seldaek commented Dec 9, 2011

For the record, you can checkout a new branch from a referenced commit in one line, avoiding the detached HEAD warning, using:

git checkout -b 2.4_win_uv 3fac86ff1d

@SNProject
Copy link

trying it out :)

@dacow
Copy link

dacow commented Dec 29, 2011

i got alot of errors doing the last step "Build Redis using Visual Studio"
i had to set configuration to "release" and everything worked :d just saying if someone has the same problem.

@broweaver
Copy link

I had the same errors happening as "dacow" describes and the solution to select "Release" from the "Properties -> Configuration Properties -> Configuration -> Configuration Manager -> Active solution configuration" dropdown is what solved and allowed the build. All other instructions besides that last step needing one additional config setting worked great, thanks.

@MS-Interop
Copy link
Author

We released a new prototype yesterday (https://github.com/microsoft-interop/redis). We have made some improvements on the code and simplified the build process.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment