diff options
| author | Brian Anderson <banderson@mozilla.com> | 2011-10-22 17:37:18 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2011-10-22 17:37:18 -0700 |
| commit | bdbeb75bfb868c98d528cdf131c8102c58be195b (patch) | |
| tree | 1fce689b0606fb8423999990a01f2dc8158d4dc1 /src/rt | |
| parent | 81a44ccacfc9da31dab6434db54ef023e9950ac2 (diff) | |
| download | rust-bdbeb75bfb868c98d528cdf131c8102c58be195b.tar.gz rust-bdbeb75bfb868c98d528cdf131c8102c58be195b.zip | |
Upgrade libuv to 179f475b2ad64729feb0422f06ce133cb364482a
Diffstat (limited to 'src/rt')
137 files changed, 19397 insertions, 1777 deletions
diff --git a/src/rt/libuv/.mailmap b/src/rt/libuv/.mailmap index 520f71be68f..2d608f95f4f 100644 --- a/src/rt/libuv/.mailmap +++ b/src/rt/libuv/.mailmap @@ -6,3 +6,5 @@ <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> diff --git a/src/rt/libuv/AUTHORS b/src/rt/libuv/AUTHORS index eefcd7dc1ee..2d43c366141 100644 --- a/src/rt/libuv/AUTHORS +++ b/src/rt/libuv/AUTHORS @@ -24,3 +24,10 @@ 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> diff --git a/src/rt/libuv/Makefile b/src/rt/libuv/Makefile index 59be3de08f3..cf1e7880bfa 100644 --- a/src/rt/libuv/Makefile +++ b/src/rt/libuv/Makefile @@ -77,10 +77,10 @@ else include config-unix.mk endif -TESTS=test/echo-server.c test/test-*.c -BENCHMARKS=test/echo-server.c test/dns-server.c test/benchmark-*.c +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 test/run-tests$(E) test/run-benchmarks$(E) +all: uv.a $(CARES_OBJS): %.o: %.c $(CC) -o $*.o -c $(CFLAGS) $(CPPFLAGS) $< -DHAVE_CONFIG_H diff --git a/src/rt/libuv/README.md b/src/rt/libuv/README.md index 9fc4ae62ebd..8e569bbfb61 100644 --- a/src/rt/libuv/README.md +++ b/src/rt/libuv/README.md @@ -8,8 +8,6 @@ http://nodejs.org/ ## Features -Implemented: - * Non-blocking TCP sockets * Non-blocking named pipes @@ -30,15 +28,13 @@ Implemented: * Thread pool scheduling `uv_queue_work` -In-progress: + * ANSI escape code controlled TTY `uv_tty_t` - * File system events (Currently supports inotify, `ReadDirectoryChangesW` - and will support kqueue and event ports in the near future.) + * File system events Currently supports inotify, `ReadDirectoryChangesW` + and kqueue. Event ports in the near future. `uv_fs_event_t` - * VT100 TTY `uv_tty_t` - - * Socket sharing between processes `uv_ipc_t` + * IPC and socket sharing between processes `uv_write2` ## Documentation diff --git a/src/rt/libuv/common.gypi b/src/rt/libuv/common.gypi index 9a0be4dc394..373c3aa9807 100644 --- a/src/rt/libuv/common.gypi +++ b/src/rt/libuv/common.gypi @@ -32,6 +32,11 @@ 'LinkIncremental': 2, # enable incremental linking }, }, + 'conditions': [ + ['OS != "win"', { + 'defines': [ 'EV_VERIFY=2' ], + }], + ] }, 'Release': { 'defines': [ 'NDEBUG' ], diff --git a/src/rt/libuv/config-mingw.mk b/src/rt/libuv/config-mingw.mk index d4daca8a1ff..5ef189bd738 100644 --- a/src/rt/libuv/config-mingw.mk +++ b/src/rt/libuv/config-mingw.mk @@ -28,6 +28,7 @@ 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) diff --git a/src/rt/libuv/config-unix.mk b/src/rt/libuv/config-unix.mk index 59bf8f17f8f..53bcbd4c984 100644 --- a/src/rt/libuv/config-unix.mk +++ b/src/rt/libuv/config-unix.mk @@ -18,8 +18,6 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -CC = $(PREFIX)gcc -AR = $(PREFIX)ar E= CSTDFLAG=--std=c89 -pedantic -Wall -Wextra -Wno-unused-parameter CFLAGS += -g @@ -44,7 +42,7 @@ 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 +LINKFLAGS+=-lsocket -lnsl -lkstat OBJS += src/unix/sunos.o endif @@ -54,6 +52,7 @@ 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)) @@ -71,6 +70,7 @@ 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)) @@ -79,6 +79,16 @@ 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))) diff --git a/src/rt/libuv/include/ares.h b/src/rt/libuv/include/ares.h index 905a29eea6f..53ac861b2ce 100644 --- a/src/rt/libuv/include/ares.h +++ b/src/rt/libuv/include/ares.h @@ -1,6 +1,6 @@ /* Copyright 1998, 2009 by the Massachusetts Institute of Technology. - * Copyright (C) 2007-2010 by Daniel Stenberg + * Copyright (C) 2007-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -96,10 +96,19 @@ typedef int ares_socklen_t; # 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> -# include <windows.h> #else # include <sys/socket.h> # include <netinet/in.h> diff --git a/src/rt/libuv/include/ares_version.h b/src/rt/libuv/include/ares_version.h index 8baa897cda2..efd0156dd10 100644 --- a/src/rt/libuv/include/ares_version.h +++ b/src/rt/libuv/include/ares_version.h @@ -7,11 +7,11 @@ #define ARES_VERSION_MAJOR 1 #define ARES_VERSION_MINOR 7 -#define ARES_VERSION_PATCH 4 +#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.4" +#define ARES_VERSION_STR "1.7.5-DEV" #if (ARES_VERSION >= 0x010700) # define CARES_HAVE_ARES_LIBRARY_INIT 1 diff --git a/src/rt/libuv/include/uv-private/ev.h b/src/rt/libuv/include/uv-private/ev.h index 1db1e266493..5d2d7a1e37e 100644 --- a/src/rt/libuv/include/uv-private/ev.h +++ b/src/rt/libuv/include/uv-private/ev.h @@ -207,6 +207,7 @@ enum { 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 */ diff --git a/src/rt/libuv/include/uv-private/uv-unix.h b/src/rt/libuv/include/uv-private/uv-unix.h index 5fa132872dc..0db14e9c7f0 100644 --- a/src/rt/libuv/include/uv-private/uv-unix.h +++ b/src/rt/libuv/include/uv-private/uv-unix.h @@ -27,16 +27,13 @@ #include "ev.h" #include "eio.h" -#if defined(__linux__) -#include "uv-private/uv-linux.h" -#endif - #include <sys/types.h> #include <sys/socket.h> -#include <netdb.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 { @@ -46,11 +43,6 @@ typedef struct { typedef int uv_file; -/* Stub. Remove it once all platforms support the file watcher API. */ -#ifndef UV_FS_EVENT_PRIVATE_FIELDS -#define UV_FS_EVENT_PRIVATE_FIELDS /* empty */ -#endif - #define UV_LOOP_PRIVATE_FIELDS \ ares_channel channel; \ /* \ @@ -99,8 +91,6 @@ typedef int uv_file; #define UV_STREAM_PRIVATE_FIELDS \ - uv_read_cb read_cb; \ - uv_alloc_cb alloc_cb; \ uv_connect_t *connect_req; \ uv_shutdown_t *shutdown_req; \ ev_io read_watcher; \ @@ -109,7 +99,8 @@ typedef int uv_file; ngx_queue_t write_completed_queue; \ int delayed_error; \ uv_connection_cb connection_cb; \ - int accepted_fd; + int accepted_fd; \ + int blocking; /* UV_TCP */ @@ -183,6 +174,32 @@ typedef int uv_file; #define UV_WORK_PRIVATE_FIELDS \ eio_req* eio; -#define UV_TTY_PRIVATE_FIELDS /* empty */ +#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; \ + +#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/src/rt/libuv/include/uv-private/uv-win.h b/src/rt/libuv/include/uv-private/uv-win.h index f203d672891..ed132d3ad4f 100644 --- a/src/rt/libuv/include/uv-private/uv-win.h +++ b/src/rt/libuv/include/uv-private/uv-win.h @@ -34,6 +34,98 @@ #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 @@ -75,9 +167,7 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); uv_idle_t* next_idle_handle; \ ares_channel ares_chan; \ int ares_active_sockets; \ - uv_timer_t ares_polling_timer; \ - /* Last error code */ \ - uv_err_t last_error; + uv_timer_t ares_polling_timer; #define UV_REQ_TYPE_PRIVATE \ /* TODO: remove the req suffix */ \ @@ -100,7 +190,10 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); struct uv_req_s* next_req; #define UV_WRITE_PRIVATE_FIELDS \ - /* empty */ + int ipc_header; \ + uv_buf_t write_buffer; \ + HANDLE event_handle; \ + HANDLE wait_handle; #define UV_CONNECT_PRIVATE_FIELDS \ /* empty */ @@ -117,12 +210,21 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); 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; + } 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; \ @@ -133,9 +235,7 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); #define UV_STREAM_PRIVATE_FIELDS \ unsigned int reqs_pending; \ - uv_alloc_cb alloc_cb; \ - uv_read_cb read_cb; \ - uv_req_t read_req; \ + uv_read_t read_req; \ union { \ struct { uv_stream_connection_fields }; \ struct { uv_stream_server_fields }; \ @@ -143,14 +243,16 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); #define uv_tcp_server_fields \ uv_tcp_accept_t* accept_reqs; \ - uv_tcp_accept_t* pending_accepts; + uv_tcp_accept_t* pending_accepts; \ + LPFN_ACCEPTEX func_acceptex; #define uv_tcp_connection_fields \ - uv_buf_t read_buffer; + uv_buf_t read_buffer; \ + LPFN_CONNECTEX func_connectex; #define UV_TCP_PRIVATE_FIELDS \ SOCKET socket; \ - uv_err_t bind_error; \ + int bind_error; \ union { \ struct { uv_tcp_server_fields }; \ struct { uv_tcp_connection_fields }; \ @@ -164,14 +266,21 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); struct sockaddr_storage recv_from; \ int recv_from_len; \ uv_udp_recv_cb recv_cb; \ - uv_alloc_cb alloc_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; + uv_pipe_accept_t accept_reqs[4]; \ + uv_pipe_accept_t* pending_accepts; #define uv_pipe_connection_fields \ - uv_timer_t* eof_timer; + 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; \ @@ -181,6 +290,33 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); 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; \ @@ -244,6 +380,7 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); HANDLE close_handle; #define UV_FS_PRIVATE_FIELDS \ + wchar_t* pathw; \ int flags; \ int last_error; \ struct _stati64 stat; \ @@ -270,11 +407,10 @@ RB_HEAD(uv_timer_tree_s, uv_timer_s); int req_pending; \ uv_fs_event_cb cb; \ wchar_t* filew; \ + wchar_t* short_filew; \ int is_path_dir; \ char* buffer; -#define UV_TTY_PRIVATE_FIELDS /* empty */ - 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, diff --git a/src/rt/libuv/include/uv.h b/src/rt/libuv/include/uv.h index b8bdc093022..7bee299185a 100644 --- a/src/rt/libuv/include/uv.h +++ b/src/rt/libuv/include/uv.h @@ -41,6 +41,98 @@ extern "C" { 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. */ +typedef enum { + UV_UNKNOWN = -1, + UV_OK = 0, + UV_EOF, + UV_EACCESS, + UV_EAGAIN, + UV_EADDRINUSE, + UV_EADDRNOTAVAIL, + UV_EAFNOSUPPORT, + UV_EALREADY, + UV_EBADF, + UV_EBUSY, + UV_ECONNABORTED, + UV_ECONNREFUSED, + UV_ECONNRESET, + UV_EDESTADDRREQ, + UV_EFAULT, + UV_EHOSTUNREACH, + UV_EINTR, + UV_EINVAL, + UV_EISCONN, + UV_EMFILE, + UV_EMSGSIZE, + UV_ENETDOWN, + UV_ENETUNREACH, + UV_ENFILE, + UV_ENOBUFS, + UV_ENOMEM, + UV_ENOTDIR, + UV_ENONET, + UV_ENOPROTOOPT, + UV_ENOTCONN, + UV_ENOTSOCK, + UV_ENOTSUP, + UV_ENOENT, + UV_ENOSYS, + UV_EPIPE, + UV_EPROTO, + UV_EPROTONOSUPPORT, + UV_EPROTOTYPE, + UV_ETIMEDOUT, + UV_ECHARSET, + UV_EAIFAMNOSUPPORT, + UV_EAINONAME, + UV_EAISERVICE, + UV_EAISOCKTYPE, + UV_ESHUTDOWN, + UV_EEXIST +} uv_err_code; + +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; @@ -69,12 +161,6 @@ typedef struct uv_fs_s uv_fs_t; typedef struct uv_fs_event_s uv_fs_event_t; typedef struct uv_work_s uv_work_t; -#if defined(__unix__) || defined(__POSIX__) || defined(__APPLE__) -# include "uv-private/uv-unix.h" -#else -# include "uv-private/uv-win.h" -#endif - /* * This function must be called before any other functions in libuv. @@ -121,6 +207,13 @@ int64_t uv_now(uv_loop_t*); */ 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); @@ -148,88 +241,10 @@ typedef void (*uv_after_work_cb)(uv_work_t* req); typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, const char* filename, int events, int status); - -/* Expand this list if necessary. */ -typedef enum { - UV_UNKNOWN = -1, - UV_OK = 0, - UV_EOF, - UV_EACCESS, - UV_EAGAIN, - UV_EADDRINUSE, - UV_EADDRNOTAVAIL, - UV_EAFNOSUPPORT, - UV_EALREADY, - UV_EBADF, - UV_EBUSY, - UV_ECONNABORTED, - UV_ECONNREFUSED, - UV_ECONNRESET, - UV_EDESTADDRREQ, - UV_EFAULT, - UV_EHOSTUNREACH, - UV_EINTR, - UV_EINVAL, - UV_EISCONN, - UV_EMFILE, - UV_EMSGSIZE, - UV_ENETDOWN, - UV_ENETUNREACH, - UV_ENFILE, - UV_ENOBUFS, - UV_ENOMEM, - UV_ENONET, - UV_ENOPROTOOPT, - UV_ENOTCONN, - UV_ENOTSOCK, - UV_ENOTSUP, - UV_ENOENT, - UV_EPIPE, - UV_EPROTO, - UV_EPROTONOSUPPORT, - UV_EPROTOTYPE, - UV_ETIMEDOUT, - UV_ECHARSET, - UV_EAIFAMNOSUPPORT, - UV_EAINONAME, - UV_EAISERVICE, - UV_EAISOCKTYPE, - UV_ESHUTDOWN, - UV_EEXIST -} uv_err_code; - 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; + UV_LEAVE_GROUP = 0, + UV_JOIN_GROUP +} uv_membership; struct uv_err_s { @@ -330,6 +345,9 @@ 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 @@ -338,8 +356,8 @@ uv_buf_t uv_buf_init(char* base, size_t len); * * 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. + * 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 @@ -375,13 +393,12 @@ int uv_read_start(uv_stream_t*, uv_alloc_cb alloc_cb, uv_read_cb read_cb); int uv_read_stop(uv_stream_t*); -typedef enum { - UV_STDIN = 0, - UV_STDOUT, - UV_STDERR -} uv_std_type; +/* + * Extended read methods for receiving handles over a pipe. The pipe must be + * initialized with ipc == 1. + */ +int uv_read2_start(uv_stream_t*, uv_alloc_cb alloc_cb, uv_read2_cb read_cb); -uv_stream_t* uv_std_handle(uv_loop_t*, uv_std_type type); /* * Write data to stream. Buffers are written in order. Example: @@ -404,10 +421,14 @@ uv_stream_t* uv_std_handle(uv_loop_t*, uv_std_type type); int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t bufs[], int bufcnt, uv_write_cb cb); +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 }; @@ -427,6 +448,15 @@ struct uv_tcp_s { int uv_tcp_init(uv_loop_t*, uv_tcp_t* handle); +/* Enable/disable Nagle's algorithm. */ +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. + */ +int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay); + int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in); int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6); int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, int* namelen); @@ -537,6 +567,21 @@ int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags); 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. + */ +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. @@ -574,7 +619,7 @@ 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); /* - * Send data. If the socket has not previously been bound with `uv_udp_bind` + * 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. * @@ -612,7 +657,18 @@ struct uv_tty_s { UV_TTY_PRIVATE_FIELDS }; -int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd); +/* + * 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. + */ +int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd, int readable); /* * Set mode. 0 for normal, 1 for raw. @@ -620,6 +676,12 @@ int uv_tty_init(uv_loop_t*, uv_tty_t*, uv_file fd); 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. + */ +void uv_tty_reset_mode(); + +/* * Gets the current Window size. On success zero is returned. */ int uv_tty_get_winsize(uv_tty_t*, int* width, int* height); @@ -642,9 +704,14 @@ 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 */ }; -int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle); +/* + * Initialize a pipe. The last argument is a boolean to indicate if + * this pipe will be used for handle passing between processes. + */ +int uv_pipe_init(uv_loop_t*, uv_pipe_t* handle, int ipc); /* * Opens an existing file descriptor or HANDLE as a pipe. @@ -807,6 +874,8 @@ struct uv_getaddrinfo_s { * * 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. */ int uv_getaddrinfo(uv_loop_t*, uv_getaddrinfo_t* handle, @@ -1003,7 +1072,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb); 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. */ @@ -1039,6 +1108,13 @@ struct uv_fs_event_s { /* + * Gets load avg + * See: http://en.wikipedia.org/wiki/Load_(computing) + * (Returns [0,0,0] for windows and cygwin) + */ +void uv_loadavg(double avg[3]); + +/* * If filename is a directory then we will watch for all events in that * directory. If filename is a file - we will only get events from that * file. Subdirectories are not watched. @@ -1059,6 +1135,10 @@ int uv_ip6_name(struct sockaddr_in6* src, char* dst, size_t size); /* Gets the executable path */ int uv_exepath(char* buffer, size_t* size); +/* Gets memory info in bytes */ +uint64_t uv_get_free_memory(void); +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 diff --git a/src/rt/libuv/src/ares/CHANGES b/src/rt/libuv/src/ares/CHANGES index f739b468790..73fe8c77104 100644 --- a/src/rt/libuv/src/ares/CHANGES +++ b/src/rt/libuv/src/ares/CHANGES @@ -1,5 +1,25 @@ 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: diff --git a/src/rt/libuv/src/ares/README.msvc b/src/rt/libuv/src/ares/README.msvc index 9c1163ac5f1..4ff8700cb89 100644 --- a/src/rt/libuv/src/ares/README.msvc +++ b/src/rt/libuv/src/ares/README.msvc @@ -40,6 +40,30 @@ 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 -------------------------------------- diff --git a/src/rt/libuv/src/ares/RELEASE-NOTES b/src/rt/libuv/src/ares/RELEASE-NOTES index 639a314e196..06d7856bc74 100644 --- a/src/rt/libuv/src/ares/RELEASE-NOTES +++ b/src/rt/libuv/src/ares/RELEASE-NOTES @@ -1,25 +1,26 @@ -c-ares version 1.7.4 - -Changed: - - o local-bind: Support binding to local interface/IPs, see - ares_set_local_ip4, ares_set_local_ip6, ares_set_local_dev +c-ares version 1.7.5 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 + 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: - Andrew C. Morrow, Ben Greear, Ben Noordhuis, Daniel Stenberg, - Guenter Knauf, Mike Crowe, Patrik Thunstrom, Yang Tse + Yang Tse, Jakub Hrozek, Gisle Vanem, Tom Hughes, David Stuart, Dima Tisnek, + Peter Pentchev, Stefan Buhler Have fun! diff --git a/src/rt/libuv/src/ares/ares_expand_name.c b/src/rt/libuv/src/ares/ares_expand_name.c index 2af6b2ac40b..e3eccd2f74d 100644 --- a/src/rt/libuv/src/ares/ares_expand_name.c +++ b/src/rt/libuv/src/ares/ares_expand_name.c @@ -87,7 +87,14 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, * Since this function strips trailing dots though, it becomes "" */ q[0] = '\0'; - *enclen = 1; /* the caller should move one byte to get past this */ + + /* 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; } diff --git a/src/rt/libuv/src/ares/ares_fds.c b/src/rt/libuv/src/ares/ares_fds.c index b57be9287bb..ac5eedb3253 100644 --- a/src/rt/libuv/src/ares/ares_fds.c +++ b/src/rt/libuv/src/ares/ares_fds.c @@ -21,6 +21,7 @@ #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) diff --git a/src/rt/libuv/src/ares/ares_free_hostent.c b/src/rt/libuv/src/ares/ares_free_hostent.c index b124560d86a..349d379af3a 100644 --- a/src/rt/libuv/src/ares/ares_free_hostent.c +++ b/src/rt/libuv/src/ares/ares_free_hostent.c @@ -28,6 +28,9 @@ 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); diff --git a/src/rt/libuv/src/ares/ares_getenv.c b/src/rt/libuv/src/ares/ares_getenv.c new file mode 100644 index 00000000000..1b2e85d2bee --- /dev/null +++ b/src/rt/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/src/rt/libuv/src/ares/ares_getenv.h b/src/rt/libuv/src/ares/ares_getenv.h new file mode 100644 index 00000000000..6da6cc5081a --- /dev/null +++ b/src/rt/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/src/rt/libuv/src/ares/ares_gethostbyaddr.c b/src/rt/libuv/src/ares/ares_gethostbyaddr.c index 0de2cf249f0..4b4c8a7dbde 100644 --- a/src/rt/libuv/src/ares/ares_gethostbyaddr.c +++ b/src/rt/libuv/src/ares/ares_gethostbyaddr.c @@ -42,6 +42,7 @@ #include "ares.h" #include "inet_net_pton.h" +#include "ares_platform.h" #include "ares_private.h" #ifdef WATT32 @@ -186,7 +187,13 @@ static int file_lookup(struct ares_addr *addr, struct hostent **host) #ifdef WIN32 char PATH_HOSTS[MAX_PATH]; - if (IS_NT()) { + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { char tmp[MAX_PATH]; HKEY hkeyHosts; @@ -200,8 +207,10 @@ static int file_lookup(struct ares_addr *addr, struct hostent **host) RegCloseKey(hkeyHosts); } } - else + else if (platform == WIN_9X) GetWindowsDirectory(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; strcat(PATH_HOSTS, WIN_PATH_HOSTS); diff --git a/src/rt/libuv/src/ares/ares_gethostbyname.c b/src/rt/libuv/src/ares/ares_gethostbyname.c index 4469ffee233..ad89dc27bf8 100644 --- a/src/rt/libuv/src/ares/ares_gethostbyname.c +++ b/src/rt/libuv/src/ares/ares_gethostbyname.c @@ -48,6 +48,7 @@ #include "ares.h" #include "inet_net_pton.h" #include "bitncmp.h" +#include "ares_platform.h" #include "ares_private.h" #ifdef WATT32 @@ -193,11 +194,11 @@ static void host_callback(void *arg, int status, int timeouts, else if (hquery->sent_family == AF_INET6) { status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL); - if (status == ARES_ENODATA || status == ARES_EBADRESP) { + 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. We should possibly limit this - attempt-next logic to AF_UNSPEC lookups only. */ + looking up A instead. */ hquery->sent_family = AF_INET; ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, hquery); @@ -209,11 +210,10 @@ static void host_callback(void *arg, int status, int timeouts, end_hquery(hquery, status, host); } else if ((status == ARES_ENODATA || status == ARES_EBADRESP || - status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6) + 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. - We should possibly limit this attempt-next logic to AF_UNSPEC lookups - only. */ + /* 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); @@ -344,7 +344,13 @@ static int file_lookup(const char *name, int family, struct hostent **host) #ifdef WIN32 char PATH_HOSTS[MAX_PATH]; - if (IS_NT()) { + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { char tmp[MAX_PATH]; HKEY hkeyHosts; @@ -358,8 +364,10 @@ static int file_lookup(const char *name, int family, struct hostent **host) RegCloseKey(hkeyHosts); } } - else + else if (platform == WIN_9X) GetWindowsDirectory(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; strcat(PATH_HOSTS, WIN_PATH_HOSTS); diff --git a/src/rt/libuv/src/ares/ares_getnameinfo.c b/src/rt/libuv/src/ares/ares_getnameinfo.c index b6236862ed0..82e261dae41 100644 --- a/src/rt/libuv/src/ares/ares_getnameinfo.c +++ b/src/rt/libuv/src/ares/ares_getnameinfo.c @@ -58,6 +58,7 @@ #include "ares.h" #include "ares_ipv6.h" #include "inet_ntop.h" +#include "ares_nowarn.h" #include "ares_private.h" struct nameinfo_query { @@ -187,7 +188,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, if (sa->sa_family == AF_INET) { niquery->family = AF_INET; - memcpy(&niquery->addr.addr4, addr, sizeof(addr)); + memcpy(&niquery->addr.addr4, addr, sizeof(struct in_addr)); ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr), AF_INET, nameinfo_callback, niquery); @@ -195,7 +196,7 @@ void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, else { niquery->family = AF_INET6; - memcpy(&niquery->addr.addr6, addr6, sizeof(addr6)); + 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); diff --git a/src/rt/libuv/src/ares/ares_init.c b/src/rt/libuv/src/ares/ares_init.c index d7954a06b28..52bb4d6c894 100644 --- a/src/rt/libuv/src/ares/ares_init.c +++ b/src/rt/libuv/src/ares/ares_init.c @@ -1,6 +1,6 @@ /* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2007-2010 by Daniel Stenberg + * Copyright (C) 2007-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -17,10 +17,6 @@ #include "ares_setup.h" -#ifdef USE_WINSOCK -#include <iphlpapi.h> -#endif - #ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif @@ -63,17 +59,19 @@ #include <string.h> #include <ctype.h> #include <time.h> -#include <errno.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 ANDROID -#include <sys/system_properties.h> -#endif - #ifdef WATT32 #undef WIN32 /* Redefined in MingW/MSVC headers */ #endif @@ -102,7 +100,7 @@ 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); +static char *try_config(char *s, const char *opt, char scc); #endif #define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \ @@ -363,7 +361,7 @@ int ares_save_options(ares_channel channel, struct ares_options *options, ipv4_nservers++; } if (ipv4_nservers) { - options->servers = malloc(ipv4_nservers * sizeof(struct server_state)); + options->servers = malloc(ipv4_nservers * sizeof(struct in_addr)); if (!options->servers) return ARES_ENOMEM; for (i = j = 0; i < channel->nservers; i++) @@ -595,73 +593,198 @@ static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf) 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) { - FIXED_INFO *fi, *newfi; - DWORD size = sizeof (*fi); - IP_ADDR_STRING *ipAddr; - int i, count = 0; - int debug = 0; - size_t ip_size = sizeof("255.255.255.255,")-1; - size_t left = ret_size; - char *ret = ret_buf; - 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) + 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) { - 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); + 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; } - if (strlen(fi->DnsServerList.IpAddress.String) > 0 && - inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE && - left > ip_size) + else { - ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String); - left -= ret - ret_buf; - count++; - } + 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; - for (i = 0, ipAddr = fi->DnsServerList.Next; ipAddr && left > ip_size; - ipAddr = ipAddr->Next, i++) - { - if (inet_addr(ipAddr->IpAddress.String) != INADDR_NONE) + if (debug) { - ret += sprintf (ret, "%s,", ipAddr->IpAddress.String); - left -= ret - ret_buf; - count++; + 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); } - if (debug) - printf (" %s (secondary %d)\n", ipAddr->IpAddress.String, i+1); - } quit: - if (fi) - free(fi); - - if (debug && left <= ip_size) - printf ("Too many nameservers. Truncating to %d addressess", count); - if (ret > ret_buf) - ret[-1] = '\0'; - return count; + 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 @@ -704,7 +827,8 @@ DhcpNameServer DWORD data_type; DWORD bytes; DWORD result; - char buf[256]; + char buf[512]; + win_platform platform; if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */ return ARES_SUCCESS; @@ -716,7 +840,9 @@ DhcpNameServer goto okay; } - if (IS_NT()) + platform = ares__getplatform(); + + if (platform == WIN_NT) { if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, @@ -750,7 +876,7 @@ DhcpNameServer RegCloseKey(mykey); } } - else + else if (platform == WIN_9X) { if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, @@ -832,7 +958,10 @@ DhcpNameServer return ARES_ENOMEM; for (i = 0; def_nameservers[i]; i++) - servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); + { + servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); + servers[i].addr.family = AF_INET; + } status = ARES_EOF; #elif defined(ANDROID) @@ -856,17 +985,19 @@ DhcpNameServer if (fp) { while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) { - if ((p = try_config(line, "domain"))) + if ((p = try_config(line, "domain", ';'))) status = config_domain(channel, p); - else if ((p = try_config(line, "lookup")) && !channel->lookups) + else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) status = config_lookup(channel, p, "bind", "file"); - else if ((p = try_config(line, "search"))) + else if ((p = try_config(line, "search", ';'))) status = set_search(channel, p); - else if ((p = try_config(line, "nameserver")) && channel->nservers == -1) + 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) + else if ((p = try_config(line, "sortlist", ';')) && + channel->nsort == -1) status = config_sortlist(&sortlist, &nsort, p); - else if ((p = try_config(line, "options"))) + else if ((p = try_config(line, "options", ';'))) status = set_options(channel, p); else status = ARES_SUCCESS; @@ -896,8 +1027,9 @@ DhcpNameServer if (fp) { while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) { - if ((p = try_config(line, "hosts:")) && !channel->lookups) - status = config_lookup(channel, p, "dns", "files"); + if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "dns", "files"); } fclose(fp); } @@ -923,8 +1055,9 @@ DhcpNameServer if (fp) { while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) { - if ((p = try_config(line, "order")) && !channel->lookups) - status = config_lookup(channel, p, "bind", "hosts"); + if ((p = try_config(line, "order", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", "hosts"); } fclose(fp); } @@ -950,8 +1083,9 @@ DhcpNameServer if (fp) { while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) { - if ((p = try_config(line, "hosts=")) && !channel->lookups) - status = config_lookup(channel, p, "bind", "local"); + if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", "local"); } fclose(fp); } @@ -1042,10 +1176,13 @@ static int init_by_defaults(ares_channel channel) channel->nservers = 1; } -#ifdef ENAMETOOLONG -#define toolong(x) (x == -1) && ((ENAMETOOLONG == errno) || (EINVAL == errno)) +#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) && (EINVAL == errno) +#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) #endif if (channel->ndomains == -1) { @@ -1287,9 +1424,9 @@ static int config_sortlist(struct apattern **sortlist, int *nsort, if (!sortlist_alloc(sortlist, nsort, &pat)) return ARES_ENOMEM; } - if (ipbufpfx[0] && - (bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4, - sizeof(pat.addrV4))) > 0) + 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; @@ -1426,7 +1563,7 @@ static const char *try_option(const char *p, const char *q, const char *opt) } #if !defined(WIN32) && !defined(WATT32) -static char *try_config(char *s, const char *opt) +static char *try_config(char *s, const char *opt, char scc) { size_t len; char *p; @@ -1436,10 +1573,17 @@ static char *try_config(char *s, const char *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; - while (*p && (*p != '#')) - p++; + if(scc) + while (*p && (*p != '#') && (*p != scc)) + p++; + else + while (*p && (*p != '#')) + p++; *p = '\0'; /* trim trailing whitespace */ diff --git a/src/rt/libuv/src/ares/ares_iphlpapi.h b/src/rt/libuv/src/ares/ares_iphlpapi.h new file mode 100644 index 00000000000..343aee3ffbd --- /dev/null +++ b/src/rt/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/src/rt/libuv/src/ares/ares_library_init.c b/src/rt/libuv/src/ares/ares_library_init.c index 1a875da1504..f0137a1828e 100644 --- a/src/rt/libuv/src/ares/ares_library_init.c +++ b/src/rt/libuv/src/ares/ares_library_init.c @@ -26,6 +26,7 @@ #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 */ @@ -56,6 +57,15 @@ static int ares_win32_init(void) 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 diff --git a/src/rt/libuv/src/ares/ares_library_init.h b/src/rt/libuv/src/ares/ares_library_init.h index 29d5c9e73ff..cbbfc6afbad 100644 --- a/src/rt/libuv/src/ares/ares_library_init.h +++ b/src/rt/libuv/src/ares/ares_library_init.h @@ -3,7 +3,7 @@ /* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2009 by Daniel Stenberg + * Copyright (C) 2004-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -23,15 +23,18 @@ #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 */ diff --git a/src/rt/libuv/src/ares/ares_nowarn.c b/src/rt/libuv/src/ares/ares_nowarn.c index 52d079e6409..701add58c60 100644 --- a/src/rt/libuv/src/ares/ares_nowarn.c +++ b/src/rt/libuv/src/ares/ares_nowarn.c @@ -1,5 +1,5 @@ -/* Copyright (C) 2010 by Daniel Stenberg +/* Copyright (C) 2010-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -17,13 +17,44 @@ #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" -#define CARES_MASK_UINT (~(unsigned int) 0) -#define CARES_MASK_SINT (CARES_MASK_UINT >> 1) +#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 /* -** size_t to signed int +** unsigned size_t to signed int */ int aresx_uztosi(size_t uznum) @@ -51,9 +82,100 @@ int aresx_sltosi(long slnum) # 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/src/rt/libuv/src/ares/ares_nowarn.h b/src/rt/libuv/src/ares/ares_nowarn.h index fb804951065..bcaa22721f1 100644 --- a/src/rt/libuv/src/ares/ares_nowarn.h +++ b/src/rt/libuv/src/ares/ares_nowarn.h @@ -2,7 +2,7 @@ #define HEADER_CARES_NOWARN_H -/* Copyright (C) 2010 by Daniel Stenberg +/* Copyright (C) 2010-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -21,4 +21,35 @@ 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/src/rt/libuv/src/ares/ares_options.c b/src/rt/libuv/src/ares/ares_options.c index 70280526869..5174ef26e4c 100644 --- a/src/rt/libuv/src/ares/ares_options.c +++ b/src/rt/libuv/src/ares/ares_options.c @@ -1,6 +1,6 @@ /* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2008-2010 by Daniel Stenberg + * Copyright (C) 2008-2011 by Daniel Stenberg * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -135,12 +135,10 @@ int ares_set_servers(ares_channel channel, int ares_set_servers_csv(ares_channel channel, const char* _csv) { - int i; + size_t i; char* csv = NULL; char* ptr; char* start_host; - long port; - bool found_port; int rv = ARES_SUCCESS; struct ares_addr_node *servers = NULL; struct ares_addr_node *last = NULL; @@ -165,7 +163,6 @@ int ares_set_servers_csv(ares_channel channel, } start_host = csv; - found_port = false; for (ptr = csv; *ptr; ptr++) { if (*ptr == ',') { char* pp = ptr - 1; @@ -186,9 +183,8 @@ int ares_set_servers_csv(ares_channel channel, pp--; } if ((pp != start_host) && ((pp + 1) < ptr)) { - /* Found it. */ - found_port = true; - port = strtol(pp + 1, NULL, 10); + /* 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 */ @@ -233,7 +229,6 @@ int ares_set_servers_csv(ares_channel channel, } /* Set up for next one */ - found_port = false; start_host = ptr + 1; } } diff --git a/src/rt/libuv/src/ares/ares_parse_a_reply.c b/src/rt/libuv/src/ares/ares_parse_a_reply.c index 9926c27c577..4bd08458836 100644 --- a/src/rt/libuv/src/ares/ares_parse_a_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_a_reply.c @@ -132,6 +132,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen, aptr += len; if (aptr + RRFIXEDSZ > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } @@ -149,6 +150,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen, { if (aptr + sizeof(struct in_addr) > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } @@ -159,6 +161,7 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen, struct ares_addrttl * const at = &addrttls[naddrs]; if (aptr + sizeof(struct in_addr) > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } diff --git a/src/rt/libuv/src/ares/ares_parse_aaaa_reply.c b/src/rt/libuv/src/ares/ares_parse_aaaa_reply.c index a0f524daa5f..1fbe8389f74 100644 --- a/src/rt/libuv/src/ares/ares_parse_aaaa_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_aaaa_reply.c @@ -132,6 +132,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, aptr += len; if (aptr + RRFIXEDSZ > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } @@ -149,6 +150,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, { if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } @@ -159,6 +161,7 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, struct ares_addr6ttl * const at = &addrttls[naddrs]; if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } diff --git a/src/rt/libuv/src/ares/ares_parse_mx_reply.c b/src/rt/libuv/src/ares/ares_parse_mx_reply.c index 186ddd348d7..21800546b48 100644 --- a/src/rt/libuv/src/ares/ares_parse_mx_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_mx_reply.c @@ -47,7 +47,7 @@ int ares_parse_mx_reply (const unsigned char *abuf, int alen, - struct ares_mx_reply **mx_out) + struct ares_mx_reply **mx_out) { unsigned int qdcount, ancount, i; const unsigned char *aptr, *vptr; @@ -134,7 +134,7 @@ ares_parse_mx_reply (const unsigned char *abuf, int alen, mx_last = mx_curr; vptr = aptr; - mx_curr->priority = ntohs (*((unsigned short *)vptr)); + mx_curr->priority = DNS__16BIT(vptr); vptr += sizeof(unsigned short); status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len); diff --git a/src/rt/libuv/src/ares/ares_parse_ns_reply.c b/src/rt/libuv/src/ares/ares_parse_ns_reply.c index 25c632994a5..5e9af71d1a9 100644 --- a/src/rt/libuv/src/ares/ares_parse_ns_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_ns_reply.c @@ -1,5 +1,3 @@ -/* $Id */ - /* Copyright 1998 by the Massachusetts Institute of Technology. * * Permission to use, copy, modify, and distribute this @@ -105,6 +103,7 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen, if ( aptr + RRFIXEDSZ > abuf + alen ) { status = ARES_EBADRESP; + free(rr_name); break; } rr_type = DNS_RR_TYPE( aptr ); @@ -119,6 +118,7 @@ int ares_parse_ns_reply( const unsigned char* abuf, int alen, &len); if ( status != ARES_SUCCESS ) { + free(rr_name); break; } diff --git a/src/rt/libuv/src/ares/ares_parse_ptr_reply.c b/src/rt/libuv/src/ares/ares_parse_ptr_reply.c index ccd68a26da1..3b6dbc32e07 100644 --- a/src/rt/libuv/src/ares/ares_parse_ptr_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_ptr_reply.c @@ -99,6 +99,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, aptr += len; if (aptr + RRFIXEDSZ > abuf + alen) { + free(rr_name); status = ARES_EBADRESP; break; } @@ -114,13 +115,17 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, &len); if (status != ARES_SUCCESS) - break; + { + free(rr_name); + break; + } if (hostname) free(hostname); hostname = rr_data; - aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char *)); + aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char)); if (!aliases[aliascnt]) { + free(rr_name); status = ARES_ENOMEM; break; } @@ -131,6 +136,7 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, alias_alloc *= 2; ptr = realloc(aliases, alias_alloc * sizeof(char *)); if(!ptr) { + free(rr_name); status = ARES_ENOMEM; break; } @@ -144,7 +150,10 @@ int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, &len); if (status != ARES_SUCCESS) - break; + { + free(rr_name); + break; + } free(ptrname); ptrname = rr_data; } diff --git a/src/rt/libuv/src/ares/ares_parse_srv_reply.c b/src/rt/libuv/src/ares/ares_parse_srv_reply.c index 7d443b38ed3..9c7eb6ee3d3 100644 --- a/src/rt/libuv/src/ares/ares_parse_srv_reply.c +++ b/src/rt/libuv/src/ares/ares_parse_srv_reply.c @@ -139,11 +139,11 @@ ares_parse_srv_reply (const unsigned char *abuf, int alen, srv_last = srv_curr; vptr = aptr; - srv_curr->priority = ntohs (*((unsigned short *)vptr)); + srv_curr->priority = DNS__16BIT(vptr); vptr += sizeof(unsigned short); - srv_curr->weight = ntohs (*((unsigned short *)vptr)); + srv_curr->weight = DNS__16BIT(vptr); vptr += sizeof(unsigned short); - srv_curr->port = ntohs (*((unsigned short *)vptr)); + srv_curr->port = DNS__16BIT(vptr); vptr += sizeof(unsigned short); status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); diff --git a/src/rt/libuv/src/ares/ares_platform.c b/src/rt/libuv/src/ares/ares_platform.c new file mode 100644 index 00000000000..c20061583f4 --- /dev/null +++ b/src/rt/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", {NULL}, 4122, "udp"}, +{"z-wave", {NULL}, 4123, "tcp"}, +{"z-wave", {NULL}, 4123, "udp"}, +{"tigv2", {NULL}, 4124, "tcp"}, +{"tigv2", {NULL}, 4124, "udp"}, +{"opsview-envoy", {NULL}, 4125, "tcp"}, +{"opsview-envoy", {NULL}, 4125, "udp"}, +{"ddrepl", {NULL}, 4126, "tcp"}, +{"ddrepl", {NULL}, 4126, "udp"}, +{"unikeypro", {NULL}, 4127, "tcp"}, +{"unikeypro", {NULL}, 4127, "udp"}, +{"nufw", {NULL}, 4128, "tcp"}, +{"nufw", {NULL}, 4128, "udp"}, +{"nuauth", {NULL}, 4129, "tcp"}, +{"nuauth", {NULL}, 4129, "udp"}, +{"fronet", {NULL}, 4130, "tcp"}, +{"fronet", {NULL}, 4130, "udp"}, +{"stars", {NULL}, 4131, "tcp"}, +{"stars", {NULL}, 4131, "udp"}, +{"nuts_dem", {NULL}, 4132, "tcp"}, +{"nuts_dem", {NULL}, 4132, "udp"}, +{"nuts_bootp", {NULL}, 4133, "tcp"}, +{"nuts_bootp", {NULL}, 4133, "udp"}, +{"nifty-hmi", {NULL}, 4134, "tcp"}, +{"nifty-hmi", {NULL}, 4134, "udp"}, +{"cl-db-attach", {NULL}, 4135, "tcp"}, +{"cl-db-attach", {NULL}, 4135, "udp"}, +{"cl-db-request", {NULL}, 4136, "tcp"}, +{"cl-db-request", {NULL}, 4136, "udp"}, +{"cl-db-remote", {NULL}, 4137, "tcp"}, +{"cl-db-remote", {NULL}, 4137, "udp"}, +{"nettest", {NULL}, 4138, "tcp"}, +{"nettest", {NULL}, 4138, "udp"}, +{"thrtx", {NULL}, 4139, "tcp"}, +{"thrtx", {NULL}, 4139, "udp"}, +{"cedros_fds", {NULL}, 4140, "tcp"}, +{"cedros_fds", {NULL}, 4140, "udp"}, +{"oirtgsvc", {NULL}, 4141, "tcp"}, +{"oirtgsvc", {NULL}, 4141, "udp"}, +{"oidocsvc", {NULL}, 4142, "tcp"}, +{"oidocsvc", {NULL}, 4142, "udp"}, +{"oidsr", {NULL}, 4143, "tcp"}, +{"oidsr", {NULL}, 4143, "udp"}, +{"vvr-control", {NULL}, 4145, "tcp"}, +{"vvr-control", {NULL}, 4145, "udp"}, +{"tgcconnect", {NULL}, 4146, "tcp"}, +{"tgcconnect", {NULL}, 4146, "udp"}, +{"vrxpservman", {NULL}, 4147, "tcp"}, +{"vrxpservman", {NULL}, 4147, "udp"}, +{"hhb-handheld", {NULL}, 4148, "tcp"}, +{"hhb-handheld", {NULL}, 4148, "udp"}, +{"agslb", {NULL}, 4149, "tcp"}, +{"agslb", {NULL}, 4149, "udp"}, +{"PowerAlert-nsa", {NULL}, 4150, "tcp"}, +{"PowerAlert-nsa", {NULL}, 4150, "udp"}, +{"menandmice_noh", {NULL}, 4151, "tcp"}, +{"menandmice_noh", {NULL}, 4151, "udp"}, +{"idig_mux", {NULL}, 4152, "tcp"}, +{"idig_mux", {NULL}, 4152, "udp"}, +{"mbl-battd", {NULL}, 4153, "tcp"}, +{"mbl-battd", {NULL}, 4153, "udp"}, +{"atlinks", {NULL}, 4154, "tcp"}, +{"atlinks", {NULL}, 4154, "udp"}, +{"bzr", {NULL}, 4155, "tcp"}, +{"bzr", {NULL}, 4155, "udp"}, +{"stat-results", {NULL}, 4156, "tcp"}, +{"stat-results", {NULL}, 4156, "udp"}, +{"stat-scanner", {NULL}, 4157, "tcp"}, +{"stat-scanner", {NULL}, 4157, "udp"}, +{"stat-cc", {NULL}, 4158, "tcp"}, +{"stat-cc", {NULL}, 4158, "udp"}, +{"nss", {NULL}, 4159, "tcp"}, +{"nss", {NULL}, 4159, "udp"}, +{"jini-discovery", {NULL}, 4160, "tcp"}, +{"jini-discovery", {NULL}, 4160, "udp"}, +{"omscontact", {NULL}, 4161, "tcp"}, +{"omscontact", {NULL}, 4161, "udp"}, +{"omstopology", {NULL}, 4162, "tcp"}, +{"omstopology", {NULL}, 4162, "udp"}, +{"silverpeakpeer", {NULL}, 4163, "tcp"}, +{"silverpeakpeer", {NULL}, 4163, "udp"}, +{"silverpeakcomm", {NULL}, 4164, "tcp"}, +{"silverpeakcomm", {NULL}, 4164, "udp"}, +{"altcp", {NULL}, 4165, "tcp"}, +{"altcp", {NULL}, 4165, "udp"}, +{"joost", {NULL}, 4166, "tcp"}, +{"joost", {NULL}, 4166, "udp"}, +{"ddgn", {NULL}, 4167, "tcp"}, +{"ddgn", {NULL}, 4167, "udp"}, +{"pslicser", {NULL}, 4168, "tcp"}, +{"pslicser", {NULL}, 4168, "udp"}, +{"iadt", {NULL}, 4169, "tcp"}, +{"iadt-disc", {NULL}, 4169, "udp"}, +{"d-cinema-csp", {NULL}, 4170, "tcp"}, +{"ml-svnet", {NULL}, 4171, "tcp"}, +{"pcoip", {NULL}, 4172, "tcp"}, +{"pcoip", {NULL}, 4172, "udp"}, +{"smcluster", {NULL}, 4174, "tcp"}, +{"bccp", {NULL}, 4175, "tcp"}, +{"tl-ipcproxy", {NULL}, 4176, "tcp"}, +{"wello", {NULL}, 4177, "tcp"}, +{"wello", {NULL}, 4177, "udp"}, +{"storman", {NULL}, 4178, "tcp"}, +{"storman", {NULL}, 4178, "udp"}, +{"MaxumSP", {NULL}, 4179, "tcp"}, +{"MaxumSP", {NULL}, 4179, "udp"}, +{"httpx", {NULL}, 4180, "tcp"}, +{"httpx", {NULL}, 4180, "udp"}, +{"macbak", {NULL}, 4181, "tcp"}, +{"macbak", {NULL}, 4181, "udp"}, +{"pcptcpservice", {NULL}, 4182, "tcp"}, +{"pcptcpservice", {NULL}, 4182, "udp"}, +{"gmmp", {NULL}, 4183, "tcp"}, +{"gmmp", {NULL}, 4183, "udp"}, +{"universe_suite", {NULL}, 4184, "tcp"}, +{"universe_suite", {NULL}, 4184, "udp"}, +{"wcpp", {NULL}, 4185, "tcp"}, +{"wcpp", {NULL}, 4185, "udp"}, +{"boxbackupstore", {NULL}, 4186, "tcp"}, +{"csc_proxy", {NULL}, 4187, "tcp"}, +{"vatata", {NULL}, 4188, "tcp"}, +{"vatata", {NULL}, 4188, "udp"}, +{"pcep", {NULL}, 4189, "tcp"}, +{"sieve", {NULL}, 4190, "tcp"}, +{"dsmipv6", {NULL}, 4191, "udp"}, +{"azeti", {NULL}, 4192, "tcp"}, +{"azeti-bd", {NULL}, 4192, "udp"}, +{"pvxplusio", {NULL}, 4193, "tcp"}, +{"eims-admin", {NULL}, 4199, "tcp"}, +{"eims-admin", {NULL}, 4199, "udp"}, +{"corelccam", {NULL}, 4300, "tcp"}, +{"corelccam", {NULL}, 4300, "udp"}, +{"d-data", {NULL}, 4301, "tcp"}, +{"d-data", {NULL}, 4301, "udp"}, +{"d-data-control", {NULL}, 4302, "tcp"}, +{"d-data-control", {NULL}, 4302, "udp"}, +{"srcp", {NULL}, 4303, "tcp"}, +{"srcp", {NULL}, 4303, "udp"}, +{"owserver", {NULL}, 4304, "tcp"}, +{"owserver", {NULL}, 4304, "udp"}, +{"batman", {NULL}, 4305, "tcp"}, +{"batman", {NULL}, 4305, "udp"}, +{"pinghgl", {NULL}, 4306, "tcp"}, +{"pinghgl", {NULL}, 4306, "udp"}, +{"visicron-vs", {NULL}, 4307, "tcp"}, +{"visicron-vs", {NULL}, 4307, "udp"}, +{"compx-lockview", {NULL}, 4308, "tcp"}, +{"compx-lockview", {NULL}, 4308, "udp"}, +{"dserver", {NULL}, 4309, "tcp"}, +{"dserver", {NULL}, 4309, "udp"}, +{"mirrtex", {NULL}, 4310, "tcp"}, +{"mirrtex", {NULL}, 4310, "udp"}, +{"p6ssmc", {NULL}, 4311, "tcp"}, +{"pscl-mgt", {NULL}, 4312, "tcp"}, +{"perrla", {NULL}, 4313, "tcp"}, +{"fdt-rcatp", {NULL}, 4320, "tcp"}, +{"fdt-rcatp", {NULL}, 4320, "udp"}, +{"rwhois", {NULL}, 4321, "tcp"}, +{"rwhois", {NULL}, 4321, "udp"}, +{"trim-event", {NULL}, 4322, "tcp"}, +{"trim-event", {NULL}, 4322, "udp"}, +{"trim-ice", {NULL}, 4323, "tcp"}, +{"trim-ice", {NULL}, 4323, "udp"}, +{"balour", {NULL}, 4324, "tcp"}, +{"balour", {NULL}, 4324, "udp"}, +{"geognosisman", {NULL}, 4325, "tcp"}, +{"geognosisman", {NULL}, 4325, "udp"}, +{"geognosis", {NULL}, 4326, "tcp"}, +{"geognosis", {NULL}, 4326, "udp"}, +{"jaxer-web", {NULL}, 4327, "tcp"}, +{"jaxer-web", {NULL}, 4327, "udp"}, +{"jaxer-manager", {NULL}, 4328, "tcp"}, +{"jaxer-manager", {NULL}, 4328, "udp"}, +{"publiqare-sync", {NULL}, 4329, "tcp"}, +{"gaia", {NULL}, 4340, "tcp"}, +{"gaia", {NULL}, 4340, "udp"}, +{"lisp-data", {NULL}, 4341, "tcp"}, +{"lisp-data", {NULL}, 4341, "udp"}, +{"lisp-cons", {NULL}, 4342, "tcp"}, +{"lisp-control", {NULL}, 4342, "udp"}, +{"unicall", {NULL}, 4343, "tcp"}, +{"unicall", {NULL}, 4343, "udp"}, +{"vinainstall", {NULL}, 4344, "tcp"}, +{"vinainstall", {NULL}, 4344, "udp"}, +{"m4-network-as", {NULL}, 4345, "tcp"}, +{"m4-network-as", {NULL}, 4345, "udp"}, +{"elanlm", {NULL}, 4346, "tcp"}, +{"elanlm", {NULL}, 4346, "udp"}, +{"lansurveyor", {NULL}, 4347, "tcp"}, +{"lansurveyor", {NULL}, 4347, "udp"}, +{"itose", {NULL}, 4348, "tcp"}, +{"itose", {NULL}, 4348, "udp"}, +{"fsportmap", {NULL}, 4349, "tcp"}, +{"fsportmap", {NULL}, 4349, "udp"}, +{"net-device", {NULL}, 4350, "tcp"}, +{"net-device", {NULL}, 4350, "udp"}, +{"plcy-net-svcs", {NULL}, 4351, "tcp"}, +{"plcy-net-svcs", {NULL}, 4351, "udp"}, +{"pjlink", {NULL}, 4352, "tcp"}, +{"pjlink", {NULL}, 4352, "udp"}, +{"f5-iquery", {NULL}, 4353, "tcp"}, +{"f5-iquery", {NULL}, 4353, "udp"}, +{"qsnet-trans", {NULL}, 4354, "tcp"}, +{"qsnet-trans", {NULL}, 4354, "udp"}, +{"qsnet-workst", {NULL}, 4355, "tcp"}, +{"qsnet-workst", {NULL}, 4355, "udp"}, +{"qsnet-assist", {NULL}, 4356, "tcp"}, +{"qsnet-assist", {NULL}, 4356, "udp"}, +{"qsnet-cond", {NULL}, 4357, "tcp"}, +{"qsnet-cond", {NULL}, 4357, "udp"}, +{"qsnet-nucl", {NULL}, 4358, "tcp"}, +{"qsnet-nucl", {NULL}, 4358, "udp"}, +{"omabcastltkm", {NULL}, 4359, "tcp"}, +{"omabcastltkm", {NULL}, 4359, "udp"}, +{"matrix_vnet", {NULL}, 4360, "tcp"}, +{"nacnl", {NULL}, 4361, "udp"}, +{"afore-vdp-disc", {NULL}, 4362, "udp"}, +{"wxbrief", {NULL}, 4368, "tcp"}, +{"wxbrief", {NULL}, 4368, "udp"}, +{"epmd", {NULL}, 4369, "tcp"}, +{"epmd", {NULL}, 4369, "udp"}, +{"elpro_tunnel", {NULL}, 4370, "tcp"}, +{"elpro_tunnel", {NULL}, 4370, "udp"}, +{"l2c-control", {NULL}, 4371, "tcp"}, +{"l2c-disc", {NULL}, 4371, "udp"}, +{"l2c-data", {NULL}, 4372, "tcp"}, +{"l2c-data", {NULL}, 4372, "udp"}, +{"remctl", {NULL}, 4373, "tcp"}, +{"remctl", {NULL}, 4373, "udp"}, +{"psi-ptt", {NULL}, 4374, "tcp"}, +{"tolteces", {NULL}, 4375, "tcp"}, +{"tolteces", {NULL}, 4375, "udp"}, +{"bip", {NULL}, 4376, "tcp"}, +{"bip", {NULL}, 4376, "udp"}, +{"cp-spxsvr", {NULL}, 4377, "tcp"}, +{"cp-spxsvr", {NULL}, 4377, "udp"}, +{"cp-spxdpy", {NULL}, 4378, "tcp"}, +{"cp-spxdpy", {NULL}, 4378, "udp"}, +{"ctdb", {NULL}, 4379, "tcp"}, +{"ctdb", {NULL}, 4379, "udp"}, +{"xandros-cms", {NULL}, 4389, "tcp"}, +{"xandros-cms", {NULL}, 4389, "udp"}, +{"wiegand", {NULL}, 4390, "tcp"}, +{"wiegand", {NULL}, 4390, "udp"}, +{"apwi-imserver", {NULL}, 4391, "tcp"}, +{"apwi-rxserver", {NULL}, 4392, "tcp"}, +{"apwi-rxspooler", {NULL}, 4393, "tcp"}, +{"apwi-disc", {NULL}, 4394, "udp"}, +{"omnivisionesx", {NULL}, 4395, "tcp"}, +{"omnivisionesx", {NULL}, 4395, "udp"}, +{"fly", {NULL}, 4396, "tcp"}, +{"ds-srv", {NULL}, 4400, "tcp"}, +{"ds-srv", {NULL}, 4400, "udp"}, +{"ds-srvr", {NULL}, 4401, "tcp"}, +{"ds-srvr", {NULL}, 4401, "udp"}, +{"ds-clnt", {NULL}, 4402, "tcp"}, +{"ds-clnt", {NULL}, 4402, "udp"}, +{"ds-user", {NULL}, 4403, "tcp"}, +{"ds-user", {NULL}, 4403, "udp"}, +{"ds-admin", {NULL}, 4404, "tcp"}, +{"ds-admin", {NULL}, 4404, "udp"}, +{"ds-mail", {NULL}, 4405, "tcp"}, +{"ds-mail", {NULL}, 4405, "udp"}, +{"ds-slp", {NULL}, 4406, "tcp"}, +{"ds-slp", {NULL}, 4406, "udp"}, +{"nacagent", {NULL}, 4407, "tcp"}, +{"slscc", {NULL}, 4408, "tcp"}, +{"netcabinet-com", {NULL}, 4409, "tcp"}, +{"itwo-server", {NULL}, 4410, "tcp"}, +{"netrockey6", {NULL}, 4425, "tcp"}, +{"netrockey6", {NULL}, 4425, "udp"}, +{"beacon-port-2", {NULL}, 4426, "tcp"}, +{"beacon-port-2", {NULL}, 4426, "udp"}, +{"drizzle", {NULL}, 4427, "tcp"}, +{"omviserver", {NULL}, 4428, "tcp"}, +{"omviagent", {NULL}, 4429, "tcp"}, +{"rsqlserver", {NULL}, 4430, "tcp"}, +{"rsqlserver", {NULL}, 4430, "udp"}, +{"wspipe", {NULL}, 4431, "tcp"}, +{"netblox", {NULL}, 4441, "udp"}, +{"saris", {NULL}, 4442, "tcp"}, +{"saris", {NULL}, 4442, "udp"}, +{"pharos", {NULL}, 4443, "tcp"}, +{"pharos", {NULL}, 4443, "udp"}, +{"krb524", {NULL}, 4444, "tcp"}, +{"krb524", {NULL}, 4444, "udp"}, +{"nv-video", {NULL}, 4444, "tcp"}, +{"nv-video", {NULL}, 4444, "udp"}, +{"upnotifyp", {NULL}, 4445, "tcp"}, +{"upnotifyp", {NULL}, 4445, "udp"}, +{"n1-fwp", {NULL}, 4446, "tcp"}, +{"n1-fwp", {NULL}, 4446, "udp"}, +{"n1-rmgmt", {NULL}, 4447, "tcp"}, +{"n1-rmgmt", {NULL}, 4447, "udp"}, +{"asc-slmd", {NULL}, 4448, "tcp"}, +{"asc-slmd", {NULL}, 4448, "udp"}, +{"privatewire", {NULL}, 4449, "tcp"}, +{"privatewire", {NULL}, 4449, "udp"}, +{"camp", {NULL}, 4450, "tcp"}, +{"camp", {NULL}, 4450, "udp"}, +{"ctisystemmsg", {NULL}, 4451, "tcp"}, +{"ctisystemmsg", {NULL}, 4451, "udp"}, +{"ctiprogramload", {NULL}, 4452, "tcp"}, +{"ctiprogramload", {NULL}, 4452, "udp"}, +{"nssalertmgr", {NULL}, 4453, "tcp"}, +{"nssalertmgr", {NULL}, 4453, "udp"}, +{"nssagentmgr", {NULL}, 4454, "tcp"}, +{"nssagentmgr", {NULL}, 4454, "udp"}, +{"prchat-user", {NULL}, 4455, "tcp"}, +{"prchat-user", {NULL}, 4455, "udp"}, +{"prchat-server", {NULL}, 4456, "tcp"}, +{"prchat-server", {NULL}, 4456, "udp"}, +{"prRegister", {NULL}, 4457, "tcp"}, +{"prRegister", {NULL}, 4457, "udp"}, +{"mcp", {NULL}, 4458, "tcp"}, +{"mcp", {NULL}, 4458, "udp"}, +{"hpssmgmt", {NULL}, 4484, "tcp"}, +{"hpssmgmt", {NULL}, 4484, "udp"}, +{"assyst-dr", {NULL}, 4485, "tcp"}, +{"icms", {NULL}, 4486, "tcp"}, +{"icms", {NULL}, 4486, "udp"}, +{"prex-tcp", {NULL}, 4487, "tcp"}, +{"awacs-ice", {NULL}, 4488, "tcp"}, +{"awacs-ice", {NULL}, 4488, "udp"}, +{"ipsec-nat-t", {NULL}, 4500, "tcp"}, +{"ipsec-nat-t", {NULL}, 4500, "udp"}, +{"ehs", {NULL}, 4535, "tcp"}, +{"ehs", {NULL}, 4535, "udp"}, +{"ehs-ssl", {NULL}, 4536, "tcp"}, +{"ehs-ssl", {NULL}, 4536, "udp"}, +{"wssauthsvc", {NULL}, 4537, "tcp"}, +{"wssauthsvc", {NULL}, 4537, "udp"}, +{"swx-gate", {NULL}, 4538, "tcp"}, +{"swx-gate", {NULL}, 4538, "udp"}, +{"worldscores", {NULL}, 4545, "tcp"}, +{"worldscores", {NULL}, 4545, "udp"}, +{"sf-lm", {NULL}, 4546, "tcp"}, +{"sf-lm", {NULL}, 4546, "udp"}, +{"lanner-lm", {NULL}, 4547, "tcp"}, +{"lanner-lm", {NULL}, 4547, "udp"}, +{"synchromesh", {NULL}, 4548, "tcp"}, +{"synchromesh", {NULL}, 4548, "udp"}, +{"aegate", {NULL}, 4549, "tcp"}, +{"aegate", {NULL}, 4549, "udp"}, +{"gds-adppiw-db", {NULL}, 4550, "tcp"}, +{"gds-adppiw-db", {NULL}, 4550, "udp"}, +{"ieee-mih", {NULL}, 4551, "tcp"}, +{"ieee-mih", {NULL}, 4551, "udp"}, +{"menandmice-mon", {NULL}, 4552, "tcp"}, +{"menandmice-mon", {NULL}, 4552, "udp"}, +{"icshostsvc", {NULL}, 4553, "tcp"}, +{"msfrs", {NULL}, 4554, "tcp"}, +{"msfrs", {NULL}, 4554, "udp"}, +{"rsip", {NULL}, 4555, "tcp"}, +{"rsip", {NULL}, 4555, "udp"}, +{"dtn-bundle-tcp", {NULL}, 4556, "tcp"}, +{"dtn-bundle-udp", {NULL}, 4556, "udp"}, +{"mtcevrunqss", {NULL}, 4557, "udp"}, +{"mtcevrunqman", {NULL}, 4558, "udp"}, +{"hylafax", {NULL}, 4559, "tcp"}, +{"hylafax", {NULL}, 4559, "udp"}, +{"kwtc", {NULL}, 4566, "tcp"}, +{"kwtc", {NULL}, 4566, "udp"}, +{"tram", {NULL}, 4567, "tcp"}, +{"tram", {NULL}, 4567, "udp"}, +{"bmc-reporting", {NULL}, 4568, "tcp"}, +{"bmc-reporting", {NULL}, 4568, "udp"}, +{"iax", {NULL}, 4569, "tcp"}, +{"iax", {NULL}, 4569, "udp"}, +{"rid", {NULL}, 4590, "tcp"}, +{"l3t-at-an", {NULL}, 4591, "tcp"}, +{"l3t-at-an", {NULL}, 4591, "udp"}, +{"hrpd-ith-at-an", {NULL}, 4592, "udp"}, +{"ipt-anri-anri", {NULL}, 4593, "tcp"}, +{"ipt-anri-anri", {NULL}, 4593, "udp"}, +{"ias-session", {NULL}, 4594, "tcp"}, +{"ias-session", {NULL}, 4594, "udp"}, +{"ias-paging", {NULL}, 4595, "tcp"}, +{"ias-paging", {NULL}, 4595, "udp"}, +{"ias-neighbor", {NULL}, 4596, "tcp"}, +{"ias-neighbor", {NULL}, 4596, "udp"}, +{"a21-an-1xbs", {NULL}, 4597, "tcp"}, +{"a21-an-1xbs", {NULL}, 4597, "udp"}, +{"a16-an-an", {NULL}, 4598, "tcp"}, +{"a16-an-an", {NULL}, 4598, "udp"}, +{"a17-an-an", {NULL}, 4599, "tcp"}, +{"a17-an-an", {NULL}, 4599, "udp"}, +{"piranha1", {NULL}, 4600, "tcp"}, +{"piranha1", {NULL}, 4600, "udp"}, +{"piranha2", {NULL}, 4601, "tcp"}, +{"piranha2", {NULL}, 4601, "udp"}, +{"mtsserver", {NULL}, 4602, "tcp"}, +{"menandmice-upg", {NULL}, 4603, "tcp"}, +{"playsta2-app", {NULL}, 4658, "tcp"}, +{"playsta2-app", {NULL}, 4658, "udp"}, +{"playsta2-lob", {NULL}, 4659, "tcp"}, +{"playsta2-lob", {NULL}, 4659, "udp"}, +{"smaclmgr", {NULL}, 4660, "tcp"}, +{"smaclmgr", {NULL}, 4660, "udp"}, +{"kar2ouche", {NULL}, 4661, "tcp"}, +{"kar2ouche", {NULL}, 4661, "udp"}, +{"oms", {NULL}, 4662, "tcp"}, +{"oms", {NULL}, 4662, "udp"}, +{"noteit", {NULL}, 4663, "tcp"}, +{"noteit", {NULL}, 4663, "udp"}, +{"ems", {NULL}, 4664, "tcp"}, +{"ems", {NULL}, 4664, "udp"}, +{"contclientms", {NULL}, 4665, "tcp"}, +{"contclientms", {NULL}, 4665, "udp"}, +{"eportcomm", {NULL}, 4666, "tcp"}, +{"eportcomm", {NULL}, 4666, "udp"}, +{"mmacomm", {NULL}, 4667, "tcp"}, +{"mmacomm", {NULL}, 4667, "udp"}, +{"mmaeds", {NULL}, 4668, "tcp"}, +{"mmaeds", {NULL}, 4668, "udp"}, +{"eportcommdata", {NULL}, 4669, "tcp"}, +{"eportcommdata", {NULL}, 4669, "udp"}, +{"light", {NULL}, 4670, "tcp"}, +{"light", {NULL}, 4670, "udp"}, +{"acter", {NULL}, 4671, "tcp"}, +{"acter", {NULL}, 4671, "udp"}, +{"rfa", {NULL}, 4672, "tcp"}, +{"rfa", {NULL}, 4672, "udp"}, +{"cxws", {NULL}, 4673, "tcp"}, +{"cxws", {NULL}, 4673, "udp"}, +{"appiq-mgmt", {NULL}, 4674, "tcp"}, +{"appiq-mgmt", {NULL}, 4674, "udp"}, +{"dhct-status", {NULL}, 4675, "tcp"}, +{"dhct-status", {NULL}, 4675, "udp"}, +{"dhct-alerts", {NULL}, 4676, "tcp"}, +{"dhct-alerts", {NULL}, 4676, "udp"}, +{"bcs", {NULL}, 4677, "tcp"}, +{"bcs", {NULL}, 4677, "udp"}, +{"traversal", {NULL}, 4678, "tcp"}, +{"traversal", {NULL}, 4678, "udp"}, +{"mgesupervision", {NULL}, 4679, "tcp"}, +{"mgesupervision", {NULL}, 4679, "udp"}, +{"mgemanagement", {NULL}, 4680, "tcp"}, +{"mgemanagement", {NULL}, 4680, "udp"}, +{"parliant", {NULL}, 4681, "tcp"}, +{"parliant", {NULL}, 4681, "udp"}, +{"finisar", {NULL}, 4682, "tcp"}, +{"finisar", {NULL}, 4682, "udp"}, +{"spike", {NULL}, 4683, "tcp"}, +{"spike", {NULL}, 4683, "udp"}, +{"rfid-rp1", {NULL}, 4684, "tcp"}, +{"rfid-rp1", {NULL}, 4684, "udp"}, +{"autopac", {NULL}, 4685, "tcp"}, +{"autopac", {NULL}, 4685, "udp"}, +{"msp-os", {NULL}, 4686, "tcp"}, +{"msp-os", {NULL}, 4686, "udp"}, +{"nst", {NULL}, 4687, "tcp"}, +{"nst", {NULL}, 4687, "udp"}, +{"mobile-p2p", {NULL}, 4688, "tcp"}, +{"mobile-p2p", {NULL}, 4688, "udp"}, +{"altovacentral", {NULL}, 4689, "tcp"}, +{"altovacentral", {NULL}, 4689, "udp"}, +{"prelude", {NULL}, 4690, "tcp"}, +{"prelude", {NULL}, 4690, "udp"}, +{"mtn", {NULL}, 4691, "tcp"}, +{"mtn", {NULL}, 4691, "udp"}, +{"conspiracy", {NULL}, 4692, "tcp"}, +{"conspiracy", {NULL}, 4692, "udp"}, +{"netxms-agent", {NULL}, 4700, "tcp"}, +{"netxms-agent", {NULL}, 4700, "udp"}, +{"netxms-mgmt", {NULL}, 4701, "tcp"}, +{"netxms-mgmt", {NULL}, 4701, "udp"}, +{"netxms-sync", {NULL}, 4702, "tcp"}, +{"netxms-sync", {NULL}, 4702, "udp"}, +{"npqes-test", {NULL}, 4703, "tcp"}, +{"assuria-ins", {NULL}, 4704, "tcp"}, +{"truckstar", {NULL}, 4725, "tcp"}, +{"truckstar", {NULL}, 4725, "udp"}, +{"a26-fap-fgw", {NULL}, 4726, "udp"}, +{"fcis", {NULL}, 4727, "tcp"}, +{"fcis-disc", {NULL}, 4727, "udp"}, +{"capmux", {NULL}, 4728, "tcp"}, +{"capmux", {NULL}, 4728, "udp"}, +{"gsmtap", {NULL}, 4729, "udp"}, +{"gearman", {NULL}, 4730, "tcp"}, +{"gearman", {NULL}, 4730, "udp"}, +{"remcap", {NULL}, 4731, "tcp"}, +{"ohmtrigger", {NULL}, 4732, "udp"}, +{"resorcs", {NULL}, 4733, "tcp"}, +{"ipdr-sp", {NULL}, 4737, "tcp"}, +{"ipdr-sp", {NULL}, 4737, "udp"}, +{"solera-lpn", {NULL}, 4738, "tcp"}, +{"solera-lpn", {NULL}, 4738, "udp"}, +{"ipfix", {NULL}, 4739, "tcp"}, +{"ipfix", {NULL}, 4739, "udp"}, +{"ipfix", {NULL}, 4739, "sctp"}, +{"ipfixs", {NULL}, 4740, "tcp"}, +{"ipfixs", {NULL}, 4740, "sctp"}, +{"ipfixs", {NULL}, 4740, "udp"}, +{"lumimgrd", {NULL}, 4741, "tcp"}, +{"lumimgrd", {NULL}, 4741, "udp"}, +{"sicct", {NULL}, 4742, "tcp"}, +{"sicct-sdp", {NULL}, 4742, "udp"}, +{"openhpid", {NULL}, 4743, "tcp"}, +{"openhpid", {NULL}, 4743, "udp"}, +{"ifsp", {NULL}, 4744, "tcp"}, +{"ifsp", {NULL}, 4744, "udp"}, +{"fmp", {NULL}, 4745, "tcp"}, +{"fmp", {NULL}, 4745, "udp"}, +{"profilemac", {NULL}, 4749, "tcp"}, +{"profilemac", {NULL}, 4749, "udp"}, +{"ssad", {NULL}, 4750, "tcp"}, +{"ssad", {NULL}, 4750, "udp"}, +{"spocp", {NULL}, 4751, "tcp"}, +{"spocp", {NULL}, 4751, "udp"}, +{"snap", {NULL}, 4752, "tcp"}, +{"snap", {NULL}, 4752, "udp"}, +{"bfd-multi-ctl", {NULL}, 4784, "tcp"}, +{"bfd-multi-ctl", {NULL}, 4784, "udp"}, +{"cncp", {NULL}, 4785, "udp"}, +{"smart-install", {NULL}, 4786, "tcp"}, +{"sia-ctrl-plane", {NULL}, 4787, "tcp"}, +{"iims", {NULL}, 4800, "tcp"}, +{"iims", {NULL}, 4800, "udp"}, +{"iwec", {NULL}, 4801, "tcp"}, +{"iwec", {NULL}, 4801, "udp"}, +{"ilss", {NULL}, 4802, "tcp"}, +{"ilss", {NULL}, 4802, "udp"}, +{"notateit", {NULL}, 4803, "tcp"}, +{"notateit-disc", {NULL}, 4803, "udp"}, +{"aja-ntv4-disc", {NULL}, 4804, "udp"}, +{"htcp", {NULL}, 4827, "tcp"}, +{"htcp", {NULL}, 4827, "udp"}, +{"varadero-0", {NULL}, 4837, "tcp"}, +{"varadero-0", {NULL}, 4837, "udp"}, +{"varadero-1", {NULL}, 4838, "tcp"}, +{"varadero-1", {NULL}, 4838, "udp"}, +{"varadero-2", {NULL}, 4839, "tcp"}, +{"varadero-2", {NULL}, 4839, "udp"}, +{"opcua-tcp", {NULL}, 4840, "tcp"}, +{"opcua-udp", {NULL}, 4840, "udp"}, +{"quosa", {NULL}, 4841, "tcp"}, +{"quosa", {NULL}, 4841, "udp"}, +{"gw-asv", {NULL}, 4842, "tcp"}, +{"gw-asv", {NULL}, 4842, "udp"}, +{"opcua-tls", {NULL}, 4843, "tcp"}, +{"opcua-tls", {NULL}, 4843, "udp"}, +{"gw-log", {NULL}, 4844, "tcp"}, +{"gw-log", {NULL}, 4844, "udp"}, +{"wcr-remlib", {NULL}, 4845, "tcp"}, +{"wcr-remlib", {NULL}, 4845, "udp"}, +{"contamac_icm", {NULL}, 4846, "tcp"}, +{"contamac_icm", {NULL}, 4846, "udp"}, +{"wfc", {NULL}, 4847, "tcp"}, +{"wfc", {NULL}, 4847, "udp"}, +{"appserv-http", {NULL}, 4848, "tcp"}, +{"appserv-http", {NULL}, 4848, "udp"}, +{"appserv-https", {NULL}, 4849, "tcp"}, +{"appserv-https", {NULL}, 4849, "udp"}, +{"sun-as-nodeagt", {NULL}, 4850, "tcp"}, +{"sun-as-nodeagt", {NULL}, 4850, "udp"}, +{"derby-repli", {NULL}, 4851, "tcp"}, +{"derby-repli", {NULL}, 4851, "udp"}, +{"unify-debug", {NULL}, 4867, "tcp"}, +{"unify-debug", {NULL}, 4867, "udp"}, +{"phrelay", {NULL}, 4868, "tcp"}, +{"phrelay", {NULL}, 4868, "udp"}, +{"phrelaydbg", {NULL}, 4869, "tcp"}, +{"phrelaydbg", {NULL}, 4869, "udp"}, +{"cc-tracking", {NULL}, 4870, "tcp"}, +{"cc-tracking", {NULL}, 4870, "udp"}, +{"wired", {NULL}, 4871, "tcp"}, +{"wired", {NULL}, 4871, "udp"}, +{"tritium-can", {NULL}, 4876, "tcp"}, +{"tritium-can", {NULL}, 4876, "udp"}, +{"lmcs", {NULL}, 4877, "tcp"}, +{"lmcs", {NULL}, 4877, "udp"}, +{"inst-discovery", {NULL}, 4878, "udp"}, +{"wsdl-event", {NULL}, 4879, "tcp"}, +{"hislip", {NULL}, 4880, "tcp"}, +{"socp-t", {NULL}, 4881, "udp"}, +{"socp-c", {NULL}, 4882, "udp"}, +{"wmlserver", {NULL}, 4883, "tcp"}, +{"hivestor", {NULL}, 4884, "tcp"}, +{"hivestor", {NULL}, 4884, "udp"}, +{"abbs", {NULL}, 4885, "tcp"}, +{"abbs", {NULL}, 4885, "udp"}, +{"lyskom", {NULL}, 4894, "tcp"}, +{"lyskom", {NULL}, 4894, "udp"}, +{"radmin-port", {NULL}, 4899, "tcp"}, +{"radmin-port", {NULL}, 4899, "udp"}, +{"hfcs", {NULL}, 4900, "tcp"}, +{"hfcs", {NULL}, 4900, "udp"}, +{"flr_agent", {NULL}, 4901, "tcp"}, +{"magiccontrol", {NULL}, 4902, "tcp"}, +{"lutap", {NULL}, 4912, "tcp"}, +{"lutcp", {NULL}, 4913, "tcp"}, +{"bones", {NULL}, 4914, "tcp"}, +{"bones", {NULL}, 4914, "udp"}, +{"frcs", {NULL}, 4915, "tcp"}, +{"atsc-mh-ssc", {NULL}, 4937, "udp"}, +{"eq-office-4940", {NULL}, 4940, "tcp"}, +{"eq-office-4940", {NULL}, 4940, "udp"}, +{"eq-office-4941", {NULL}, 4941, "tcp"}, +{"eq-office-4941", {NULL}, 4941, "udp"}, +{"eq-office-4942", {NULL}, 4942, "tcp"}, +{"eq-office-4942", {NULL}, 4942, "udp"}, +{"munin", {NULL}, 4949, "tcp"}, +{"munin", {NULL}, 4949, "udp"}, +{"sybasesrvmon", {NULL}, 4950, "tcp"}, +{"sybasesrvmon", {NULL}, 4950, "udp"}, +{"pwgwims", {NULL}, 4951, "tcp"}, +{"pwgwims", {NULL}, 4951, "udp"}, +{"sagxtsds", {NULL}, 4952, "tcp"}, +{"sagxtsds", {NULL}, 4952, "udp"}, +{"dbsyncarbiter", {NULL}, 4953, "tcp"}, +{"ccss-qmm", {NULL}, 4969, "tcp"}, +{"ccss-qmm", {NULL}, 4969, "udp"}, +{"ccss-qsm", {NULL}, 4970, "tcp"}, +{"ccss-qsm", {NULL}, 4970, "udp"}, +{"webyast", {NULL}, 4984, "tcp"}, +{"gerhcs", {NULL}, 4985, "tcp"}, +{"mrip", {NULL}, 4986, "tcp"}, +{"mrip", {NULL}, 4986, "udp"}, +{"smar-se-port1", {NULL}, 4987, "tcp"}, +{"smar-se-port1", {NULL}, 4987, "udp"}, +{"smar-se-port2", {NULL}, 4988, "tcp"}, +{"smar-se-port2", {NULL}, 4988, "udp"}, +{"parallel", {NULL}, 4989, "tcp"}, +{"parallel", {NULL}, 4989, "udp"}, +{"busycal", {NULL}, 4990, "tcp"}, +{"busycal", {NULL}, 4990, "udp"}, +{"vrt", {NULL}, 4991, "tcp"}, +{"vrt", {NULL}, 4991, "udp"}, +{"hfcs-manager", {NULL}, 4999, "tcp"}, +{"hfcs-manager", {NULL}, 4999, "udp"}, +{"commplex-main", {NULL}, 5000, "tcp"}, +{"commplex-main", {NULL}, 5000, "udp"}, +{"commplex-link", {NULL}, 5001, "tcp"}, +{"commplex-link", {NULL}, 5001, "udp"}, +{"rfe", {NULL}, 5002, "tcp"}, +{"rfe", {NULL}, 5002, "udp"}, +{"fmpro-internal", {NULL}, 5003, "tcp"}, +{"fmpro-internal", {NULL}, 5003, "udp"}, +{"avt-profile-1", {NULL}, 5004, "tcp"}, +{"avt-profile-1", {NULL}, 5004, "udp"}, +{"avt-profile-1", {NULL}, 5004, "dccp"}, +{"avt-profile-2", {NULL}, 5005, "tcp"}, +{"avt-profile-2", {NULL}, 5005, "udp"}, +{"avt-profile-2", {NULL}, 5005, "dccp"}, +{"wsm-server", {NULL}, 5006, "tcp"}, +{"wsm-server", {NULL}, 5006, "udp"}, +{"wsm-server-ssl", {NULL}, 5007, "tcp"}, +{"wsm-server-ssl", {NULL}, 5007, "udp"}, +{"synapsis-edge", {NULL}, 5008, "tcp"}, +{"synapsis-edge", {NULL}, 5008, "udp"}, +{"winfs", {NULL}, 5009, "tcp"}, +{"winfs", {NULL}, 5009, "udp"}, +{"telelpathstart", {NULL}, 5010, "tcp"}, +{"telelpathstart", {NULL}, 5010, "udp"}, +{"telelpathattack", {NULL}, 5011, "tcp"}, +{"telelpathattack", {NULL}, 5011, "udp"}, +{"nsp", {NULL}, 5012, "tcp"}, +{"nsp", {NULL}, 5012, "udp"}, +{"fmpro-v6", {NULL}, 5013, "tcp"}, +{"fmpro-v6", {NULL}, 5013, "udp"}, +{"onpsocket", {NULL}, 5014, "udp"}, +{"fmwp", {NULL}, 5015, "tcp"}, +{"zenginkyo-1", {NULL}, 5020, "tcp"}, +{"zenginkyo-1", {NULL}, 5020, "udp"}, +{"zenginkyo-2", {NULL}, 5021, "tcp"}, +{"zenginkyo-2", {NULL}, 5021, "udp"}, +{"mice", {NULL}, 5022, "tcp"}, +{"mice", {NULL}, 5022, "udp"}, +{"htuilsrv", {NULL}, 5023, "tcp"}, +{"htuilsrv", {NULL}, 5023, "udp"}, +{"scpi-telnet", {NULL}, 5024, "tcp"}, +{"scpi-telnet", {NULL}, 5024, "udp"}, +{"scpi-raw", {NULL}, 5025, "tcp"}, +{"scpi-raw", {NULL}, 5025, "udp"}, +{"strexec-d", {NULL}, 5026, "tcp"}, +{"strexec-d", {NULL}, 5026, "udp"}, +{"strexec-s", {NULL}, 5027, "tcp"}, +{"strexec-s", {NULL}, 5027, "udp"}, +{"qvr", {NULL}, 5028, "tcp"}, +{"infobright", {NULL}, 5029, "tcp"}, +{"infobright", {NULL}, 5029, "udp"}, +{"surfpass", {NULL}, 5030, "tcp"}, +{"surfpass", {NULL}, 5030, "udp"}, +{"dmp", {NULL}, 5031, "udp"}, +{"asnaacceler8db", {NULL}, 5042, "tcp"}, +{"asnaacceler8db", {NULL}, 5042, "udp"}, +{"swxadmin", {NULL}, 5043, "tcp"}, +{"swxadmin", {NULL}, 5043, "udp"}, +{"lxi-evntsvc", {NULL}, 5044, "tcp"}, +{"lxi-evntsvc", {NULL}, 5044, "udp"}, +{"osp", {NULL}, 5045, "tcp"}, +{"vpm-udp", {NULL}, 5046, "udp"}, +{"iscape", {NULL}, 5047, "udp"}, +{"texai", {NULL}, 5048, "tcp"}, +{"ivocalize", {NULL}, 5049, "tcp"}, +{"ivocalize", {NULL}, 5049, "udp"}, +{"mmcc", {NULL}, 5050, "tcp"}, +{"mmcc", {NULL}, 5050, "udp"}, +{"ita-agent", {NULL}, 5051, "tcp"}, +{"ita-agent", {NULL}, 5051, "udp"}, +{"ita-manager", {NULL}, 5052, "tcp"}, +{"ita-manager", {NULL}, 5052, "udp"}, +{"rlm", {NULL}, 5053, "tcp"}, +{"rlm-admin", {NULL}, 5054, "tcp"}, +{"unot", {NULL}, 5055, "tcp"}, +{"unot", {NULL}, 5055, "udp"}, +{"intecom-ps1", {NULL}, 5056, "tcp"}, +{"intecom-ps1", {NULL}, 5056, "udp"}, +{"intecom-ps2", {NULL}, 5057, "tcp"}, +{"intecom-ps2", {NULL}, 5057, "udp"}, +{"locus-disc", {NULL}, 5058, "udp"}, +{"sds", {NULL}, 5059, "tcp"}, +{"sds", {NULL}, 5059, "udp"}, +{"sip", {NULL}, 5060, "tcp"}, +{"sip", {NULL}, 5060, "udp"}, +{"sip-tls", {NULL}, 5061, "tcp"}, +{"sip-tls", {NULL}, 5061, "udp"}, +{"na-localise", {NULL}, 5062, "tcp"}, +{"na-localise", {NULL}, 5062, "udp"}, +{"csrpc", {NULL}, 5063, "tcp"}, +{"ca-1", {NULL}, 5064, "tcp"}, +{"ca-1", {NULL}, 5064, "udp"}, +{"ca-2", {NULL}, 5065, "tcp"}, +{"ca-2", {NULL}, 5065, "udp"}, +{"stanag-5066", {NULL}, 5066, "tcp"}, +{"stanag-5066", {NULL}, 5066, "udp"}, +{"authentx", {NULL}, 5067, "tcp"}, +{"authentx", {NULL}, 5067, "udp"}, +{"bitforestsrv", {NULL}, 5068, "tcp"}, +{"i-net-2000-npr", {NULL}, 5069, "tcp"}, +{"i-net-2000-npr", {NULL}, 5069, "udp"}, +{"vtsas", {NULL}, 5070, "tcp"}, +{"vtsas", {NULL}, 5070, "udp"}, +{"powerschool", {NULL}, 5071, "tcp"}, +{"powerschool", {NULL}, 5071, "udp"}, +{"ayiya", {NULL}, 5072, "tcp"}, +{"ayiya", {NULL}, 5072, "udp"}, +{"tag-pm", {NULL}, 5073, "tcp"}, +{"tag-pm", {NULL}, 5073, "udp"}, +{"alesquery", {NULL}, 5074, "tcp"}, +{"alesquery", {NULL}, 5074, "udp"}, +{"cp-spxrpts", {NULL}, 5079, "udp"}, +{"onscreen", {NULL}, 5080, "tcp"}, +{"onscreen", {NULL}, 5080, "udp"}, +{"sdl-ets", {NULL}, 5081, "tcp"}, +{"sdl-ets", {NULL}, 5081, "udp"}, +{"qcp", {NULL}, 5082, "tcp"}, +{"qcp", {NULL}, 5082, "udp"}, +{"qfp", {NULL}, 5083, "tcp"}, +{"qfp", {NULL}, 5083, "udp"}, +{"llrp", {NULL}, 5084, "tcp"}, +{"llrp", {NULL}, 5084, "udp"}, +{"encrypted-llrp", {NULL}, 5085, "tcp"}, +{"encrypted-llrp", {NULL}, 5085, "udp"}, +{"aprigo-cs", {NULL}, 5086, "tcp"}, +{"car", {NULL}, 5090, "sctp"}, +{"cxtp", {NULL}, 5091, "sctp"}, +{"magpie", {NULL}, 5092, "udp"}, +{"sentinel-lm", {NULL}, 5093, "tcp"}, +{"sentinel-lm", {NULL}, 5093, "udp"}, +{"hart-ip", {NULL}, 5094, "tcp"}, +{"hart-ip", {NULL}, 5094, "udp"}, +{"sentlm-srv2srv", {NULL}, 5099, "tcp"}, +{"sentlm-srv2srv", {NULL}, 5099, "udp"}, +{"socalia", {NULL}, 5100, "tcp"}, +{"socalia", {NULL}, 5100, "udp"}, +{"talarian-tcp", {NULL}, 5101, "tcp"}, +{"talarian-udp", {NULL}, 5101, "udp"}, +{"oms-nonsecure", {NULL}, 5102, "tcp"}, +{"oms-nonsecure", {NULL}, 5102, "udp"}, +{"actifio-c2c", {NULL}, 5103, "tcp"}, +{"tinymessage", {NULL}, 5104, "udp"}, +{"hughes-ap", {NULL}, 5105, "udp"}, +{"taep-as-svc", {NULL}, 5111, "tcp"}, +{"taep-as-svc", {NULL}, 5111, "udp"}, +{"pm-cmdsvr", {NULL}, 5112, "tcp"}, +{"pm-cmdsvr", {NULL}, 5112, "udp"}, +{"ev-services", {NULL}, 5114, "tcp"}, +{"autobuild", {NULL}, 5115, "tcp"}, +{"emb-proj-cmd", {NULL}, 5116, "udp"}, +{"gradecam", {NULL}, 5117, "tcp"}, +{"nbt-pc", {NULL}, 5133, "tcp"}, +{"nbt-pc", {NULL}, 5133, "udp"}, +{"ppactivation", {NULL}, 5134, "tcp"}, +{"erp-scale", {NULL}, 5135, "tcp"}, +{"minotaur-sa", {NULL}, 5136, "udp"}, +{"ctsd", {NULL}, 5137, "tcp"}, +{"ctsd", {NULL}, 5137, "udp"}, +{"rmonitor_secure", {NULL}, 5145, "tcp"}, +{"rmonitor_secure", {NULL}, 5145, "udp"}, +{"social-alarm", {NULL}, 5146, "tcp"}, +{"atmp", {NULL}, 5150, "tcp"}, +{"atmp", {NULL}, 5150, "udp"}, +{"esri_sde", {NULL}, 5151, "tcp"}, +{"esri_sde", {NULL}, 5151, "udp"}, +{"sde-discovery", {NULL}, 5152, "tcp"}, +{"sde-discovery", {NULL}, 5152, "udp"}, +{"toruxserver", {NULL}, 5153, "tcp"}, +{"bzflag", {NULL}, 5154, "tcp"}, +{"bzflag", {NULL}, 5154, "udp"}, +{"asctrl-agent", {NULL}, 5155, "tcp"}, +{"asctrl-agent", {NULL}, 5155, "udp"}, +{"rugameonline", {NULL}, 5156, "tcp"}, +{"mediat", {NULL}, 5157, "tcp"}, +{"snmpssh", {NULL}, 5161, "tcp"}, +{"snmpssh-trap", {NULL}, 5162, "tcp"}, +{"sbackup", {NULL}, 5163, "tcp"}, +{"vpa", {NULL}, 5164, "tcp"}, +{"vpa-disc", {NULL}, 5164, "udp"}, +{"ife_icorp", {NULL}, 5165, "tcp"}, +{"ife_icorp", {NULL}, 5165, "udp"}, +{"winpcs", {NULL}, 5166, "tcp"}, +{"winpcs", {NULL}, 5166, "udp"}, +{"scte104", {NULL}, 5167, "tcp"}, +{"scte104", {NULL}, 5167, "udp"}, +{"scte30", {NULL}, 5168, "tcp"}, +{"scte30", {NULL}, 5168, "udp"}, +{"aol", {NULL}, 5190, "tcp"}, +{"aol", {NULL}, 5190, "udp"}, +{"aol-1", {NULL}, 5191, "tcp"}, +{"aol-1", {NULL}, 5191, "udp"}, +{"aol-2", {NULL}, 5192, "tcp"}, +{"aol-2", {NULL}, 5192, "udp"}, +{"aol-3", {NULL}, 5193, "tcp"}, +{"aol-3", {NULL}, 5193, "udp"}, +{"cpscomm", {NULL}, 5194, "tcp"}, +{"targus-getdata", {NULL}, 5200, "tcp"}, +{"targus-getdata", {NULL}, 5200, "udp"}, +{"targus-getdata1", {NULL}, 5201, "tcp"}, +{"targus-getdata1", {NULL}, 5201, "udp"}, +{"targus-getdata2", {NULL}, 5202, "tcp"}, +{"targus-getdata2", {NULL}, 5202, "udp"}, +{"targus-getdata3", {NULL}, 5203, "tcp"}, +{"targus-getdata3", {NULL}, 5203, "udp"}, +{"3exmp", {NULL}, 5221, "tcp"}, +{"xmpp-client", {NULL}, 5222, "tcp"}, +{"hpvirtgrp", {NULL}, 5223, "tcp"}, +{"hpvirtgrp", {NULL}, 5223, "udp"}, +{"hpvirtctrl", {NULL}, 5224, "tcp"}, +{"hpvirtctrl", {NULL}, 5224, "udp"}, +{"hp-server", {NULL}, 5225, "tcp"}, +{"hp-server", {NULL}, 5225, "udp"}, +{"hp-status", {NULL}, 5226, "tcp"}, +{"hp-status", {NULL}, 5226, "udp"}, +{"perfd", {NULL}, 5227, "tcp"}, +{"perfd", {NULL}, 5227, "udp"}, +{"hpvroom", {NULL}, 5228, "tcp"}, +{"csedaemon", {NULL}, 5232, "tcp"}, +{"enfs", {NULL}, 5233, "tcp"}, +{"eenet", {NULL}, 5234, "tcp"}, +{"eenet", {NULL}, 5234, "udp"}, +{"galaxy-network", {NULL}, 5235, "tcp"}, +{"galaxy-network", {NULL}, 5235, "udp"}, +{"padl2sim", {NULL}, 5236, "tcp"}, +{"padl2sim", {NULL}, 5236, "udp"}, +{"mnet-discovery", {NULL}, 5237, "tcp"}, +{"mnet-discovery", {NULL}, 5237, "udp"}, +{"downtools", {NULL}, 5245, "tcp"}, +{"downtools-disc", {NULL}, 5245, "udp"}, +{"capwap-control", {NULL}, 5246, "udp"}, +{"capwap-data", {NULL}, 5247, "udp"}, +{"caacws", {NULL}, 5248, "tcp"}, +{"caacws", {NULL}, 5248, "udp"}, +{"caaclang2", {NULL}, 5249, "tcp"}, +{"caaclang2", {NULL}, 5249, "udp"}, +{"soagateway", {NULL}, 5250, "tcp"}, +{"soagateway", {NULL}, 5250, "udp"}, +{"caevms", {NULL}, 5251, "tcp"}, +{"caevms", {NULL}, 5251, "udp"}, +{"movaz-ssc", {NULL}, 5252, "tcp"}, +{"movaz-ssc", {NULL}, 5252, "udp"}, +{"kpdp", {NULL}, 5253, "tcp"}, +{"3com-njack-1", {NULL}, 5264, "tcp"}, +{"3com-njack-1", {NULL}, 5264, "udp"}, +{"3com-njack-2", {NULL}, 5265, "tcp"}, +{"3com-njack-2", {NULL}, 5265, "udp"}, +{"xmpp-server", {NULL}, 5269, "tcp"}, +{"xmp", {NULL}, 5270, "tcp"}, +{"xmp", {NULL}, 5270, "udp"}, +{"cuelink", {NULL}, 5271, "tcp"}, +{"cuelink-disc", {NULL}, 5271, "udp"}, +{"pk", {NULL}, 5272, "tcp"}, +{"pk", {NULL}, 5272, "udp"}, +{"xmpp-bosh", {NULL}, 5280, "tcp"}, +{"undo-lm", {NULL}, 5281, "tcp"}, +{"transmit-port", {NULL}, 5282, "tcp"}, +{"transmit-port", {NULL}, 5282, "udp"}, +{"presence", {NULL}, 5298, "tcp"}, +{"presence", {NULL}, 5298, "udp"}, +{"nlg-data", {NULL}, 5299, "tcp"}, +{"nlg-data", {NULL}, 5299, "udp"}, +{"hacl-hb", {NULL}, 5300, "tcp"}, +{"hacl-hb", {NULL}, 5300, "udp"}, +{"hacl-gs", {NULL}, 5301, "tcp"}, +{"hacl-gs", {NULL}, 5301, "udp"}, +{"hacl-cfg", {NULL}, 5302, "tcp"}, +{"hacl-cfg", {NULL}, 5302, "udp"}, +{"hacl-probe", {NULL}, 5303, "tcp"}, +{"hacl-probe", {NULL}, 5303, "udp"}, +{"hacl-local", {NULL}, 5304, "tcp"}, +{"hacl-local", {NULL}, 5304, "udp"}, +{"hacl-test", {NULL}, 5305, "tcp"}, +{"hacl-test", {NULL}, 5305, "udp"}, +{"sun-mc-grp", {NULL}, 5306, "tcp"}, +{"sun-mc-grp", {NULL}, 5306, "udp"}, +{"sco-aip", {NULL}, 5307, "tcp"}, +{"sco-aip", {NULL}, 5307, "udp"}, +{"cfengine", {NULL}, 5308, "tcp"}, +{"cfengine", {NULL}, 5308, "udp"}, +{"jprinter", {NULL}, 5309, "tcp"}, +{"jprinter", {NULL}, 5309, "udp"}, +{"outlaws", {NULL}, 5310, "tcp"}, +{"outlaws", {NULL}, 5310, "udp"}, +{"permabit-cs", {NULL}, 5312, "tcp"}, +{"permabit-cs", {NULL}, 5312, "udp"}, +{"rrdp", {NULL}, 5313, "tcp"}, +{"rrdp", {NULL}, 5313, "udp"}, +{"opalis-rbt-ipc", {NULL}, 5314, "tcp"}, +{"opalis-rbt-ipc", {NULL}, 5314, "udp"}, +{"hacl-poll", {NULL}, 5315, "tcp"}, +{"hacl-poll", {NULL}, 5315, "udp"}, +{"hpdevms", {NULL}, 5316, "tcp"}, +{"hpdevms", {NULL}, 5316, "udp"}, +{"bsfserver-zn", {NULL}, 5320, "tcp"}, +{"bsfsvr-zn-ssl", {NULL}, 5321, "tcp"}, +{"kfserver", {NULL}, 5343, "tcp"}, +{"kfserver", {NULL}, 5343, "udp"}, +{"xkotodrcp", {NULL}, 5344, "tcp"}, +{"xkotodrcp", {NULL}, 5344, "udp"}, +{"stuns", {NULL}, 5349, "tcp"}, +{"stuns", {NULL}, 5349, "udp"}, +{"turns", {NULL}, 5349, "tcp"}, +{"turns", {NULL}, 5349, "udp"}, +{"stun-behaviors", {NULL}, 5349, "tcp"}, +{"stun-behaviors", {NULL}, 5349, "udp"}, +{"nat-pmp-status", {NULL}, 5350, "tcp"}, +{"nat-pmp-status", {NULL}, 5350, "udp"}, +{"nat-pmp", {NULL}, 5351, "tcp"}, +{"nat-pmp", {NULL}, 5351, "udp"}, +{"dns-llq", {NULL}, 5352, "tcp"}, +{"dns-llq", {NULL}, 5352, "udp"}, +{"mdns", {NULL}, 5353, "tcp"}, +{"mdns", {NULL}, 5353, "udp"}, +{"mdnsresponder", {NULL}, 5354, "tcp"}, +{"mdnsresponder", {NULL}, 5354, "udp"}, +{"llmnr", {NULL}, 5355, "tcp"}, +{"llmnr", {NULL}, 5355, "udp"}, +{"ms-smlbiz", {NULL}, 5356, "tcp"}, +{"ms-smlbiz", {NULL}, 5356, "udp"}, +{"wsdapi", {NULL}, 5357, "tcp"}, +{"wsdapi", {NULL}, 5357, "udp"}, +{"wsdapi-s", {NULL}, 5358, "tcp"}, +{"wsdapi-s", {NULL}, 5358, "udp"}, +{"ms-alerter", {NULL}, 5359, "tcp"}, +{"ms-alerter", {NULL}, 5359, "udp"}, +{"ms-sideshow", {NULL}, 5360, "tcp"}, +{"ms-sideshow", {NULL}, 5360, "udp"}, +{"ms-s-sideshow", {NULL}, 5361, "tcp"}, +{"ms-s-sideshow", {NULL}, 5361, "udp"}, +{"serverwsd2", {NULL}, 5362, "tcp"}, +{"serverwsd2", {NULL}, 5362, "udp"}, +{"net-projection", {NULL}, 5363, "tcp"}, +{"net-projection", {NULL}, 5363, "udp"}, +{"stresstester", {NULL}, 5397, "tcp"}, +{"stresstester", {NULL}, 5397, "udp"}, +{"elektron-admin", {NULL}, 5398, "tcp"}, +{"elektron-admin", {NULL}, 5398, "udp"}, +{"securitychase", {NULL}, 5399, "tcp"}, +{"securitychase", {NULL}, 5399, "udp"}, +{"excerpt", {NULL}, 5400, "tcp"}, +{"excerpt", {NULL}, 5400, "udp"}, +{"excerpts", {NULL}, 5401, "tcp"}, +{"excerpts", {NULL}, 5401, "udp"}, +{"mftp", {NULL}, 5402, "tcp"}, +{"mftp", {NULL}, 5402, "udp"}, +{"hpoms-ci-lstn", {NULL}, 5403, "tcp"}, +{"hpoms-ci-lstn", {NULL}, 5403, "udp"}, +{"hpoms-dps-lstn", {NULL}, 5404, "tcp"}, +{"hpoms-dps-lstn", {NULL}, 5404, "udp"}, +{"netsupport", {NULL}, 5405, "tcp"}, +{"netsupport", {NULL}, 5405, "udp"}, +{"systemics-sox", {NULL}, 5406, "tcp"}, +{"systemics-sox", {NULL}, 5406, "udp"}, +{"foresyte-clear", {NULL}, 5407, "tcp"}, +{"foresyte-clear", {NULL}, 5407, "udp"}, +{"foresyte-sec", {NULL}, 5408, "tcp"}, +{"foresyte-sec", {NULL}, 5408, "udp"}, +{"salient-dtasrv", {NULL}, 5409, "tcp"}, +{"salient-dtasrv", {NULL}, 5409, "udp"}, +{"salient-usrmgr", {NULL}, 5410, "tcp"}, +{"salient-usrmgr", {NULL}, 5410, "udp"}, +{"actnet", {NULL}, 5411, "tcp"}, +{"actnet", {NULL}, 5411, "udp"}, +{"continuus", {NULL}, 5412, "tcp"}, +{"continuus", {NULL}, 5412, "udp"}, +{"wwiotalk", {NULL}, 5413, "tcp"}, +{"wwiotalk", {NULL}, 5413, "udp"}, +{"statusd", {NULL}, 5414, "tcp"}, +{"statusd", {NULL}, 5414, "udp"}, +{"ns-server", {NULL}, 5415, "tcp"}, +{"ns-server", {NULL}, 5415, "udp"}, +{"sns-gateway", {NULL}, 5416, "tcp"}, +{"sns-gateway", {NULL}, 5416, "udp"}, +{"sns-agent", {NULL}, 5417, "tcp"}, +{"sns-agent", {NULL}, 5417, "udp"}, +{"mcntp", {NULL}, 5418, "tcp"}, +{"mcntp", {NULL}, 5418, "udp"}, +{"dj-ice", {NULL}, 5419, "tcp"}, +{"dj-ice", {NULL}, 5419, "udp"}, +{"cylink-c", {NULL}, 5420, "tcp"}, +{"cylink-c", {NULL}, 5420, "udp"}, +{"netsupport2", {NULL}, 5421, "tcp"}, +{"netsupport2", {NULL}, 5421, "udp"}, +{"salient-mux", {NULL}, 5422, "tcp"}, +{"salient-mux", {NULL}, 5422, "udp"}, +{"virtualuser", {NULL}, 5423, "tcp"}, +{"virtualuser", {NULL}, 5423, "udp"}, +{"beyond-remote", {NULL}, 5424, "tcp"}, +{"beyond-remote", {NULL}, 5424, "udp"}, +{"br-channel", {NULL}, 5425, "tcp"}, +{"br-channel", {NULL}, 5425, "udp"}, +{"devbasic", {NULL}, 5426, "tcp"}, +{"devbasic", {NULL}, 5426, "udp"}, +{"sco-peer-tta", {NULL}, 5427, "tcp"}, +{"sco-peer-tta", {NULL}, 5427, "udp"}, +{"telaconsole", {NULL}, 5428, "tcp"}, +{"telaconsole", {NULL}, 5428, "udp"}, +{"base", {NULL}, 5429, "tcp"}, +{"base", {NULL}, 5429, "udp"}, +{"radec-corp", {NULL}, 5430, "tcp"}, +{"radec-corp", {NULL}, 5430, "udp"}, +{"park-agent", {NULL}, 5431, "tcp"}, +{"park-agent", {NULL}, 5431, "udp"}, +{"postgresql", {NULL}, 5432, "tcp"}, +{"postgresql", {NULL}, 5432, "udp"}, +{"pyrrho", {NULL}, 5433, "tcp"}, +{"pyrrho", {NULL}, 5433, "udp"}, +{"sgi-arrayd", {NULL}, 5434, "tcp"}, +{"sgi-arrayd", {NULL}, 5434, "udp"}, +{"sceanics", {NULL}, 5435, "tcp"}, +{"sceanics", {NULL}, 5435, "udp"}, +{"pmip6-cntl", {NULL}, 5436, "udp"}, +{"pmip6-data", {NULL}, 5437, "udp"}, +{"spss", {NULL}, 5443, "tcp"}, +{"spss", {NULL}, 5443, "udp"}, +{"surebox", {NULL}, 5453, "tcp"}, +{"surebox", {NULL}, 5453, "udp"}, +{"apc-5454", {NULL}, 5454, "tcp"}, +{"apc-5454", {NULL}, 5454, "udp"}, +{"apc-5455", {NULL}, 5455, "tcp"}, +{"apc-5455", {NULL}, 5455, "udp"}, +{"apc-5456", {NULL}, 5456, "tcp"}, +{"apc-5456", {NULL}, 5456, "udp"}, +{"silkmeter", {NULL}, 5461, "tcp"}, +{"silkmeter", {NULL}, 5461, "udp"}, +{"ttl-publisher", {NULL}, 5462, "tcp"}, +{"ttl-publisher", {NULL}, 5462, "udp"}, +{"ttlpriceproxy", {NULL}, 5463, "tcp"}, +{"ttlpriceproxy", {NULL}, 5463, "udp"}, +{"quailnet", {NULL}, 5464, "tcp"}, +{"quailnet", {NULL}, 5464, "udp"}, +{"netops-broker", {NULL}, 5465, "tcp"}, +{"netops-broker", {NULL}, 5465, "udp"}, +{"fcp-addr-srvr1", {NULL}, 5500, "tcp"}, +{"fcp-addr-srvr1", {NULL}, 5500, "udp"}, +{"fcp-addr-srvr2", {NULL}, 5501, "tcp"}, +{"fcp-addr-srvr2", {NULL}, 5501, "udp"}, +{"fcp-srvr-inst1", {NULL}, 5502, "tcp"}, +{"fcp-srvr-inst1", {NULL}, 5502, "udp"}, +{"fcp-srvr-inst2", {NULL}, 5503, "tcp"}, +{"fcp-srvr-inst2", {NULL}, 5503, "udp"}, +{"fcp-cics-gw1", {NULL}, 5504, "tcp"}, +{"fcp-cics-gw1", {NULL}, 5504, "udp"}, +{"checkoutdb", {NULL}, 5505, "tcp"}, +{"checkoutdb", {NULL}, 5505, "udp"}, +{"amc", {NULL}, 5506, "tcp"}, +{"amc", {NULL}, 5506, "udp"}, +{"sgi-eventmond", {NULL}, 5553, "tcp"}, +{"sgi-eventmond", {NULL}, 5553, "udp"}, +{"sgi-esphttp", {NULL}, 5554, "tcp"}, +{"sgi-esphttp", {NULL}, 5554, "udp"}, +{"personal-agent", {NULL}, 5555, "tcp"}, +{"personal-agent", {NULL}, 5555, "udp"}, +{"freeciv", {NULL}, 5556, "tcp"}, +{"freeciv", {NULL}, 5556, "udp"}, +{"farenet", {NULL}, 5557, "tcp"}, +{"westec-connect", {NULL}, 5566, "tcp"}, +{"m-oap", {NULL}, 5567, "tcp"}, +{"m-oap", {NULL}, 5567, "udp"}, +{"sdt", {NULL}, 5568, "tcp"}, +{"sdt", {NULL}, 5568, "udp"}, +{"sdmmp", {NULL}, 5573, "tcp"}, +{"sdmmp", {NULL}, 5573, "udp"}, +{"lsi-bobcat", {NULL}, 5574, "tcp"}, +{"ora-oap", {NULL}, 5575, "tcp"}, +{"fdtracks", {NULL}, 5579, "tcp"}, +{"tmosms0", {NULL}, 5580, "tcp"}, +{"tmosms0", {NULL}, 5580, "udp"}, +{"tmosms1", {NULL}, 5581, "tcp"}, +{"tmosms1", {NULL}, 5581, "udp"}, +{"fac-restore", {NULL}, 5582, "tcp"}, +{"fac-restore", {NULL}, 5582, "udp"}, +{"tmo-icon-sync", {NULL}, 5583, "tcp"}, +{"tmo-icon-sync", {NULL}, 5583, "udp"}, +{"bis-web", {NULL}, 5584, "tcp"}, +{"bis-web", {NULL}, 5584, "udp"}, +{"bis-sync", {NULL}, 5585, "tcp"}, +{"bis-sync", {NULL}, 5585, "udp"}, +{"ininmessaging", {NULL}, 5597, "tcp"}, +{"ininmessaging", {NULL}, 5597, "udp"}, +{"mctfeed", {NULL}, 5598, "tcp"}, +{"mctfeed", {NULL}, 5598, "udp"}, +{"esinstall", {NULL}, 5599, "tcp"}, +{"esinstall", {NULL}, 5599, "udp"}, +{"esmmanager", {NULL}, 5600, "tcp"}, +{"esmmanager", {NULL}, 5600, "udp"}, +{"esmagent", {NULL}, 5601, "tcp"}, +{"esmagent", {NULL}, 5601, "udp"}, +{"a1-msc", {NULL}, 5602, "tcp"}, +{"a1-msc", {NULL}, 5602, "udp"}, +{"a1-bs", {NULL}, 5603, "tcp"}, +{"a1-bs", {NULL}, 5603, "udp"}, +{"a3-sdunode", {NULL}, 5604, "tcp"}, +{"a3-sdunode", {NULL}, 5604, "udp"}, +{"a4-sdunode", {NULL}, 5605, "tcp"}, +{"a4-sdunode", {NULL}, 5605, "udp"}, +{"ninaf", {NULL}, 5627, "tcp"}, +{"ninaf", {NULL}, 5627, "udp"}, +{"htrust", {NULL}, 5628, "tcp"}, +{"htrust", {NULL}, 5628, "udp"}, +{"symantec-sfdb", {NULL}, 5629, "tcp"}, +{"symantec-sfdb", {NULL}, 5629, "udp"}, +{"precise-comm", {NULL}, 5630, "tcp"}, +{"precise-comm", {NULL}, 5630, "udp"}, +{"pcanywheredata", {NULL}, 5631, "tcp"}, +{"pcanywheredata", {NULL}, 5631, "udp"}, +{"pcanywherestat", {NULL}, 5632, "tcp"}, +{"pcanywherestat", {NULL}, 5632, "udp"}, +{"beorl", {NULL}, 5633, "tcp"}, +{"beorl", {NULL}, 5633, "udp"}, +{"xprtld", {NULL}, 5634, "tcp"}, +{"xprtld", {NULL}, 5634, "udp"}, +{"sfmsso", {NULL}, 5635, "tcp"}, +{"sfm-db-server", {NULL}, 5636, "tcp"}, +{"cssc", {NULL}, 5637, "tcp"}, +{"amqps", {NULL}, 5671, "tcp"}, +{"amqps", {NULL}, 5671, "udp"}, +{"amqp", {NULL}, 5672, "tcp"}, +{"amqp", {NULL}, 5672, "udp"}, +{"amqp", {NULL}, 5672, "sctp"}, +{"jms", {NULL}, 5673, "tcp"}, +{"jms", {NULL}, 5673, "udp"}, +{"hyperscsi-port", {NULL}, 5674, "tcp"}, +{"hyperscsi-port", {NULL}, 5674, "udp"}, +{"v5ua", {NULL}, 5675, "tcp"}, +{"v5ua", {NULL}, 5675, "udp"}, +{"v5ua", {NULL}, 5675, "sctp"}, +{"raadmin", {NULL}, 5676, "tcp"}, +{"raadmin", {NULL}, 5676, "udp"}, +{"questdb2-lnchr", {NULL}, 5677, "tcp"}, +{"questdb2-lnchr", {NULL}, 5677, "udp"}, +{"rrac", {NULL}, 5678, "tcp"}, +{"rrac", {NULL}, 5678, "udp"}, +{"dccm", {NULL}, 5679, "tcp"}, +{"dccm", {NULL}, 5679, "udp"}, +{"auriga-router", {NULL}, 5680, "tcp"}, +{"auriga-router", {NULL}, 5680, "udp"}, +{"ncxcp", {NULL}, 5681, "tcp"}, +{"ncxcp", {NULL}, 5681, "udp"}, +{"brightcore", {NULL}, 5682, "udp"}, +{"ggz", {NULL}, 5688, "tcp"}, +{"ggz", {NULL}, 5688, "udp"}, +{"qmvideo", {NULL}, 5689, "tcp"}, +{"qmvideo", {NULL}, 5689, "udp"}, +{"proshareaudio", {NULL}, 5713, "tcp"}, +{"proshareaudio", {NULL}, 5713, "udp"}, +{"prosharevideo", {NULL}, 5714, "tcp"}, +{"prosharevideo", {NULL}, 5714, "udp"}, +{"prosharedata", {NULL}, 5715, "tcp"}, +{"prosharedata", {NULL}, 5715, "udp"}, +{"prosharerequest", {NULL}, 5716, "tcp"}, +{"prosharerequest", {NULL}, 5716, "udp"}, +{"prosharenotify", {NULL}, 5717, "tcp"}, +{"prosharenotify", {NULL}, 5717, "udp"}, +{"dpm", {NULL}, 5718, "tcp"}, +{"dpm", {NULL}, 5718, "udp"}, +{"dpm-agent", {NULL}, 5719, "tcp"}, +{"dpm-agent", {NULL}, 5719, "udp"}, +{"ms-licensing", {NULL}, 5720, "tcp"}, +{"ms-licensing", {NULL}, 5720, "udp"}, +{"dtpt", {NULL}, 5721, "tcp"}, +{"dtpt", {NULL}, 5721, "udp"}, +{"msdfsr", {NULL}, 5722, "tcp"}, +{"msdfsr", {NULL}, 5722, "udp"}, +{"omhs", {NULL}, 5723, "tcp"}, +{"omhs", {NULL}, 5723, "udp"}, +{"omsdk", {NULL}, 5724, "tcp"}, +{"omsdk", {NULL}, 5724, "udp"}, +{"ms-ilm", {NULL}, 5725, "tcp"}, +{"ms-ilm-sts", {NULL}, 5726, "tcp"}, +{"asgenf", {NULL}, 5727, "tcp"}, +{"io-dist-data", {NULL}, 5728, "tcp"}, +{"io-dist-group", {NULL}, 5728, "udp"}, +{"openmail", {NULL}, 5729, "tcp"}, +{"openmail", {NULL}, 5729, "udp"}, +{"unieng", {NULL}, 5730, "tcp"}, +{"unieng", {NULL}, 5730, "udp"}, +{"ida-discover1", {NULL}, 5741, "tcp"}, +{"ida-discover1", {NULL}, 5741, "udp"}, +{"ida-discover2", {NULL}, 5742, "tcp"}, +{"ida-discover2", {NULL}, 5742, "udp"}, +{"watchdoc-pod", {NULL}, 5743, "tcp"}, +{"watchdoc-pod", {NULL}, 5743, "udp"}, +{"watchdoc", {NULL}, 5744, "tcp"}, +{"watchdoc", {NULL}, 5744, "udp"}, +{"fcopy-server", {NULL}, 5745, "tcp"}, +{"fcopy-server", {NULL}, 5745, "udp"}, +{"fcopys-server", {NULL}, 5746, "tcp"}, +{"fcopys-server", {NULL}, 5746, "udp"}, +{"tunatic", {NULL}, 5747, "tcp"}, +{"tunatic", {NULL}, 5747, "udp"}, +{"tunalyzer", {NULL}, 5748, "tcp"}, +{"tunalyzer", {NULL}, 5748, "udp"}, +{"rscd", {NULL}, 5750, "tcp"}, +{"rscd", {NULL}, 5750, "udp"}, +{"openmailg", {NULL}, 5755, "tcp"}, +{"openmailg", {NULL}, 5755, "udp"}, +{"x500ms", {NULL}, 5757, "tcp"}, +{"x500ms", {NULL}, 5757, "udp"}, +{"openmailns", {NULL}, 5766, "tcp"}, +{"openmailns", {NULL}, 5766, "udp"}, +{"s-openmail", {NULL}, 5767, "tcp"}, +{"s-openmail", {NULL}, 5767, "udp"}, +{"openmailpxy", {NULL}, 5768, "tcp"}, +{"openmailpxy", {NULL}, 5768, "udp"}, +{"spramsca", {NULL}, 5769, "tcp"}, +{"spramsca", {NULL}, 5769, "udp"}, +{"spramsd", {NULL}, 5770, "tcp"}, +{"spramsd", {NULL}, 5770, "udp"}, +{"netagent", {NULL}, 5771, "tcp"}, +{"netagent", {NULL}, 5771, "udp"}, +{"dali-port", {NULL}, 5777, "tcp"}, +{"dali-port", {NULL}, 5777, "udp"}, +{"vts-rpc", {NULL}, 5780, "tcp"}, +{"3par-evts", {NULL}, 5781, "tcp"}, +{"3par-evts", {NULL}, 5781, "udp"}, +{"3par-mgmt", {NULL}, 5782, "tcp"}, +{"3par-mgmt", {NULL}, 5782, "udp"}, +{"3par-mgmt-ssl", {NULL}, 5783, "tcp"}, +{"3par-mgmt-ssl", {NULL}, 5783, "udp"}, +{"ibar", {NULL}, 5784, "udp"}, +{"3par-rcopy", {NULL}, 5785, "tcp"}, +{"3par-rcopy", {NULL}, 5785, "udp"}, +{"cisco-redu", {NULL}, 5786, "udp"}, +{"waascluster", {NULL}, 5787, "udp"}, +{"xtreamx", {NULL}, 5793, "tcp"}, +{"xtreamx", {NULL}, 5793, "udp"}, +{"spdp", {NULL}, 5794, "udp"}, +{"icmpd", {NULL}, 5813, "tcp"}, +{"icmpd", {NULL}, 5813, "udp"}, +{"spt-automation", {NULL}, 5814, "tcp"}, +{"spt-automation", {NULL}, 5814, "udp"}, +{"wherehoo", {NULL}, 5859, "tcp"}, +{"wherehoo", {NULL}, 5859, "udp"}, +{"ppsuitemsg", {NULL}, 5863, "tcp"}, +{"ppsuitemsg", {NULL}, 5863, "udp"}, +{"rfb", {NULL}, 5900, "tcp"}, +{"rfb", {NULL}, 5900, "udp"}, +{"cm", {NULL}, 5910, "tcp"}, +{"cm", {NULL}, 5910, "udp"}, +{"cpdlc", {NULL}, 5911, "tcp"}, +{"cpdlc", {NULL}, 5911, "udp"}, +{"fis", {NULL}, 5912, "tcp"}, +{"fis", {NULL}, 5912, "udp"}, +{"ads-c", {NULL}, 5913, "tcp"}, +{"ads-c", {NULL}, 5913, "udp"}, +{"indy", {NULL}, 5963, "tcp"}, +{"indy", {NULL}, 5963, "udp"}, +{"mppolicy-v5", {NULL}, 5968, "tcp"}, +{"mppolicy-v5", {NULL}, 5968, "udp"}, +{"mppolicy-mgr", {NULL}, 5969, "tcp"}, +{"mppolicy-mgr", {NULL}, 5969, "udp"}, +{"couchdb", {NULL}, 5984, "tcp"}, +{"couchdb", {NULL}, 5984, "udp"}, +{"wsman", {NULL}, 5985, "tcp"}, +{"wsman", {NULL}, 5985, "udp"}, +{"wsmans", {NULL}, 5986, "tcp"}, +{"wsmans", {NULL}, 5986, "udp"}, +{"wbem-rmi", {NULL}, 5987, "tcp"}, +{"wbem-rmi", {NULL}, 5987, "udp"}, +{"wbem-http", {NULL}, 5988, "tcp"}, +{"wbem-http", {NULL}, 5988, "udp"}, +{"wbem-https", {NULL}, 5989, "tcp"}, +{"wbem-https", {NULL}, 5989, "udp"}, +{"wbem-exp-https", {NULL}, 5990, "tcp"}, +{"wbem-exp-https", {NULL}, 5990, "udp"}, +{"nuxsl", {NULL}, 5991, "tcp"}, +{"nuxsl", {NULL}, 5991, "udp"}, +{"consul-insight", {NULL}, 5992, "tcp"}, +{"consul-insight", {NULL}, 5992, "udp"}, +{"cvsup", {NULL}, 5999, "tcp"}, +{"cvsup", {NULL}, 5999, "udp"}, +{"ndl-ahp-svc", {NULL}, 6064, "tcp"}, +{"ndl-ahp-svc", {NULL}, 6064, "udp"}, +{"winpharaoh", {NULL}, 6065, "tcp"}, +{"winpharaoh", {NULL}, 6065, "udp"}, +{"ewctsp", {NULL}, 6066, "tcp"}, +{"ewctsp", {NULL}, 6066, "udp"}, +{"gsmp", {NULL}, 6068, "tcp"}, +{"gsmp", {NULL}, 6068, "udp"}, +{"trip", {NULL}, 6069, "tcp"}, +{"trip", {NULL}, 6069, "udp"}, +{"messageasap", {NULL}, 6070, "tcp"}, +{"messageasap", {NULL}, 6070, "udp"}, +{"ssdtp", {NULL}, 6071, "tcp"}, +{"ssdtp", {NULL}, 6071, "udp"}, +{"diagnose-proc", {NULL}, 6072, "tcp"}, +{"diagnose-proc", {NULL}, 6072, "udp"}, +{"directplay8", {NULL}, 6073, "tcp"}, +{"directplay8", {NULL}, 6073, "udp"}, +{"max", {NULL}, 6074, "tcp"}, +{"max", {NULL}, 6074, "udp"}, +{"dpm-acm", {NULL}, 6075, "tcp"}, +{"miami-bcast", {NULL}, 6083, "udp"}, +{"p2p-sip", {NULL}, 6084, "tcp"}, +{"konspire2b", {NULL}, 6085, "tcp"}, +{"konspire2b", {NULL}, 6085, "udp"}, +{"pdtp", {NULL}, 6086, "tcp"}, +{"pdtp", {NULL}, 6086, "udp"}, +{"ldss", {NULL}, 6087, "tcp"}, +{"ldss", {NULL}, 6087, "udp"}, +{"raxa-mgmt", {NULL}, 6099, "tcp"}, +{"synchronet-db", {NULL}, 6100, "tcp"}, +{"synchronet-db", {NULL}, 6100, "udp"}, +{"synchronet-rtc", {NULL}, 6101, "tcp"}, +{"synchronet-rtc", {NULL}, 6101, "udp"}, +{"synchronet-upd", {NULL}, 6102, "tcp"}, +{"synchronet-upd", {NULL}, 6102, "udp"}, +{"rets", {NULL}, 6103, "tcp"}, +{"rets", {NULL}, 6103, "udp"}, +{"dbdb", {NULL}, 6104, "tcp"}, +{"dbdb", {NULL}, 6104, "udp"}, +{"primaserver", {NULL}, 6105, "tcp"}, +{"primaserver", {NULL}, 6105, "udp"}, +{"mpsserver", {NULL}, 6106, "tcp"}, +{"mpsserver", {NULL}, 6106, "udp"}, +{"etc-control", {NULL}, 6107, "tcp"}, +{"etc-control", {NULL}, 6107, "udp"}, +{"sercomm-scadmin", {NULL}, 6108, "tcp"}, +{"sercomm-scadmin", {NULL}, 6108, "udp"}, +{"globecast-id", {NULL}, 6109, "tcp"}, +{"globecast-id", {NULL}, 6109, "udp"}, +{"softcm", {NULL}, 6110, "tcp"}, +{"softcm", {NULL}, 6110, "udp"}, +{"spc", {NULL}, 6111, "tcp"}, +{"spc", {NULL}, 6111, "udp"}, +{"dtspcd", {NULL}, 6112, "tcp"}, +{"dtspcd", {NULL}, 6112, "udp"}, +{"dayliteserver", {NULL}, 6113, "tcp"}, +{"wrspice", {NULL}, 6114, "tcp"}, +{"xic", {NULL}, 6115, "tcp"}, +{"xtlserv", {NULL}, 6116, "tcp"}, +{"daylitetouch", {NULL}, 6117, "tcp"}, +{"spdy", {NULL}, 6121, "tcp"}, +{"bex-webadmin", {NULL}, 6122, "tcp"}, +{"bex-webadmin", {NULL}, 6122, "udp"}, +{"backup-express", {NULL}, 6123, "tcp"}, +{"backup-express", {NULL}, 6123, "udp"}, +{"pnbs", {NULL}, 6124, "tcp"}, +{"pnbs", {NULL}, 6124, "udp"}, +{"nbt-wol", {NULL}, 6133, "tcp"}, +{"nbt-wol", {NULL}, 6133, "udp"}, +{"pulsonixnls", {NULL}, 6140, "tcp"}, +{"pulsonixnls", {NULL}, 6140, "udp"}, +{"meta-corp", {NULL}, 6141, "tcp"}, +{"meta-corp", {NULL}, 6141, "udp"}, +{"aspentec-lm", {NULL}, 6142, "tcp"}, +{"aspentec-lm", {NULL}, 6142, "udp"}, +{"watershed-lm", {NULL}, 6143, "tcp"}, +{"watershed-lm", {NULL}, 6143, "udp"}, +{"statsci1-lm", {NULL}, 6144, "tcp"}, +{"statsci1-lm", {NULL}, 6144, "udp"}, +{"statsci2-lm", {NULL}, 6145, "tcp"}, +{"statsci2-lm", {NULL}, 6145, "udp"}, +{"lonewolf-lm", {NULL}, 6146, "tcp"}, +{"lonewolf-lm", {NULL}, 6146, "udp"}, +{"montage-lm", {NULL}, 6147, "tcp"}, +{"montage-lm", {NULL}, 6147, "udp"}, +{"ricardo-lm", {NULL}, 6148, "tcp"}, +{"ricardo-lm", {NULL}, 6148, "udp"}, +{"tal-pod", {NULL}, 6149, "tcp"}, +{"tal-pod", {NULL}, 6149, "udp"}, +{"efb-aci", {NULL}, 6159, "tcp"}, +{"patrol-ism", {NULL}, 6161, "tcp"}, +{"patrol-ism", {NULL}, 6161, "udp"}, +{"patrol-coll", {NULL}, 6162, "tcp"}, +{"patrol-coll", {NULL}, 6162, "udp"}, +{"pscribe", {NULL}, 6163, "tcp"}, +{"pscribe", {NULL}, 6163, "udp"}, +{"lm-x", {NULL}, 6200, "tcp"}, +{"lm-x", {NULL}, 6200, "udp"}, +{"radmind", {NULL}, 6222, "tcp"}, +{"radmind", {NULL}, 6222, "udp"}, +{"jeol-nsdtp-1", {NULL}, 6241, "tcp"}, +{"jeol-nsddp-1", {NULL}, 6241, "udp"}, +{"jeol-nsdtp-2", {NULL}, 6242, "tcp"}, +{"jeol-nsddp-2", {NULL}, 6242, "udp"}, +{"jeol-nsdtp-3", {NULL}, 6243, "tcp"}, +{"jeol-nsddp-3", {NULL}, 6243, "udp"}, +{"jeol-nsdtp-4", {NULL}, 6244, "tcp"}, +{"jeol-nsddp-4", {NULL}, 6244, "udp"}, +{"tl1-raw-ssl", {NULL}, 6251, "tcp"}, +{"tl1-raw-ssl", {NULL}, 6251, "udp"}, +{"tl1-ssh", {NULL}, 6252, "tcp"}, +{"tl1-ssh", {NULL}, 6252, "udp"}, +{"crip", {NULL}, 6253, "tcp"}, +{"crip", {NULL}, 6253, "udp"}, +{"gld", {NULL}, 6267, "tcp"}, +{"grid", {NULL}, 6268, "tcp"}, +{"grid", {NULL}, 6268, "udp"}, +{"grid-alt", {NULL}, 6269, "tcp"}, +{"grid-alt", {NULL}, 6269, "udp"}, +{"bmc-grx", {NULL}, 6300, "tcp"}, +{"bmc-grx", {NULL}, 6300, "udp"}, +{"bmc_ctd_ldap", {NULL}, 6301, "tcp"}, +{"bmc_ctd_ldap", {NULL}, 6301, "udp"}, +{"ufmp", {NULL}, 6306, "tcp"}, +{"ufmp", {NULL}, 6306, "udp"}, +{"scup", {NULL}, 6315, "tcp"}, +{"scup-disc", {NULL}, 6315, "udp"}, +{"abb-escp", {NULL}, 6316, "tcp"}, +{"abb-escp", {NULL}, 6316, "udp"}, +{"repsvc", {NULL}, 6320, "tcp"}, +{"repsvc", {NULL}, 6320, "udp"}, +{"emp-server1", {NULL}, 6321, "tcp"}, +{"emp-server1", {NULL}, 6321, "udp"}, +{"emp-server2", {NULL}, 6322, "tcp"}, +{"emp-server2", {NULL}, 6322, "udp"}, +{"sflow", {NULL}, 6343, "tcp"}, +{"sflow", {NULL}, 6343, "udp"}, +{"gnutella-svc", {NULL}, 6346, "tcp"}, +{"gnutella-svc", {NULL}, 6346, "udp"}, +{"gnutella-rtr", {NULL}, 6347, "tcp"}, +{"gnutella-rtr", {NULL}, 6347, "udp"}, +{"adap", {NULL}, 6350, "tcp"}, +{"adap", {NULL}, 6350, "udp"}, +{"pmcs", {NULL}, 6355, "tcp"}, +{"pmcs", {NULL}, 6355, "udp"}, +{"metaedit-mu", {NULL}, 6360, "tcp"}, +{"metaedit-mu", {NULL}, 6360, "udp"}, +{"metaedit-se", {NULL}, 6370, "tcp"}, +{"metaedit-se", {NULL}, 6370, "udp"}, +{"metatude-mds", {NULL}, 6382, "tcp"}, +{"metatude-mds", {NULL}, 6382, "udp"}, +{"clariion-evr01", {NULL}, 6389, "tcp"}, +{"clariion-evr01", {NULL}, 6389, "udp"}, +{"metaedit-ws", {NULL}, 6390, "tcp"}, +{"metaedit-ws", {NULL}, 6390, "udp"}, +{"faxcomservice", {NULL}, 6417, "tcp"}, +{"faxcomservice", {NULL}, 6417, "udp"}, +{"syserverremote", {NULL}, 6418, "tcp"}, +{"svdrp", {NULL}, 6419, "tcp"}, +{"nim-vdrshell", {NULL}, 6420, "tcp"}, +{"nim-vdrshell", {NULL}, 6420, "udp"}, +{"nim-wan", {NULL}, 6421, "tcp"}, +{"nim-wan", {NULL}, 6421, "udp"}, +{"pgbouncer", {NULL}, 6432, "tcp"}, +{"sun-sr-https", {NULL}, 6443, "tcp"}, +{"sun-sr-https", {NULL}, 6443, "udp"}, +{"sge_qmaster", {NULL}, 6444, "tcp"}, +{"sge_qmaster", {NULL}, 6444, "udp"}, +{"sge_execd", {NULL}, 6445, "tcp"}, +{"sge_execd", {NULL}, 6445, "udp"}, +{"mysql-proxy", {NULL}, 6446, "tcp"}, +{"mysql-proxy", {NULL}, 6446, "udp"}, +{"skip-cert-recv", {NULL}, 6455, "tcp"}, +{"skip-cert-send", {NULL}, 6456, "udp"}, +{"lvision-lm", {NULL}, 6471, "tcp"}, +{"lvision-lm", {NULL}, 6471, "udp"}, +{"sun-sr-http", {NULL}, 6480, "tcp"}, +{"sun-sr-http", {NULL}, 6480, "udp"}, +{"servicetags", {NULL}, 6481, "tcp"}, +{"servicetags", {NULL}, 6481, "udp"}, +{"ldoms-mgmt", {NULL}, 6482, "tcp"}, +{"ldoms-mgmt", {NULL}, 6482, "udp"}, +{"SunVTS-RMI", {NULL}, 6483, "tcp"}, +{"SunVTS-RMI", {NULL}, 6483, "udp"}, +{"sun-sr-jms", {NULL}, 6484, "tcp"}, +{"sun-sr-jms", {NULL}, 6484, "udp"}, +{"sun-sr-iiop", {NULL}, 6485, "tcp"}, +{"sun-sr-iiop", {NULL}, 6485, "udp"}, +{"sun-sr-iiops", {NULL}, 6486, "tcp"}, +{"sun-sr-iiops", {NULL}, 6486, "udp"}, +{"sun-sr-iiop-aut", {NULL}, 6487, "tcp"}, +{"sun-sr-iiop-aut", {NULL}, 6487, "udp"}, +{"sun-sr-jmx", {NULL}, 6488, "tcp"}, +{"sun-sr-jmx", {NULL}, 6488, "udp"}, +{"sun-sr-admin", {NULL}, 6489, "tcp"}, +{"sun-sr-admin", {NULL}, 6489, "udp"}, +{"boks", {NULL}, 6500, "tcp"}, +{"boks", {NULL}, 6500, "udp"}, +{"boks_servc", {NULL}, 6501, "tcp"}, +{"boks_servc", {NULL}, 6501, "udp"}, +{"boks_servm", {NULL}, 6502, "tcp"}, +{"boks_servm", {NULL}, 6502, "udp"}, +{"boks_clntd", {NULL}, 6503, "tcp"}, +{"boks_clntd", {NULL}, 6503, "udp"}, +{"badm_priv", {NULL}, 6505, "tcp"}, +{"badm_priv", {NULL}, 6505, "udp"}, +{"badm_pub", {NULL}, 6506, "tcp"}, +{"badm_pub", {NULL}, 6506, "udp"}, +{"bdir_priv", {NULL}, 6507, "tcp"}, +{"bdir_priv", {NULL}, 6507, "udp"}, +{"bdir_pub", {NULL}, 6508, "tcp"}, +{"bdir_pub", {NULL}, 6508, "udp"}, +{"mgcs-mfp-port", {NULL}, 6509, "tcp"}, +{"mgcs-mfp-port", {NULL}, 6509, "udp"}, +{"mcer-port", {NULL}, 6510, "tcp"}, +{"mcer-port", {NULL}, 6510, "udp"}, +{"netconf-tls", {NULL}, 6513, "tcp"}, +{"syslog-tls", {NULL}, 6514, "tcp"}, +{"syslog-tls", {NULL}, 6514, "udp"}, +{"syslog-tls", {NULL}, 6514, "dccp"}, +{"elipse-rec", {NULL}, 6515, "tcp"}, +{"elipse-rec", {NULL}, 6515, "udp"}, +{"lds-distrib", {NULL}, 6543, "tcp"}, +{"lds-distrib", {NULL}, 6543, "udp"}, +{"lds-dump", {NULL}, 6544, "tcp"}, +{"lds-dump", {NULL}, 6544, "udp"}, +{"apc-6547", {NULL}, 6547, "tcp"}, +{"apc-6547", {NULL}, 6547, "udp"}, +{"apc-6548", {NULL}, 6548, "tcp"}, +{"apc-6548", {NULL}, 6548, "udp"}, +{"apc-6549", {NULL}, 6549, "tcp"}, +{"apc-6549", {NULL}, 6549, "udp"}, +{"fg-sysupdate", {NULL}, 6550, "tcp"}, +{"fg-sysupdate", {NULL}, 6550, "udp"}, +{"sum", {NULL}, 6551, "tcp"}, +{"sum", {NULL}, 6551, "udp"}, +{"xdsxdm", {NULL}, 6558, "tcp"}, +{"xdsxdm", {NULL}, 6558, "udp"}, +{"sane-port", {NULL}, 6566, "tcp"}, +{"sane-port", {NULL}, 6566, "udp"}, +{"esp", {NULL}, 6567, "tcp"}, +{"esp", {NULL}, 6567, "udp"}, +{"canit_store", {NULL}, 6568, "tcp"}, +{"rp-reputation", {NULL}, 6568, "udp"}, +{"affiliate", {NULL}, 6579, "tcp"}, +{"affiliate", {NULL}, 6579, "udp"}, +{"parsec-master", {NULL}, 6580, "tcp"}, +{"parsec-master", {NULL}, 6580, "udp"}, +{"parsec-peer", {NULL}, 6581, "tcp"}, +{"parsec-peer", {NULL}, 6581, "udp"}, +{"parsec-game", {NULL}, 6582, "tcp"}, +{"parsec-game", {NULL}, 6582, "udp"}, +{"joaJewelSuite", {NULL}, 6583, "tcp"}, +{"joaJewelSuite", {NULL}, 6583, "udp"}, +{"mshvlm", {NULL}, 6600, "tcp"}, +{"mstmg-sstp", {NULL}, 6601, "tcp"}, +{"wsscomfrmwk", {NULL}, 6602, "tcp"}, +{"odette-ftps", {NULL}, 6619, "tcp"}, +{"odette-ftps", {NULL}, 6619, "udp"}, +{"kftp-data", {NULL}, 6620, "tcp"}, +{"kftp-data", {NULL}, 6620, "udp"}, +{"kftp", {NULL}, 6621, "tcp"}, +{"kftp", {NULL}, 6621, "udp"}, +{"mcftp", {NULL}, 6622, "tcp"}, +{"mcftp", {NULL}, 6622, "udp"}, +{"ktelnet", {NULL}, 6623, "tcp"}, +{"ktelnet", {NULL}, 6623, "udp"}, +{"datascaler-db", {NULL}, 6624, "tcp"}, +{"datascaler-ctl", {NULL}, 6625, "tcp"}, +{"wago-service", {NULL}, 6626, "tcp"}, +{"wago-service", {NULL}, 6626, "udp"}, +{"nexgen", {NULL}, 6627, "tcp"}, +{"nexgen", {NULL}, 6627, "udp"}, +{"afesc-mc", {NULL}, 6628, "tcp"}, +{"afesc-mc", {NULL}, 6628, "udp"}, +{"mxodbc-connect", {NULL}, 6632, "tcp"}, +{"pcs-sf-ui-man", {NULL}, 6655, "tcp"}, +{"emgmsg", {NULL}, 6656, "tcp"}, +{"palcom-disc", {NULL}, 6657, "udp"}, +{"vocaltec-gold", {NULL}, 6670, "tcp"}, +{"vocaltec-gold", {NULL}, 6670, "udp"}, +{"p4p-portal", {NULL}, 6671, "tcp"}, +{"p4p-portal", {NULL}, 6671, "udp"}, +{"vision_server", {NULL}, 6672, "tcp"}, +{"vision_server", {NULL}, 6672, "udp"}, +{"vision_elmd", {NULL}, 6673, "tcp"}, +{"vision_elmd", {NULL}, 6673, "udp"}, +{"vfbp", {NULL}, 6678, "tcp"}, +{"vfbp-disc", {NULL}, 6678, "udp"}, +{"osaut", {NULL}, 6679, "tcp"}, +{"osaut", {NULL}, 6679, "udp"}, +{"clever-ctrace", {NULL}, 6687, "tcp"}, +{"clever-tcpip", {NULL}, 6688, "tcp"}, +{"tsa", {NULL}, 6689, "tcp"}, +{"tsa", {NULL}, 6689, "udp"}, +{"babel", {NULL}, 6697, "udp"}, +{"kti-icad-srvr", {NULL}, 6701, "tcp"}, +{"kti-icad-srvr", {NULL}, 6701, "udp"}, +{"e-design-net", {NULL}, 6702, "tcp"}, +{"e-design-net", {NULL}, 6702, "udp"}, +{"e-design-web", {NULL}, 6703, "tcp"}, +{"e-design-web", {NULL}, 6703, "udp"}, +{"frc-hp", {NULL}, 6704, "sctp"}, +{"frc-mp", {NULL}, 6705, "sctp"}, +{"frc-lp", {NULL}, 6706, "sctp"}, +{"ibprotocol", {NULL}, 6714, "tcp"}, +{"ibprotocol", {NULL}, 6714, "udp"}, +{"fibotrader-com", {NULL}, 6715, "tcp"}, +{"fibotrader-com", {NULL}, 6715, "udp"}, +{"bmc-perf-agent", {NULL}, 6767, "tcp"}, +{"bmc-perf-agent", {NULL}, 6767, "udp"}, +{"bmc-perf-mgrd", {NULL}, 6768, "tcp"}, +{"bmc-perf-mgrd", {NULL}, 6768, "udp"}, +{"adi-gxp-srvprt", {NULL}, 6769, "tcp"}, +{"adi-gxp-srvprt", {NULL}, 6769, "udp"}, +{"plysrv-http", {NULL}, 6770, "tcp"}, +{"plysrv-http", {NULL}, 6770, "udp"}, +{"plysrv-https", {NULL}, 6771, "tcp"}, +{"plysrv-https", {NULL}, 6771, "udp"}, +{"dgpf-exchg", {NULL}, 6785, "tcp"}, +{"dgpf-exchg", {NULL}, 6785, "udp"}, +{"smc-jmx", {NULL}, 6786, "tcp"}, +{"smc-jmx", {NULL}, 6786, "udp"}, +{"smc-admin", {NULL}, 6787, "tcp"}, +{"smc-admin", {NULL}, 6787, "udp"}, +{"smc-http", {NULL}, 6788, "tcp"}, +{"smc-http", {NULL}, 6788, "udp"}, +{"smc-https", {NULL}, 6789, "tcp"}, +{"smc-https", {NULL}, 6789, "udp"}, +{"hnmp", {NULL}, 6790, "tcp"}, +{"hnmp", {NULL}, 6790, "udp"}, +{"hnm", {NULL}, 6791, "tcp"}, +{"hnm", {NULL}, 6791, "udp"}, +{"acnet", {NULL}, 6801, "tcp"}, +{"acnet", {NULL}, 6801, "udp"}, +{"pentbox-sim", {NULL}, 6817, "tcp"}, +{"ambit-lm", {NULL}, 6831, "tcp"}, +{"ambit-lm", {NULL}, 6831, "udp"}, +{"netmo-default", {NULL}, 6841, "tcp"}, +{"netmo-default", {NULL}, 6841, "udp"}, +{"netmo-http", {NULL}, 6842, "tcp"}, +{"netmo-http", {NULL}, 6842, "udp"}, +{"iccrushmore", {NULL}, 6850, "tcp"}, +{"iccrushmore", {NULL}, 6850, "udp"}, +{"acctopus-cc", {NULL}, 6868, "tcp"}, +{"acctopus-st", {NULL}, 6868, "udp"}, +{"muse", {NULL}, 6888, "tcp"}, +{"muse", {NULL}, 6888, "udp"}, +{"jetstream", {NULL}, 6901, "tcp"}, +{"xsmsvc", {NULL}, 6936, "tcp"}, +{"xsmsvc", {NULL}, 6936, "udp"}, +{"bioserver", {NULL}, 6946, "tcp"}, +{"bioserver", {NULL}, 6946, "udp"}, +{"otlp", {NULL}, 6951, "tcp"}, +{"otlp", {NULL}, 6951, "udp"}, +{"jmact3", {NULL}, 6961, "tcp"}, +{"jmact3", {NULL}, 6961, "udp"}, +{"jmevt2", {NULL}, 6962, "tcp"}, +{"jmevt2", {NULL}, 6962, "udp"}, +{"swismgr1", {NULL}, 6963, "tcp"}, +{"swismgr1", {NULL}, 6963, "udp"}, +{"swismgr2", {NULL}, 6964, "tcp"}, +{"swismgr2", {NULL}, 6964, "udp"}, +{"swistrap", {NULL}, 6965, "tcp"}, +{"swistrap", {NULL}, 6965, "udp"}, +{"swispol", {NULL}, 6966, "tcp"}, +{"swispol", {NULL}, 6966, "udp"}, +{"acmsoda", {NULL}, 6969, "tcp"}, +{"acmsoda", {NULL}, 6969, "udp"}, +{"MobilitySrv", {NULL}, 6997, "tcp"}, +{"MobilitySrv", {NULL}, 6997, "udp"}, +{"iatp-highpri", {NULL}, 6998, "tcp"}, +{"iatp-highpri", {NULL}, 6998, "udp"}, +{"iatp-normalpri", {NULL}, 6999, "tcp"}, +{"iatp-normalpri", {NULL}, 6999, "udp"}, +{"afs3-fileserver", {NULL}, 7000, "tcp"}, +{"afs3-fileserver", {NULL}, 7000, "udp"}, +{"afs3-callback", {NULL}, 7001, "tcp"}, +{"afs3-callback", {NULL}, 7001, "udp"}, +{"afs3-prserver", {NULL}, 7002, "tcp"}, +{"afs3-prserver", {NULL}, 7002, "udp"}, +{"afs3-vlserver", {NULL}, 7003, "tcp"}, +{"afs3-vlserver", {NULL}, 7003, "udp"}, +{"afs3-kaserver", {NULL}, 7004, "tcp"}, +{"afs3-kaserver", {NULL}, 7004, "udp"}, +{"afs3-volser", {NULL}, 7005, "tcp"}, +{"afs3-volser", {NULL}, 7005, "udp"}, +{"afs3-errors", {NULL}, 7006, "tcp"}, +{"afs3-errors", {NULL}, 7006, "udp"}, +{"afs3-bos", {NULL}, 7007, "tcp"}, +{"afs3-bos", {NULL}, 7007, "udp"}, +{"afs3-update", {NULL}, 7008, "tcp"}, +{"afs3-update", {NULL}, 7008, "udp"}, +{"afs3-rmtsys", {NULL}, 7009, "tcp"}, +{"afs3-rmtsys", {NULL}, 7009, "udp"}, +{"ups-onlinet", {NULL}, 7010, "tcp"}, +{"ups-onlinet", {NULL}, 7010, "udp"}, +{"talon-disc", {NULL}, 7011, "tcp"}, +{"talon-disc", {NULL}, 7011, "udp"}, +{"talon-engine", {NULL}, 7012, "tcp"}, +{"talon-engine", {NULL}, 7012, "udp"}, +{"microtalon-dis", {NULL}, 7013, "tcp"}, +{"microtalon-dis", {NULL}, 7013, "udp"}, +{"microtalon-com", {NULL}, 7014, "tcp"}, +{"microtalon-com", {NULL}, 7014, "udp"}, +{"talon-webserver", {NULL}, 7015, "tcp"}, +{"talon-webserver", {NULL}, 7015, "udp"}, +{"dpserve", {NULL}, 7020, "tcp"}, +{"dpserve", {NULL}, 7020, "udp"}, +{"dpserveadmin", {NULL}, 7021, "tcp"}, +{"dpserveadmin", {NULL}, 7021, "udp"}, +{"ctdp", {NULL}, 7022, "tcp"}, +{"ctdp", {NULL}, 7022, "udp"}, +{"ct2nmcs", {NULL}, 7023, "tcp"}, +{"ct2nmcs", {NULL}, 7023, "udp"}, +{"vmsvc", {NULL}, 7024, "tcp"}, +{"vmsvc", {NULL}, 7024, "udp"}, +{"vmsvc-2", {NULL}, 7025, "tcp"}, +{"vmsvc-2", {NULL}, 7025, "udp"}, +{"op-probe", {NULL}, 7030, "tcp"}, +{"op-probe", {NULL}, 7030, "udp"}, +{"arcp", {NULL}, 7070, "tcp"}, +{"arcp", {NULL}, 7070, "udp"}, +{"iwg1", {NULL}, 7071, "tcp"}, +{"iwg1", {NULL}, 7071, "udp"}, +{"empowerid", {NULL}, 7080, "tcp"}, +{"empowerid", {NULL}, 7080, "udp"}, +{"lazy-ptop", {NULL}, 7099, "tcp"}, +{"lazy-ptop", {NULL}, 7099, "udp"}, +{"font-service", {NULL}, 7100, "tcp"}, +{"font-service", {NULL}, 7100, "udp"}, +{"elcn", {NULL}, 7101, "tcp"}, +{"elcn", {NULL}, 7101, "udp"}, +{"aes-x170", {NULL}, 7107, "udp"}, +{"virprot-lm", {NULL}, 7121, "tcp"}, +{"virprot-lm", {NULL}, 7121, "udp"}, +{"scenidm", {NULL}, 7128, "tcp"}, +{"scenidm", {NULL}, 7128, "udp"}, +{"scenccs", {NULL}, 7129, "tcp"}, +{"scenccs", {NULL}, 7129, "udp"}, +{"cabsm-comm", {NULL}, 7161, "tcp"}, +{"cabsm-comm", {NULL}, 7161, "udp"}, +{"caistoragemgr", {NULL}, 7162, "tcp"}, +{"caistoragemgr", {NULL}, 7162, "udp"}, +{"cacsambroker", {NULL}, 7163, "tcp"}, +{"cacsambroker", {NULL}, 7163, "udp"}, +{"fsr", {NULL}, 7164, "tcp"}, +{"fsr", {NULL}, 7164, "udp"}, +{"doc-server", {NULL}, 7165, "tcp"}, +{"doc-server", {NULL}, 7165, "udp"}, +{"aruba-server", {NULL}, 7166, "tcp"}, +{"aruba-server", {NULL}, 7166, "udp"}, +{"casrmagent", {NULL}, 7167, "tcp"}, +{"cnckadserver", {NULL}, 7168, "tcp"}, +{"ccag-pib", {NULL}, 7169, "tcp"}, +{"ccag-pib", {NULL}, 7169, "udp"}, +{"nsrp", {NULL}, 7170, "tcp"}, +{"nsrp", {NULL}, 7170, "udp"}, +{"drm-production", {NULL}, 7171, "tcp"}, +{"drm-production", {NULL}, 7171, "udp"}, +{"zsecure", {NULL}, 7173, "tcp"}, +{"clutild", {NULL}, 7174, "tcp"}, +{"clutild", {NULL}, 7174, "udp"}, +{"fodms", {NULL}, 7200, "tcp"}, +{"fodms", {NULL}, 7200, "udp"}, +{"dlip", {NULL}, 7201, "tcp"}, +{"dlip", {NULL}, 7201, "udp"}, +{"ramp", {NULL}, 7227, "tcp"}, +{"ramp", {NULL}, 7227, "udp"}, +{"citrixupp", {NULL}, 7228, "tcp"}, +{"citrixuppg", {NULL}, 7229, "tcp"}, +{"pads", {NULL}, 7237, "tcp"}, +{"cnap", {NULL}, 7262, "tcp"}, +{"cnap", {NULL}, 7262, "udp"}, +{"watchme-7272", {NULL}, 7272, "tcp"}, +{"watchme-7272", {NULL}, 7272, "udp"}, +{"oma-rlp", {NULL}, 7273, "tcp"}, +{"oma-rlp", {NULL}, 7273, "udp"}, +{"oma-rlp-s", {NULL}, 7274, "tcp"}, +{"oma-rlp-s", {NULL}, 7274, "udp"}, +{"oma-ulp", {NULL}, 7275, "tcp"}, +{"oma-ulp", {NULL}, 7275, "udp"}, +{"oma-ilp", {NULL}, 7276, "tcp"}, +{"oma-ilp", {NULL}, 7276, "udp"}, +{"oma-ilp-s", {NULL}, 7277, "tcp"}, +{"oma-ilp-s", {NULL}, 7277, "udp"}, +{"oma-dcdocbs", {NULL}, 7278, "tcp"}, +{"oma-dcdocbs", {NULL}, 7278, "udp"}, +{"ctxlic", {NULL}, 7279, "tcp"}, +{"ctxlic", {NULL}, 7279, "udp"}, +{"itactionserver1", {NULL}, 7280, "tcp"}, +{"itactionserver1", {NULL}, 7280, "udp"}, +{"itactionserver2", {NULL}, 7281, "tcp"}, +{"itactionserver2", {NULL}, 7281, "udp"}, +{"mzca-action", {NULL}, 7282, "tcp"}, +{"mzca-alert", {NULL}, 7282, "udp"}, +{"lcm-server", {NULL}, 7365, "tcp"}, +{"lcm-server", {NULL}, 7365, "udp"}, +{"mindfilesys", {NULL}, 7391, "tcp"}, +{"mindfilesys", {NULL}, 7391, "udp"}, +{"mrssrendezvous", {NULL}, 7392, "tcp"}, +{"mrssrendezvous", {NULL}, 7392, "udp"}, +{"nfoldman", {NULL}, 7393, "tcp"}, +{"nfoldman", {NULL}, 7393, "udp"}, +{"fse", {NULL}, 7394, "tcp"}, +{"fse", {NULL}, 7394, "udp"}, +{"winqedit", {NULL}, 7395, "tcp"}, +{"winqedit", {NULL}, 7395, "udp"}, +{"hexarc", {NULL}, 7397, "tcp"}, +{"hexarc", {NULL}, 7397, "udp"}, +{"rtps-discovery", {NULL}, 7400, "tcp"}, +{"rtps-discovery", {NULL}, 7400, "udp"}, +{"rtps-dd-ut", {NULL}, 7401, "tcp"}, +{"rtps-dd-ut", {NULL}, 7401, "udp"}, +{"rtps-dd-mt", {NULL}, 7402, "tcp"}, +{"rtps-dd-mt", {NULL}, 7402, "udp"}, +{"ionixnetmon", {NULL}, 7410, "tcp"}, +{"ionixnetmon", {NULL}, 7410, "udp"}, +{"mtportmon", {NULL}, 7421, "tcp"}, +{"mtportmon", {NULL}, 7421, "udp"}, +{"pmdmgr", {NULL}, 7426, "tcp"}, +{"pmdmgr", {NULL}, 7426, "udp"}, +{"oveadmgr", {NULL}, 7427, "tcp"}, +{"oveadmgr", {NULL}, 7427, "udp"}, +{"ovladmgr", {NULL}, 7428, "tcp"}, +{"ovladmgr", {NULL}, 7428, "udp"}, +{"opi-sock", {NULL}, 7429, "tcp"}, +{"opi-sock", {NULL}, 7429, "udp"}, +{"xmpv7", {NULL}, 7430, "tcp"}, +{"xmpv7", {NULL}, 7430, "udp"}, +{"pmd", {NULL}, 7431, "tcp"}, +{"pmd", {NULL}, 7431, "udp"}, +{"faximum", {NULL}, 7437, "tcp"}, +{"faximum", {NULL}, 7437, "udp"}, +{"oracleas-https", {NULL}, 7443, "tcp"}, +{"oracleas-https", {NULL}, 7443, "udp"}, +{"rise", {NULL}, 7473, "tcp"}, +{"rise", {NULL}, 7473, "udp"}, +{"telops-lmd", {NULL}, 7491, "tcp"}, +{"telops-lmd", {NULL}, 7491, "udp"}, +{"silhouette", {NULL}, 7500, "tcp"}, +{"silhouette", {NULL}, 7500, "udp"}, +{"ovbus", {NULL}, 7501, "tcp"}, +{"ovbus", {NULL}, 7501, "udp"}, +{"acplt", {NULL}, 7509, "tcp"}, +{"ovhpas", {NULL}, 7510, "tcp"}, +{"ovhpas", {NULL}, 7510, "udp"}, +{"pafec-lm", {NULL}, 7511, "tcp"}, +{"pafec-lm", {NULL}, 7511, "udp"}, +{"saratoga", {NULL}, 7542, "tcp"}, +{"saratoga", {NULL}, 7542, "udp"}, +{"atul", {NULL}, 7543, "tcp"}, +{"atul", {NULL}, 7543, "udp"}, +{"nta-ds", {NULL}, 7544, "tcp"}, +{"nta-ds", {NULL}, 7544, "udp"}, +{"nta-us", {NULL}, 7545, "tcp"}, +{"nta-us", {NULL}, 7545, "udp"}, +{"cfs", {NULL}, 7546, "tcp"}, +{"cfs", {NULL}, 7546, "udp"}, +{"cwmp", {NULL}, 7547, "tcp"}, +{"cwmp", {NULL}, 7547, "udp"}, +{"tidp", {NULL}, 7548, "tcp"}, +{"tidp", {NULL}, 7548, "udp"}, +{"nls-tl", {NULL}, 7549, "tcp"}, +{"nls-tl", {NULL}, 7549, "udp"}, +{"sncp", {NULL}, 7560, "tcp"}, +{"sncp", {NULL}, 7560, "udp"}, +{"cfw", {NULL}, 7563, "tcp"}, +{"vsi-omega", {NULL}, 7566, "tcp"}, +{"vsi-omega", {NULL}, 7566, "udp"}, +{"dell-eql-asm", {NULL}, 7569, "tcp"}, +{"aries-kfinder", {NULL}, 7570, "tcp"}, +{"aries-kfinder", {NULL}, 7570, "udp"}, +{"sun-lm", {NULL}, 7588, "tcp"}, +{"sun-lm", {NULL}, 7588, "udp"}, +{"indi", {NULL}, 7624, "tcp"}, +{"indi", {NULL}, 7624, "udp"}, +{"simco", {NULL}, 7626, "tcp"}, +{"simco", {NULL}, 7626, "sctp"}, +{"soap-http", {NULL}, 7627, "tcp"}, +{"soap-http", {NULL}, 7627, "udp"}, +{"zen-pawn", {NULL}, 7628, "tcp"}, +{"zen-pawn", {NULL}, 7628, "udp"}, +{"xdas", {NULL}, 7629, "tcp"}, +{"xdas", {NULL}, 7629, "udp"}, +{"hawk", {NULL}, 7630, "tcp"}, +{"tesla-sys-msg", {NULL}, 7631, "tcp"}, +{"pmdfmgt", {NULL}, 7633, "tcp"}, +{"pmdfmgt", {NULL}, 7633, "udp"}, +{"cuseeme", {NULL}, 7648, "tcp"}, +{"cuseeme", {NULL}, 7648, "udp"}, +{"imqstomp", {NULL}, 7672, "tcp"}, +{"imqstomps", {NULL}, 7673, "tcp"}, +{"imqtunnels", {NULL}, 7674, "tcp"}, +{"imqtunnels", {NULL}, 7674, "udp"}, +{"imqtunnel", {NULL}, 7675, "tcp"}, +{"imqtunnel", {NULL}, 7675, "udp"}, +{"imqbrokerd", {NULL}, 7676, "tcp"}, +{"imqbrokerd", {NULL}, 7676, "udp"}, +{"sun-user-https", {NULL}, 7677, "tcp"}, +{"sun-user-https", {NULL}, 7677, "udp"}, +{"pando-pub", {NULL}, 7680, "tcp"}, +{"pando-pub", {NULL}, 7680, "udp"}, +{"collaber", {NULL}, 7689, "tcp"}, +{"collaber", {NULL}, 7689, "udp"}, +{"klio", {NULL}, 7697, "tcp"}, +{"klio", {NULL}, 7697, "udp"}, +{"em7-secom", {NULL}, 7700, "tcp"}, +{"sync-em7", {NULL}, 7707, "tcp"}, +{"sync-em7", {NULL}, 7707, "udp"}, +{"scinet", {NULL}, 7708, "tcp"}, +{"scinet", {NULL}, 7708, "udp"}, +{"medimageportal", {NULL}, 7720, "tcp"}, +{"medimageportal", {NULL}, 7720, "udp"}, +{"nsdeepfreezectl", {NULL}, 7724, "tcp"}, +{"nsdeepfreezectl", {NULL}, 7724, "udp"}, +{"nitrogen", {NULL}, 7725, "tcp"}, +{"nitrogen", {NULL}, 7725, "udp"}, +{"freezexservice", {NULL}, 7726, "tcp"}, +{"freezexservice", {NULL}, 7726, "udp"}, +{"trident-data", {NULL}, 7727, "tcp"}, +{"trident-data", {NULL}, 7727, "udp"}, +{"smip", {NULL}, 7734, "tcp"}, +{"smip", {NULL}, 7734, "udp"}, +{"aiagent", {NULL}, 7738, "tcp"}, +{"aiagent", {NULL}, 7738, "udp"}, +{"scriptview", {NULL}, 7741, "tcp"}, +{"scriptview", {NULL}, 7741, "udp"}, +{"msss", {NULL}, 7742, "tcp"}, +{"sstp-1", {NULL}, 7743, "tcp"}, +{"sstp-1", {NULL}, 7743, "udp"}, +{"raqmon-pdu", {NULL}, 7744, "tcp"}, +{"raqmon-pdu", {NULL}, 7744, "udp"}, +{"prgp", {NULL}, 7747, "tcp"}, +{"prgp", {NULL}, 7747, "udp"}, +{"cbt", {NULL}, 7777, "tcp"}, +{"cbt", {NULL}, 7777, "udp"}, +{"interwise", {NULL}, 7778, "tcp"}, +{"interwise", {NULL}, 7778, "udp"}, +{"vstat", {NULL}, 7779, "tcp"}, +{"vstat", {NULL}, 7779, "udp"}, +{"accu-lmgr", {NULL}, 7781, "tcp"}, +{"accu-lmgr", {NULL}, 7781, "udp"}, +{"minivend", {NULL}, 7786, "tcp"}, +{"minivend", {NULL}, 7786, "udp"}, +{"popup-reminders", {NULL}, 7787, "tcp"}, +{"popup-reminders", {NULL}, 7787, "udp"}, +{"office-tools", {NULL}, 7789, "tcp"}, +{"office-tools", {NULL}, 7789, "udp"}, +{"q3ade", {NULL}, 7794, "tcp"}, +{"q3ade", {NULL}, 7794, "udp"}, +{"pnet-conn", {NULL}, 7797, "tcp"}, +{"pnet-conn", {NULL}, 7797, "udp"}, +{"pnet-enc", {NULL}, 7798, "tcp"}, +{"pnet-enc", {NULL}, 7798, "udp"}, +{"altbsdp", {NULL}, 7799, "tcp"}, +{"altbsdp", {NULL}, 7799, "udp"}, +{"asr", {NULL}, 7800, "tcp"}, +{"asr", {NULL}, 7800, "udp"}, +{"ssp-client", {NULL}, 7801, "tcp"}, +{"ssp-client", {NULL}, 7801, "udp"}, +{"rbt-wanopt", {NULL}, 7810, "tcp"}, +{"rbt-wanopt", {NULL}, 7810, "udp"}, +{"apc-7845", {NULL}, 7845, "tcp"}, +{"apc-7845", {NULL}, 7845, "udp"}, +{"apc-7846", {NULL}, 7846, "tcp"}, +{"apc-7846", {NULL}, 7846, "udp"}, +{"mobileanalyzer", {NULL}, 7869, "tcp"}, +{"rbt-smc", {NULL}, 7870, "tcp"}, +{"pss", {NULL}, 7880, "tcp"}, +{"pss", {NULL}, 7880, "udp"}, +{"ubroker", {NULL}, 7887, "tcp"}, +{"ubroker", {NULL}, 7887, "udp"}, +{"mevent", {NULL}, 7900, "tcp"}, +{"mevent", {NULL}, 7900, "udp"}, +{"tnos-sp", {NULL}, 7901, "tcp"}, +{"tnos-sp", {NULL}, 7901, "udp"}, +{"tnos-dp", {NULL}, 7902, "tcp"}, +{"tnos-dp", {NULL}, 7902, "udp"}, +{"tnos-dps", {NULL}, 7903, "tcp"}, +{"tnos-dps", {NULL}, 7903, "udp"}, +{"qo-secure", {NULL}, 7913, "tcp"}, +{"qo-secure", {NULL}, 7913, "udp"}, +{"t2-drm", {NULL}, 7932, "tcp"}, +{"t2-drm", {NULL}, 7932, "udp"}, +{"t2-brm", {NULL}, 7933, "tcp"}, +{"t2-brm", {NULL}, 7933, "udp"}, +{"supercell", {NULL}, 7967, "tcp"}, +{"supercell", {NULL}, 7967, "udp"}, +{"micromuse-ncps", {NULL}, 7979, "tcp"}, +{"micromuse-ncps", {NULL}, 7979, "udp"}, +{"quest-vista", {NULL}, 7980, "tcp"}, +{"quest-vista", {NULL}, 7980, "udp"}, +{"sossd-collect", {NULL}, 7981, "tcp"}, +{"sossd-agent", {NULL}, 7982, "tcp"}, +{"sossd-disc", {NULL}, 7982, "udp"}, +{"pushns", {NULL}, 7997, "tcp"}, +{"usicontentpush", {NULL}, 7998, "udp"}, +{"irdmi2", {NULL}, 7999, "tcp"}, +{"irdmi2", {NULL}, 7999, "udp"}, +{"irdmi", {NULL}, 8000, "tcp"}, +{"irdmi", {NULL}, 8000, "udp"}, +{"vcom-tunnel", {NULL}, 8001, "tcp"}, +{"vcom-tunnel", {NULL}, 8001, "udp"}, +{"teradataordbms", {NULL}, 8002, "tcp"}, +{"teradataordbms", {NULL}, 8002, "udp"}, +{"mcreport", {NULL}, 8003, "tcp"}, +{"mcreport", {NULL}, 8003, "udp"}, +{"mxi", {NULL}, 8005, "tcp"}, +{"mxi", {NULL}, 8005, "udp"}, +{"http-alt", {NULL}, 8008, "tcp"}, +{"http-alt", {NULL}, 8008, "udp"}, +{"qbdb", {NULL}, 8019, "tcp"}, +{"qbdb", {NULL}, 8019, "udp"}, +{"intu-ec-svcdisc", {NULL}, 8020, "tcp"}, +{"intu-ec-svcdisc", {NULL}, 8020, "udp"}, +{"intu-ec-client", {NULL}, 8021, "tcp"}, +{"intu-ec-client", {NULL}, 8021, "udp"}, +{"oa-system", {NULL}, 8022, "tcp"}, +{"oa-system", {NULL}, 8022, "udp"}, +{"ca-audit-da", {NULL}, 8025, "tcp"}, +{"ca-audit-da", {NULL}, 8025, "udp"}, +{"ca-audit-ds", {NULL}, 8026, "tcp"}, +{"ca-audit-ds", {NULL}, 8026, "udp"}, +{"pro-ed", {NULL}, 8032, "tcp"}, +{"pro-ed", {NULL}, 8032, "udp"}, +{"mindprint", {NULL}, 8033, "tcp"}, +{"mindprint", {NULL}, 8033, "udp"}, +{"vantronix-mgmt", {NULL}, 8034, "tcp"}, +{"vantronix-mgmt", {NULL}, 8034, "udp"}, +{"ampify", {NULL}, 8040, "tcp"}, +{"ampify", {NULL}, 8040, "udp"}, +{"fs-agent", {NULL}, 8042, "tcp"}, +{"fs-server", {NULL}, 8043, "tcp"}, +{"fs-mgmt", {NULL}, 8044, "tcp"}, +{"senomix01", {NULL}, 8052, "tcp"}, +{"senomix01", {NULL}, 8052, "udp"}, +{"senomix02", {NULL}, 8053, "tcp"}, +{"senomix02", {NULL}, 8053, "udp"}, +{"senomix03", {NULL}, 8054, "tcp"}, +{"senomix03", {NULL}, 8054, "udp"}, +{"senomix04", {NULL}, 8055, "tcp"}, +{"senomix04", {NULL}, 8055, "udp"}, +{"senomix05", {NULL}, 8056, "tcp"}, +{"senomix05", {NULL}, 8056, "udp"}, +{"senomix06", {NULL}, 8057, "tcp"}, +{"senomix06", {NULL}, 8057, "udp"}, +{"senomix07", {NULL}, 8058, "tcp"}, +{"senomix07", {NULL}, 8058, "udp"}, +{"senomix08", {NULL}, 8059, "tcp"}, +{"senomix08", {NULL}, 8059, "udp"}, +{"gadugadu", {NULL}, 8074, "tcp"}, +{"gadugadu", {NULL}, 8074, "udp"}, +{"http-alt", {NULL}, 8080, "tcp"}, +{"http-alt", {NULL}, 8080, "udp"}, +{"sunproxyadmin", {NULL}, 8081, "tcp"}, +{"sunproxyadmin", {NULL}, 8081, "udp"}, +{"us-cli", {NULL}, 8082, "tcp"}, +{"us-cli", {NULL}, 8082, "udp"}, +{"us-srv", {NULL}, 8083, "tcp"}, +{"us-srv", {NULL}, 8083, "udp"}, +{"d-s-n", {NULL}, 8086, "tcp"}, +{"d-s-n", {NULL}, 8086, "udp"}, +{"simplifymedia", {NULL}, 8087, "tcp"}, +{"simplifymedia", {NULL}, 8087, "udp"}, +{"radan-http", {NULL}, 8088, "tcp"}, +{"radan-http", {NULL}, 8088, "udp"}, +{"jamlink", {NULL}, 8091, "tcp"}, +{"sac", {NULL}, 8097, "tcp"}, +{"sac", {NULL}, 8097, "udp"}, +{"xprint-server", {NULL}, 8100, "tcp"}, +{"xprint-server", {NULL}, 8100, "udp"}, +{"ldoms-migr", {NULL}, 8101, "tcp"}, +{"mtl8000-matrix", {NULL}, 8115, "tcp"}, +{"mtl8000-matrix", {NULL}, 8115, "udp"}, +{"cp-cluster", {NULL}, 8116, "tcp"}, +{"cp-cluster", {NULL}, 8116, "udp"}, +{"privoxy", {NULL}, 8118, "tcp"}, +{"privoxy", {NULL}, 8118, "udp"}, +{"apollo-data", {NULL}, 8121, "tcp"}, +{"apollo-data", {NULL}, 8121, "udp"}, +{"apollo-admin", {NULL}, 8122, "tcp"}, +{"apollo-admin", {NULL}, 8122, "udp"}, +{"paycash-online", {NULL}, 8128, "tcp"}, +{"paycash-online", {NULL}, 8128, "udp"}, +{"paycash-wbp", {NULL}, 8129, "tcp"}, +{"paycash-wbp", {NULL}, 8129, "udp"}, +{"indigo-vrmi", {NULL}, 8130, "tcp"}, +{"indigo-vrmi", {NULL}, 8130, "udp"}, +{"indigo-vbcp", {NULL}, 8131, "tcp"}, +{"indigo-vbcp", {NULL}, 8131, "udp"}, +{"dbabble", {NULL}, 8132, "tcp"}, +{"dbabble", {NULL}, 8132, "udp"}, +{"isdd", {NULL}, 8148, "tcp"}, +{"isdd", {NULL}, 8148, "udp"}, +{"patrol", {NULL}, 8160, "tcp"}, +{"patrol", {NULL}, 8160, "udp"}, +{"patrol-snmp", {NULL}, 8161, "tcp"}, +{"patrol-snmp", {NULL}, 8161, "udp"}, +{"vmware-fdm", {NULL}, 8182, "tcp"}, +{"vmware-fdm", {NULL}, 8182, "udp"}, +{"proremote", {NULL}, 8183, "tcp"}, +{"itach", {NULL}, 8184, "tcp"}, +{"itach", {NULL}, 8184, "udp"}, +{"spytechphone", {NULL}, 8192, "tcp"}, +{"spytechphone", {NULL}, 8192, "udp"}, +{"blp1", {NULL}, 8194, "tcp"}, +{"blp1", {NULL}, 8194, "udp"}, +{"blp2", {NULL}, 8195, "tcp"}, +{"blp2", {NULL}, 8195, "udp"}, +{"vvr-data", {NULL}, 8199, "tcp"}, +{"vvr-data", {NULL}, 8199, "udp"}, +{"trivnet1", {NULL}, 8200, "tcp"}, +{"trivnet1", {NULL}, 8200, "udp"}, +{"trivnet2", {NULL}, 8201, "tcp"}, +{"trivnet2", {NULL}, 8201, "udp"}, +{"lm-perfworks", {NULL}, 8204, "tcp"}, +{"lm-perfworks", {NULL}, 8204, "udp"}, +{"lm-instmgr", {NULL}, 8205, "tcp"}, +{"lm-instmgr", {NULL}, 8205, "udp"}, +{"lm-dta", {NULL}, 8206, "tcp"}, +{"lm-dta", {NULL}, 8206, "udp"}, +{"lm-sserver", {NULL}, 8207, "tcp"}, +{"lm-sserver", {NULL}, 8207, "udp"}, +{"lm-webwatcher", {NULL}, 8208, "tcp"}, +{"lm-webwatcher", {NULL}, 8208, "udp"}, +{"rexecj", {NULL}, 8230, "tcp"}, +{"rexecj", {NULL}, 8230, "udp"}, +{"synapse-nhttps", {NULL}, 8243, "tcp"}, +{"synapse-nhttps", {NULL}, 8243, "udp"}, +{"pando-sec", {NULL}, 8276, "tcp"}, +{"pando-sec", {NULL}, 8276, "udp"}, +{"synapse-nhttp", {NULL}, 8280, "tcp"}, +{"synapse-nhttp", {NULL}, 8280, "udp"}, +{"blp3", {NULL}, 8292, "tcp"}, +{"blp3", {NULL}, 8292, "udp"}, +{"hiperscan-id", {NULL}, 8293, "tcp"}, +{"blp4", {NULL}, 8294, "tcp"}, +{"blp4", {NULL}, 8294, "udp"}, +{"tmi", {NULL}, 8300, "tcp"}, +{"tmi", {NULL}, 8300, "udp"}, +{"amberon", {NULL}, 8301, "tcp"}, +{"amberon", {NULL}, 8301, "udp"}, +{"tnp-discover", {NULL}, 8320, "tcp"}, +{"tnp-discover", {NULL}, 8320, "udp"}, +{"tnp", {NULL}, 8321, "tcp"}, +{"tnp", {NULL}, 8321, "udp"}, +{"server-find", {NULL}, 8351, "tcp"}, +{"server-find", {NULL}, 8351, "udp"}, +{"cruise-enum", {NULL}, 8376, "tcp"}, +{"cruise-enum", {NULL}, 8376, "udp"}, +{"cruise-swroute", {NULL}, 8377, "tcp"}, +{"cruise-swroute", {NULL}, 8377, "udp"}, +{"cruise-config", {NULL}, 8378, "tcp"}, +{"cruise-config", {NULL}, 8378, "udp"}, +{"cruise-diags", {NULL}, 8379, "tcp"}, +{"cruise-diags", {NULL}, 8379, "udp"}, +{"cruise-update", {NULL}, 8380, "tcp"}, +{"cruise-update", {NULL}, 8380, "udp"}, +{"m2mservices", {NULL}, 8383, "tcp"}, +{"m2mservices", {NULL}, 8383, "udp"}, +{"cvd", {NULL}, 8400, "tcp"}, +{"cvd", {NULL}, 8400, "udp"}, +{"sabarsd", {NULL}, 8401, "tcp"}, +{"sabarsd", {NULL}, 8401, "udp"}, +{"abarsd", {NULL}, 8402, "tcp"}, +{"abarsd", {NULL}, 8402, "udp"}, +{"admind", {NULL}, 8403, "tcp"}, +{"admind", {NULL}, 8403, "udp"}, +{"svcloud", {NULL}, 8404, "tcp"}, +{"svbackup", {NULL}, 8405, "tcp"}, +{"espeech", {NULL}, 8416, "tcp"}, +{"espeech", {NULL}, 8416, "udp"}, +{"espeech-rtp", {NULL}, 8417, "tcp"}, +{"espeech-rtp", {NULL}, 8417, "udp"}, +{"cybro-a-bus", {NULL}, 8442, "tcp"}, +{"cybro-a-bus", {NULL}, 8442, "udp"}, +{"pcsync-https", {NULL}, 8443, "tcp"}, +{"pcsync-https", {NULL}, 8443, "udp"}, +{"pcsync-http", {NULL}, 8444, "tcp"}, +{"pcsync-http", {NULL}, 8444, "udp"}, +{"npmp", {NULL}, 8450, "tcp"}, +{"npmp", {NULL}, 8450, "udp"}, +{"cisco-avp", {NULL}, 8470, "tcp"}, +{"pim-port", {NULL}, 8471, "tcp"}, +{"pim-port", {NULL}, 8471, "sctp"}, +{"otv", {NULL}, 8472, "tcp"}, +{"otv", {NULL}, 8472, "udp"}, +{"vp2p", {NULL}, 8473, "tcp"}, +{"vp2p", {NULL}, 8473, "udp"}, +{"noteshare", {NULL}, 8474, "tcp"}, +{"noteshare", {NULL}, 8474, "udp"}, +{"fmtp", {NULL}, 8500, "tcp"}, +{"fmtp", {NULL}, 8500, "udp"}, +{"rtsp-alt", {NULL}, 8554, "tcp"}, +{"rtsp-alt", {NULL}, 8554, "udp"}, +{"d-fence", {NULL}, 8555, "tcp"}, +{"d-fence", {NULL}, 8555, "udp"}, +{"oap-admin", {NULL}, 8567, "tcp"}, +{"oap-admin", {NULL}, 8567, "udp"}, +{"asterix", {NULL}, 8600, "tcp"}, +{"asterix", {NULL}, 8600, "udp"}, +{"canon-mfnp", {NULL}, 8610, "tcp"}, +{"canon-mfnp", {NULL}, 8610, "udp"}, +{"canon-bjnp1", {NULL}, 8611, "tcp"}, +{"canon-bjnp1", {NULL}, 8611, "udp"}, +{"canon-bjnp2", {NULL}, 8612, "tcp"}, +{"canon-bjnp2", {NULL}, 8612, "udp"}, +{"canon-bjnp3", {NULL}, 8613, "tcp"}, +{"canon-bjnp3", {NULL}, 8613, "udp"}, +{"canon-bjnp4", {NULL}, 8614, "tcp"}, +{"canon-bjnp4", {NULL}, 8614, "udp"}, +{"sun-as-jmxrmi", {NULL}, 8686, "tcp"}, +{"sun-as-jmxrmi", {NULL}, 8686, "udp"}, +{"vnyx", {NULL}, 8699, "tcp"}, +{"vnyx", {NULL}, 8699, "udp"}, +{"dtp-net", {NULL}, 8732, "udp"}, +{"ibus", {NULL}, 8733, "tcp"}, +{"ibus", {NULL}, 8733, "udp"}, +{"mc-appserver", {NULL}, 8763, "tcp"}, +{"mc-appserver", {NULL}, 8763, "udp"}, +{"openqueue", {NULL}, 8764, "tcp"}, +{"openqueue", {NULL}, 8764, "udp"}, +{"ultraseek-http", {NULL}, 8765, "tcp"}, +{"ultraseek-http", {NULL}, 8765, "udp"}, +{"dpap", {NULL}, 8770, "tcp"}, +{"dpap", {NULL}, 8770, "udp"}, +{"msgclnt", {NULL}, 8786, "tcp"}, +{"msgclnt", {NULL}, 8786, "udp"}, +{"msgsrvr", {NULL}, 8787, "tcp"}, +{"msgsrvr", {NULL}, 8787, "udp"}, +{"sunwebadmin", {NULL}, 8800, "tcp"}, +{"sunwebadmin", {NULL}, 8800, "udp"}, +{"truecm", {NULL}, 8804, "tcp"}, +{"truecm", {NULL}, 8804, "udp"}, +{"dxspider", {NULL}, 8873, "tcp"}, +{"dxspider", {NULL}, 8873, "udp"}, +{"cddbp-alt", {NULL}, 8880, "tcp"}, +{"cddbp-alt", {NULL}, 8880, "udp"}, +{"secure-mqtt", {NULL}, 8883, "tcp"}, +{"secure-mqtt", {NULL}, 8883, "udp"}, +{"ddi-tcp-1", {NULL}, 8888, "tcp"}, +{"ddi-udp-1", {NULL}, 8888, "udp"}, +{"ddi-tcp-2", {NULL}, 8889, "tcp"}, +{"ddi-udp-2", {NULL}, 8889, "udp"}, +{"ddi-tcp-3", {NULL}, 8890, "tcp"}, +{"ddi-udp-3", {NULL}, 8890, "udp"}, +{"ddi-tcp-4", {NULL}, 8891, "tcp"}, +{"ddi-udp-4", {NULL}, 8891, "udp"}, +{"ddi-tcp-5", {NULL}, 8892, "tcp"}, +{"ddi-udp-5", {NULL}, 8892, "udp"}, +{"ddi-tcp-6", {NULL}, 8893, "tcp"}, +{"ddi-udp-6", {NULL}, 8893, "udp"}, +{"ddi-tcp-7", {NULL}, 8894, "tcp"}, +{"ddi-udp-7", {NULL}, 8894, "udp"}, +{"ospf-lite", {NULL}, 8899, "tcp"}, +{"ospf-lite", {NULL}, 8899, "udp"}, +{"jmb-cds1", {NULL}, 8900, "tcp"}, +{"jmb-cds1", {NULL}, 8900, "udp"}, +{"jmb-cds2", {NULL}, 8901, "tcp"}, +{"jmb-cds2", {NULL}, 8901, "udp"}, +{"manyone-http", {NULL}, 8910, "tcp"}, +{"manyone-http", {NULL}, 8910, "udp"}, +{"manyone-xml", {NULL}, 8911, "tcp"}, +{"manyone-xml", {NULL}, 8911, "udp"}, +{"wcbackup", {NULL}, 8912, "tcp"}, +{"wcbackup", {NULL}, 8912, "udp"}, +{"dragonfly", {NULL}, 8913, "tcp"}, +{"dragonfly", {NULL}, 8913, "udp"}, +{"twds", {NULL}, 8937, "tcp"}, +{"cumulus-admin", {NULL}, 8954, "tcp"}, +{"cumulus-admin", {NULL}, 8954, "udp"}, +{"sunwebadmins", {NULL}, 8989, "tcp"}, +{"sunwebadmins", {NULL}, 8989, "udp"}, +{"http-wmap", {NULL}, 8990, "tcp"}, +{"http-wmap", {NULL}, 8990, "udp"}, +{"https-wmap", {NULL}, 8991, "tcp"}, +{"https-wmap", {NULL}, 8991, "udp"}, +{"bctp", {NULL}, 8999, "tcp"}, +{"bctp", {NULL}, 8999, "udp"}, +{"cslistener", {NULL}, 9000, "tcp"}, +{"cslistener", {NULL}, 9000, "udp"}, +{"etlservicemgr", {NULL}, 9001, "tcp"}, +{"etlservicemgr", {NULL}, 9001, "udp"}, +{"dynamid", {NULL}, 9002, "tcp"}, +{"dynamid", {NULL}, 9002, "udp"}, +{"ogs-client", {NULL}, 9007, "udp"}, +{"ogs-server", {NULL}, 9008, "tcp"}, +{"pichat", {NULL}, 9009, "tcp"}, +{"pichat", {NULL}, 9009, "udp"}, +{"sdr", {NULL}, 9010, "tcp"}, +{"tambora", {NULL}, 9020, "tcp"}, +{"tambora", {NULL}, 9020, "udp"}, +{"panagolin-ident", {NULL}, 9021, "tcp"}, +{"panagolin-ident", {NULL}, 9021, "udp"}, +{"paragent", {NULL}, 9022, "tcp"}, +{"paragent", {NULL}, 9022, "udp"}, +{"swa-1", {NULL}, 9023, "tcp"}, +{"swa-1", {NULL}, 9023, "udp"}, +{"swa-2", {NULL}, 9024, "tcp"}, +{"swa-2", {NULL}, 9024, "udp"}, +{"swa-3", {NULL}, 9025, "tcp"}, +{"swa-3", {NULL}, 9025, "udp"}, +{"swa-4", {NULL}, 9026, "tcp"}, +{"swa-4", {NULL}, 9026, "udp"}, +{"versiera", {NULL}, 9050, "tcp"}, +{"fio-cmgmt", {NULL}, 9051, "tcp"}, +{"glrpc", {NULL}, 9080, "tcp"}, +{"glrpc", {NULL}, 9080, "udp"}, +{"lcs-ap", {NULL}, 9082, "sctp"}, +{"emc-pp-mgmtsvc", {NULL}, 9083, "tcp"}, +{"aurora", {NULL}, 9084, "tcp"}, +{"aurora", {NULL}, 9084, "udp"}, +{"aurora", {NULL}, 9084, "sctp"}, +{"ibm-rsyscon", {NULL}, 9085, "tcp"}, +{"ibm-rsyscon", {NULL}, 9085, "udp"}, +{"net2display", {NULL}, 9086, "tcp"}, +{"net2display", {NULL}, 9086, "udp"}, +{"classic", {NULL}, 9087, "tcp"}, +{"classic", {NULL}, 9087, "udp"}, +{"sqlexec", {NULL}, 9088, "tcp"}, +{"sqlexec", {NULL}, 9088, "udp"}, +{"sqlexec-ssl", {NULL}, 9089, "tcp"}, +{"sqlexec-ssl", {NULL}, 9089, "udp"}, +{"websm", {NULL}, 9090, "tcp"}, +{"websm", {NULL}, 9090, "udp"}, +{"xmltec-xmlmail", {NULL}, 9091, "tcp"}, +{"xmltec-xmlmail", {NULL}, 9091, "udp"}, +{"XmlIpcRegSvc", {NULL}, 9092, "tcp"}, +{"XmlIpcRegSvc", {NULL}, 9092, "udp"}, +{"hp-pdl-datastr", {NULL}, 9100, "tcp"}, +{"hp-pdl-datastr", {NULL}, 9100, "udp"}, +{"pdl-datastream", {NULL}, 9100, "tcp"}, +{"pdl-datastream", {NULL}, 9100, "udp"}, +{"bacula-dir", {NULL}, 9101, "tcp"}, +{"bacula-dir", {NULL}, 9101, "udp"}, +{"bacula-fd", {NULL}, 9102, "tcp"}, +{"bacula-fd", {NULL}, 9102, "udp"}, +{"bacula-sd", {NULL}, 9103, "tcp"}, +{"bacula-sd", {NULL}, 9103, "udp"}, +{"peerwire", {NULL}, 9104, "tcp"}, +{"peerwire", {NULL}, 9104, "udp"}, +{"xadmin", {NULL}, 9105, "tcp"}, +{"xadmin", {NULL}, 9105, "udp"}, +{"astergate", {NULL}, 9106, "tcp"}, +{"astergate-disc", {NULL}, 9106, "udp"}, +{"astergatefax", {NULL}, 9107, "tcp"}, +{"mxit", {NULL}, 9119, "tcp"}, +{"mxit", {NULL}, 9119, "udp"}, +{"dddp", {NULL}, 9131, "tcp"}, +{"dddp", {NULL}, 9131, "udp"}, +{"apani1", {NULL}, 9160, "tcp"}, +{"apani1", {NULL}, 9160, "udp"}, +{"apani2", {NULL}, 9161, "tcp"}, +{"apani2", {NULL}, 9161, "udp"}, +{"apani3", {NULL}, 9162, "tcp"}, +{"apani3", {NULL}, 9162, "udp"}, +{"apani4", {NULL}, 9163, "tcp"}, +{"apani4", {NULL}, 9163, "udp"}, +{"apani5", {NULL}, 9164, "tcp"}, +{"apani5", {NULL}, 9164, "udp"}, +{"sun-as-jpda", {NULL}, 9191, "tcp"}, +{"sun-as-jpda", {NULL}, 9191, "udp"}, +{"wap-wsp", {NULL}, 9200, "tcp"}, +{"wap-wsp", {NULL}, 9200, "udp"}, +{"wap-wsp-wtp", {NULL}, 9201, "tcp"}, +{"wap-wsp-wtp", {NULL}, 9201, "udp"}, +{"wap-wsp-s", {NULL}, 9202, "tcp"}, +{"wap-wsp-s", {NULL}, 9202, "udp"}, +{"wap-wsp-wtp-s", {NULL}, 9203, "tcp"}, +{"wap-wsp-wtp-s", {NULL}, 9203, "udp"}, +{"wap-vcard", {NULL}, 9204, "tcp"}, +{"wap-vcard", {NULL}, 9204, "udp"}, +{"wap-vcal", {NULL}, 9205, "tcp"}, +{"wap-vcal", {NULL}, 9205, "udp"}, +{"wap-vcard-s", {NULL}, 9206, "tcp"}, +{"wap-vcard-s", {NULL}, 9206, "udp"}, +{"wap-vcal-s", {NULL}, 9207, "tcp"}, +{"wap-vcal-s", {NULL}, 9207, "udp"}, +{"rjcdb-vcards", {NULL}, 9208, "tcp"}, +{"rjcdb-vcards", {NULL}, 9208, "udp"}, +{"almobile-system", {NULL}, 9209, "tcp"}, +{"almobile-system", {NULL}, 9209, "udp"}, +{"oma-mlp", {NULL}, 9210, "tcp"}, +{"oma-mlp", {NULL}, 9210, "udp"}, +{"oma-mlp-s", {NULL}, 9211, "tcp"}, +{"oma-mlp-s", {NULL}, 9211, "udp"}, +{"serverviewdbms", {NULL}, 9212, "tcp"}, +{"serverviewdbms", {NULL}, 9212, "udp"}, +{"serverstart", {NULL}, 9213, "tcp"}, +{"serverstart", {NULL}, 9213, "udp"}, +{"ipdcesgbs", {NULL}, 9214, "tcp"}, +{"ipdcesgbs", {NULL}, 9214, "udp"}, +{"insis", {NULL}, 9215, "tcp"}, +{"insis", {NULL}, 9215, "udp"}, +{"acme", {NULL}, 9216, "tcp"}, +{"acme", {NULL}, 9216, "udp"}, +{"fsc-port", {NULL}, 9217, "tcp"}, +{"fsc-port", {NULL}, 9217, "udp"}, +{"teamcoherence", {NULL}, 9222, "tcp"}, +{"teamcoherence", {NULL}, 9222, "udp"}, +{"mon", {NULL}, 9255, "tcp"}, +{"mon", {NULL}, 9255, "udp"}, +{"pegasus", {NULL}, 9278, "tcp"}, +{"pegasus", {NULL}, 9278, "udp"}, +{"pegasus-ctl", {NULL}, 9279, "tcp"}, +{"pegasus-ctl", {NULL}, 9279, "udp"}, +{"pgps", {NULL}, 9280, "tcp"}, +{"pgps", {NULL}, 9280, "udp"}, +{"swtp-port1", {NULL}, 9281, "tcp"}, +{"swtp-port1", {NULL}, 9281, "udp"}, +{"swtp-port2", {NULL}, 9282, "tcp"}, +{"swtp-port2", {NULL}, 9282, "udp"}, +{"callwaveiam", {NULL}, 9283, "tcp"}, +{"callwaveiam", {NULL}, 9283, "udp"}, +{"visd", {NULL}, 9284, "tcp"}, +{"visd", {NULL}, 9284, "udp"}, +{"n2h2server", {NULL}, 9285, "tcp"}, +{"n2h2server", {NULL}, 9285, "udp"}, +{"n2receive", {NULL}, 9286, "udp"}, +{"cumulus", {NULL}, 9287, "tcp"}, +{"cumulus", {NULL}, 9287, "udp"}, +{"armtechdaemon", {NULL}, 9292, "tcp"}, +{"armtechdaemon", {NULL}, 9292, "udp"}, +{"storview", {NULL}, 9293, "tcp"}, +{"storview", {NULL}, 9293, "udp"}, +{"armcenterhttp", {NULL}, 9294, "tcp"}, +{"armcenterhttp", {NULL}, 9294, "udp"}, +{"armcenterhttps", {NULL}, 9295, "tcp"}, +{"armcenterhttps", {NULL}, 9295, "udp"}, +{"vrace", {NULL}, 9300, "tcp"}, +{"vrace", {NULL}, 9300, "udp"}, +{"sphinxql", {NULL}, 9306, "tcp"}, +{"sphinxapi", {NULL}, 9312, "tcp"}, +{"secure-ts", {NULL}, 9318, "tcp"}, +{"secure-ts", {NULL}, 9318, "udp"}, +{"guibase", {NULL}, 9321, "tcp"}, +{"guibase", {NULL}, 9321, "udp"}, +{"mpidcmgr", {NULL}, 9343, "tcp"}, +{"mpidcmgr", {NULL}, 9343, "udp"}, +{"mphlpdmc", {NULL}, 9344, "tcp"}, +{"mphlpdmc", {NULL}, 9344, "udp"}, +{"ctechlicensing", {NULL}, 9346, "tcp"}, +{"ctechlicensing", {NULL}, 9346, "udp"}, +{"fjdmimgr", {NULL}, 9374, "tcp"}, +{"fjdmimgr", {NULL}, 9374, "udp"}, +{"boxp", {NULL}, 9380, "tcp"}, +{"boxp", {NULL}, 9380, "udp"}, +{"d2dconfig", {NULL}, 9387, "tcp"}, +{"d2ddatatrans", {NULL}, 9388, "tcp"}, +{"adws", {NULL}, 9389, "tcp"}, +{"otp", {NULL}, 9390, "tcp"}, +{"fjinvmgr", {NULL}, 9396, "tcp"}, +{"fjinvmgr", {NULL}, 9396, "udp"}, +{"mpidcagt", {NULL}, 9397, "tcp"}, +{"mpidcagt", {NULL}, 9397, "udp"}, +{"sec-t4net-srv", {NULL}, 9400, "tcp"}, +{"sec-t4net-srv", {NULL}, 9400, "udp"}, +{"sec-t4net-clt", {NULL}, 9401, "tcp"}, +{"sec-t4net-clt", {NULL}, 9401, "udp"}, +{"sec-pc2fax-srv", {NULL}, 9402, "tcp"}, +{"sec-pc2fax-srv", {NULL}, 9402, "udp"}, +{"git", {NULL}, 9418, "tcp"}, +{"git", {NULL}, 9418, "udp"}, +{"tungsten-https", {NULL}, 9443, "tcp"}, +{"tungsten-https", {NULL}, 9443, "udp"}, +{"wso2esb-console", {NULL}, 9444, "tcp"}, +{"wso2esb-console", {NULL}, 9444, "udp"}, +{"sntlkeyssrvr", {NULL}, 9450, "tcp"}, +{"sntlkeyssrvr", {NULL}, 9450, "udp"}, +{"ismserver", {NULL}, 9500, "tcp"}, +{"ismserver", {NULL}, 9500, "udp"}, +{"sma-spw", {NULL}, 9522, "udp"}, +{"mngsuite", {NULL}, 9535, "tcp"}, +{"mngsuite", {NULL}, 9535, "udp"}, +{"laes-bf", {NULL}, 9536, "tcp"}, +{"laes-bf", {NULL}, 9536, "udp"}, +{"trispen-sra", {NULL}, 9555, "tcp"}, +{"trispen-sra", {NULL}, 9555, "udp"}, +{"ldgateway", {NULL}, 9592, "tcp"}, +{"ldgateway", {NULL}, 9592, "udp"}, +{"cba8", {NULL}, 9593, "tcp"}, +{"cba8", {NULL}, 9593, "udp"}, +{"msgsys", {NULL}, 9594, "tcp"}, +{"msgsys", {NULL}, 9594, "udp"}, +{"pds", {NULL}, 9595, "tcp"}, +{"pds", {NULL}, 9595, "udp"}, +{"mercury-disc", {NULL}, 9596, "tcp"}, +{"mercury-disc", {NULL}, 9596, "udp"}, +{"pd-admin", {NULL}, 9597, "tcp"}, +{"pd-admin", {NULL}, 9597, "udp"}, +{"vscp", {NULL}, 9598, "tcp"}, +{"vscp", {NULL}, 9598, "udp"}, +{"robix", {NULL}, 9599, "tcp"}, +{"robix", {NULL}, 9599, "udp"}, +{"micromuse-ncpw", {NULL}, 9600, "tcp"}, +{"micromuse-ncpw", {NULL}, 9600, "udp"}, +{"streamcomm-ds", {NULL}, 9612, "tcp"}, +{"streamcomm-ds", {NULL}, 9612, "udp"}, +{"iadt-tls", {NULL}, 9614, "tcp"}, +{"erunbook_agent", {NULL}, 9616, "tcp"}, +{"erunbook_server", {NULL}, 9617, "tcp"}, +{"condor", {NULL}, 9618, "tcp"}, +{"condor", {NULL}, 9618, "udp"}, +{"odbcpathway", {NULL}, 9628, "tcp"}, +{"odbcpathway", {NULL}, 9628, "udp"}, +{"uniport", {NULL}, 9629, "tcp"}, +{"uniport", {NULL}, 9629, "udp"}, +{"peoctlr", {NULL}, 9630, "tcp"}, +{"peocoll", {NULL}, 9631, "tcp"}, +{"mc-comm", {NULL}, 9632, "udp"}, +{"pqsflows", {NULL}, 9640, "tcp"}, +{"xmms2", {NULL}, 9667, "tcp"}, +{"xmms2", {NULL}, 9667, "udp"}, +{"tec5-sdctp", {NULL}, 9668, "tcp"}, +{"tec5-sdctp", {NULL}, 9668, "udp"}, +{"client-wakeup", {NULL}, 9694, "tcp"}, +{"client-wakeup", {NULL}, 9694, "udp"}, +{"ccnx", {NULL}, 9695, "tcp"}, +{"ccnx", {NULL}, 9695, "udp"}, +{"board-roar", {NULL}, 9700, "tcp"}, +{"board-roar", {NULL}, 9700, "udp"}, +{"l5nas-parchan", {NULL}, 9747, "tcp"}, +{"l5nas-parchan", {NULL}, 9747, "udp"}, +{"board-voip", {NULL}, 9750, "tcp"}, +{"board-voip", {NULL}, 9750, "udp"}, +{"rasadv", {NULL}, 9753, "tcp"}, +{"rasadv", {NULL}, 9753, "udp"}, +{"tungsten-http", {NULL}, 9762, "tcp"}, +{"tungsten-http", {NULL}, 9762, "udp"}, +{"davsrc", {NULL}, 9800, "tcp"}, +{"davsrc", {NULL}, 9800, "udp"}, +{"sstp-2", {NULL}, 9801, "tcp"}, +{"sstp-2", {NULL}, 9801, "udp"}, +{"davsrcs", {NULL}, 9802, "tcp"}, +{"davsrcs", {NULL}, 9802, "udp"}, +{"sapv1", {NULL}, 9875, "tcp"}, +{"sapv1", {NULL}, 9875, "udp"}, +{"sd", {NULL}, 9876, "tcp"}, +{"sd", {NULL}, 9876, "udp"}, +{"cyborg-systems", {NULL}, 9888, "tcp"}, +{"cyborg-systems", {NULL}, 9888, "udp"}, +{"gt-proxy", {NULL}, 9889, "tcp"}, +{"gt-proxy", {NULL}, 9889, "udp"}, +{"monkeycom", {NULL}, 9898, "tcp"}, +{"monkeycom", {NULL}, 9898, "udp"}, +{"sctp-tunneling", {NULL}, 9899, "tcp"}, +{"sctp-tunneling", {NULL}, 9899, "udp"}, +{"iua", {NULL}, 9900, "tcp"}, +{"iua", {NULL}, 9900, "udp"}, +{"iua", {NULL}, 9900, "sctp"}, +{"enrp", {NULL}, 9901, "udp"}, +{"enrp-sctp", {NULL}, 9901, "sctp"}, +{"enrp-sctp-tls", {NULL}, 9902, "sctp"}, +{"domaintime", {NULL}, 9909, "tcp"}, +{"domaintime", {NULL}, 9909, "udp"}, +{"sype-transport", {NULL}, 9911, "tcp"}, +{"sype-transport", {NULL}, 9911, "udp"}, +{"apc-9950", {NULL}, 9950, "tcp"}, +{"apc-9950", {NULL}, 9950, "udp"}, +{"apc-9951", {NULL}, 9951, "tcp"}, +{"apc-9951", {NULL}, 9951, "udp"}, +{"apc-9952", {NULL}, 9952, "tcp"}, +{"apc-9952", {NULL}, 9952, "udp"}, +{"acis", {NULL}, 9953, "tcp"}, +{"acis", {NULL}, 9953, "udp"}, +{"odnsp", {NULL}, 9966, "tcp"}, +{"odnsp", {NULL}, 9966, "udp"}, +{"dsm-scm-target", {NULL}, 9987, "tcp"}, +{"dsm-scm-target", {NULL}, 9987, "udp"}, +{"nsesrvr", {NULL}, 9988, "tcp"}, +{"osm-appsrvr", {NULL}, 9990, "tcp"}, +{"osm-appsrvr", {NULL}, 9990, "udp"}, +{"osm-oev", {NULL}, 9991, "tcp"}, +{"osm-oev", {NULL}, 9991, "udp"}, +{"palace-1", {NULL}, 9992, "tcp"}, +{"palace-1", {NULL}, 9992, "udp"}, +{"palace-2", {NULL}, 9993, "tcp"}, +{"palace-2", {NULL}, 9993, "udp"}, +{"palace-3", {NULL}, 9994, "tcp"}, +{"palace-3", {NULL}, 9994, "udp"}, +{"palace-4", {NULL}, 9995, "tcp"}, +{"palace-4", {NULL}, 9995, "udp"}, +{"palace-5", {NULL}, 9996, "tcp"}, +{"palace-5", {NULL}, 9996, "udp"}, +{"palace-6", {NULL}, 9997, "tcp"}, +{"palace-6", {NULL}, 9997, "udp"}, +{"distinct32", {NULL}, 9998, "tcp"}, +{"distinct32", {NULL}, 9998, "udp"}, +{"distinct", {NULL}, 9999, "tcp"}, +{"distinct", {NULL}, 9999, "udp"}, +{"ndmp", {NULL}, 10000, "tcp"}, +{"ndmp", {NULL}, 10000, "udp"}, +{"scp-config", {NULL}, 10001, "tcp"}, +{"scp-config", {NULL}, 10001, "udp"}, +{"documentum", {NULL}, 10002, "tcp"}, +{"documentum", {NULL}, 10002, "udp"}, +{"documentum_s", {NULL}, 10003, "tcp"}, +{"documentum_s", {NULL}, 10003, "udp"}, +{"emcrmirccd", {NULL}, 10004, "tcp"}, +{"emcrmird", {NULL}, 10005, "tcp"}, +{"mvs-capacity", {NULL}, 10007, "tcp"}, +{"mvs-capacity", {NULL}, 10007, "udp"}, +{"octopus", {NULL}, 10008, "tcp"}, +{"octopus", {NULL}, 10008, "udp"}, +{"swdtp-sv", {NULL}, 10009, "tcp"}, +{"swdtp-sv", {NULL}, 10009, "udp"}, +{"rxapi", {NULL}, 10010, "tcp"}, +{"zabbix-agent", {NULL}, 10050, "tcp"}, +{"zabbix-agent", {NULL}, 10050, "udp"}, +{"zabbix-trapper", {NULL}, 10051, "tcp"}, +{"zabbix-trapper", {NULL}, 10051, "udp"}, +{"qptlmd", {NULL}, 10055, "tcp"}, +{"amanda", {NULL}, 10080, "tcp"}, +{"amanda", {NULL}, 10080, "udp"}, +{"famdc", {NULL}, 10081, "tcp"}, +{"famdc", {NULL}, 10081, "udp"}, +{"itap-ddtp", {NULL}, 10100, "tcp"}, +{"itap-ddtp", {NULL}, 10100, "udp"}, +{"ezmeeting-2", {NULL}, 10101, "tcp"}, +{"ezmeeting-2", {NULL}, 10101, "udp"}, +{"ezproxy-2", {NULL}, 10102, "tcp"}, +{"ezproxy-2", {NULL}, 10102, "udp"}, +{"ezrelay", {NULL}, 10103, "tcp"}, +{"ezrelay", {NULL}, 10103, "udp"}, +{"swdtp", {NULL}, 10104, "tcp"}, +{"swdtp", {NULL}, 10104, "udp"}, +{"bctp-server", {NULL}, 10107, "tcp"}, +{"bctp-server", {NULL}, 10107, "udp"}, +{"nmea-0183", {NULL}, 10110, "tcp"}, +{"nmea-0183", {NULL}, 10110, "udp"}, +{"netiq-endpoint", {NULL}, 10113, "tcp"}, +{"netiq-endpoint", {NULL}, 10113, "udp"}, +{"netiq-qcheck", {NULL}, 10114, "tcp"}, +{"netiq-qcheck", {NULL}, 10114, "udp"}, +{"netiq-endpt", {NULL}, 10115, "tcp"}, +{"netiq-endpt", {NULL}, 10115, "udp"}, +{"netiq-voipa", {NULL}, 10116, "tcp"}, +{"netiq-voipa", {NULL}, 10116, "udp"}, +{"iqrm", {NULL}, 10117, "tcp"}, +{"iqrm", {NULL}, 10117, "udp"}, +{"bmc-perf-sd", {NULL}, 10128, "tcp"}, +{"bmc-perf-sd", {NULL}, 10128, "udp"}, +{"bmc-gms", {NULL}, 10129, "tcp"}, +{"qb-db-server", {NULL}, 10160, "tcp"}, +{"qb-db-server", {NULL}, 10160, "udp"}, +{"snmptls", {NULL}, 10161, "tcp"}, +{"snmpdtls", {NULL}, 10161, "udp"}, +{"snmptls-trap", {NULL}, 10162, "tcp"}, +{"snmpdtls-trap", {NULL}, 10162, "udp"}, +{"trisoap", {NULL}, 10200, "tcp"}, +{"trisoap", {NULL}, 10200, "udp"}, +{"rsms", {NULL}, 10201, "tcp"}, +{"rscs", {NULL}, 10201, "udp"}, +{"apollo-relay", {NULL}, 10252, "tcp"}, +{"apollo-relay", {NULL}, 10252, "udp"}, +{"axis-wimp-port", {NULL}, 10260, "tcp"}, +{"axis-wimp-port", {NULL}, 10260, "udp"}, +{"blocks", {NULL}, 10288, "tcp"}, +{"blocks", {NULL}, 10288, "udp"}, +{"cosir", {NULL}, 10321, "tcp"}, +{"hip-nat-t", {NULL}, 10500, "udp"}, +{"MOS-lower", {NULL}, 10540, "tcp"}, +{"MOS-lower", {NULL}, 10540, "udp"}, +{"MOS-upper", {NULL}, 10541, "tcp"}, +{"MOS-upper", {NULL}, 10541, "udp"}, +{"MOS-aux", {NULL}, 10542, "tcp"}, +{"MOS-aux", {NULL}, 10542, "udp"}, +{"MOS-soap", {NULL}, 10543, "tcp"}, +{"MOS-soap", {NULL}, 10543, "udp"}, +{"MOS-soap-opt", {NULL}, 10544, "tcp"}, +{"MOS-soap-opt", {NULL}, 10544, "udp"}, +{"gap", {NULL}, 10800, "tcp"}, +{"gap", {NULL}, 10800, "udp"}, +{"lpdg", {NULL}, 10805, "tcp"}, +{"lpdg", {NULL}, 10805, "udp"}, +{"nbd", {NULL}, 10809, "tcp"}, +{"nmc-disc", {NULL}, 10810, "udp"}, +{"helix", {NULL}, 10860, "tcp"}, +{"helix", {NULL}, 10860, "udp"}, +{"rmiaux", {NULL}, 10990, "tcp"}, +{"rmiaux", {NULL}, 10990, "udp"}, +{"irisa", {NULL}, 11000, "tcp"}, +{"irisa", {NULL}, 11000, "udp"}, +{"metasys", {NULL}, 11001, "tcp"}, +{"metasys", {NULL}, 11001, "udp"}, +{"netapp-icmgmt", {NULL}, 11104, "tcp"}, +{"netapp-icdata", {NULL}, 11105, "tcp"}, +{"sgi-lk", {NULL}, 11106, "tcp"}, +{"sgi-lk", {NULL}, 11106, "udp"}, +{"vce", {NULL}, 11111, "tcp"}, +{"vce", {NULL}, 11111, "udp"}, +{"dicom", {NULL}, 11112, "tcp"}, +{"dicom", {NULL}, 11112, "udp"}, +{"suncacao-snmp", {NULL}, 11161, "tcp"}, +{"suncacao-snmp", {NULL}, 11161, "udp"}, +{"suncacao-jmxmp", {NULL}, 11162, "tcp"}, +{"suncacao-jmxmp", {NULL}, 11162, "udp"}, +{"suncacao-rmi", {NULL}, 11163, "tcp"}, +{"suncacao-rmi", {NULL}, 11163, "udp"}, +{"suncacao-csa", {NULL}, 11164, "tcp"}, +{"suncacao-csa", {NULL}, 11164, "udp"}, +{"suncacao-websvc", {NULL}, 11165, "tcp"}, +{"suncacao-websvc", {NULL}, 11165, "udp"}, +{"snss", {NULL}, 11171, "udp"}, +{"oemcacao-jmxmp", {NULL}, 11172, "tcp"}, +{"oemcacao-rmi", {NULL}, 11174, "tcp"}, +{"oemcacao-websvc", {NULL}, 11175, "tcp"}, +{"smsqp", {NULL}, 11201, "tcp"}, +{"smsqp", {NULL}, 11201, "udp"}, +{"wifree", {NULL}, 11208, "tcp"}, +{"wifree", {NULL}, 11208, "udp"}, +{"memcache", {NULL}, 11211, "tcp"}, +{"memcache", {NULL}, 11211, "udp"}, +{"imip", {NULL}, 11319, "tcp"}, +{"imip", {NULL}, 11319, "udp"}, +{"imip-channels", {NULL}, 11320, "tcp"}, +{"imip-channels", {NULL}, 11320, "udp"}, +{"arena-server", {NULL}, 11321, "tcp"}, +{"arena-server", {NULL}, 11321, "udp"}, +{"atm-uhas", {NULL}, 11367, "tcp"}, +{"atm-uhas", {NULL}, 11367, "udp"}, +{"hkp", {NULL}, 11371, "tcp"}, +{"hkp", {NULL}, 11371, "udp"}, +{"asgcypresstcps", {NULL}, 11489, "tcp"}, +{"tempest-port", {NULL}, 11600, "tcp"}, +{"tempest-port", {NULL}, 11600, "udp"}, +{"h323callsigalt", {NULL}, 11720, "tcp"}, +{"h323callsigalt", {NULL}, 11720, "udp"}, +{"intrepid-ssl", {NULL}, 11751, "tcp"}, +{"intrepid-ssl", {NULL}, 11751, "udp"}, +{"xoraya", {NULL}, 11876, "tcp"}, +{"xoraya", {NULL}, 11876, "udp"}, +{"x2e-disc", {NULL}, 11877, "udp"}, +{"sysinfo-sp", {NULL}, 11967, "tcp"}, +{"sysinfo-sp", {NULL}, 11967, "udp"}, +{"wmereceiving", {NULL}, 11997, "sctp"}, +{"wmedistribution", {NULL}, 11998, "sctp"}, +{"wmereporting", {NULL}, 11999, "sctp"}, +{"entextxid", {NULL}, 12000, "tcp"}, +{"entextxid", {NULL}, 12000, "udp"}, +{"entextnetwk", {NULL}, 12001, "tcp"}, +{"entextnetwk", {NULL}, 12001, "udp"}, +{"entexthigh", {NULL}, 12002, "tcp"}, +{"entexthigh", {NULL}, 12002, "udp"}, +{"entextmed", {NULL}, 12003, "tcp"}, +{"entextmed", {NULL}, 12003, "udp"}, +{"entextlow", {NULL}, 12004, "tcp"}, +{"entextlow", {NULL}, 12004, "udp"}, +{"dbisamserver1", {NULL}, 12005, "tcp"}, +{"dbisamserver1", {NULL}, 12005, "udp"}, +{"dbisamserver2", {NULL}, 12006, "tcp"}, +{"dbisamserver2", {NULL}, 12006, "udp"}, +{"accuracer", {NULL}, 12007, "tcp"}, +{"accuracer", {NULL}, 12007, "udp"}, +{"accuracer-dbms", {NULL}, 12008, "tcp"}, +{"accuracer-dbms", {NULL}, 12008, "udp"}, +{"edbsrvr", {NULL}, 12010, "tcp"}, +{"vipera", {NULL}, 12012, "tcp"}, +{"vipera", {NULL}, 12012, "udp"}, +{"vipera-ssl", {NULL}, 12013, "tcp"}, +{"vipera-ssl", {NULL}, 12013, "udp"}, +{"rets-ssl", {NULL}, 12109, "tcp"}, +{"rets-ssl", {NULL}, 12109, "udp"}, +{"nupaper-ss", {NULL}, 12121, "tcp"}, +{"nupaper-ss", {NULL}, 12121, "udp"}, +{"cawas", {NULL}, 12168, "tcp"}, +{"cawas", {NULL}, 12168, "udp"}, +{"hivep", {NULL}, 12172, "tcp"}, +{"hivep", {NULL}, 12172, "udp"}, +{"linogridengine", {NULL}, 12300, "tcp"}, +{"linogridengine", {NULL}, 12300, "udp"}, +{"warehouse-sss", {NULL}, 12321, "tcp"}, +{"warehouse-sss", {NULL}, 12321, "udp"}, +{"warehouse", {NULL}, 12322, "tcp"}, +{"warehouse", {NULL}, 12322, "udp"}, +{"italk", {NULL}, 12345, "tcp"}, +{"italk", {NULL}, 12345, "udp"}, +{"tsaf", {NULL}, 12753, "tcp"}, +{"tsaf", {NULL}, 12753, "udp"}, +{"i-zipqd", {NULL}, 13160, "tcp"}, +{"i-zipqd", {NULL}, 13160, "udp"}, +{"bcslogc", {NULL}, 13216, "tcp"}, +{"bcslogc", {NULL}, 13216, "udp"}, +{"rs-pias", {NULL}, 13217, "tcp"}, +{"rs-pias", {NULL}, 13217, "udp"}, +{"emc-vcas-tcp", {NULL}, 13218, "tcp"}, +{"emc-vcas-udp", {NULL}, 13218, "udp"}, +{"powwow-client", {NULL}, 13223, "tcp"}, +{"powwow-client", {NULL}, 13223, "udp"}, +{"powwow-server", {NULL}, 13224, "tcp"}, +{"powwow-server", {NULL}, 13224, "udp"}, +{"doip-data", {NULL}, 13400, "tcp"}, +{"doip-disc", {NULL}, 13400, "udp"}, +{"bprd", {NULL}, 13720, "tcp"}, +{"bprd", {NULL}, 13720, "udp"}, +{"bpdbm", {NULL}, 13721, "tcp"}, +{"bpdbm", {NULL}, 13721, "udp"}, +{"bpjava-msvc", {NULL}, 13722, "tcp"}, +{"bpjava-msvc", {NULL}, 13722, "udp"}, +{"vnetd", {NULL}, 13724, "tcp"}, +{"vnetd", {NULL}, 13724, "udp"}, +{"bpcd", {NULL}, 13782, "tcp"}, +{"bpcd", {NULL}, 13782, "udp"}, +{"vopied", {NULL}, 13783, "tcp"}, +{"vopied", {NULL}, 13783, "udp"}, +{"nbdb", {NULL}, 13785, "tcp"}, +{"nbdb", {NULL}, 13785, "udp"}, +{"nomdb", {NULL}, 13786, "tcp"}, +{"nomdb", {NULL}, 13786, "udp"}, +{"dsmcc-config", {NULL}, 13818, "tcp"}, +{"dsmcc-config", {NULL}, 13818, "udp"}, +{"dsmcc-session", {NULL}, 13819, "tcp"}, +{"dsmcc-session", {NULL}, 13819, "udp"}, +{"dsmcc-passthru", {NULL}, 13820, "tcp"}, +{"dsmcc-passthru", {NULL}, 13820, "udp"}, +{"dsmcc-download", {NULL}, 13821, "tcp"}, +{"dsmcc-download", {NULL}, 13821, "udp"}, +{"dsmcc-ccp", {NULL}, 13822, "tcp"}, +{"dsmcc-ccp", {NULL}, 13822, "udp"}, +{"bmdss", {NULL}, 13823, "tcp"}, +{"dta-systems", {NULL}, 13929, "tcp"}, +{"dta-systems", {NULL}, 13929, "udp"}, +{"medevolve", {NULL}, 13930, "tcp"}, +{"scotty-ft", {NULL}, 14000, "tcp"}, +{"scotty-ft", {NULL}, 14000, "udp"}, +{"sua", {NULL}, 14001, "tcp"}, +{"sua", {NULL}, 14001, "udp"}, +{"sua", {NULL}, 14001, "sctp"}, +{"sage-best-com1", {NULL}, 14033, "tcp"}, +{"sage-best-com1", {NULL}, 14033, "udp"}, +{"sage-best-com2", {NULL}, 14034, "tcp"}, +{"sage-best-com2", {NULL}, 14034, "udp"}, +{"vcs-app", {NULL}, 14141, "tcp"}, +{"vcs-app", {NULL}, 14141, "udp"}, +{"icpp", {NULL}, 14142, "tcp"}, +{"icpp", {NULL}, 14142, "udp"}, +{"gcm-app", {NULL}, 14145, "tcp"}, +{"gcm-app", {NULL}, 14145, "udp"}, +{"vrts-tdd", {NULL}, 14149, "tcp"}, +{"vrts-tdd", {NULL}, 14149, "udp"}, +{"vcscmd", {NULL}, 14150, "tcp"}, +{"vad", {NULL}, 14154, "tcp"}, +{"vad", {NULL}, 14154, "udp"}, +{"cps", {NULL}, 14250, "tcp"}, +{"cps", {NULL}, 14250, "udp"}, +{"ca-web-update", {NULL}, 14414, "tcp"}, +{"ca-web-update", {NULL}, 14414, "udp"}, +{"hde-lcesrvr-1", {NULL}, 14936, "tcp"}, +{"hde-lcesrvr-1", {NULL}, 14936, "udp"}, +{"hde-lcesrvr-2", {NULL}, 14937, "tcp"}, +{"hde-lcesrvr-2", {NULL}, 14937, "udp"}, +{"hydap", {NULL}, 15000, "tcp"}, +{"hydap", {NULL}, 15000, "udp"}, +{"xpilot", {NULL}, 15345, "tcp"}, +{"xpilot", {NULL}, 15345, "udp"}, +{"3link", {NULL}, 15363, "tcp"}, +{"3link", {NULL}, 15363, "udp"}, +{"cisco-snat", {NULL}, 15555, "tcp"}, +{"cisco-snat", {NULL}, 15555, "udp"}, +{"bex-xr", {NULL}, 15660, "tcp"}, +{"bex-xr", {NULL}, 15660, "udp"}, +{"ptp", {NULL}, 15740, "tcp"}, +{"ptp", {NULL}, 15740, "udp"}, +{"2ping", {NULL}, 15998, "udp"}, +{"programmar", {NULL}, 15999, "tcp"}, +{"fmsas", {NULL}, 16000, "tcp"}, +{"fmsascon", {NULL}, 16001, "tcp"}, +{"gsms", {NULL}, 16002, "tcp"}, +{"alfin", {NULL}, 16003, "udp"}, +{"jwpc", {NULL}, 16020, "tcp"}, +{"jwpc-bin", {NULL}, 16021, "tcp"}, +{"sun-sea-port", {NULL}, 16161, "tcp"}, +{"sun-sea-port", {NULL}, 16161, "udp"}, +{"solaris-audit", {NULL}, 16162, "tcp"}, +{"etb4j", {NULL}, 16309, "tcp"}, +{"etb4j", {NULL}, 16309, "udp"}, +{"pduncs", {NULL}, 16310, "tcp"}, +{"pduncs", {NULL}, 16310, "udp"}, +{"pdefmns", {NULL}, 16311, "tcp"}, +{"pdefmns", {NULL}, 16311, "udp"}, +{"netserialext1", {NULL}, 16360, "tcp"}, +{"netserialext1", {NULL}, 16360, "udp"}, +{"netserialext2", {NULL}, 16361, "tcp"}, +{"netserialext2", {NULL}, 16361, "udp"}, +{"netserialext3", {NULL}, 16367, "tcp"}, +{"netserialext3", {NULL}, 16367, "udp"}, +{"netserialext4", {NULL}, 16368, "tcp"}, +{"netserialext4", {NULL}, 16368, "udp"}, +{"connected", {NULL}, 16384, "tcp"}, +{"connected", {NULL}, 16384, "udp"}, +{"xoms", {NULL}, 16619, "tcp"}, +{"newbay-snc-mc", {NULL}, 16900, "tcp"}, +{"newbay-snc-mc", {NULL}, 16900, "udp"}, +{"sgcip", {NULL}, 16950, "tcp"}, +{"sgcip", {NULL}, 16950, "udp"}, +{"intel-rci-mp", {NULL}, 16991, "tcp"}, +{"intel-rci-mp", {NULL}, 16991, "udp"}, +{"amt-soap-http", {NULL}, 16992, "tcp"}, +{"amt-soap-http", {NULL}, 16992, "udp"}, +{"amt-soap-https", {NULL}, 16993, "tcp"}, +{"amt-soap-https", {NULL}, 16993, "udp"}, +{"amt-redir-tcp", {NULL}, 16994, "tcp"}, +{"amt-redir-tcp", {NULL}, 16994, "udp"}, +{"amt-redir-tls", {NULL}, 16995, "tcp"}, +{"amt-redir-tls", {NULL}, 16995, "udp"}, +{"isode-dua", {NULL}, 17007, "tcp"}, +{"isode-dua", {NULL}, 17007, "udp"}, +{"soundsvirtual", {NULL}, 17185, "tcp"}, +{"soundsvirtual", {NULL}, 17185, "udp"}, +{"chipper", {NULL}, 17219, "tcp"}, +{"chipper", {NULL}, 17219, "udp"}, +{"integrius-stp", {NULL}, 17234, "tcp"}, +{"integrius-stp", {NULL}, 17234, "udp"}, +{"ssh-mgmt", {NULL}, 17235, "tcp"}, +{"ssh-mgmt", {NULL}, 17235, "udp"}, +{"db-lsp", {NULL}, 17500, "tcp"}, +{"db-lsp-disc", {NULL}, 17500, "udp"}, +{"ea", {NULL}, 17729, "tcp"}, +{"ea", {NULL}, 17729, "udp"}, +{"zep", {NULL}, 17754, "tcp"}, +{"zep", {NULL}, 17754, "udp"}, +{"zigbee-ip", {NULL}, 17755, "tcp"}, +{"zigbee-ip", {NULL}, 17755, "udp"}, +{"zigbee-ips", {NULL}, 17756, "tcp"}, +{"zigbee-ips", {NULL}, 17756, "udp"}, +{"sw-orion", {NULL}, 17777, "tcp"}, +{"biimenu", {NULL}, 18000, "tcp"}, +{"biimenu", {NULL}, 18000, "udp"}, +{"radpdf", {NULL}, 18104, "tcp"}, +{"racf", {NULL}, 18136, "tcp"}, +{"opsec-cvp", {NULL}, 18181, "tcp"}, +{"opsec-cvp", {NULL}, 18181, "udp"}, +{"opsec-ufp", {NULL}, 18182, "tcp"}, +{"opsec-ufp", {NULL}, 18182, "udp"}, +{"opsec-sam", {NULL}, 18183, "tcp"}, +{"opsec-sam", {NULL}, 18183, "udp"}, +{"opsec-lea", {NULL}, 18184, "tcp"}, +{"opsec-lea", {NULL}, 18184, "udp"}, +{"opsec-omi", {NULL}, 18185, "tcp"}, +{"opsec-omi", {NULL}, 18185, "udp"}, +{"ohsc", {NULL}, 18186, "tcp"}, +{"ohsc", {NULL}, 18186, "udp"}, +{"opsec-ela", {NULL}, 18187, "tcp"}, +{"opsec-ela", {NULL}, 18187, "udp"}, +{"checkpoint-rtm", {NULL}, 18241, "tcp"}, +{"checkpoint-rtm", {NULL}, 18241, "udp"}, +{"gv-pf", {NULL}, 18262, "tcp"}, +{"gv-pf", {NULL}, 18262, "udp"}, +{"ac-cluster", {NULL}, 18463, "tcp"}, +{"ac-cluster", {NULL}, 18463, "udp"}, +{"rds-ib", {NULL}, 18634, "tcp"}, +{"rds-ib", {NULL}, 18634, "udp"}, +{"rds-ip", {NULL}, 18635, "tcp"}, +{"rds-ip", {NULL}, 18635, "udp"}, +{"ique", {NULL}, 18769, "tcp"}, +{"ique", {NULL}, 18769, "udp"}, +{"infotos", {NULL}, 18881, "tcp"}, +{"infotos", {NULL}, 18881, "udp"}, +{"apc-necmp", {NULL}, 18888, "tcp"}, +{"apc-necmp", {NULL}, 18888, "udp"}, +{"igrid", {NULL}, 19000, "tcp"}, +{"igrid", {NULL}, 19000, "udp"}, +{"j-link", {NULL}, 19020, "tcp"}, +{"opsec-uaa", {NULL}, 19191, "tcp"}, +{"opsec-uaa", {NULL}, 19191, "udp"}, +{"ua-secureagent", {NULL}, 19194, "tcp"}, +{"ua-secureagent", {NULL}, 19194, "udp"}, +{"keysrvr", {NULL}, 19283, "tcp"}, +{"keysrvr", {NULL}, 19283, "udp"}, +{"keyshadow", {NULL}, 19315, "tcp"}, +{"keyshadow", {NULL}, 19315, "udp"}, +{"mtrgtrans", {NULL}, 19398, "tcp"}, +{"mtrgtrans", {NULL}, 19398, "udp"}, +{"hp-sco", {NULL}, 19410, "tcp"}, +{"hp-sco", {NULL}, 19410, "udp"}, +{"hp-sca", {NULL}, 19411, "tcp"}, +{"hp-sca", {NULL}, 19411, "udp"}, +{"hp-sessmon", {NULL}, 19412, "tcp"}, +{"hp-sessmon", {NULL}, 19412, "udp"}, +{"fxuptp", {NULL}, 19539, "tcp"}, +{"fxuptp", {NULL}, 19539, "udp"}, +{"sxuptp", {NULL}, 19540, "tcp"}, +{"sxuptp", {NULL}, 19540, "udp"}, +{"jcp", {NULL}, 19541, "tcp"}, +{"jcp", {NULL}, 19541, "udp"}, +{"iec-104-sec", {NULL}, 19998, "tcp"}, +{"dnp-sec", {NULL}, 19999, "tcp"}, +{"dnp-sec", {NULL}, 19999, "udp"}, +{"dnp", {NULL}, 20000, "tcp"}, +{"dnp", {NULL}, 20000, "udp"}, +{"microsan", {NULL}, 20001, "tcp"}, +{"microsan", {NULL}, 20001, "udp"}, +{"commtact-http", {NULL}, 20002, "tcp"}, +{"commtact-http", {NULL}, 20002, "udp"}, +{"commtact-https", {NULL}, 20003, "tcp"}, +{"commtact-https", {NULL}, 20003, "udp"}, +{"openwebnet", {NULL}, 20005, "tcp"}, +{"openwebnet", {NULL}, 20005, "udp"}, +{"ss-idi-disc", {NULL}, 20012, "udp"}, +{"ss-idi", {NULL}, 20013, "tcp"}, +{"opendeploy", {NULL}, 20014, "tcp"}, +{"opendeploy", {NULL}, 20014, "udp"}, +{"nburn_id", {NULL}, 20034, "tcp"}, +{"nburn_id", {NULL}, 20034, "udp"}, +{"tmophl7mts", {NULL}, 20046, "tcp"}, +{"tmophl7mts", {NULL}, 20046, "udp"}, +{"mountd", {NULL}, 20048, "tcp"}, +{"mountd", {NULL}, 20048, "udp"}, +{"nfsrdma", {NULL}, 20049, "tcp"}, +{"nfsrdma", {NULL}, 20049, "udp"}, +{"nfsrdma", {NULL}, 20049, "sctp"}, +{"tolfab", {NULL}, 20167, "tcp"}, +{"tolfab", {NULL}, 20167, "udp"}, +{"ipdtp-port", {NULL}, 20202, "tcp"}, +{"ipdtp-port", {NULL}, 20202, "udp"}, +{"ipulse-ics", {NULL}, 20222, "tcp"}, +{"ipulse-ics", {NULL}, 20222, "udp"}, +{"emwavemsg", {NULL}, 20480, "tcp"}, +{"emwavemsg", {NULL}, 20480, "udp"}, +{"track", {NULL}, 20670, "tcp"}, +{"track", {NULL}, 20670, "udp"}, +{"athand-mmp", {NULL}, 20999, "tcp"}, +{"athand-mmp", {NULL}, 20999, "udp"}, +{"irtrans", {NULL}, 21000, "tcp"}, +{"irtrans", {NULL}, 21000, "udp"}, +{"dfserver", {NULL}, 21554, "tcp"}, +{"dfserver", {NULL}, 21554, "udp"}, +{"vofr-gateway", {NULL}, 21590, "tcp"}, +{"vofr-gateway", {NULL}, 21590, "udp"}, +{"tvpm", {NULL}, 21800, "tcp"}, +{"tvpm", {NULL}, 21800, "udp"}, +{"webphone", {NULL}, 21845, "tcp"}, +{"webphone", {NULL}, 21845, "udp"}, +{"netspeak-is", {NULL}, 21846, "tcp"}, +{"netspeak-is", {NULL}, 21846, "udp"}, +{"netspeak-cs", {NULL}, 21847, "tcp"}, +{"netspeak-cs", {NULL}, 21847, "udp"}, +{"netspeak-acd", {NULL}, 21848, "tcp"}, +{"netspeak-acd", {NULL}, 21848, "udp"}, +{"netspeak-cps", {NULL}, 21849, "tcp"}, +{"netspeak-cps", {NULL}, 21849, "udp"}, +{"snapenetio", {NULL}, 22000, "tcp"}, +{"snapenetio", {NULL}, 22000, "udp"}, +{"optocontrol", {NULL}, 22001, "tcp"}, +{"optocontrol", {NULL}, 22001, "udp"}, +{"optohost002", {NULL}, 22002, "tcp"}, +{"optohost002", {NULL}, 22002, "udp"}, +{"optohost003", {NULL}, 22003, "tcp"}, +{"optohost003", {NULL}, 22003, "udp"}, +{"optohost004", {NULL}, 22004, "tcp"}, +{"optohost004", {NULL}, 22004, "udp"}, +{"optohost004", {NULL}, 22005, "tcp"}, +{"optohost004", {NULL}, 22005, "udp"}, +{"dcap", {NULL}, 22125, "tcp"}, +{"gsidcap", {NULL}, 22128, "tcp"}, +{"wnn6", {NULL}, 22273, "tcp"}, +{"wnn6", {NULL}, 22273, "udp"}, +{"cis", {NULL}, 22305, "tcp"}, +{"cis", {NULL}, 22305, "udp"}, +{"cis-secure", {NULL}, 22343, "tcp"}, +{"cis-secure", {NULL}, 22343, "udp"}, +{"WibuKey", {NULL}, 22347, "tcp"}, +{"WibuKey", {NULL}, 22347, "udp"}, +{"CodeMeter", {NULL}, 22350, "tcp"}, +{"CodeMeter", {NULL}, 22350, "udp"}, +{"vocaltec-wconf", {NULL}, 22555, "tcp"}, +{"vocaltec-phone", {NULL}, 22555, "udp"}, +{"talikaserver", {NULL}, 22763, "tcp"}, +{"talikaserver", {NULL}, 22763, "udp"}, +{"aws-brf", {NULL}, 22800, "tcp"}, +{"aws-brf", {NULL}, 22800, "udp"}, +{"brf-gw", {NULL}, 22951, "tcp"}, +{"brf-gw", {NULL}, 22951, "udp"}, +{"inovaport1", {NULL}, 23000, "tcp"}, +{"inovaport1", {NULL}, 23000, "udp"}, +{"inovaport2", {NULL}, 23001, "tcp"}, +{"inovaport2", {NULL}, 23001, "udp"}, +{"inovaport3", {NULL}, 23002, "tcp"}, +{"inovaport3", {NULL}, 23002, "udp"}, +{"inovaport4", {NULL}, 23003, "tcp"}, +{"inovaport4", {NULL}, 23003, "udp"}, +{"inovaport5", {NULL}, 23004, "tcp"}, +{"inovaport5", {NULL}, 23004, "udp"}, +{"inovaport6", {NULL}, 23005, "tcp"}, +{"inovaport6", {NULL}, 23005, "udp"}, +{"s102", {NULL}, 23272, "udp"}, +{"elxmgmt", {NULL}, 23333, "tcp"}, +{"elxmgmt", {NULL}, 23333, "udp"}, +{"novar-dbase", {NULL}, 23400, "tcp"}, +{"novar-dbase", {NULL}, 23400, "udp"}, +{"novar-alarm", {NULL}, 23401, "tcp"}, +{"novar-alarm", {NULL}, 23401, "udp"}, +{"novar-global", {NULL}, 23402, "tcp"}, +{"novar-global", {NULL}, 23402, "udp"}, +{"aequus", {NULL}, 23456, "tcp"}, +{"aequus-alt", {NULL}, 23457, "tcp"}, +{"med-ltp", {NULL}, 24000, "tcp"}, +{"med-ltp", {NULL}, 24000, "udp"}, +{"med-fsp-rx", {NULL}, 24001, "tcp"}, +{"med-fsp-rx", {NULL}, 24001, "udp"}, +{"med-fsp-tx", {NULL}, 24002, "tcp"}, +{"med-fsp-tx", {NULL}, 24002, "udp"}, +{"med-supp", {NULL}, 24003, "tcp"}, +{"med-supp", {NULL}, 24003, "udp"}, +{"med-ovw", {NULL}, 24004, "tcp"}, +{"med-ovw", {NULL}, 24004, "udp"}, +{"med-ci", {NULL}, 24005, "tcp"}, +{"med-ci", {NULL}, 24005, "udp"}, +{"med-net-svc", {NULL}, 24006, "tcp"}, +{"med-net-svc", {NULL}, 24006, "udp"}, +{"filesphere", {NULL}, 24242, "tcp"}, +{"filesphere", {NULL}, 24242, "udp"}, +{"vista-4gl", {NULL}, 24249, "tcp"}, +{"vista-4gl", {NULL}, 24249, "udp"}, +{"ild", {NULL}, 24321, "tcp"}, +{"ild", {NULL}, 24321, "udp"}, +{"intel_rci", {NULL}, 24386, "tcp"}, +{"intel_rci", {NULL}, 24386, "udp"}, +{"tonidods", {NULL}, 24465, "tcp"}, +{"tonidods", {NULL}, 24465, "udp"}, +{"binkp", {NULL}, 24554, "tcp"}, +{"binkp", {NULL}, 24554, "udp"}, +{"canditv", {NULL}, 24676, "tcp"}, +{"canditv", {NULL}, 24676, "udp"}, +{"flashfiler", {NULL}, 24677, "tcp"}, +{"flashfiler", {NULL}, 24677, "udp"}, +{"proactivate", {NULL}, 24678, "tcp"}, +{"proactivate", {NULL}, 24678, "udp"}, +{"tcc-http", {NULL}, 24680, "tcp"}, +{"tcc-http", {NULL}, 24680, "udp"}, +{"cslg", {NULL}, 24754, "tcp"}, +{"find", {NULL}, 24922, "tcp"}, +{"find", {NULL}, 24922, "udp"}, +{"icl-twobase1", {NULL}, 25000, "tcp"}, +{"icl-twobase1", {NULL}, 25000, "udp"}, +{"icl-twobase2", {NULL}, 25001, "tcp"}, +{"icl-twobase2", {NULL}, 25001, "udp"}, +{"icl-twobase3", {NULL}, 25002, "tcp"}, +{"icl-twobase3", {NULL}, 25002, "udp"}, +{"icl-twobase4", {NULL}, 25003, "tcp"}, +{"icl-twobase4", {NULL}, 25003, "udp"}, +{"icl-twobase5", {NULL}, 25004, "tcp"}, +{"icl-twobase5", {NULL}, 25004, "udp"}, +{"icl-twobase6", {NULL}, 25005, "tcp"}, +{"icl-twobase6", {NULL}, 25005, "udp"}, +{"icl-twobase7", {NULL}, 25006, "tcp"}, +{"icl-twobase7", {NULL}, 25006, "udp"}, +{"icl-twobase8", {NULL}, 25007, "tcp"}, +{"icl-twobase8", {NULL}, 25007, "udp"}, +{"icl-twobase9", {NULL}, 25008, "tcp"}, +{"icl-twobase9", {NULL}, 25008, "udp"}, +{"icl-twobase10", {NULL}, 25009, "tcp"}, +{"icl-twobase10", {NULL}, 25009, "udp"}, +{"rna", {NULL}, 25471, "sctp"}, +{"sauterdongle", {NULL}, 25576, "tcp"}, +{"vocaltec-hos", {NULL}, 25793, "tcp"}, +{"vocaltec-hos", {NULL}, 25793, "udp"}, +{"tasp-net", {NULL}, 25900, "tcp"}, +{"tasp-net", {NULL}, 25900, "udp"}, +{"niobserver", {NULL}, 25901, "tcp"}, +{"niobserver", {NULL}, 25901, "udp"}, +{"nilinkanalyst", {NULL}, 25902, "tcp"}, +{"nilinkanalyst", {NULL}, 25902, "udp"}, +{"niprobe", {NULL}, 25903, "tcp"}, +{"niprobe", {NULL}, 25903, "udp"}, +{"quake", {NULL}, 26000, "tcp"}, +{"quake", {NULL}, 26000, "udp"}, +{"scscp", {NULL}, 26133, "tcp"}, +{"scscp", {NULL}, 26133, "udp"}, +{"wnn6-ds", {NULL}, 26208, "tcp"}, +{"wnn6-ds", {NULL}, 26208, "udp"}, +{"ezproxy", {NULL}, 26260, "tcp"}, +{"ezproxy", {NULL}, 26260, "udp"}, +{"ezmeeting", {NULL}, 26261, "tcp"}, +{"ezmeeting", {NULL}, 26261, "udp"}, +{"k3software-svr", {NULL}, 26262, "tcp"}, +{"k3software-svr", {NULL}, 26262, "udp"}, +{"k3software-cli", {NULL}, 26263, "tcp"}, +{"k3software-cli", {NULL}, 26263, "udp"}, +{"exoline-tcp", {NULL}, 26486, "tcp"}, +{"exoline-udp", {NULL}, 26486, "udp"}, +{"exoconfig", {NULL}, 26487, "tcp"}, +{"exoconfig", {NULL}, 26487, "udp"}, +{"exonet", {NULL}, 26489, "tcp"}, +{"exonet", {NULL}, 26489, "udp"}, +{"imagepump", {NULL}, 27345, "tcp"}, +{"imagepump", {NULL}, 27345, "udp"}, +{"jesmsjc", {NULL}, 27442, "tcp"}, +{"jesmsjc", {NULL}, 27442, "udp"}, +{"kopek-httphead", {NULL}, 27504, "tcp"}, +{"kopek-httphead", {NULL}, 27504, "udp"}, +{"ars-vista", {NULL}, 27782, "tcp"}, +{"ars-vista", {NULL}, 27782, "udp"}, +{"tw-auth-key", {NULL}, 27999, "tcp"}, +{"tw-auth-key", {NULL}, 27999, "udp"}, +{"nxlmd", {NULL}, 28000, "tcp"}, +{"nxlmd", {NULL}, 28000, "udp"}, +{"pqsp", {NULL}, 28001, "tcp"}, +{"siemensgsm", {NULL}, 28240, "tcp"}, +{"siemensgsm", {NULL}, 28240, "udp"}, +{"sgsap", {NULL}, 29118, "sctp"}, +{"otmp", {NULL}, 29167, "tcp"}, +{"otmp", {NULL}, 29167, "udp"}, +{"sbcap", {NULL}, 29168, "sctp"}, +{"iuhsctpassoc", {NULL}, 29169, "sctp"}, +{"pago-services1", {NULL}, 30001, "tcp"}, +{"pago-services1", {NULL}, 30001, "udp"}, +{"pago-services2", {NULL}, 30002, "tcp"}, +{"pago-services2", {NULL}, 30002, "udp"}, +{"kingdomsonline", {NULL}, 30260, "tcp"}, +{"kingdomsonline", {NULL}, 30260, "udp"}, +{"ovobs", {NULL}, 30999, "tcp"}, +{"ovobs", {NULL}, 30999, "udp"}, +{"autotrac-acp", {NULL}, 31020, "tcp"}, +{"yawn", {NULL}, 31029, "udp"}, +{"xqosd", {NULL}, 31416, "tcp"}, +{"xqosd", {NULL}, 31416, "udp"}, +{"tetrinet", {NULL}, 31457, "tcp"}, +{"tetrinet", {NULL}, 31457, "udp"}, +{"lm-mon", {NULL}, 31620, "tcp"}, +{"lm-mon", {NULL}, 31620, "udp"}, +{"dsx_monitor", {NULL}, 31685, "tcp"}, +{"gamesmith-port", {NULL}, 31765, "tcp"}, +{"gamesmith-port", {NULL}, 31765, "udp"}, +{"iceedcp_tx", {NULL}, 31948, "tcp"}, +{"iceedcp_tx", {NULL}, 31948, "udp"}, +{"iceedcp_rx", {NULL}, 31949, "tcp"}, +{"iceedcp_rx", {NULL}, 31949, "udp"}, +{"iracinghelper", {NULL}, 32034, "tcp"}, +{"iracinghelper", {NULL}, 32034, "udp"}, +{"t1distproc60", {NULL}, 32249, "tcp"}, +{"t1distproc60", {NULL}, 32249, "udp"}, +{"apm-link", {NULL}, 32483, "tcp"}, +{"apm-link", {NULL}, 32483, "udp"}, +{"sec-ntb-clnt", {NULL}, 32635, "tcp"}, +{"sec-ntb-clnt", {NULL}, 32635, "udp"}, +{"DMExpress", {NULL}, 32636, "tcp"}, +{"DMExpress", {NULL}, 32636, "udp"}, +{"filenet-powsrm", {NULL}, 32767, "tcp"}, +{"filenet-powsrm", {NULL}, 32767, "udp"}, +{"filenet-tms", {NULL}, 32768, "tcp"}, +{"filenet-tms", {NULL}, 32768, "udp"}, +{"filenet-rpc", {NULL}, 32769, "tcp"}, +{"filenet-rpc", {NULL}, 32769, "udp"}, +{"filenet-nch", {NULL}, 32770, "tcp"}, +{"filenet-nch", {NULL}, 32770, "udp"}, +{"filenet-rmi", {NULL}, 32771, "tcp"}, +{"filenet-rmi", {NULL}, 32771, "udp"}, +{"filenet-pa", {NULL}, 32772, "tcp"}, +{"filenet-pa", {NULL}, 32772, "udp"}, +{"filenet-cm", {NULL}, 32773, "tcp"}, +{"filenet-cm", {NULL}, 32773, "udp"}, +{"filenet-re", {NULL}, 32774, "tcp"}, +{"filenet-re", {NULL}, 32774, "udp"}, +{"filenet-pch", {NULL}, 32775, "tcp"}, +{"filenet-pch", {NULL}, 32775, "udp"}, +{"filenet-peior", {NULL}, 32776, "tcp"}, +{"filenet-peior", {NULL}, 32776, "udp"}, +{"filenet-obrok", {NULL}, 32777, "tcp"}, +{"filenet-obrok", {NULL}, 32777, "udp"}, +{"mlsn", {NULL}, 32801, "tcp"}, +{"mlsn", {NULL}, 32801, "udp"}, +{"retp", {NULL}, 32811, "tcp"}, +{"idmgratm", {NULL}, 32896, "tcp"}, +{"idmgratm", {NULL}, 32896, "udp"}, +{"aurora-balaena", {NULL}, 33123, "tcp"}, +{"aurora-balaena", {NULL}, 33123, "udp"}, +{"diamondport", {NULL}, 33331, "tcp"}, +{"diamondport", {NULL}, 33331, "udp"}, +{"dgi-serv", {NULL}, 33333, "tcp"}, +{"traceroute", {NULL}, 33434, "tcp"}, +{"traceroute", {NULL}, 33434, "udp"}, +{"snip-slave", {NULL}, 33656, "tcp"}, +{"snip-slave", {NULL}, 33656, "udp"}, +{"turbonote-2", {NULL}, 34249, "tcp"}, +{"turbonote-2", {NULL}, 34249, "udp"}, +{"p-net-local", {NULL}, 34378, "tcp"}, +{"p-net-local", {NULL}, 34378, "udp"}, +{"p-net-remote", {NULL}, 34379, "tcp"}, +{"p-net-remote", {NULL}, 34379, "udp"}, +{"dhanalakshmi", {NULL}, 34567, "tcp"}, +{"profinet-rt", {NULL}, 34962, "tcp"}, +{"profinet-rt", {NULL}, 34962, "udp"}, +{"profinet-rtm", {NULL}, 34963, "tcp"}, +{"profinet-rtm", {NULL}, 34963, "udp"}, +{"profinet-cm", {NULL}, 34964, "tcp"}, +{"profinet-cm", {NULL}, 34964, "udp"}, +{"ethercat", {NULL}, 34980, "tcp"}, +{"ethercat", {NULL}, 34980, "udp"}, +{"allpeers", {NULL}, 36001, "tcp"}, +{"allpeers", {NULL}, 36001, "udp"}, +{"s1-control", {NULL}, 36412, "sctp"}, +{"x2-control", {NULL}, 36422, "sctp"}, +{"m2ap", {NULL}, 36443, "sctp"}, +{"m3ap", {NULL}, 36444, "sctp"}, +{"kastenxpipe", {NULL}, 36865, "tcp"}, +{"kastenxpipe", {NULL}, 36865, "udp"}, +{"neckar", {NULL}, 37475, "tcp"}, +{"neckar", {NULL}, 37475, "udp"}, +{"unisys-eportal", {NULL}, 37654, "tcp"}, +{"unisys-eportal", {NULL}, 37654, "udp"}, +{"galaxy7-data", {NULL}, 38201, "tcp"}, +{"galaxy7-data", {NULL}, 38201, "udp"}, +{"fairview", {NULL}, 38202, "tcp"}, +{"fairview", {NULL}, 38202, "udp"}, +{"agpolicy", {NULL}, 38203, "tcp"}, +{"agpolicy", {NULL}, 38203, "udp"}, +{"turbonote-1", {NULL}, 39681, "tcp"}, +{"turbonote-1", {NULL}, 39681, "udp"}, +{"safetynetp", {NULL}, 40000, "tcp"}, +{"safetynetp", {NULL}, 40000, "udp"}, +{"cscp", {NULL}, 40841, "tcp"}, +{"cscp", {NULL}, 40841, "udp"}, +{"csccredir", {NULL}, 40842, "tcp"}, +{"csccredir", {NULL}, 40842, "udp"}, +{"csccfirewall", {NULL}, 40843, "tcp"}, +{"csccfirewall", {NULL}, 40843, "udp"}, +{"ortec-disc", {NULL}, 40853, "udp"}, +{"fs-qos", {NULL}, 41111, "tcp"}, +{"fs-qos", {NULL}, 41111, "udp"}, +{"tentacle", {NULL}, 41121, "tcp"}, +{"crestron-cip", {NULL}, 41794, "tcp"}, +{"crestron-cip", {NULL}, 41794, "udp"}, +{"crestron-ctp", {NULL}, 41795, "tcp"}, +{"crestron-ctp", {NULL}, 41795, "udp"}, +{"candp", {NULL}, 42508, "tcp"}, +{"candp", {NULL}, 42508, "udp"}, +{"candrp", {NULL}, 42509, "tcp"}, +{"candrp", {NULL}, 42509, "udp"}, +{"caerpc", {NULL}, 42510, "tcp"}, +{"caerpc", {NULL}, 42510, "udp"}, +{"reachout", {NULL}, 43188, "tcp"}, +{"reachout", {NULL}, 43188, "udp"}, +{"ndm-agent-port", {NULL}, 43189, "tcp"}, +{"ndm-agent-port", {NULL}, 43189, "udp"}, +{"ip-provision", {NULL}, 43190, "tcp"}, +{"ip-provision", {NULL}, 43190, "udp"}, +{"noit-transport", {NULL}, 43191, "tcp"}, +{"ew-mgmt", {NULL}, 43440, "tcp"}, +{"ew-disc-cmd", {NULL}, 43440, "udp"}, +{"ciscocsdb", {NULL}, 43441, "tcp"}, +{"ciscocsdb", {NULL}, 43441, "udp"}, +{"pmcd", {NULL}, 44321, "tcp"}, +{"pmcd", {NULL}, 44321, "udp"}, +{"pmcdproxy", {NULL}, 44322, "tcp"}, +{"pmcdproxy", {NULL}, 44322, "udp"}, +{"pcp", {NULL}, 44323, "udp"}, +{"rbr-debug", {NULL}, 44553, "tcp"}, +{"rbr-debug", {NULL}, 44553, "udp"}, +{"EtherNet/IP-2", {NULL}, 44818, "tcp"}, +{"EtherNet/IP-2", {NULL}, 44818, "udp"}, +{"invision-ag", {NULL}, 45054, "tcp"}, +{"invision-ag", {NULL}, 45054, "udp"}, +{"eba", {NULL}, 45678, "tcp"}, +{"eba", {NULL}, 45678, "udp"}, +{"qdb2service", {NULL}, 45825, "tcp"}, +{"qdb2service", {NULL}, 45825, "udp"}, +{"ssr-servermgr", {NULL}, 45966, "tcp"}, +{"ssr-servermgr", {NULL}, 45966, "udp"}, +{"mediabox", {NULL}, 46999, "tcp"}, +{"mediabox", {NULL}, 46999, "udp"}, +{"mbus", {NULL}, 47000, "tcp"}, +{"mbus", {NULL}, 47000, "udp"}, +{"winrm", {NULL}, 47001, "tcp"}, +{"dbbrowse", {NULL}, 47557, "tcp"}, +{"dbbrowse", {NULL}, 47557, "udp"}, +{"directplaysrvr", {NULL}, 47624, "tcp"}, +{"directplaysrvr", {NULL}, 47624, "udp"}, +{"ap", {NULL}, 47806, "tcp"}, +{"ap", {NULL}, 47806, "udp"}, +{"bacnet", {NULL}, 47808, "tcp"}, +{"bacnet", {NULL}, 47808, "udp"}, +{"nimcontroller", {NULL}, 48000, "tcp"}, +{"nimcontroller", {NULL}, 48000, "udp"}, +{"nimspooler", {NULL}, 48001, "tcp"}, +{"nimspooler", {NULL}, 48001, "udp"}, +{"nimhub", {NULL}, 48002, "tcp"}, +{"nimhub", {NULL}, 48002, "udp"}, +{"nimgtw", {NULL}, 48003, "tcp"}, +{"nimgtw", {NULL}, 48003, "udp"}, +{"nimbusdb", {NULL}, 48004, "tcp"}, +{"nimbusdbctrl", {NULL}, 48005, "tcp"}, +{"3gpp-cbsp", {NULL}, 48049, "tcp"}, +{"isnetserv", {NULL}, 48128, "tcp"}, +{"isnetserv", {NULL}, 48128, "udp"}, +{"blp5", {NULL}, 48129, "tcp"}, +{"blp5", {NULL}, 48129, "udp"}, +{"com-bardac-dw", {NULL}, 48556, "tcp"}, +{"com-bardac-dw", {NULL}, 48556, "udp"}, +{"iqobject", {NULL}, 48619, "tcp"}, +{"iqobject", {NULL}, 48619, "udp"}, +#endif /* USE_IANA_REGISTERED_PORTS */ +{ NULL, {NULL}, 0, NULL } +}; + +struct servent *getservbyport(int port, const char *proto) +{ + unsigned short u_port; + const char *protocol = NULL; + int i, error = 0; + + u_port = ntohs((unsigned short)port); + + if (proto) + { + switch (strlen(proto)) { + case 3: + if (!strncasecmp(proto, "tcp", 3)) + protocol = "tcp"; + else if (!strncasecmp(proto, "udp", 3)) + protocol = "udp"; + else + error = WSAEFAULT; + break; + case 4: + if (!strncasecmp(proto, "sctp", 4)) + protocol = "sctp"; + else if (!strncasecmp(proto, "dccp", 4)) + protocol = "dccp"; + else + error = WSAEFAULT; + break; + default: + error = WSAEFAULT; + } + } + + if (!error) + { + for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++) + { + if (u_port == IANAports[i].s_port) + { + if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto)) + return (struct servent *)&IANAports[i]; + } + } + error = WSANO_DATA; + } + + SET_SOCKERRNO(error); + return NULL; +} + +#endif /* _WIN32_WCE */ diff --git a/src/rt/libuv/src/ares/ares_platform.h b/src/rt/libuv/src/ares/ares_platform.h new file mode 100644 index 00000000000..e6885ae5461 --- /dev/null +++ b/src/rt/libuv/src/ares/ares_platform.h @@ -0,0 +1,43 @@ +#ifndef HEADER_CARES_PLATFORM_H +#define HEADER_CARES_PLATFORM_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. + */ + +#include "ares_setup.h" + +#if defined(WIN32) && !defined(MSDOS) + +typedef enum { + WIN_UNKNOWN, + WIN_3X, + WIN_9X, + WIN_NT, + WIN_CE +} win_platform; + +win_platform ares__getplatform(void); + +#endif + +#if defined(_WIN32_WCE) + +struct servent *getservbyport(int port, const char *proto); + +#endif + +#endif /* HEADER_CARES_PLATFORM_H */ diff --git a/src/rt/libuv/src/ares/ares_private.h b/src/rt/libuv/src/ares/ares_private.h index bf21abd8259..ff45ba7e5ac 100644 --- a/src/rt/libuv/src/ares/ares_private.h +++ b/src/rt/libuv/src/ares/ares_private.h @@ -52,7 +52,6 @@ #if defined(WIN32) && !defined(WATT32) -#define IS_NT() ((int)GetVersion() > 0) #define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP" #define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters" #define NAMESERVER "NameServer" @@ -89,6 +88,11 @@ #include "ares_ipv6.h" #include "ares_llist.h" +#ifndef HAVE_GETENV +# include "ares_getenv.h" +# define getenv(ptr) ares_getenv(ptr) +#endif + #ifndef HAVE_STRDUP # include "ares_strdup.h" # define strdup(ptr) ares_strdup(ptr) @@ -199,7 +203,7 @@ struct query { void *arg; /* Query status */ - int try; /* Number of times we tried this query already. */ + int try_count; /* Number of times we tried this query already. */ int server; /* Server this query has last been sent to. */ struct query_server_info *server_info; /* per-server state */ int using_tcp; diff --git a/src/rt/libuv/src/ares/ares_process.c b/src/rt/libuv/src/ares/ares_process.c index 7d04effa8a3..e5efa5fb304 100644 --- a/src/rt/libuv/src/ares/ares_process.c +++ b/src/rt/libuv/src/ares/ares_process.c @@ -63,10 +63,10 @@ #include <stdlib.h> #include <fcntl.h> #include <time.h> -#include <errno.h> #include "ares.h" #include "ares_dns.h" +#include "ares_nowarn.h" #include "ares_private.h" @@ -300,29 +300,28 @@ static void advance_tcp_send_queue(ares_channel channel, int whichserver, { struct send_request *sendreq; struct server_state *server = &channel->servers[whichserver]; - while (num_bytes > 0) - { - sendreq = server->qhead; - if ((size_t)num_bytes >= sendreq->len) - { - num_bytes -= sendreq->len; - server->qhead = sendreq->next; - if (server->qhead == NULL) - { - SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0); - server->qtail = NULL; - } - if (sendreq->data_storage != NULL) - free(sendreq->data_storage); - free(sendreq); - } - else - { - sendreq->data += num_bytes; - sendreq->len -= num_bytes; - num_bytes = 0; - } + while (num_bytes > 0) { + sendreq = server->qhead; + if ((size_t)num_bytes >= sendreq->len) { + num_bytes -= sendreq->len; + server->qhead = sendreq->next; + if (sendreq->data_storage) + free(sendreq->data_storage); + free(sendreq); + if (server->qhead == NULL) { + SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0); + server->qtail = NULL; + + /* qhead is NULL so we cannot continue this loop */ + break; + } + } + else { + sendreq->data += num_bytes; + sendreq->len -= num_bytes; + num_bytes = 0; } + } } /* If any TCP socket selects true for reading, read some data, @@ -686,7 +685,7 @@ static void next_server(ares_channel channel, struct query *query, * servers to try. In total, we need to do channel->nservers * channel->tries * attempts. Use query->try to remember how many times we already attempted * this query. Use modular arithmetic to find the next server to try. */ - while (++(query->try) < (channel->nservers * channel->tries)) + while (++(query->try_count) < (channel->nservers * channel->tries)) { struct server_state *server; @@ -791,7 +790,7 @@ void ares__send_query(ares_channel channel, struct query *query, return; } } - timeplus = channel->timeout << (query->try / channel->nservers); + timeplus = channel->timeout << (query->try_count / channel->nservers); timeplus = (timeplus * (9 + (rand () & 7))) / 16; query->timeout = *now; ares__timeadd(&query->timeout, diff --git a/src/rt/libuv/src/ares/ares_search.c b/src/rt/libuv/src/ares/ares_search.c index 608cb153d32..1877c19f772 100644 --- a/src/rt/libuv/src/ares/ares_search.c +++ b/src/rt/libuv/src/ares/ares_search.c @@ -20,7 +20,6 @@ #include <stdlib.h> #include <string.h> #include <ctype.h> -#include <errno.h> #ifdef HAVE_STRINGS_H # include <strings.h> @@ -292,7 +291,7 @@ static int single_domain(ares_channel channel, const char *name, char **s) } else { - error = errno; + error = ERRNO; switch(error) { case ENOENT: diff --git a/src/rt/libuv/src/ares/ares_send.c b/src/rt/libuv/src/ares/ares_send.c index 9f24d339a8a..37b0704579c 100644 --- a/src/rt/libuv/src/ares/ares_send.c +++ b/src/rt/libuv/src/ares/ares_send.c @@ -96,7 +96,7 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen, query->arg = arg; /* Initialize query status. */ - query->try = 0; + query->try_count = 0; /* Choose the server to send the query to. If rotation is enabled, keep track * of the next server we want to use. */ diff --git a/src/rt/libuv/src/ares/ares_setup.h b/src/rt/libuv/src/ares/ares_setup.h index 9cec52af76e..254cccbb851 100644 --- a/src/rt/libuv/src/ares/ares_setup.h +++ b/src/rt/libuv/src/ares/ares_setup.h @@ -1,7 +1,6 @@ #ifndef HEADER_CARES_SETUP_H #define HEADER_CARES_SETUP_H -/* $Id$ */ /* Copyright (C) 2004 - 2009 by Daniel Stenberg et al * @@ -31,6 +30,12 @@ #ifdef HAVE_CONFIG_H #include "ares_config.h" +#else + +#ifdef WIN32 +#include "config-win32.h" +#endif + #endif /* HAVE_CONFIG_H */ /* ================================================================ */ @@ -70,7 +75,7 @@ /* please, do it beyond the point further indicated in this file. */ /* ================================================================ */ -#if 0 /* libuv disabled */ +#if 0 /* libuv hack */ /* * c-ares external interface definitions are also used internally, * and might also include required system header files to define them. @@ -83,7 +88,7 @@ */ #include <ares_rules.h> -#endif +#endif /* libuv hack */ /* ================================================================= */ /* No system header file shall be included in this file before this */ @@ -102,6 +107,10 @@ */ #ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include <windows.h> # ifdef HAVE_WINSOCK2_H # include <winsock2.h> # ifdef HAVE_WS2TCPIP_H @@ -112,7 +121,6 @@ # include <winsock.h> # endif # endif -# include <windows.h> #endif /* diff --git a/src/rt/libuv/src/ares/config_cygwin/ares_config.h b/src/rt/libuv/src/ares/config_cygwin/ares_config.h index 70595d36175..592a245985e 100644 --- a/src/rt/libuv/src/ares/config_cygwin/ares_config.h +++ b/src/rt/libuv/src/ares/config_cygwin/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_darwin/ares_config.h b/src/rt/libuv/src/ares/config_darwin/ares_config.h index 3722bba10b5..920d922c81c 100644 --- a/src/rt/libuv/src/ares/config_darwin/ares_config.h +++ b/src/rt/libuv/src/ares/config_darwin/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_freebsd/ares_config.h b/src/rt/libuv/src/ares/config_freebsd/ares_config.h index 4164edb3e25..2f9b75d02c2 100644 --- a/src/rt/libuv/src/ares/config_freebsd/ares_config.h +++ b/src/rt/libuv/src/ares/config_freebsd/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_linux/ares_config.h b/src/rt/libuv/src/ares/config_linux/ares_config.h index dca6476eb53..8f8e3307434 100644 --- a/src/rt/libuv/src/ares/config_linux/ares_config.h +++ b/src/rt/libuv/src/ares/config_linux/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_netbsd/ares_config.h b/src/rt/libuv/src/ares/config_netbsd/ares_config.h index 5e3ae688645..b5891486553 100644 --- a/src/rt/libuv/src/ares/config_netbsd/ares_config.h +++ b/src/rt/libuv/src/ares/config_netbsd/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_openbsd/ares_config.h b/src/rt/libuv/src/ares/config_openbsd/ares_config.h index 5e3ae688645..b5891486553 100644 --- a/src/rt/libuv/src/ares/config_openbsd/ares_config.h +++ b/src/rt/libuv/src/ares/config_openbsd/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_sunos/ares_config.h b/src/rt/libuv/src/ares/config_sunos/ares_config.h index 836de9f5dde..fb8565e15b6 100644 --- a/src/rt/libuv/src/ares/config_sunos/ares_config.h +++ b/src/rt/libuv/src/ares/config_sunos/ares_config.h @@ -508,3 +508,5 @@ /* the signed version of size_t */ /* #undef ssize_t */ + +#define HAVE_GETENV 1 diff --git a/src/rt/libuv/src/ares/config_win32/ares_config.h b/src/rt/libuv/src/ares/config_win32/ares_config.h index a269da2b814..4c9c9f6786a 100644 --- a/src/rt/libuv/src/ares/config_win32/ares_config.h +++ b/src/rt/libuv/src/ares/config_win32/ares_config.h @@ -108,6 +108,9 @@ /* Define if you have the strcasecmp function. */ /* #define HAVE_STRCASECMP 1 */ +/* Define if you have the getenv function. */ +#define HAVE_GETENV 1 + /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 diff --git a/src/rt/libuv/src/ares/inet_net_pton.c b/src/rt/libuv/src/ares/inet_net_pton.c index 0b2accf1977..45bb5d48fd1 100644 --- a/src/rt/libuv/src/ares/inet_net_pton.c +++ b/src/rt/libuv/src/ares/inet_net_pton.c @@ -37,20 +37,20 @@ #endif #include <ctype.h> -#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include "ares.h" #include "ares_ipv6.h" +#include "ares_nowarn.h" #include "inet_net_pton.h" const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }; -#if !defined(HAVE_INET_NET_PTON) || !defined(HAVE_INET_NET_PTON_IPV6) +#ifndef HAVE_INET_NET_PTON /* * static int @@ -83,16 +83,17 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) ch = *src++; if (ch == '0' && (src[0] == 'x' || src[0] == 'X') + && ISASCII(src[1]) && ISXDIGIT(src[1])) { /* Hexadecimal: Eat nybble string. */ if (!size) goto emsgsize; dirty = 0; src++; /* skip x or X. */ - while ((ch = *src++) != '\0' && ISXDIGIT(ch)) { + while ((ch = *src++) != '\0' && ISASCII(ch) && ISXDIGIT(ch)) { if (ISUPPER(ch)) ch = tolower(ch); - n = (int)(strchr(xdigits, ch) - xdigits); + n = aresx_sztosi(strchr(xdigits, ch) - xdigits); if (dirty == 0) tmp = n; else @@ -109,18 +110,18 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) goto emsgsize; *dst++ = (unsigned char) (tmp << 4); } - } else if (ISDIGIT(ch)) { + } else if (ISASCII(ch) && ISDIGIT(ch)) { /* Decimal: eat dotted digit string. */ for (;;) { tmp = 0; do { - n = (int)(strchr(digits, ch) - digits); + n = aresx_sztosi(strchr(digits, ch) - digits); tmp *= 10; tmp += n; if (tmp > 255) goto enoent; } while ((ch = *src++) != '\0' && - ISDIGIT(ch)); + ISASCII(ch) && ISDIGIT(ch)); if (!size--) goto emsgsize; *dst++ = (unsigned char) tmp; @@ -129,27 +130,27 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) if (ch != '.') goto enoent; ch = *src++; - if (!ISDIGIT(ch)) + if (!ISASCII(ch) || !ISDIGIT(ch)) goto enoent; } } else goto enoent; bits = -1; - if (ch == '/' && + if (ch == '/' && ISASCII(src[0]) && ISDIGIT(src[0]) && dst > odst) { /* CIDR width specifier. Nothing can follow it. */ ch = *src++; /* Skip over the /. */ bits = 0; do { - n = (int)(strchr(digits, ch) - digits); + n = aresx_sztosi(strchr(digits, ch) - digits); bits *= 10; bits += n; - } while ((ch = *src++) != '\0' && ISDIGIT(ch)); + if (bits > 32) + goto enoent; + } while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch)); if (ch != '\0') goto enoent; - if (bits > 32) - goto emsgsize; } /* Firey death and destruction unless we prefetched EOS. */ @@ -173,7 +174,7 @@ inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) bits = 8; /* If imputed mask is narrower than specified octets, widen. */ if (bits < ((dst - odst) * 8)) - bits = (int)(dst - odst) * 8; + bits = aresx_sztosi(dst - odst) * 8; /* * If there are no additional bits specified for a class D * address adjust bits to 4. @@ -216,7 +217,7 @@ getbits(const char *src, int *bitsp) if (n++ != 0 && val == 0) /* no leading zeros */ return (0); val *= 10; - val += (pch - digits); + val += aresx_sztosi(pch - digits); if (val > 128) /* range */ return (0); continue; @@ -248,7 +249,7 @@ getv4(const char *src, unsigned char *dst, int *bitsp) if (n++ != 0 && val == 0) /* no leading zeros */ return (0); val *= 10; - val += (pch - digits); + val += aresx_sztoui(pch - digits); if (val > 255) /* range */ return (0); continue; @@ -269,8 +270,8 @@ getv4(const char *src, unsigned char *dst, int *bitsp) return (0); if (dst - odst > 3) /* too many octets? */ return (0); - *dst++ = (unsigned char)val; - return (1); + *dst = (unsigned char)val; + return 1; } static int @@ -308,7 +309,7 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size) pch = strchr((xdigits = xdigits_u), ch); if (pch != NULL) { val <<= 4; - val |= (pch - xdigits); + val |= aresx_sztoui(pch - xdigits); if (++digits > 4) goto enoent; saw_xdigit = 1; @@ -425,7 +426,7 @@ ares_inet_net_pton(int af, const char *src, void *dst, size_t size) } } -#endif +#endif /* HAVE_INET_NET_PTON */ #ifndef HAVE_INET_PTON int ares_inet_pton(int af, const char *src, void *dst) diff --git a/src/rt/libuv/src/ares/inet_net_pton.h b/src/rt/libuv/src/ares/inet_net_pton.h index e04bc11b165..5396a7f2a71 100644 --- a/src/rt/libuv/src/ares/inet_net_pton.h +++ b/src/rt/libuv/src/ares/inet_net_pton.h @@ -1,8 +1,7 @@ -#ifndef __ARES_INET_NET_PTON_H -#define __ARES_INET_NET_PTON_H +#ifndef HEADER_CARES_INET_NET_PTON_H +#define HEADER_CARES_INET_NET_PTON_H - -/* Copyright (C) 2005 by Daniel Stenberg +/* Copyright (C) 2005-2010 by Daniel Stenberg et al * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without @@ -22,10 +21,11 @@ #else int ares_inet_pton(int af, const char *src, void *dst); #endif -#if defined(HAVE_INET_NET_PTON) && defined(HAVE_INET_NET_PTON_IPV6) + +#ifdef HAVE_INET_NET_PTON #define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z) #else int ares_inet_net_pton(int af, const char *src, void *dst, size_t size); #endif -#endif /* __ARES_INET_NET_PTON_H */ +#endif /* HEADER_CARES_INET_NET_PTON_H */ diff --git a/src/rt/libuv/src/ares/inet_ntop.c b/src/rt/libuv/src/ares/inet_ntop.c index 71385cc8c9a..57e1146b76c 100644 --- a/src/rt/libuv/src/ares/inet_ntop.c +++ b/src/rt/libuv/src/ares/inet_ntop.c @@ -1,18 +1,18 @@ - -/* Copyright (c) 1996 by Internet Software Consortium. +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996-1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "ares_setup.h" @@ -36,7 +36,6 @@ #endif #include <ctype.h> -#include <errno.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -48,12 +47,6 @@ #ifndef HAVE_INET_NTOP -#ifdef SPRINTF_CHAR -# define SPRINTF(x) strlen(sprintf/**/x) -#else -# define SPRINTF(x) ((size_t)sprintf x) -#endif - /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. @@ -68,32 +61,31 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size); * return: * pointer to presentation format address (`dst'), or NULL (see errno). * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid loosing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this funtion sets when returning NULL, not SOCKERRNO. + * On Windows we store the error in the thread errno, not + * in the winsock error code. This is to avoid loosing the + * actual last winsock error. So use macro ERRNO to fetch the + * errno this funtion sets when returning NULL, not SOCKERRNO. * author: * Paul Vixie, 1996. */ const char * ares_inet_ntop(int af, const void *src, char *dst, size_t size) { - switch (af) - { - case AF_INET: - return (inet_ntop4(src, dst, size)); - case AF_INET6: - return (inet_ntop6(src, dst, size)); - default: - SET_ERRNO(EAFNOSUPPORT); - return (NULL); - } + switch (af) { + case AF_INET: + return (inet_ntop4(src, dst, size)); + case AF_INET6: + return (inet_ntop6(src, dst, size)); + default: + SET_ERRNO(EAFNOSUPPORT); + return (NULL); + } /* NOTREACHED */ } /* const char * * inet_ntop4(src, dst, size) - * format an IPv4 address, more or less like inet_ntoa() + * format an IPv4 address * return: * `dst' (as a const) * notes: @@ -106,22 +98,21 @@ static const char * inet_ntop4(const unsigned char *src, char *dst, size_t size) { static const char fmt[] = "%u.%u.%u.%u"; - char tmp[sizeof "255.255.255.255"]; + char tmp[sizeof("255.255.255.255")]; - if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) - { - SET_ERRNO(ENOSPC); - return (NULL); - } - strcpy(dst, tmp); - return (dst); + if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) { + SET_ERRNO(ENOSPC); + return (NULL); + } + strcpy(dst, tmp); + return (dst); } /* const char * * inet_ntop6(src, dst, size) - * convert IPv6 binary address into presentation (printable) format + * convert IPv6 binary address into presentation (printable) format * author: - * Paul Vixie, 1996. + * Paul Vixie, 1996. */ static const char * inet_ntop6(const unsigned char *src, char *dst, size_t size) @@ -135,11 +126,8 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size) */ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; char *tp; - struct { - long base; - long len; - } best, cur; - unsigned long words[NS_IN6ADDRSZ / NS_INT16SZ]; + struct { int base, len; } best, cur; + unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; int i; /* @@ -149,37 +137,29 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size) */ memset(words, '\0', sizeof(words)); for (i = 0; i < NS_IN6ADDRSZ; i++) - words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); - + words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); best.base = -1; - cur.base = -1; best.len = 0; + cur.base = -1; cur.len = 0; - - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - if (words[i] == 0) - { - if (cur.base == -1) - cur.base = i, cur.len = 1; - else - cur.len++; - } + for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { + if (words[i] == 0) { + if (cur.base == -1) + cur.base = i, cur.len = 1; else - { - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; - cur.base = -1; - } - } - } - if (cur.base != -1) - { - if (best.base == -1 || cur.len > best.len) - best = cur; + cur.len++; + } else { + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + cur.base = -1; + } } + } + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + } if (best.base != -1 && best.len < 2) best.base = -1; @@ -187,46 +167,42 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size) * Format the result. */ tp = tmp; - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) - { - /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && - i < (best.base + best.len)) - { - if (i == best.base) - *tp++ = ':'; - continue; - } - /* Are we following an initial run of 0x00s or any real hex? */ - if (i != 0) + for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { + /* Are we inside the best run of 0x00's? */ + if (best.base != -1 && i >= best.base && + i < (best.base + best.len)) { + if (i == best.base) *tp++ = ':'; - /* Is this address an encapsulated IPv4? */ - if (i == 6 && best.base == 0 && - (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) - { - if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) - return (NULL); - tp += strlen(tp); - break; - } - tp += SPRINTF((tp, "%lx", words[i])); + continue; } - + /* Are we following an initial run of 0x00s or any real hex? */ + if (i != 0) + *tp++ = ':'; + /* Is this address an encapsulated IPv4? */ + if (i == 6 && best.base == 0 && (best.len == 6 || + (best.len == 7 && words[7] != 0x0001) || + (best.len == 5 && words[5] == 0xffff))) { + if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) + return (NULL); + tp += strlen(tp); + break; + } + tp += sprintf(tp, "%x", words[i]); + } /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) + if (best.base != -1 && (best.base + best.len) == + (NS_IN6ADDRSZ / NS_INT16SZ)) *tp++ = ':'; *tp++ = '\0'; /* * Check for overflow, copy, and we're done. */ - if ((size_t)(tp - tmp) > size) - { - SET_ERRNO(ENOSPC); - return (NULL); - } + if ((size_t)(tp - tmp) > size) { + SET_ERRNO(ENOSPC); + return (NULL); + } strcpy(dst, tmp); return (dst); } #endif - diff --git a/src/rt/libuv/src/ares/inet_ntop.h b/src/rt/libuv/src/ares/inet_ntop.h index 1b5389e893c..c583488f75e 100644 --- a/src/rt/libuv/src/ares/inet_ntop.h +++ b/src/rt/libuv/src/ares/inet_ntop.h @@ -18,7 +18,6 @@ */ #ifdef HAVE_INET_NTOP -#include <arpa/inet.h> #define ares_inet_ntop(w,x,y,z) inet_ntop(w,x,y,z) #else const char *ares_inet_ntop(int af, const void *src, char *dst, size_t size); diff --git a/src/rt/libuv/src/ares/nameser.h b/src/rt/libuv/src/ares/nameser.h index b5be424cf74..45f1e3eb80a 100644 --- a/src/rt/libuv/src/ares/nameser.h +++ b/src/rt/libuv/src/ares/nameser.h @@ -75,6 +75,11 @@ typedef enum __ns_type { ns_t_sink = 40, /* Kitchen sink (experimentatl) */ ns_t_opt = 41, /* EDNS0 option (meta-RR) */ ns_t_apl = 42, /* Address prefix list (RFC3123) */ + ns_t_ds = 43, /* Delegation Signer (RFC4034) */ + ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */ + ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */ + ns_t_nsec = 47, /* Next Secure (RFC4034) */ + ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */ ns_t_tkey = 249, /* Transaction key */ ns_t_tsig = 250, /* Transaction signature. */ ns_t_ixfr = 251, /* Incremental zone transfer. */ @@ -181,6 +186,11 @@ typedef enum __ns_rcode { #define T_SRV ns_t_srv #define T_ATMA ns_t_atma #define T_NAPTR ns_t_naptr +#define T_DS ns_t_ds +#define T_SSHFP ns_t_sshfp +#define T_RRSIG ns_t_rrsig +#define T_NSEC ns_t_nsec +#define T_DNSKEY ns_t_dnskey #define T_TSIG ns_t_tsig #define T_IXFR ns_t_ixfr #define T_AXFR ns_t_axfr diff --git a/src/rt/libuv/src/ares/setup_once.h b/src/rt/libuv/src/ares/setup_once.h index 0c7c811194c..a333f54a7c0 100644 --- a/src/rt/libuv/src/ares/setup_once.h +++ b/src/rt/libuv/src/ares/setup_once.h @@ -2,7 +2,7 @@ #define __SETUP_ONCE_H -/* Copyright (C) 2004 - 2010 by Daniel Stenberg et al +/* 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 @@ -35,7 +35,10 @@ #include <string.h> #include <stdarg.h> #include <ctype.h> + +#ifdef HAVE_ERRNO_H #include <errno.h> +#endif #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> @@ -248,6 +251,7 @@ struct timeval { #define ISPRINT(x) (isprint((int) ((unsigned char)x))) #define ISUPPER(x) (isupper((int) ((unsigned char)x))) #define ISLOWER(x) (islower((int) ((unsigned char)x))) +#define ISASCII(x) (isascii((int) ((unsigned char)x))) #define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \ (((unsigned char)x) == '\t')) @@ -366,7 +370,7 @@ typedef int sig_atomic_t; * (or equivalent) on this platform to hide platform details to code using it. */ -#ifdef WIN32 +#if defined(WIN32) && !defined(WATT32) #define ERRNO ((int)GetLastError()) #define SET_ERRNO(x) (SetLastError((DWORD)(x))) #else @@ -456,6 +460,18 @@ typedef int sig_atomic_t; /* + * System error codes for Windows CE + */ + +#if defined(WIN32) && !defined(HAVE_ERRNO_H) +#define ENOENT ERROR_FILE_NOT_FOUND +#define ESRCH ERROR_PATH_NOT_FOUND +#define ENOMEM ERROR_NOT_ENOUGH_MEMORY +#define ENOSPC ERROR_INVALID_PARAMETER +#endif + + +/* * Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid() */ diff --git a/src/rt/libuv/src/unix/cares.c b/src/rt/libuv/src/unix/cares.c index a2466f59e6f..85cabac46ea 100644 --- a/src/rt/libuv/src/unix/cares.c +++ b/src/rt/libuv/src/unix/cares.c @@ -67,6 +67,7 @@ static uv_ares_task_t* uv__ares_task_create(int fd) { if (h == NULL) { uv_fatal_error(ENOMEM, "malloc"); + return NULL; } h->sock = fd; @@ -146,7 +147,7 @@ int uv_ares_init_options(uv_loop_t* loop, ares_channel *channelptr, /* only allow single init at a time */ if (loop->channel != NULL) { - uv_err_new_artificial(loop, UV_EALREADY); + uv__set_artificial_error(loop, UV_EALREADY); return -1; } diff --git a/src/rt/libuv/src/unix/core.c b/src/rt/libuv/src/unix/core.c index 80b3bf6ed9e..27e949e90b2 100644 --- a/src/rt/libuv/src/unix/core.c +++ b/src/rt/libuv/src/unix/core.c @@ -172,7 +172,7 @@ void uv_loop_delete(uv_loop_t* loop) { uv_loop_t* uv_default_loop() { if (!default_loop_ptr) { default_loop_ptr = &default_loop_struct; -#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 +#if HAVE_KQUEUE default_loop_struct.ev = ev_default_loop(EVBACKEND_KQUEUE); #else default_loop_struct.ev = ev_default_loop(EVFLAG_AUTO); @@ -563,7 +563,7 @@ int uv_timer_stop(uv_timer_t* timer) { int uv_timer_again(uv_timer_t* timer) { if (!ev_is_active(&timer->timer_watcher)) { - uv_err_new(timer->loop, EINVAL); + uv__set_sys_error(timer->loop, EINVAL); return -1; } @@ -595,7 +595,7 @@ static int uv_getaddrinfo_done(eio_req* req) { if (handle->retcode != 0) { /* TODO how to display gai error strings? */ - uv_err_new(handle->loop, handle->retcode); + uv__set_sys_error(handle->loop, handle->retcode); } handle->cb(handle, handle->retcode, res); @@ -626,7 +626,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (handle == NULL || cb == NULL || (hostname == NULL && service == NULL)) { - uv_err_new_artificial(loop, UV_EINVAL); + uv__set_artificial_error(loop, UV_EINVAL); return -1; } @@ -639,7 +639,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (hints) { handle->hints = malloc(sizeof(struct addrinfo)); - memcpy(&handle->hints, hints, sizeof(struct addrinfo)); + memcpy(handle->hints, hints, sizeof(struct addrinfo)); } else { handle->hints = NULL; @@ -667,7 +667,8 @@ int uv_getaddrinfo(uv_loop_t* loop, void uv_freeaddrinfo(struct addrinfo* ai) { - freeaddrinfo(ai); + if (ai) + freeaddrinfo(ai); } @@ -790,10 +791,3 @@ size_t uv__strlcpy(char* dst, const char* src, size_t size) { return src - org; } - - -uv_stream_t* uv_std_handle(uv_loop_t* loop, uv_std_type type) { - assert(0 && "implement me"); - return NULL; -} - diff --git a/src/rt/libuv/src/unix/cygwin.c b/src/rt/libuv/src/unix/cygwin.c index 6702eb9234f..2f0680a4b76 100644 --- a/src/rt/libuv/src/unix/cygwin.c +++ b/src/rt/libuv/src/unix/cygwin.c @@ -36,6 +36,11 @@ uint64_t uv_hrtime() { return (ts.tv_sec * NANOSEC + ts.tv_nsec); } +void uv_loadavg(double avg[3]) { + /* Unsupported as of cygwin 1.7.7 */ + avg[0] = avg[1] = avg[2] = 0; +} + int uv_exepath(char* buffer, size_t* size) { uint32_t usize; @@ -53,12 +58,19 @@ int uv_exepath(char* buffer, size_t* size) { return 0; } +uint64_t uv_get_free_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES); +} + +uint64_t uv_get_total_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES); +} int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, const char* filename, uv_fs_event_cb cb) { - uv_err_new(loop, ENOSYS); + uv__set_sys_error(loop, ENOSYS); return -1; } diff --git a/src/rt/libuv/src/unix/darwin.c b/src/rt/libuv/src/unix/darwin.c index af72b4b0ec8..675e0ad488a 100644 --- a/src/rt/libuv/src/unix/darwin.c +++ b/src/rt/libuv/src/unix/darwin.c @@ -29,6 +29,9 @@ #include <mach/mach.h> #include <mach/mach_time.h> #include <mach-o/dyld.h> /* _NSGetExecutablePath */ +#include <sys/resource.h> +#include <sys/sysctl.h> +#include <unistd.h> /* sysconf */ uint64_t uv_hrtime() { @@ -68,16 +71,38 @@ int uv_exepath(char* buffer, size_t* size) { return 0; } +uint64_t uv_get_free_memory(void) { + vm_statistics_data_t info; + mach_msg_type_number_t count = sizeof(info) / sizeof(integer_t); -int uv_fs_event_init(uv_loop_t* loop, - uv_fs_event_t* handle, - const char* filename, - uv_fs_event_cb cb) { - uv_err_new(loop, ENOSYS); - return -1; + if (host_statistics(mach_host_self(), HOST_VM_INFO, + (host_info_t)&info, &count) != KERN_SUCCESS) { + return -1; + } + + return (uint64_t) info.free_count * sysconf(_SC_PAGESIZE); +} + +uint64_t uv_get_total_memory(void) { + uint64_t info; + int which[] = {CTL_HW, HW_MEMSIZE}; + size_t size = sizeof(info); + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } + + return (uint64_t) info; } +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) return; -void uv__fs_event_destroy(uv_fs_event_t* handle) { - assert(0 && "implement me"); + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; } diff --git a/src/rt/libuv/src/unix/eio/config_openbsd.h b/src/rt/libuv/src/unix/eio/config_openbsd.h new file mode 100644 index 00000000000..a73b8a88307 --- /dev/null +++ b/src/rt/libuv/src/unix/eio/config_openbsd.h @@ -0,0 +1,137 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* fallocate(2) is available */ +/* #undef HAVE_FALLOCATE */ + +/* fdatasync(2) is available */ +/* #undef HAVE_FDATASYNC */ + +/* futimes(2) is available */ +#define HAVE_FUTIMES 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* posix_fadvise(2) is available */ +/* #undef HAVE_POSIX_FADVISE */ + +/* posix_madvise(2) is available */ +#define HAVE_POSIX_MADVISE 1 + +/* prctl(PR_SET_NAME) is available */ +/* #undef HAVE_PRCTL_SET_NAME */ + +/* pread(2) and pwrite(2) are available */ +#define HAVE_PREADWRITE 1 + +/* readahead(2) is available (linux) */ +/* #undef HAVE_READAHEAD */ + +/* sendfile(2) is available and supported */ +/* #undef HAVE_SENDFILE */ + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* sync_file_range(2) is available */ +/* #undef HAVE_SYNC_FILE_RANGE */ + +/* Define to 1 if you have the <sys/prctl.h> header file. */ +/* #undef HAVE_SYS_PRCTL_H */ + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* syscall(__NR_syncfs) is available */ +/* #undef HAVE_SYS_SYNCFS */ + +/* Define to 1 if you have the <sys/syscall.h> header file. */ +#define HAVE_SYS_SYSCALL_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* utimes(2) is available */ +#define HAVE_UTIMES 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libeio" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Version number of package */ +#define VERSION "1.0" + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ diff --git a/src/rt/libuv/src/unix/eio/config_sunos.h b/src/rt/libuv/src/unix/eio/config_sunos.h index 01d049c3e62..546926fcb50 100644 --- a/src/rt/libuv/src/unix/eio/config_sunos.h +++ b/src/rt/libuv/src/unix/eio/config_sunos.h @@ -11,7 +11,7 @@ #define HAVE_UTIMES 1 /* futimes(2) is available */ -/* #undef HAVE_FUTIMES */ +#define HAVE_FUTIMES 1 /* Define to 1 if you have the <inttypes.h> header file. */ #define HAVE_INTTYPES_H 1 diff --git a/src/rt/libuv/src/unix/eio/eio.c b/src/rt/libuv/src/unix/eio/eio.c index a005db5d3b4..2374006110d 100644 --- a/src/rt/libuv/src/unix/eio/eio.c +++ b/src/rt/libuv/src/unix/eio/eio.c @@ -108,6 +108,10 @@ static void eio_destroy (eio_req *req); #define EIO_ENOSYS() EIO_ERRNO (ENOSYS, -1) +#ifdef __sun +# define futimes(fd, times) futimesat (fd, NULL, times) +#endif + #ifdef _WIN32 #include <direct.h> diff --git a/src/rt/libuv/src/unix/error.c b/src/rt/libuv/src/unix/error.c index 3520eec719b..374e6eb29b0 100644 --- a/src/rt/libuv/src/unix/error.c +++ b/src/rt/libuv/src/unix/error.c @@ -56,19 +56,37 @@ void uv_fatal_error(const int errorno, const char* syscall) { } -uv_err_t uv_last_error(uv_loop_t* loop) { - return loop->last_err; -} - +static int uv__translate_lib_error(int code) { + switch (code) { + case UV_ENOSYS: return ENOSYS; + case UV_ENOENT: return ENOENT; + case UV_EACCESS: return EACCES; + case UV_EBADF: return EBADF; + case UV_EPIPE: return EPIPE; + case UV_EAGAIN: return EAGAIN; + case UV_ECONNRESET: return ECONNRESET; + case UV_EFAULT: return EFAULT; + case UV_EMFILE: return EMFILE; + case UV_EMSGSIZE: return EMSGSIZE; + case UV_EINVAL: return EINVAL; + case UV_ECONNREFUSED: return ECONNREFUSED; + case UV_EADDRINUSE: return EADDRINUSE; + case UV_EADDRNOTAVAIL: return EADDRNOTAVAIL; + case UV_ENOTDIR: return ENOTDIR; + case UV_ENOTCONN: return ENOTCONN; + case UV_EEXIST: return EEXIST; + default: return -1; + } -char* uv_strerror(uv_err_t err) { - return strerror(err.sys_errno_); + assert(0 && "unreachable"); + return -1; } uv_err_code uv_translate_sys_error(int sys_errno) { switch (sys_errno) { case 0: return UV_OK; + case ENOSYS: return UV_ENOSYS; case ENOENT: return UV_ENOENT; case EACCES: return UV_EACCESS; case EBADF: return UV_EBADF; @@ -82,8 +100,10 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case ECONNREFUSED: return UV_ECONNREFUSED; case EADDRINUSE: return UV_EADDRINUSE; case EADDRNOTAVAIL: return UV_EADDRNOTAVAIL; + case ENOTDIR: return UV_ENOTDIR; case ENOTCONN: return UV_ENOTCONN; case EEXIST: return UV_EEXIST; + case EAI_NONAME: return UV_ENOENT; default: return UV_UNKNOWN; } @@ -92,19 +112,20 @@ uv_err_code uv_translate_sys_error(int sys_errno) { } -uv_err_t uv_err_new_artificial(uv_loop_t* loop, int code) { - uv_err_t err; - err.sys_errno_ = 0; - err.code = code; - loop->last_err = err; - return err; -} +/* TODO Pull in error messages so we don't have to + * a) rely on what the system provides us + * b) reverse-map the error codes + */ +char* uv_strerror(uv_err_t err) { + int errorno; + if (err.sys_errno_) + errorno = err.sys_errno_; + else + errorno = uv__translate_lib_error(err.code); -uv_err_t uv_err_new(uv_loop_t* loop, int sys_error) { - uv_err_t err; - err.sys_errno_ = sys_error; - err.code = uv_translate_sys_error(sys_error); - loop->last_err = err; - return err; + if (errorno == -1) + return "Unknown error"; + else + return strerror(errorno); } diff --git a/src/rt/libuv/src/unix/ev/config_openbsd.h b/src/rt/libuv/src/unix/ev/config_openbsd.h new file mode 100644 index 00000000000..8bc9b89041f --- /dev/null +++ b/src/rt/libuv/src/unix/ev/config_openbsd.h @@ -0,0 +1,126 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* "use syscall interface for clock_gettime" */ +/* #undef HAVE_CLOCK_SYSCALL */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the `epoll_ctl' function. */ +/* #undef HAVE_EPOLL_CTL */ + +/* Define to 1 if you have the `eventfd' function. */ +/* #undef HAVE_EVENTFD */ + +/* Define to 1 if you have the `inotify_init' function. */ +/* #undef HAVE_INOTIFY_INIT */ + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `kqueue' function. */ +#define HAVE_KQUEUE 1 + +/* Define to 1 if you have the `m' library (-lm). */ +#define HAVE_LIBM 1 + +/* Define to 1 if you have the `rt' library (-lrt). */ +/* #undef HAVE_LIBRT */ + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `nanosleep' function. */ +#define HAVE_NANOSLEEP 1 + +/* Define to 1 if you have the `poll' function. */ +#define HAVE_POLL 1 + +/* Define to 1 if you have the <poll.h> header file. */ +#define HAVE_POLL_H 1 + +/* Define to 1 if you have the `port_create' function. */ +/* #undef HAVE_PORT_CREATE */ + +/* Define to 1 if you have the <port.h> header file. */ +/* #undef HAVE_PORT_H */ + +/* Define to 1 if you have the `select' function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the `signalfd' function. */ +/* #undef HAVE_SIGNALFD */ + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/epoll.h> header file. */ +/* #undef HAVE_SYS_EPOLL_H */ + +/* Define to 1 if you have the <sys/eventfd.h> header file. */ +/* #undef HAVE_SYS_EVENTFD_H */ + +/* Define to 1 if you have the <sys/event.h> header file. */ +#define HAVE_SYS_EVENT_H 1 + +/* Define to 1 if you have the <sys/inotify.h> header file. */ +/* #undef HAVE_SYS_INOTIFY_H */ + +/* Define to 1 if you have the <sys/select.h> header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the <sys/signalfd.h> header file. */ +/* #undef HAVE_SYS_SIGNALFD_H */ + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "libev" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "4.04" diff --git a/src/rt/libuv/src/unix/ev/ev.c b/src/rt/libuv/src/unix/ev/ev.c index 5e616c254fc..a3bec43fbec 100644 --- a/src/rt/libuv/src/unix/ev/ev.c +++ b/src/rt/libuv/src/unix/ev/ev.c @@ -2663,7 +2663,8 @@ ev_io_start (EV_P_ ev_io *w) return; assert (("libev: ev_io_start called with negative fd", fd >= 0)); - assert (("libev: ev_io_start called with illegal event mask", !(w->events & ~(EV__IOFDSET | EV_READ | EV_WRITE)))); + assert (("libev: ev_io_start called with illegal event mask", + !(w->events & ~(EV__IOFDSET | EV_READ | EV_WRITE | EV_LIBUV_KQUEUE_HACK)))); EV_FREQUENT_CHECK; diff --git a/src/rt/libuv/src/unix/ev/ev_kqueue.c b/src/rt/libuv/src/unix/ev/ev_kqueue.c index 1b526d1c7bc..212ca29ae64 100644 --- a/src/rt/libuv/src/unix/ev/ev_kqueue.c +++ b/src/rt/libuv/src/unix/ev/ev_kqueue.c @@ -43,6 +43,9 @@ #include <string.h> #include <errno.h> +extern void +uv__kqueue_hack (EV_P_ int fflags, ev_io *w); + void inline_speed kqueue_change (EV_P_ int fd, int filter, int flags, int fflags) { @@ -80,6 +83,10 @@ kqueue_modify (EV_P_ int fd, int oev, int nev) if (nev & EV_WRITE) kqueue_change (EV_A_ fd, EVFILT_WRITE, EV_ADD | EV_ENABLE, NOTE_EOF); + + if (nev & EV_LIBUV_KQUEUE_HACK) + kqueue_change (EV_A_ fd, EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_ONESHOT, + NOTE_ATTRIB | NOTE_WRITE | NOTE_RENAME | NOTE_DELETE | NOTE_EXTEND | NOTE_REVOKE); } static void @@ -114,6 +121,13 @@ kqueue_poll (EV_P_ ev_tstamp timeout) { int fd = kqueue_events [i].ident; + if (kqueue_events [i].filter == EVFILT_VNODE) + { + /* pass kqueue filter flags to libuv */ + ev_io *w = (ev_io *)(anfds [fd].head); + uv__kqueue_hack (EV_A_ kqueue_events [i].fflags, w); + } + if (expect_false (kqueue_events [i].flags & EV_ERROR)) { int err = kqueue_events [i].data; @@ -140,6 +154,7 @@ kqueue_poll (EV_P_ ev_tstamp timeout) fd, kqueue_events [i].filter == EVFILT_READ ? EV_READ : kqueue_events [i].filter == EVFILT_WRITE ? EV_WRITE + : kqueue_events [i].filter == EVFILT_VNODE ? EV_LIBUV_KQUEUE_HACK : 0 ); } diff --git a/src/rt/libuv/src/unix/freebsd.c b/src/rt/libuv/src/unix/freebsd.c index 449aad4c211..cd14d22669f 100644 --- a/src/rt/libuv/src/unix/freebsd.c +++ b/src/rt/libuv/src/unix/freebsd.c @@ -25,8 +25,11 @@ #include <errno.h> #include <sys/types.h> +#include <sys/resource.h> #include <sys/sysctl.h> +#include <vm/vm_param.h> /* VM_LOADAVG */ #include <time.h> +#include <unistd.h> /* sysconf */ #undef NANOSEC #define NANOSEC 1000000000 @@ -67,16 +70,39 @@ int uv_exepath(char* buffer, size_t* size) { return 0; } +uint64_t uv_get_free_memory(void) { + int freecount; + size_t size = sizeof(freecount); + + if(sysctlbyname("vm.stats.vm.v_free_count", + &freecount, &size, NULL, 0) == -1){ + return -1; + } + return (uint64_t) freecount * sysconf(_SC_PAGESIZE); -int uv_fs_event_init(uv_loop_t* loop, - uv_fs_event_t* handle, - const char* filename, - uv_fs_event_cb cb) { - uv_err_new(loop, ENOSYS); - return -1; } +uint64_t uv_get_total_memory(void) { + unsigned long info; + int which[] = {CTL_HW, HW_PHYSMEM}; + + size_t size = sizeof(info); + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } + + return (uint64_t) info; +} + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) return; -void uv__fs_event_destroy(uv_fs_event_t* handle) { - assert(0 && "implement me"); + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; } diff --git a/src/rt/libuv/src/unix/fs.c b/src/rt/libuv/src/unix/fs.c index d745622835b..57664c83c02 100644 --- a/src/rt/libuv/src/unix/fs.c +++ b/src/rt/libuv/src/unix/fs.c @@ -46,7 +46,7 @@ /* async */ \ req->eio = eiofunc(args, EIO_PRI_DEFAULT, uv__fs_after, req); \ if (!req->eio) { \ - uv_err_new(loop, ENOMEM); \ + uv__set_sys_error(loop, ENOMEM); \ return -1; \ } \ uv_ref(loop); \ @@ -54,7 +54,7 @@ /* sync */ \ req->result = func(args); \ if (req->result) { \ - uv_err_new(loop, errno); \ + uv__set_sys_error(loop, errno); \ } \ return req->result; \ } \ @@ -85,8 +85,7 @@ void uv_fs_req_cleanup(uv_fs_t* req) { switch (req->fs_type) { case UV_FS_READDIR: - assert((req->result == -1 && req->ptr == NULL) - || (req->result >= 0 && req->ptr != NULL)); + assert(req->result > 0 ? (req->ptr != NULL) : (req->ptr == NULL)); free(req->ptr); req->ptr = NULL; break; @@ -116,9 +115,6 @@ static int uv__fs_after(eio_req* eio) { switch (req->fs_type) { case UV_FS_READDIR: - if (req->eio->result == -1) - break; /* opendir() or readdir() operation failed. */ - /* * XXX This is pretty bad. * We alloc and copy the large null terminated string list from libeio. @@ -128,16 +124,21 @@ static int uv__fs_after(eio_req* eio) { */ buflen = 0; name = req->eio->ptr2; + for (i = 0; i < req->result; i++) { namelen = strlen(name); buflen += namelen + 1; - /* TODO check ENOMEM */ name += namelen; assert(*name == '\0'); name++; } - req->ptr = malloc(buflen); - memcpy(req->ptr, req->eio->ptr2, buflen); + + if (buflen) { + if ((req->ptr = malloc(buflen))) + memcpy(req->ptr, req->eio->ptr2, buflen); + else + uv__set_sys_error(req->loop, ENOMEM); + } break; case UV_FS_STAT: @@ -149,19 +150,20 @@ static int uv__fs_after(eio_req* eio) { case UV_FS_READLINK: if (req->result == -1) { req->ptr = NULL; - } else { - assert(req->result > 0); - - if ((name = realloc(req->eio->ptr2, req->result + 1)) == NULL) { - /* Not enough memory. Reuse buffer, chop off last byte. */ - name = req->eio->ptr2; - req->result--; - } + break; + } + assert(req->result > 0); + /* Make zero-terminated copy of req->eio->ptr2 */ + if ((req->ptr = name = malloc(req->result + 1))) { + memcpy(name, req->eio->ptr2, req->result); name[req->result] = '\0'; - req->ptr = name; req->result = 0; } + else { + req->errorno = ENOMEM; + req->result = -1; + } break; default: @@ -191,7 +193,7 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_ref(loop); req->eio = eio_open(path, flags, mode, EIO_PRI_DEFAULT, uv__fs_after, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -199,7 +201,7 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, /* sync */ req->result = open(path, flags, mode); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -223,7 +225,7 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file fd, void* buf, uv__fs_after, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -234,7 +236,7 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file fd, void* buf, pread(fd, buf, length, offset); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -260,7 +262,7 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, void* buf, req->eio = eio_write(file, buf, length, offset, EIO_PRI_DEFAULT, uv__fs_after, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -271,7 +273,7 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, void* buf, pwrite(file, buf, length, offset); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -307,7 +309,7 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_ref(loop); req->eio = eio_readdir(path, flags, EIO_PRI_DEFAULT, uv__fs_after, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -315,7 +317,7 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, /* sync */ DIR* dir = opendir(path); if (!dir) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); req->result = -1; return -1; } @@ -344,7 +346,7 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, r = closedir(dir); if (r) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); req->result = -1; return -1; } @@ -380,7 +382,7 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { free(pathdup); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -391,7 +393,7 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { free(pathdup); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -412,7 +414,7 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { req->eio = eio_fstat(file, EIO_PRI_DEFAULT, uv__fs_after, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -421,7 +423,7 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { req->result = fstat(file, &req->statbuf); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -447,8 +449,11 @@ int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { char* path = NULL; -#ifdef __FreeBSD__ - /* freebsd doesn't have fdatasync, do a full fsync instead. */ +#if defined(__FreeBSD__) \ + || (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1060) + /* freebsd and pre-10.6 darwin don't have fdatasync, + * do a full fsync instead. + */ WRAP_EIO(UV_FS_FDATASYNC, eio_fdatasync, fsync, ARGS1(file)) #else WRAP_EIO(UV_FS_FDATASYNC, eio_fdatasync, fdatasync, ARGS1(file)) @@ -491,7 +496,7 @@ int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, } -#if defined(HAVE_FUTIMES) +#if HAVE_FUTIMES static int _futime(const uv_file file, double atime, double mtime) { struct timeval tv[2]; @@ -502,21 +507,25 @@ static int _futime(const uv_file file, double atime, double mtime) { tv[1].tv_sec = mtime; tv[1].tv_usec = (unsigned long)(mtime * 1000000) % 1000000; +#ifdef __sun + return futimesat(file, NULL, tv); +#else return futimes(file, tv); +#endif } #endif int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb) { -#if defined(HAVE_FUTIMES) +#if HAVE_FUTIMES const char* path = NULL; uv_fs_req_init(loop, req, UV_FS_FUTIME, path, cb); WRAP_EIO(UV_FS_FUTIME, eio_futime, _futime, ARGS3(file, atime, mtime)) #else - uv_err_new(loop, ENOSYS); + uv__set_sys_error(loop, ENOSYS); return -1; #endif } @@ -546,7 +555,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { free(pathdup); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -557,7 +566,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { free(pathdup); if (req->result < 0) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -584,11 +593,8 @@ int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { ssize_t size; - int status; char* buf; - status = -1; - uv_fs_req_init(loop, req, UV_FS_READLINK, path, cb); if (cb) { @@ -596,7 +602,7 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_ref(loop); return 0; } else { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } } else { @@ -612,7 +618,7 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, } if ((buf = malloc(size + 1)) == NULL) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } @@ -689,7 +695,7 @@ int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, req->eio = eio_custom(uv__work, EIO_PRI_DEFAULT, uv__after_work, req); if (!req->eio) { - uv_err_new(loop, ENOMEM); + uv__set_sys_error(loop, ENOMEM); return -1; } diff --git a/src/rt/libuv/src/unix/internal.h b/src/rt/libuv/src/unix/internal.h index 42283ca2a51..0ab8ba9579f 100644 --- a/src/rt/libuv/src/unix/internal.h +++ b/src/rt/libuv/src/unix/internal.h @@ -32,33 +32,33 @@ #include <linux/version.h> #include <features.h> -#undef HAVE_FUTIMES -#undef HAVE_PIPE2 -#undef HAVE_ACCEPT4 - /* futimes() requires linux >= 2.6.22 and glib >= 2.6 */ #if LINUX_VERSION_CODE >= 0x20616 && __GLIBC_PREREQ(2, 6) -#define HAVE_FUTIMES +#define HAVE_FUTIMES 1 #endif /* pipe2() requires linux >= 2.6.27 and glibc >= 2.9 */ #if LINUX_VERSION_CODE >= 0x2061B && __GLIBC_PREREQ(2, 9) -#define HAVE_PIPE2 +#define HAVE_PIPE2 1 #endif /* accept4() requires linux >= 2.6.28 and glib >= 2.10 */ #if LINUX_VERSION_CODE >= 0x2061C && __GLIBC_PREREQ(2, 10) -#define HAVE_ACCEPT4 +#define HAVE_ACCEPT4 1 #endif #endif /* __linux__ */ -#ifdef __APPLE__ -# define HAVE_FUTIMES +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun) +# define HAVE_FUTIMES 1 #endif -#ifdef __FreeBSD__ -# define HAVE_FUTIMES +/* FIXME exact copy of the #ifdef guard in uv-unix.h */ +#if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060) \ + || defined(__FreeBSD__) \ + || defined(__OpenBSD__) \ + || defined(__NetBSD__) +# define HAVE_KQUEUE 1 #endif #define container_of(ptr, type, member) \ @@ -74,13 +74,15 @@ /* flags */ enum { - UV_CLOSING = 0x00000001, /* uv_close() called but not finished. */ - UV_CLOSED = 0x00000002, /* close(2) finished. */ - UV_READING = 0x00000004, /* uv_read_start() called. */ - UV_SHUTTING = 0x00000008, /* uv_shutdown() called but not complete. */ - UV_SHUT = 0x00000010, /* Write side closed. */ - UV_READABLE = 0x00000020, /* The stream is readable */ - UV_WRITABLE = 0x00000040 /* The stream is writable */ + UV_CLOSING = 0x01, /* uv_close() called but not finished. */ + UV_CLOSED = 0x02, /* close(2) finished. */ + UV_READING = 0x04, /* uv_read_start() called. */ + UV_SHUTTING = 0x08, /* uv_shutdown() called but not complete. */ + UV_SHUT = 0x10, /* Write side closed. */ + UV_READABLE = 0x20, /* The stream is readable */ + UV_WRITABLE = 0x40, /* The stream is writable */ + UV_TCP_NODELAY = 0x080, /* Disable Nagle. */ + UV_TCP_KEEPALIVE = 0x100 /* Turn on keep-alive. */ }; size_t uv__strlcpy(char* dst, const char* src, size_t size); @@ -96,8 +98,6 @@ int uv__socket(int domain, int type, int protocol); /* error */ uv_err_code uv_translate_sys_error(int sys_errno); -uv_err_t uv_err_new(uv_loop_t* loop, int sys_error); -uv_err_t uv_err_new_artificial(uv_loop_t* loop, int code); void uv_fatal_error(const int errorno, const char* syscall); /* stream */ @@ -113,6 +113,8 @@ int uv__connect(uv_connect_t* req, uv_stream_t* stream, struct sockaddr* addr, /* tcp */ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb); +int uv__tcp_nodelay(uv_tcp_t* handle, int enable); +int uv__tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay); /* pipe */ int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); diff --git a/src/rt/libuv/src/unix/kqueue.c b/src/rt/libuv/src/unix/kqueue.c new file mode 100644 index 00000000000..c2cb7194aab --- /dev/null +++ b/src/rt/libuv/src/unix/kqueue.c @@ -0,0 +1,141 @@ +/* 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. + */ + +#include "uv.h" +#include "internal.h" + +#include <assert.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> + +#if HAVE_KQUEUE + +#include <sys/sysctl.h> +#include <sys/types.h> +#include <sys/event.h> +#include <fcntl.h> +#include <time.h> + +static void uv__fs_event(EV_P_ ev_io* w, int revents); + + +static void uv__fs_event_start(uv_fs_event_t* handle) { + ev_io_init(&handle->event_watcher, + uv__fs_event, + handle->fd, + EV_LIBUV_KQUEUE_HACK); + ev_io_start(handle->loop->ev, &handle->event_watcher); +} + + +static void uv__fs_event_stop(uv_fs_event_t* handle) { + ev_io_stop(handle->loop->ev, &handle->event_watcher); +} + + +static void uv__fs_event(EV_P_ ev_io* w, int revents) { + uv_fs_event_t* handle; + int events; + + assert(revents == EV_LIBUV_KQUEUE_HACK); + + handle = container_of(w, uv_fs_event_t, event_watcher); + + if (handle->fflags & (NOTE_ATTRIB | NOTE_EXTEND)) + events = UV_CHANGE; + else + events = UV_RENAME; + + handle->cb(handle, NULL, events, 0); + + uv__fs_event_stop(handle); + + /* File watcher operates in one-shot mode, re-arm it. */ + if (handle->fd != -1) + uv__fs_event_start(handle); +} + + +/* Called by libev, don't touch. */ +void uv__kqueue_hack(EV_P_ int fflags, ev_io *w) { + uv_fs_event_t* handle; + + handle = container_of(w, uv_fs_event_t, event_watcher); + handle->fflags = fflags; +} + + +int uv_fs_event_init(uv_loop_t* loop, + uv_fs_event_t* handle, + const char* filename, + uv_fs_event_cb cb) { + int fd; + + if (cb == NULL) { + uv__set_sys_error(loop, EINVAL); + return -1; + } + + /* TODO open asynchronously - but how do we report back errors? */ + if ((fd = open(filename, O_RDONLY)) == -1) { + uv__set_sys_error(loop, errno); + return -1; + } + + uv__handle_init(loop, (uv_handle_t*)handle, UV_FS_EVENT); + handle->filename = strdup(filename); + handle->fflags = 0; + handle->cb = cb; + handle->fd = fd; + uv__fs_event_start(handle); + + return 0; +} + + +void uv__fs_event_destroy(uv_fs_event_t* handle) { + free(handle->filename); + uv__close(handle->fd); + handle->fd = -1; +} + +#else /* !HAVE_KQUEUE */ + +int uv_fs_event_init(uv_loop_t* loop, + uv_fs_event_t* handle, + const char* filename, + uv_fs_event_cb cb) { + uv__set_sys_error(loop, ENOSYS); + return -1; +} + + +void uv__fs_event_destroy(uv_fs_event_t* handle) { + assert(0 && "unreachable"); +} + + +/* Called by libev, don't touch. */ +void uv__kqueue_hack(EV_P_ int fflags, ev_io *w) { + assert(0 && "unreachable"); +} + +#endif /* HAVE_KQUEUE */ diff --git a/src/rt/libuv/src/unix/linux.c b/src/rt/libuv/src/unix/linux.c index 0b4ce64ddf3..e7ca1840f20 100644 --- a/src/rt/libuv/src/unix/linux.c +++ b/src/rt/libuv/src/unix/linux.c @@ -28,6 +28,7 @@ #include <errno.h> #include <sys/inotify.h> +#include <sys/sysinfo.h> #include <unistd.h> #include <time.h> @@ -52,6 +53,16 @@ uint64_t uv_hrtime() { return (ts.tv_sec * NANOSEC + ts.tv_nsec); } +void uv_loadavg(double avg[3]) { + struct sysinfo info; + + if (sysinfo(&info) < 0) return; + + avg[0] = (double) info.loads[0] / 65536.0; + avg[1] = (double) info.loads[1] / 65536.0; + avg[2] = (double) info.loads[2] / 65536.0; +} + int uv_exepath(char* buffer, size_t* size) { if (!buffer || !size) { @@ -64,6 +75,13 @@ int uv_exepath(char* buffer, size_t* size) { return 0; } +uint64_t uv_get_free_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES); +} + +uint64_t uv_get_total_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES); +} static int new_inotify_fd(void) { #if defined(IN_NONBLOCK) && defined(IN_CLOEXEC) @@ -126,6 +144,9 @@ static void uv__inotify_read(EV_P_ ev_io* w, int revents) { filename = e->len ? e->name : basename_r(handle->filename); handle->cb(handle, filename, events, 0); + + if (handle->fd == -1) + break; } } while (handle->fd != -1); /* handle might've been closed by callback */ @@ -145,7 +166,7 @@ int uv_fs_event_init(uv_loop_t* loop, * keep creating new inotify fds. */ if ((fd = new_inotify_fd()) == -1) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -158,7 +179,7 @@ int uv_fs_event_init(uv_loop_t* loop, | IN_MOVED_TO; if (inotify_add_watch(fd, filename, flags) == -1) { - uv_err_new(loop, errno); + uv__set_sys_error(loop, errno); uv__close(fd); return -1; } @@ -180,4 +201,5 @@ void uv__fs_event_destroy(uv_fs_event_t* handle) { uv__close(handle->fd); handle->fd = -1; free(handle->filename); + handle->filename = NULL; } diff --git a/src/rt/libuv/src/unix/netbsd.c b/src/rt/libuv/src/unix/netbsd.c index 0ba79997545..8b91f65c74a 100644 --- a/src/rt/libuv/src/unix/netbsd.c +++ b/src/rt/libuv/src/unix/netbsd.c @@ -24,6 +24,7 @@ #include <string.h> #include <errno.h> +#include <sys/resource.h> #include <sys/types.h> #include <sys/sysctl.h> @@ -40,6 +41,17 @@ uint64_t uv_hrtime(void) { return (ts.tv_sec * NANOSEC + ts.tv_nsec); } +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} int uv_exepath(char* buffer, size_t* size) { uint32_t usize; @@ -70,16 +82,31 @@ int uv_exepath(char* buffer, size_t* size) { return 0; } +uint64_t uv_get_free_memory(void) { + struct uvmexp info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_UVMEXP}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } -int uv_fs_event_init(uv_loop_t* loop, - uv_fs_event_t* handle, - const char* filename, - uv_fs_event_cb cb) { - uv_err_new(loop, ENOSYS); - return -1; + return (uint64_t) info.free * psysconf(_SC_PAGESIZE); } +uint64_t uv_get_total_memory(void) { +#if defined(HW_PHYSMEM64) + uint64_t info; + int which[] = {CTL_HW, HW_PHYSMEM64}; +#else + unsigned int info; + int which[] = {CTL_HW, HW_PHYSMEM}; +#endif + size_t size = sizeof(info); + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } -void uv__fs_event_destroy(uv_fs_event_t* handle) { - assert(0 && "implement me"); + return (uint64_t) info; } diff --git a/src/rt/libuv/src/unix/openbsd.c b/src/rt/libuv/src/unix/openbsd.c new file mode 100644 index 00000000000..55f8ceb0ded --- /dev/null +++ b/src/rt/libuv/src/unix/openbsd.c @@ -0,0 +1,123 @@ +/* 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. + */ + +#include <sys/types.h> +#include <sys/param.h> +#include <sys/resource.h> +#include <sys/time.h> +#include <sys/sysctl.h> + +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#undef NANOSEC +#define NANOSEC 1000000000 + + +uint64_t uv_hrtime(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * NANOSEC + ts.tv_nsec); +} + +void uv_loadavg(double avg[3]) { + struct loadavg info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_LOADAVG}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) return; + + avg[0] = (double) info.ldavg[0] / info.fscale; + avg[1] = (double) info.ldavg[1] / info.fscale; + avg[2] = (double) info.ldavg[2] / info.fscale; +} + +int uv_exepath(char* buffer, size_t* size) { + int mib[4]; + char **argsbuf = NULL; + char **argsbuf_tmp; + size_t argsbuf_size = 100U; + size_t exepath_size; + pid_t mypid; + int status = -1; + + if (!buffer || !size) { + goto out; + } + mypid = getpid(); + for (;;) { + if ((argsbuf_tmp = realloc(argsbuf, argsbuf_size)) == NULL) { + goto out; + } + argsbuf = argsbuf_tmp; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC_ARGS; + mib[2] = mypid; + mib[3] = KERN_PROC_ARGV; + if (sysctl(mib, 4, argsbuf, &argsbuf_size, NULL, 0) == 0) { + break; + } + if (errno != ENOMEM) { + goto out; + } + argsbuf_size *= 2U; + } + if (argsbuf[0] == NULL) { + goto out; + } + exepath_size = strlen(argsbuf[0]); + if (exepath_size >= *size) { + goto out; + } + memcpy(buffer, argsbuf[0], exepath_size + 1U); + *size = exepath_size; + status = 0; + +out: + free(argsbuf); + + return status; +} + +uint64_t uv_get_free_memory(void) { + struct uvmexp info; + size_t size = sizeof(info); + int which[] = {CTL_VM, VM_UVMEXP}; + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } + + return (uint64_t) info.free * sysconf(_SC_PAGESIZE); +} + +uint64_t uv_get_total_memory(void) { + uint64_t info; + int which[] = {CTL_HW, HW_PHYSMEM64}; + size_t size = sizeof(info); + + if (sysctl(which, 2, &info, &size, NULL, 0) < 0) { + return -1; + } + + return (uint64_t) info; +} diff --git a/src/rt/libuv/src/unix/pipe.c b/src/rt/libuv/src/unix/pipe.c index 50dc635b7e4..dabdcd6cff8 100644 --- a/src/rt/libuv/src/unix/pipe.c +++ b/src/rt/libuv/src/unix/pipe.c @@ -29,10 +29,12 @@ #include <unistd.h> #include <stdlib.h> -int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle) { + +int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { uv__stream_init(loop, (uv_stream_t*)handle, UV_NAMED_PIPE); loop->counters.pipe_init++; handle->pipe_fname = NULL; + handle->ipc = ipc; return 0; } @@ -53,13 +55,13 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { /* Already bound? */ if (handle->fd >= 0) { - uv_err_new_artificial(handle->loop, UV_EINVAL); + uv__set_artificial_error(handle->loop, UV_EINVAL); goto out; } /* Make a copy of the file name, it outlives this function's scope. */ if ((pipe_fname = strdup(name)) == NULL) { - uv_err_new(handle->loop, ENOMEM); + uv__set_sys_error(handle->loop, ENOMEM); goto out; } @@ -67,7 +69,7 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { name = NULL; if ((sockfd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); goto out; } @@ -88,7 +90,7 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { || unlink(pipe_fname) == -1 || bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr) == -1) { /* Convert ENOENT to EACCES for compatibility with Windows. */ - uv_err_new(handle->loop, (errno == ENOENT) ? EACCES : errno); + uv__set_sys_error(handle->loop, (errno == ENOENT) ? EACCES : errno); goto out; } } @@ -125,13 +127,13 @@ int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { status = -1; if (handle->fd == -1) { - uv_err_new_artificial(handle->loop, UV_EINVAL); + uv__set_artificial_error(handle->loop, UV_EINVAL); goto out; } assert(handle->fd >= 0); if ((status = listen(handle->fd, backlog)) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); } else { handle->connection_cb = cb; ev_io_init(&handle->read_watcher, uv__pipe_accept, handle->fd, EV_READ); @@ -190,7 +192,7 @@ int uv_pipe_connect(uv_connect_t* req, status = -1; if ((sockfd = uv__socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); goto out; } @@ -207,7 +209,7 @@ int uv_pipe_connect(uv_connect_t* req, while (r == -1 && errno == EINTR); if (r == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); uv__close(sockfd); goto out; } @@ -257,7 +259,7 @@ void uv__pipe_accept(EV_P_ ev_io* watcher, int revents) { if (errno == EAGAIN || errno == EWOULDBLOCK) { assert(0 && "EAGAIN on uv__accept(pipefd)"); } else { - uv_err_new(pipe->loop, errno); + uv__set_sys_error(pipe->loop, errno); } } else { pipe->accepted_fd = sockfd; diff --git a/src/rt/libuv/src/unix/process.c b/src/rt/libuv/src/unix/process.c index 34f12d1737f..a76864500c0 100644 --- a/src/rt/libuv/src/unix/process.c +++ b/src/rt/libuv/src/unix/process.c @@ -1,4 +1,3 @@ - /* Copyright Joyent, Inc. and other Node contributors. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -63,6 +62,34 @@ static void uv__chld(EV_P_ ev_child* watcher, int revents) { } } + +/* + * Used for initializing stdio streams like options.stdin_stream. Returns + * zero on success. + */ +static int uv__process_init_pipe(uv_pipe_t* handle, int fds[2]) { + if (handle->type != UV_NAMED_PIPE) { + errno = EINVAL; + return -1; + } + + if (handle->ipc) { + if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) { + return -1; + } + } else { + if (pipe(fds) < 0) { + return -1; + } + } + + uv__cloexec(fds[0], 1); + uv__cloexec(fds[1], 1); + + return 0; +} + + #ifndef SPAWN_WAIT_EXEC # define SPAWN_WAIT_EXEC 1 #endif @@ -83,49 +110,26 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, #endif int status; pid_t pid; + int flags; uv__handle_init(loop, (uv_handle_t*)process, UV_PROCESS); loop->counters.process_init++; process->exit_cb = options.exit_cb; - if (options.stdin_stream) { - if (options.stdin_stream->type != UV_NAMED_PIPE) { - errno = EINVAL; - goto error; - } - - if (pipe(stdin_pipe) < 0) { - goto error; - } - uv__cloexec(stdin_pipe[0], 1); - uv__cloexec(stdin_pipe[1], 1); + if (options.stdin_stream && + uv__process_init_pipe(options.stdin_stream, stdin_pipe)) { + goto error; } - if (options.stdout_stream) { - if (options.stdout_stream->type != UV_NAMED_PIPE) { - errno = EINVAL; - goto error; - } - - if (pipe(stdout_pipe) < 0) { - goto error; - } - uv__cloexec(stdout_pipe[0], 1); - uv__cloexec(stdout_pipe[1], 1); + if (options.stdout_stream && + uv__process_init_pipe(options.stdout_stream, stdout_pipe)) { + goto error; } - if (options.stderr_stream) { - if (options.stderr_stream->type != UV_NAMED_PIPE) { - errno = EINVAL; - goto error; - } - - if (pipe(stderr_pipe) < 0) { - goto error; - } - uv__cloexec(stderr_pipe[0], 1); - uv__cloexec(stderr_pipe[1], 1); + if (options.stderr_stream && + uv__process_init_pipe(options.stderr_stream, stderr_pipe)) { + goto error; } /* This pipe is used by the parent to wait until @@ -154,7 +158,7 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, goto error; } # else - if (pipe(signal_pipe) < 0) { + if (socketpair(AF_UNIX, SOCK_STREAM, 0, signal_pipe) < 0) { goto error; } uv__cloexec(signal_pipe[0], 1); @@ -232,13 +236,8 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, } while (status == -1 && (errno == EINTR || errno == ENOMEM)); + assert((status == 1) && "poll() on pipe read end failed"); uv__close(signal_pipe[0]); - uv__close(signal_pipe[1]); - - assert((status == 1) - && "poll() on pipe read end failed"); - assert((pfd.revents & POLLHUP) == POLLHUP - && "no POLLHUP on pipe read end"); #endif process->pid = pid; @@ -252,8 +251,9 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, assert(stdin_pipe[0] >= 0); uv__close(stdin_pipe[0]); uv__nonblock(stdin_pipe[1], 1); + flags = UV_WRITABLE | (options.stdin_stream->ipc ? UV_READABLE : 0); uv__stream_open((uv_stream_t*)options.stdin_stream, stdin_pipe[1], - UV_WRITABLE); + flags); } if (stdout_pipe[0] >= 0) { @@ -261,8 +261,9 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, assert(stdout_pipe[1] >= 0); uv__close(stdout_pipe[1]); uv__nonblock(stdout_pipe[0], 1); + flags = UV_READABLE | (options.stdout_stream->ipc ? UV_WRITABLE : 0); uv__stream_open((uv_stream_t*)options.stdout_stream, stdout_pipe[0], - UV_READABLE); + flags); } if (stderr_pipe[0] >= 0) { @@ -270,14 +271,15 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, assert(stderr_pipe[1] >= 0); uv__close(stderr_pipe[1]); uv__nonblock(stderr_pipe[0], 1); + flags = UV_READABLE | (options.stderr_stream->ipc ? UV_WRITABLE : 0); uv__stream_open((uv_stream_t*)options.stderr_stream, stderr_pipe[0], - UV_READABLE); + flags); } return 0; error: - uv_err_new(process->loop, errno); + uv__set_sys_error(process->loop, errno); uv__close(stdin_pipe[0]); uv__close(stdin_pipe[1]); uv__close(stdout_pipe[0]); @@ -292,7 +294,7 @@ int uv_process_kill(uv_process_t* process, int signum) { int r = kill(process->pid, signum); if (r) { - uv_err_new(process->loop, errno); + uv__set_sys_error(process->loop, errno); return -1; } else { return 0; diff --git a/src/rt/libuv/src/unix/stream.c b/src/rt/libuv/src/unix/stream.c index 3983ca23b6d..2e5bde0143c 100644 --- a/src/rt/libuv/src/unix/stream.c +++ b/src/rt/libuv/src/unix/stream.c @@ -29,6 +29,8 @@ #include <string.h> #include <sys/uio.h> +#include <stdio.h> + static void uv__stream_connect(uv_stream_t*); static void uv__write(uv_stream_t* stream); @@ -51,6 +53,7 @@ void uv__stream_init(uv_loop_t* loop, uv_stream_t* stream, uv_handle_type type) { uv__handle_init(loop, (uv_handle_t*)stream, type); + loop->counters.stream_init++; stream->alloc_cb = NULL; stream->close_cb = NULL; @@ -81,14 +84,26 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) { assert(fd >= 0); stream->fd = fd; - ((uv_handle_t*)stream)->flags |= flags; + stream->flags |= flags; - /* Reuse the port address if applicable. */ - yes = 1; - if (stream->type == UV_TCP - && setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { - uv_err_new(stream->loop, errno); - return -1; + if (stream->type == UV_TCP) { + /* Reuse the port address if applicable. */ + yes = 1; + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes) == -1) { + uv__set_sys_error(stream->loop, errno); + return -1; + } + + if ((stream->flags & UV_TCP_NODELAY) && + uv__tcp_nodelay((uv_tcp_t*)stream, 1)) { + return -1; + } + + /* TODO Use delay the user passed in. */ + if ((stream->flags & UV_TCP_KEEPALIVE) && + uv__tcp_keepalive((uv_tcp_t*)stream, 1, 60)) { + return -1; + } } /* Associate the fd with each ev_io watcher. */ @@ -118,7 +133,7 @@ void uv__stream_destroy(uv_stream_t* stream) { free(req->bufs); if (req->cb) { - uv_err_new_artificial(req->handle->loop, UV_EINTR); + uv__set_artificial_error(req->handle->loop, UV_EINTR); req->cb(req, -1); } } @@ -129,7 +144,7 @@ void uv__stream_destroy(uv_stream_t* stream) { req = ngx_queue_data(q, uv_write_t, queue); if (req->cb) { - uv_err_new_artificial(stream->loop, req->error); + uv__set_artificial_error(stream->loop, req->error); req->cb(req, req->error ? -1 : 0); } } @@ -167,7 +182,7 @@ void uv__server_io(EV_P_ ev_io* watcher, int revents) { /* TODO special trick. unlock reserved socket, accept, close. */ return; } else { - uv_err_new(stream->loop, errno); + uv__set_sys_error(stream->loop, errno); stream->connection_cb((uv_stream_t*)stream, -1); } } else { @@ -199,15 +214,15 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) { streamClient = (uv_stream_t*)client; if (streamServer->accepted_fd < 0) { - uv_err_new(server->loop, EAGAIN); + uv__set_sys_error(server->loop, EAGAIN); goto out; } if (uv__stream_open(streamClient, streamServer->accepted_fd, UV_READABLE | UV_WRITABLE)) { /* TODO handle error */ - streamServer->accepted_fd = -1; uv__close(streamServer->accepted_fd); + streamServer->accepted_fd = -1; goto out; } @@ -272,12 +287,12 @@ static void uv__drain(uv_stream_t* stream) { if (shutdown(stream->fd, SHUT_WR)) { /* Error. Report it. User should call uv_close(). */ - uv_err_new(stream->loop, errno); + uv__set_sys_error(stream->loop, errno); if (req->cb) { req->cb(req, -1); } } else { - uv_err_new(stream->loop, 0); + uv__set_sys_error(stream->loop, 0); ((uv_handle_t*) stream)->flags |= UV_SHUT; if (req->cb) { req->cb(req, 0); @@ -349,14 +364,43 @@ static void uv__write(uv_stream_t* stream) { * inside the iov each time we write. So there is no need to offset it. */ - do { - if (iovcnt == 1) { - n = write(stream->fd, iov[0].iov_base, iov[0].iov_len); - } else { - n = writev(stream->fd, iov, iovcnt); + if (req->send_handle) { + struct msghdr msg; + char scratch[64]; + struct cmsghdr *cmsg; + int fd_to_send = req->send_handle->fd; + + assert(fd_to_send >= 0); + + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = iov; + msg.msg_iovlen = iovcnt; + msg.msg_flags = 0; + + msg.msg_control = (void*) scratch; + msg.msg_controllen = CMSG_LEN(sizeof(fd_to_send)); + + cmsg = CMSG_FIRSTHDR(&msg); + cmsg->cmsg_level = SOL_SOCKET; + cmsg->cmsg_type = SCM_RIGHTS; + cmsg->cmsg_len = msg.msg_controllen; + *(int*) CMSG_DATA(cmsg) = fd_to_send; + + do { + n = sendmsg(stream->fd, &msg, 0); + } + while (n == -1 && errno == EINTR); + } else { + do { + if (iovcnt == 1) { + n = write(stream->fd, iov[0].iov_base, iov[0].iov_len); + } else { + n = writev(stream->fd, iov, iovcnt); + } } + while (n == -1 && errno == EINTR); } - while (n == -1 && errno == EINTR); if (n < 0) { if (errno != EAGAIN) { @@ -428,7 +472,7 @@ static void uv__write_callbacks(uv_stream_t* stream) { /* NOTE: call callback AFTER freeing the request data. */ if (req->cb) { - uv_err_new_artificial(stream->loop, req->error); + uv__set_artificial_error(stream->loop, req->error); req->cb(req, req->error ? -1 : 0); } @@ -447,12 +491,16 @@ static void uv__write_callbacks(uv_stream_t* stream) { static void uv__read(uv_stream_t* stream) { uv_buf_t buf; ssize_t nread; + struct msghdr msg; + struct cmsghdr* cmsg; + char cmsg_space[64]; struct ev_loop* ev = stream->loop->ev; /* XXX: Maybe instead of having UV_READING we just test if * tcp->read_cb is NULL or not? */ - while (stream->read_cb && ((uv_handle_t*)stream)->flags & UV_READING) { + while ((stream->read_cb || stream->read2_cb) && + stream->flags & UV_READING) { assert(stream->alloc_cb); buf = stream->alloc_cb((uv_handle_t*)stream, 64 * 1024); @@ -460,10 +508,29 @@ static void uv__read(uv_stream_t* stream) { assert(buf.base); assert(stream->fd >= 0); - do { - nread = read(stream->fd, buf.base, buf.len); + if (stream->read_cb) { + do { + nread = read(stream->fd, buf.base, buf.len); + } + while (nread < 0 && errno == EINTR); + } else { + assert(stream->read2_cb); + /* read2_cb uses recvmsg */ + msg.msg_flags = 0; + msg.msg_iov = (struct iovec*) &buf; + msg.msg_iovlen = 1; + msg.msg_name = NULL; + msg.msg_namelen = 0; + /* Set up to receive a descriptor even if one isn't in the message */ + msg.msg_controllen = 64; + msg.msg_control = (void *) cmsg_space; + + do { + nread = recvmsg(stream->fd, &msg, 0); + } + while (nread < 0 && errno == EINTR); } - while (nread < 0 && errno == EINTR); + if (nread < 0) { /* Error */ @@ -472,25 +539,85 @@ static void uv__read(uv_stream_t* stream) { if (stream->flags & UV_READING) { ev_io_start(ev, &stream->read_watcher); } - uv_err_new(stream->loop, EAGAIN); - stream->read_cb(stream, 0, buf); + uv__set_sys_error(stream->loop, EAGAIN); + + if (stream->read_cb) { + stream->read_cb(stream, 0, buf); + } else { + stream->read2_cb((uv_pipe_t*)stream, 0, buf, UV_UNKNOWN_HANDLE); + } + return; } else { /* Error. User should call uv_close(). */ - uv_err_new(stream->loop, errno); - stream->read_cb(stream, -1, buf); + uv__set_sys_error(stream->loop, errno); + + if (stream->read_cb) { + stream->read_cb(stream, -1, buf); + } else { + stream->read2_cb((uv_pipe_t*)stream, -1, buf, UV_UNKNOWN_HANDLE); + } + assert(!ev_is_active(&stream->read_watcher)); return; } + } else if (nread == 0) { /* EOF */ - uv_err_new_artificial(stream->loop, UV_EOF); + uv__set_artificial_error(stream->loop, UV_EOF); ev_io_stop(ev, &stream->read_watcher); - stream->read_cb(stream, -1, buf); + + if (stream->read_cb) { + stream->read_cb(stream, -1, buf); + } else { + stream->read2_cb((uv_pipe_t*)stream, -1, buf, UV_UNKNOWN_HANDLE); + } return; } else { /* Successful read */ - stream->read_cb(stream, nread, buf); + ssize_t buflen = buf.len; + + if (stream->read_cb) { + stream->read_cb(stream, nread, buf); + } else { + assert(stream->read2_cb); + + /* + * XXX: Some implementations can send multiple file descriptors in a + * single message. We should be using CMSG_NXTHDR() to walk the + * chain to get at them all. This would require changing the API to + * hand these back up the caller, is a pain. + */ + + for (cmsg = CMSG_FIRSTHDR(&msg); + msg.msg_controllen > 0 && cmsg != NULL; + cmsg = CMSG_NXTHDR(&msg, cmsg)) { + + if (cmsg->cmsg_type == SCM_RIGHTS) { + if (stream->accepted_fd != -1) { + fprintf(stderr, "(libuv) ignoring extra FD received\n"); + } + + stream->accepted_fd = *(int *) CMSG_DATA(cmsg); + + } else { + fprintf(stderr, "ignoring non-SCM_RIGHTS ancillary data: %d\n", + cmsg->cmsg_type); + } + } + + + if (stream->accepted_fd >= 0) { + stream->read2_cb((uv_pipe_t*)stream, nread, buf, UV_TCP); + } else { + stream->read2_cb((uv_pipe_t*)stream, nread, buf, UV_UNKNOWN_HANDLE); + } + } + + /* Return if we didn't fill the buffer, there is no more data to read. */ + if (nread < buflen) { + return; + } } } } @@ -505,7 +632,7 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* stream, uv_shutdown_cb cb) { stream->flags & UV_SHUT || stream->flags & UV_CLOSED || stream->flags & UV_CLOSING) { - uv_err_new(stream->loop, EINVAL); + uv__set_sys_error(stream->loop, EINVAL); return -1; } @@ -593,7 +720,7 @@ static void uv__stream_connect(uv_stream_t* stream) { return; } else { /* Error */ - uv_err_new(stream->loop, error); + uv__set_sys_error(stream->loop, error); stream->connect_req = NULL; if (req->cb) { @@ -610,7 +737,7 @@ int uv__connect(uv_connect_t* req, uv_stream_t* stream, struct sockaddr* addr, if (stream->fd <= 0) { if ((sockfd = uv__socket(addr->sa_family, SOCK_STREAM, 0)) == -1) { - uv_err_new(stream->loop, errno); + uv__set_sys_error(stream->loop, errno); return -1; } @@ -627,12 +754,12 @@ int uv__connect(uv_connect_t* req, uv_stream_t* stream, struct sockaddr* addr, ngx_queue_init(&req->queue); if (stream->connect_req) { - uv_err_new(stream->loop, EALREADY); + uv__set_sys_error(stream->loop, EALREADY); return -1; } if (stream->type != UV_TCP) { - uv_err_new(stream->loop, ENOTSOCK); + uv__set_sys_error(stream->loop, ENOTSOCK); return -1; } @@ -656,7 +783,7 @@ int uv__connect(uv_connect_t* req, uv_stream_t* stream, struct sockaddr* addr, break; default: - uv_err_new(stream->loop, errno); + uv__set_sys_error(stream->loop, errno); return -1; } } @@ -672,11 +799,8 @@ int uv__connect(uv_connect_t* req, uv_stream_t* stream, struct sockaddr* addr, } -/* The buffers to be written must remain valid until the callback is called. - * This is not required for the uv_buf_t array. - */ -int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, - uv_write_cb cb) { +int uv_write2(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, + uv_stream_t* send_handle, uv_write_cb cb) { int empty_queue; assert((stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || @@ -684,10 +808,17 @@ int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, "uv_write (unix) does not yet support other types of streams"); if (stream->fd < 0) { - uv_err_new(stream->loop, EBADF); + uv__set_sys_error(stream->loop, EBADF); return -1; } + if (send_handle) { + if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc) { + uv__set_sys_error(stream->loop, EOPNOTSUPP); + return -1; + } + } + empty_queue = (stream->write_queue_size == 0); /* Initialize the req */ @@ -695,6 +826,7 @@ int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, req->cb = cb; req->handle = stream; req->error = 0; + req->send_handle = send_handle; req->type = UV_WRITE; ngx_queue_init(&req->queue); @@ -737,12 +869,22 @@ int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, } -int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb) { +/* The buffers to be written must remain valid until the callback is called. + * This is not required for the uv_buf_t array. + */ +int uv_write(uv_write_t* req, uv_stream_t* stream, uv_buf_t bufs[], int bufcnt, + uv_write_cb cb) { + return uv_write2(req, stream, bufs, bufcnt, NULL, cb); +} + + +int uv__read_start_common(uv_stream_t* stream, uv_alloc_cb alloc_cb, + uv_read_cb read_cb, uv_read2_cb read2_cb) { assert(stream->type == UV_TCP || stream->type == UV_NAMED_PIPE || stream->type == UV_TTY); if (stream->flags & UV_CLOSING) { - uv_err_new(stream->loop, EINVAL); + uv__set_sys_error(stream->loop, EINVAL); return -1; } @@ -759,6 +901,7 @@ int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb) assert(alloc_cb); stream->read_cb = read_cb; + stream->read2_cb = read2_cb; stream->alloc_cb = alloc_cb; /* These should have been set by uv_tcp_init. */ @@ -769,14 +912,24 @@ int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, uv_read_cb read_cb) } -int uv_read_stop(uv_stream_t* stream) { - uv_tcp_t* tcp = (uv_tcp_t*)stream; +int uv_read_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + return uv__read_start_common(stream, alloc_cb, read_cb, NULL); +} - ((uv_handle_t*)tcp)->flags &= ~UV_READING; - ev_io_stop(tcp->loop->ev, &tcp->read_watcher); - tcp->read_cb = NULL; - tcp->alloc_cb = NULL; +int uv_read2_start(uv_stream_t* stream, uv_alloc_cb alloc_cb, + uv_read2_cb read_cb) { + return uv__read_start_common(stream, alloc_cb, NULL, read_cb); +} + + +int uv_read_stop(uv_stream_t* stream) { + ev_io_stop(stream->loop->ev, &stream->read_watcher); + stream->flags &= ~UV_READING; + stream->read_cb = NULL; + stream->read2_cb = NULL; + stream->alloc_cb = NULL; return 0; } diff --git a/src/rt/libuv/src/unix/sunos.c b/src/rt/libuv/src/unix/sunos.c index 0b5c03b5a69..c0bfe32e039 100644 --- a/src/rt/libuv/src/unix/sunos.c +++ b/src/rt/libuv/src/unix/sunos.c @@ -19,6 +19,7 @@ */ #include "uv.h" +#include "internal.h" #include <stdio.h> #include <stdint.h> @@ -26,7 +27,9 @@ #include <errno.h> #include <sys/time.h> +#include <sys/loadavg.h> #include <unistd.h> +#include <kstat.h> uint64_t uv_hrtime() { @@ -63,11 +66,26 @@ int uv_exepath(char* buffer, size_t* size) { } +uint64_t uv_get_free_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES); +} + + +uint64_t uv_get_total_memory(void) { + return (uint64_t) sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES); +} + + +void uv_loadavg(double avg[3]) { + (void) getloadavg(avg, 3); +} + + int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, const char* filename, uv_fs_event_cb cb) { - uv_err_new(loop, ENOSYS); + uv__set_sys_error(loop, ENOSYS); return -1; } diff --git a/src/rt/libuv/src/unix/tcp.c b/src/rt/libuv/src/unix/tcp.c index 9f14c1b6c0f..67ed217196d 100644 --- a/src/rt/libuv/src/unix/tcp.c +++ b/src/rt/libuv/src/unix/tcp.c @@ -33,10 +33,10 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* tcp) { } -static int uv__tcp_bind(uv_tcp_t* tcp, - int domain, - struct sockaddr* addr, - int addrsize) { +static int uv__bind(uv_tcp_t* tcp, + int domain, + struct sockaddr* addr, + int addrsize) { int saved_errno; int status; @@ -45,7 +45,7 @@ static int uv__tcp_bind(uv_tcp_t* tcp, if (tcp->fd < 0) { if ((tcp->fd = uv__socket(domain, SOCK_STREAM, 0)) == -1) { - uv_err_new(tcp->loop, errno); + uv__set_sys_error(tcp->loop, errno); goto out; } @@ -64,7 +64,7 @@ static int uv__tcp_bind(uv_tcp_t* tcp, if (errno == EADDRINUSE) { tcp->delayed_error = errno; } else { - uv_err_new(tcp->loop, errno); + uv__set_sys_error(tcp->loop, errno); goto out; } } @@ -76,29 +76,19 @@ out: } -int uv_tcp_bind(uv_tcp_t* tcp, struct sockaddr_in addr) { - if (addr.sin_family != AF_INET) { - uv_err_new(tcp->loop, EFAULT); - return -1; - } - - return uv__tcp_bind(tcp, - AF_INET, - (struct sockaddr*)&addr, - sizeof(struct sockaddr_in)); +int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { + return uv__bind(handle, + AF_INET, + (struct sockaddr*)&addr, + sizeof(struct sockaddr_in)); } -int uv_tcp_bind6(uv_tcp_t* tcp, struct sockaddr_in6 addr) { - if (addr.sin6_family != AF_INET6) { - uv_err_new(tcp->loop, EFAULT); - return -1; - } - - return uv__tcp_bind(tcp, - AF_INET6, - (struct sockaddr*)&addr, - sizeof(struct sockaddr_in6)); +int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { + return uv__bind(handle, + AF_INET6, + (struct sockaddr*)&addr, + sizeof(struct sockaddr_in6)); } @@ -112,13 +102,13 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, saved_errno = errno; if (handle->delayed_error) { - uv_err_new(handle->loop, handle->delayed_error); + uv__set_sys_error(handle->loop, handle->delayed_error); rv = -1; goto out; } if (handle->fd < 0) { - uv_err_new(handle->loop, EINVAL); + uv__set_sys_error(handle->loop, EINVAL); rv = -1; goto out; } @@ -127,7 +117,7 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, socklen = (socklen_t)*namelen; if (getsockname(handle->fd, name, &socklen) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); rv = -1; } else { *namelen = (int)socklen; @@ -149,13 +139,13 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, saved_errno = errno; if (handle->delayed_error) { - uv_err_new(handle->loop, handle->delayed_error); + uv__set_sys_error(handle->loop, handle->delayed_error); rv = -1; goto out; } if (handle->fd < 0) { - uv_err_new(handle->loop, EINVAL); + uv__set_sys_error(handle->loop, EINVAL); rv = -1; goto out; } @@ -164,7 +154,7 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, socklen = (socklen_t)*namelen; if (getpeername(handle->fd, name, &socklen) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); rv = -1; } else { *namelen = (int)socklen; @@ -180,13 +170,13 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { int r; if (tcp->delayed_error) { - uv_err_new(tcp->loop, tcp->delayed_error); + uv__set_sys_error(tcp->loop, tcp->delayed_error); return -1; } if (tcp->fd < 0) { if ((tcp->fd = uv__socket(AF_INET, SOCK_STREAM, 0)) == -1) { - uv_err_new(tcp->loop, errno); + uv__set_sys_error(tcp->loop, errno); return -1; } @@ -201,7 +191,7 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { r = listen(tcp->fd, backlog); if (r < 0) { - uv_err_new(tcp->loop, errno); + uv__set_sys_error(tcp->loop, errno); return -1; } @@ -216,65 +206,116 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { } -int uv_tcp_connect(uv_connect_t* req, +int uv__tcp_connect(uv_connect_t* req, uv_tcp_t* handle, struct sockaddr_in address, uv_connect_cb cb) { - int saved_errno; + int saved_errno = errno; int status; - saved_errno = errno; - status = -1; - - if (handle->type != UV_TCP) { - uv_err_new(handle->loop, EINVAL); - goto out; - } - - if (address.sin_family != AF_INET) { - uv_err_new(handle->loop, EINVAL); - goto out; - } - status = uv__connect(req, (uv_stream_t*)handle, (struct sockaddr*)&address, sizeof address, cb); -out: errno = saved_errno; return status; } -int uv_tcp_connect6(uv_connect_t* req, +int uv__tcp_connect6(uv_connect_t* req, uv_tcp_t* handle, struct sockaddr_in6 address, uv_connect_cb cb) { - int saved_errno; + int saved_errno = errno; int status; - saved_errno = errno; - status = -1; - - if (handle->type != UV_TCP) { - uv_err_new(handle->loop, EINVAL); - goto out; - } - - if (address.sin6_family != AF_INET6) { - uv_err_new(handle->loop, EINVAL); - goto out; - } - status = uv__connect(req, (uv_stream_t*)handle, (struct sockaddr*)&address, sizeof address, cb); -out: errno = saved_errno; return status; } + + +int uv__tcp_nodelay(uv_tcp_t* handle, int enable) { + if (setsockopt(handle->fd, + IPPROTO_TCP, + TCP_NODELAY, + &enable, + sizeof enable) == -1) { + uv__set_sys_error(handle->loop, errno); + return -1; + } + return 0; +} + + +int uv__tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { + if (setsockopt(handle->fd, + SOL_SOCKET, + SO_KEEPALIVE, + &enable, + sizeof enable) == -1) { + uv__set_sys_error(handle->loop, errno); + return -1; + } + +#ifdef TCP_KEEPIDLE + if (enable && setsockopt(handle->fd, + IPPROTO_TCP, + TCP_KEEPIDLE, + &delay, + sizeof delay) == -1) { + uv__set_sys_error(handle->loop, errno); + return -1; + } +#endif + +#ifdef TCP_KEEPALIVE + if (enable && setsockopt(handle->fd, + IPPROTO_TCP, + TCP_KEEPALIVE, + &delay, + sizeof delay) == -1) { + uv__set_sys_error(handle->loop, errno); + return -1; + } +#endif + + return 0; +} + + +int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { + if (handle->fd != -1 && uv__tcp_nodelay(handle, enable)) + return -1; + + if (enable) + handle->flags |= UV_TCP_NODELAY; + else + handle->flags &= ~UV_TCP_NODELAY; + + return 0; +} + + +int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { + if (handle->fd != -1 && uv__tcp_keepalive(handle, enable, delay)) + return -1; + + if (enable) + handle->flags |= UV_TCP_KEEPALIVE; + else + handle->flags &= ~UV_TCP_KEEPALIVE; + + /* TODO Store delay if handle->fd == -1 but don't want to enlarge + * uv_tcp_t with an int that's almost never used... + */ + + return 0; +} diff --git a/src/rt/libuv/src/unix/tty.c b/src/rt/libuv/src/unix/tty.c index 989c09d1bf1..32ac2c71c7d 100644 --- a/src/rt/libuv/src/unix/tty.c +++ b/src/rt/libuv/src/unix/tty.c @@ -29,43 +29,75 @@ #include <sys/ioctl.h> -int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd) { - uv__nonblock(fd, 1); +static int orig_termios_fd = -1; +static struct termios orig_termios; + + +int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, int fd, int readable) { uv__stream_init(loop, (uv_stream_t*)tty, UV_TTY); - uv__stream_open((uv_stream_t*)tty, fd, UV_READABLE | UV_WRITABLE); + + if (readable) { + uv__nonblock(fd, 1); + uv__stream_open((uv_stream_t*)tty, fd, UV_READABLE); + } else { + /* Note: writable tty we set to blocking mode. */ + uv__nonblock(fd, 0); + uv__stream_open((uv_stream_t*)tty, fd, UV_WRITABLE); + tty->blocking = 1; + } + loop->counters.tty_init++; + tty->mode = 0; return 0; } int uv_tty_set_mode(uv_tty_t* tty, int mode) { int fd = tty->fd; - struct termios orig_termios; /* in order to restore at exit */ struct termios raw; - if (tcgetattr(fd, &orig_termios) == -1) goto fatal; - - raw = orig_termios; /* modify the original mode */ - /* input modes: no break, no CR to NL, no parity check, no strip char, - * no start/stop output control. */ - raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); - /* output modes */ - raw.c_oflag |= (ONLCR); - /* control modes - set 8 bit chars */ - raw.c_cflag |= (CS8); - /* local modes - echoing off, canonical off, no extended functions, - * no signal chars (^Z,^C) */ - raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); - /* control chars - set return condition: min number of bytes and timer. - * We want read to return every single byte, without timeout. */ - raw.c_cc[VMIN] = 1; raw.c_cc[VTIME] = 0; /* 1 byte, no timer */ - - /* put terminal in raw mode after flushing */ - if (tcsetattr(fd, TCSAFLUSH, &raw) < 0) goto fatal; - return 0; + if (mode && tty->mode == 0) { + /* on */ + + if (tcgetattr(fd, &tty->orig_termios)) { + goto fatal; + } + + /* This is used for uv_tty_reset_mode() */ + if (orig_termios_fd == -1) { + orig_termios = tty->orig_termios; + orig_termios_fd = fd; + } + + raw = tty->orig_termios; + raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); + raw.c_oflag |= (ONLCR); + raw.c_cflag |= (CS8); + raw.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); + raw.c_cc[VMIN] = 1; + raw.c_cc[VTIME] = 0; + + /* Put terminal in raw mode after flushing */ + if (tcsetattr(fd, TCSAFLUSH, &raw)) { + goto fatal; + } + + tty->mode = 1; + return 0; + } else if (mode == 0 && tty->mode) { + /* off */ + + /* Put terminal in original mode after flushing */ + if (tcsetattr(fd, TCSAFLUSH, &tty->orig_termios)) { + goto fatal; + } + + tty->mode = 0; + return 0; + } fatal: - uv_err_new(tty->loop, ENOTTY); + uv__set_sys_error(tty->loop, errno); return -1; } @@ -74,7 +106,7 @@ int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { struct winsize ws; if (ioctl(tty->fd, TIOCGWINSZ, &ws) < 0) { - uv_err_new(tty->loop, errno); + uv__set_sys_error(tty->loop, errno); return -1; } @@ -89,7 +121,7 @@ uv_handle_type uv_guess_handle(uv_file file) { struct stat s; if (file < 0) { - uv_err_new(NULL, EINVAL); /* XXX Need loop? */ + uv__set_sys_error(NULL, EINVAL); /* XXX Need loop? */ return -1; } @@ -98,7 +130,7 @@ uv_handle_type uv_guess_handle(uv_file file) { } if (fstat(file, &s)) { - uv_err_new(NULL, errno); /* XXX Need loop? */ + uv__set_sys_error(NULL, errno); /* XXX Need loop? */ return -1; } @@ -108,3 +140,10 @@ uv_handle_type uv_guess_handle(uv_file file) { return UV_NAMED_PIPE; } + + +void uv_tty_reset_mode() { + if (orig_termios_fd >= 0) { + tcsetattr(orig_termios_fd, TCSANOW, &orig_termios); + } +} diff --git a/src/rt/libuv/src/unix/udp.c b/src/rt/libuv/src/unix/udp.c index 20e5f3798b9..15cd609bbec 100644 --- a/src/rt/libuv/src/unix/udp.c +++ b/src/rt/libuv/src/unix/udp.c @@ -34,8 +34,6 @@ static void uv__udp_run_pending(uv_udp_t* handle); static void uv__udp_recvmsg(uv_udp_t* handle); static void uv__udp_sendmsg(uv_udp_t* handle); static void uv__udp_io(EV_P_ ev_io* w, int events); -static int uv__udp_bind(uv_udp_t* handle, int domain, struct sockaddr* addr, - socklen_t len, unsigned flags); static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, int domain); static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr* addr, socklen_t addrlen, uv_udp_send_cb send_cb); @@ -84,7 +82,7 @@ void uv__udp_destroy(uv_udp_t* handle) { req = ngx_queue_data(q, uv_udp_send_t, queue); if (req->send_cb) { /* FIXME proper error code like UV_EABORTED */ - uv_err_new_artificial(handle->loop, UV_EINTR); + uv__set_artificial_error(handle->loop, UV_EINTR); req->send_cb(req, -1); } } @@ -187,7 +185,7 @@ static void uv__udp_run_completed(uv_udp_t* handle) { req->send_cb(req, 0); } else { - uv_err_new(handle->loop, -req->status); + uv__set_sys_error(handle->loop, -req->status); req->send_cb(req, -1); } } @@ -223,11 +221,11 @@ static void uv__udp_recvmsg(uv_udp_t* handle) { if (nread == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) { - uv_err_new(handle->loop, EAGAIN); + uv__set_sys_error(handle->loop, EAGAIN); handle->recv_cb(handle, 0, buf, NULL, 0); } else { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); handle->recv_cb(handle, -1, buf, NULL, 0); } } @@ -289,11 +287,11 @@ static void uv__udp_io(EV_P_ ev_io* w, int events) { } -static int uv__udp_bind(uv_udp_t* handle, - int domain, - struct sockaddr* addr, - socklen_t len, - unsigned flags) { +static int uv__bind(uv_udp_t* handle, + int domain, + struct sockaddr* addr, + socklen_t len, + unsigned flags) { int saved_errno; int status; int yes; @@ -301,27 +299,28 @@ static int uv__udp_bind(uv_udp_t* handle, saved_errno = errno; status = -1; + fd = -1; /* Check for bad flags. */ if (flags & ~UV_UDP_IPV6ONLY) { - uv_err_new(handle->loop, EINVAL); + uv__set_sys_error(handle->loop, EINVAL); goto out; } /* Cannot set IPv6-only mode on non-IPv6 socket. */ if ((flags & UV_UDP_IPV6ONLY) && domain != AF_INET6) { - uv_err_new(handle->loop, EINVAL); + uv__set_sys_error(handle->loop, EINVAL); goto out; } /* Check for already active socket. */ if (handle->fd != -1) { - uv_err_new_artificial(handle->loop, UV_EALREADY); + uv__set_artificial_error(handle->loop, UV_EALREADY); goto out; } if ((fd = uv__socket(domain, SOCK_DGRAM, 0)) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); goto out; } @@ -329,17 +328,17 @@ static int uv__udp_bind(uv_udp_t* handle, #ifdef IPV6_V6ONLY yes = 1; if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &yes, sizeof yes) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); goto out; } #else - uv_err_new((uv_handle_t*)handle, ENOTSUP); + uv__set_sys_error((uv_handle_t*)handle, ENOTSUP); goto out; #endif } if (bind(fd, addr, len) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); goto out; } @@ -388,7 +387,7 @@ static int uv__udp_maybe_deferred_bind(uv_udp_t* handle, int domain) { abort(); } - return uv__udp_bind(handle, domain, (struct sockaddr*)&taddr, addrlen, 0); + return uv__bind(handle, domain, (struct sockaddr*)&taddr, addrlen, 0); } @@ -416,7 +415,7 @@ static int uv__udp_send(uv_udp_send_t* req, req->bufs = req->bufsml; } else if ((req->bufs = malloc(bufcnt * sizeof(bufs[0]))) == NULL) { - uv_err_new(handle->loop, ENOMEM); + uv__set_sys_error(handle->loop, ENOMEM); return -1; } memcpy(req->bufs, bufs, bufcnt * sizeof(bufs[0])); @@ -442,21 +441,57 @@ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) { } -int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags) { - return uv__udp_bind(handle, - AF_INET, - (struct sockaddr*)&addr, - sizeof addr, - flags); +int uv__udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags) { + return uv__bind(handle, + AF_INET, + (struct sockaddr*)&addr, + sizeof addr, + flags); } -int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags) { - return uv__udp_bind(handle, - AF_INET6, - (struct sockaddr*)&addr, - sizeof addr, - flags); +int uv__udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags) { + return uv__bind(handle, + AF_INET6, + (struct sockaddr*)&addr, + sizeof addr, + flags); +} + + +int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, + const char* interface_addr, uv_membership membership) { + + int optname; + struct ip_mreq mreq; + memset(&mreq, 0, sizeof mreq); + + if (interface_addr) { + mreq.imr_interface.s_addr = inet_addr(interface_addr); + } else { + mreq.imr_interface.s_addr = htonl(INADDR_ANY); + } + + mreq.imr_multiaddr.s_addr = inet_addr(multicast_addr); + + switch (membership) { + case UV_JOIN_GROUP: + optname = IP_ADD_MEMBERSHIP; + break; + case UV_LEAVE_GROUP: + optname = IP_DROP_MEMBERSHIP; + break; + default: + uv__set_sys_error(handle->loop, EFAULT); + return -1; + } + + if (setsockopt(handle->fd, IPPROTO_IP, optname, (void*) &mreq, sizeof mreq) == -1) { + uv__set_sys_error(handle->loop, errno); + return -1; + } + + return 0; } @@ -470,7 +505,7 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, saved_errno = errno; if (handle->fd < 0) { - uv_err_new(handle->loop, EINVAL); + uv__set_sys_error(handle->loop, EINVAL); rv = -1; goto out; } @@ -479,7 +514,7 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, socklen = (socklen_t)*namelen; if (getsockname(handle->fd, name, &socklen) == -1) { - uv_err_new(handle->loop, errno); + uv__set_sys_error(handle->loop, errno); rv = -1; } else { *namelen = (int)socklen; @@ -527,12 +562,12 @@ int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb) { if (alloc_cb == NULL || recv_cb == NULL) { - uv_err_new_artificial(handle->loop, UV_EINVAL); + uv__set_artificial_error(handle->loop, UV_EINVAL); return -1; } if (ev_is_active(&handle->read_watcher)) { - uv_err_new_artificial(handle->loop, UV_EALREADY); + uv__set_artificial_error(handle->loop, UV_EALREADY); return -1; } diff --git a/src/rt/libuv/src/uv-common.c b/src/rt/libuv/src/uv-common.c index 51188337bd9..b42c761e13f 100644 --- a/src/rt/libuv/src/uv-common.c +++ b/src/rt/libuv/src/uv-common.c @@ -76,12 +76,14 @@ const char* uv_err_name(uv_err_t err) { case UV_ENFILE: return "ENFILE"; case UV_ENOBUFS: return "ENOBUFS"; case UV_ENOMEM: return "ENOMEM"; + case UV_ENOTDIR: return "ENOTDIR"; case UV_ENONET: return "ENONET"; case UV_ENOPROTOOPT: return "ENOPROTOOPT"; case UV_ENOTCONN: return "ENOTCONN"; case UV_ENOTSOCK: return "ENOTSOCK"; case UV_ENOTSUP: return "ENOTSUP"; case UV_ENOENT: return "ENOENT"; + case UV_ENOSYS: return "ENOSYS"; case UV_EPIPE: return "EPIPE"; case UV_EPROTO: return "EPROTO"; case UV_EPROTONOSUPPORT: return "EPROTONOSUPPORT"; @@ -95,6 +97,29 @@ const char* uv_err_name(uv_err_t err) { } +void uv__set_error(uv_loop_t* loop, uv_err_code code, int sys_error) { + loop->last_err.code = code; + loop->last_err.sys_errno_ = sys_error; +} + + +void uv__set_sys_error(uv_loop_t* loop, int sys_error) { + loop->last_err.code = uv_translate_sys_error(sys_error); + loop->last_err.sys_errno_ = sys_error; +} + + +void uv__set_artificial_error(uv_loop_t* loop, uv_err_code code) { + loop->last_err.code = code; + loop->last_err.sys_errno_ = 0; +} + + +uv_err_t uv_last_error(uv_loop_t* loop) { + return loop->last_err; +} + + struct sockaddr_in uv_ip4_addr(const char* ip, int port) { struct sockaddr_in addr; @@ -183,3 +208,65 @@ void uv_remove_ares_handle(uv_ares_task_t* handle) { int uv_ares_handles_empty(uv_loop_t* loop) { return loop->uv_ares_handles_ ? 0 : 1; } + +int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { + if (handle->type != UV_TCP || addr.sin_family != AF_INET) { + uv__set_artificial_error(handle->loop, UV_EFAULT); + return -1; + } + + return uv__tcp_bind(handle, addr); +} + +int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { + if (handle->type != UV_TCP || addr.sin6_family != AF_INET6) { + uv__set_artificial_error(handle->loop, UV_EFAULT); + return -1; + } + + return uv__tcp_bind6(handle, addr); +} + +int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, + unsigned int flags) { + if (handle->type != UV_UDP || addr.sin_family != AF_INET) { + uv__set_artificial_error(handle->loop, UV_EFAULT); + return -1; + } + + return uv__udp_bind(handle, addr, flags); +} + +int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, + unsigned int flags) { + if (handle->type != UV_UDP || addr.sin6_family != AF_INET6) { + uv__set_artificial_error(handle->loop, UV_EFAULT); + return -1; + } + + return uv__udp_bind6(handle, addr, flags); +} + +int uv_tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in address, + uv_connect_cb cb) { + if (handle->type != UV_TCP || address.sin_family != AF_INET) { + uv__set_artificial_error(handle->loop, UV_EINVAL); + return -1; + } + + return uv__tcp_connect(req, handle, address, cb); +} + +int uv_tcp_connect6(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in6 address, + uv_connect_cb cb) { + if (handle->type != UV_TCP || address.sin6_family != AF_INET6) { + uv__set_artificial_error(handle->loop, UV_EINVAL); + return -1; + } + + return uv__tcp_connect6(req, handle, address, cb); +} diff --git a/src/rt/libuv/src/uv-common.h b/src/rt/libuv/src/uv-common.h index ae543195569..ff81e0dc0a8 100644 --- a/src/rt/libuv/src/uv-common.h +++ b/src/rt/libuv/src/uv-common.h @@ -48,5 +48,26 @@ void uv_add_ares_handle(uv_loop_t* loop, uv_ares_task_t* handle); int uv_ares_handles_empty(uv_loop_t* loop); +uv_err_code uv_translate_sys_error(int sys_errno); +void uv__set_error(uv_loop_t* loop, uv_err_code code, int sys_error); +void uv__set_sys_error(uv_loop_t* loop, int sys_error); +void uv__set_artificial_error(uv_loop_t* loop, uv_err_code code); + +int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr); +int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr); + +int uv__udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned flags); +int uv__udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned flags); + +int uv__tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in address, + uv_connect_cb cb); + +int uv__tcp_connect6(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in6 address, + uv_connect_cb cb); + #endif /* UV_COMMON_H_ */ diff --git a/src/rt/libuv/src/win/core.c b/src/rt/libuv/src/win/core.c index 3211bbf2afd..ecdc5fb0519 100644 --- a/src/rt/libuv/src/win/core.c +++ b/src/rt/libuv/src/win/core.c @@ -48,6 +48,9 @@ static void uv_init(void) { /* Initialize FS */ uv_fs_init(); + + /* Initialize console */ + uv_console_init(); } @@ -79,7 +82,7 @@ static void uv_loop_init(uv_loop_t* loop) { loop->ares_active_sockets = 0; loop->ares_chan = NULL; - loop->last_error = uv_ok_; + loop->last_err = uv_ok_; } diff --git a/src/rt/libuv/src/win/error.c b/src/rt/libuv/src/win/error.c index 0ed2e16abe2..a060b2b962b 100644 --- a/src/rt/libuv/src/win/error.c +++ b/src/rt/libuv/src/win/error.c @@ -67,11 +67,6 @@ void uv_fatal_error(const int errorno, const char* syscall) { } -uv_err_t uv_last_error(uv_loop_t* loop) { - return loop->last_error; -} - - /* TODO: thread safety */ static char* last_err_str_ = NULL; @@ -110,6 +105,8 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case WSAECONNABORTED: return UV_ECONNABORTED; case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED; case WSAECONNREFUSED: return UV_ECONNREFUSED; + case ERROR_NETNAME_DELETED: return UV_ECONNRESET; + case WSAECONNRESET: return UV_ECONNRESET; case WSAEFAULT: return UV_EFAULT; case ERROR_HOST_UNREACHABLE: return UV_EHOSTUNREACH; case WSAEHOSTUNREACH: return UV_EHOSTUNREACH; @@ -132,26 +129,8 @@ uv_err_code uv_translate_sys_error(int sys_errno) { case ERROR_PIPE_BUSY: return UV_EBUSY; case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT; case ERROR_ALREADY_EXISTS: return UV_EEXIST; + case WSAHOST_NOT_FOUND: return UV_ENOENT; default: return UV_UNKNOWN; } } - -uv_err_t uv_new_sys_error(int sys_errno) { - uv_err_t e; - e.code = uv_translate_sys_error(sys_errno); - e.sys_errno_ = sys_errno; - return e; -} - - -void uv_set_sys_error(uv_loop_t* loop, int sys_errno) { - loop->last_error.code = uv_translate_sys_error(sys_errno); - loop->last_error.sys_errno_ = sys_errno; -} - - -void uv_set_error(uv_loop_t* loop, uv_err_code code, int sys_errno) { - loop->last_error.code = code; - loop->last_error.sys_errno_ = sys_errno; -} diff --git a/src/rt/libuv/src/win/fs-event.c b/src/rt/libuv/src/win/fs-event.c index a68dfe00def..a416df2f504 100644 --- a/src/rt/libuv/src/win/fs-event.c +++ b/src/rt/libuv/src/win/fs-event.c @@ -41,7 +41,8 @@ static void uv_fs_event_init_handle(uv_loop_t* loop, uv_fs_event_t* handle, handle->buffer = NULL; handle->req_pending = 0; handle->filew = NULL; - + handle->short_filew = NULL; + uv_req_init(loop, (uv_req_t*)&handle->req); handle->req.type = UV_FS_EVENT_REQ; handle->req.data = (void*)handle; @@ -95,25 +96,29 @@ static int uv_split_path(const wchar_t* filename, wchar_t** dir, while (i > 0 && filename[--i] != '\\' && filename[i] != '/'); if (i == 0) { - *dir = (wchar_t*)malloc((MAX_PATH + 1) * sizeof(wchar_t)); - if (!*dir) { - uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); - } - - if (!GetCurrentDirectoryW(MAX_PATH, *dir)) { - free(*dir); - *dir = NULL; - return -1; + if (dir) { + *dir = (wchar_t*)malloc((MAX_PATH + 1) * sizeof(wchar_t)); + if (!*dir) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + + if (!GetCurrentDirectoryW(MAX_PATH, *dir)) { + free(*dir); + *dir = NULL; + return -1; + } } *file = wcsdup(filename); } else { - *dir = (wchar_t*)malloc((i + 1) * sizeof(wchar_t)); - if (!*dir) { - uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + if (dir) { + *dir = (wchar_t*)malloc((i + 1) * sizeof(wchar_t)); + if (!*dir) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + wcsncpy(*dir, filename, i); + (*dir)[i] = L'\0'; } - wcsncpy(*dir, filename, i); - (*dir)[i] = L'\0'; *file = (wchar_t*)malloc((len - i) * sizeof(wchar_t)); if (!*file) { @@ -132,6 +137,7 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, int name_size; DWORD attr, last_error; wchar_t* dir = NULL, *dir_to_watch, *filenamew; + wchar_t short_path[MAX_PATH]; uv_fs_event_init_handle(loop, handle, filename, cb); @@ -144,7 +150,7 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, if (!uv_utf8_to_utf16(filename, filenamew, name_size / sizeof(wchar_t))) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -165,11 +171,23 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, * filename is a file. So we split filename into dir & file parts, and * watch the dir directory. */ + + /* Convert to short path. */ + if (!GetShortPathNameW(filenamew, short_path, COUNTOF(short_path))) { + last_error = GetLastError(); + goto error; + } + if (uv_split_path(filenamew, &dir, &handle->filew) != 0) { last_error = GetLastError(); goto error; } + if (uv_split_path(short_path, NULL, &handle->short_filew) != 0) { + last_error = GetLastError(); + goto error; + } + dir_to_watch = dir; } @@ -194,9 +212,9 @@ int uv_fs_event_init(uv_loop_t* loop, uv_fs_event_t* handle, } if (CreateIoCompletionPort(handle->dir_handle, - loop->iocp, - (ULONG_PTR)handle, - 0) == NULL) { + loop->iocp, + (ULONG_PTR)handle, + 0) == NULL) { last_error = GetLastError(); goto error; } @@ -242,6 +260,11 @@ error: handle->filew = NULL; } + if (handle->short_filew) { + free(handle->short_filew); + handle->short_filew = NULL; + } + if (handle->dir_handle != INVALID_HANDLE_VALUE) { CloseHandle(handle->dir_handle); handle->dir_handle = INVALID_HANDLE_VALUE; @@ -252,7 +275,7 @@ error: handle->buffer = NULL; } - uv_set_sys_error(loop, last_error); + uv__set_sys_error(loop, last_error); return -1; } @@ -279,8 +302,11 @@ void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, * Fire the event only if we were asked to watch a directory, * or if the filename filter matches. */ - if (handle->is_path_dir || _wcsnicmp(handle->filew, file_info->FileName, - file_info->FileNameLength / sizeof(wchar_t)) == 0) { + if (handle->is_path_dir || + _wcsnicmp(handle->filew, file_info->FileName, + file_info->FileNameLength / sizeof(wchar_t)) == 0 || + _wcsnicmp(handle->short_filew, file_info->FileName, + file_info->FileNameLength / sizeof(wchar_t)) == 0) { /* Convert the filename to utf8. */ utf8size = uv_utf16_to_utf8(file_info->FileName, @@ -300,7 +326,7 @@ void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, filename, utf8size); if (utf8size) { - filename[utf8size] = L'\0'; + filename[utf8size] = '\0'; } else { free(filename); filename = NULL; @@ -330,7 +356,7 @@ void uv_process_fs_event_req(uv_loop_t* loop, uv_req_t* req, handle->cb(handle, NULL, UV_CHANGE, 0); } } else { - loop->last_error = GET_REQ_UV_ERROR(req); + uv__set_sys_error(loop, GET_REQ_ERROR(req)); handle->cb(handle, NULL, 0, -1); } @@ -370,6 +396,11 @@ void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle) { handle->filew = NULL; } + if (handle->short_filew) { + free(handle->short_filew); + handle->short_filew = NULL; + } + if (handle->filename) { free(handle->filename); handle->filename = NULL; diff --git a/src/rt/libuv/src/win/fs.c b/src/rt/libuv/src/win/fs.c index 93fa5eb36b5..a2c572d64f0 100644 --- a/src/rt/libuv/src/win/fs.c +++ b/src/rt/libuv/src/win/fs.c @@ -40,6 +40,18 @@ #define UV_FS_CLEANEDUP 0x0010 #define UV_FS_LAST_ERROR_SET 0x0020 + +#define UTF8_TO_UTF16(s, t) \ + size = uv_utf8_to_utf16(s, NULL, 0) * sizeof(wchar_t); \ + t = (wchar_t*)malloc(size); \ + if (!t) { \ + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); \ + } \ + if (!uv_utf8_to_utf16(s, t, size / sizeof(wchar_t))) { \ + uv__set_sys_error(loop, GetLastError()); \ + return -1; \ + } + #define STRDUP_ARG(req, i) \ req->arg##i = (void*)strdup((const char*)req->arg##i); \ if (!req->arg##i) { \ @@ -47,6 +59,9 @@ } \ req->flags |= UV_FS_FREE_ARG##i; +#define SET_ALLOCED_ARG(req, i) \ + req->flags |= UV_FS_FREE_ARG##i; + #define WRAP_REQ_ARGS1(req, a0) \ req->arg0 = (void*)a0; @@ -66,16 +81,17 @@ if (!QueueUserWorkItem(&uv_fs_thread_proc, \ req, \ WT_EXECUTELONGFUNCTION)) { \ - uv_set_sys_error((loop), GetLastError()); \ + uv__set_sys_error((loop), GetLastError()); \ return -1; \ } \ req->flags |= UV_FS_ASYNC_QUEUED; \ uv_ref((loop)); - #define SET_UV_LAST_ERROR_FROM_REQ(req) \ if (req->flags & UV_FS_LAST_ERROR_SET) { \ - uv_set_sys_error(req->loop, req->last_error); \ + uv__set_sys_error(req->loop, req->last_error); \ + } else if (req->result == -1) { \ + uv__set_error(req->loop, (uv_err_code)req->errorno, req->last_error); \ } #define SET_REQ_LAST_ERROR(req, error) \ @@ -85,7 +101,8 @@ #define SET_REQ_RESULT(req, result_value) \ req->result = (result_value); \ if (req->result == -1) { \ - req->errorno = uv_translate_sys_error(_doserrno); \ + req->last_error = _doserrno; \ + req->errorno = uv_translate_sys_error(req->last_error); \ } #define SET_REQ_RESULT_WIN32_ERROR(req, sys_errno) \ @@ -93,6 +110,14 @@ req->errorno = uv_translate_sys_error(sys_errno); \ SET_REQ_LAST_ERROR(req, sys_errno); +#define VERIFY_UV_FILE(file, req) \ + if (file == -1) { \ + req->result = -1; \ + req->errorno = UV_EBADF; \ + req->last_error = ERROR_SUCCESS; \ + return; \ + } + void uv_fs_init() { _fmode = _O_BINARY; @@ -100,7 +125,7 @@ void uv_fs_init() { static void uv_fs_req_init_async(uv_loop_t* loop, uv_fs_t* req, - uv_fs_type fs_type, const char* path, uv_fs_cb cb) { + uv_fs_type fs_type, const char* path, const wchar_t* pathw, uv_fs_cb cb) { uv_req_init(loop, (uv_req_t*) req); req->type = UV_FS; req->loop = loop; @@ -110,6 +135,7 @@ static void uv_fs_req_init_async(uv_loop_t* loop, uv_fs_t* req, req->result = 0; req->ptr = NULL; req->path = path ? strdup(path) : NULL; + req->pathw = (wchar_t*)pathw; req->errorno = 0; req->last_error = 0; memset(&req->overlapped, 0, sizeof(req->overlapped)); @@ -126,11 +152,12 @@ static void uv_fs_req_init_sync(uv_loop_t* loop, uv_fs_t* req, req->result = 0; req->ptr = NULL; req->path = NULL; + req->pathw = NULL; req->errorno = 0; } -void fs__open(uv_fs_t* req, const char* path, int flags, int mode) { +void fs__open(uv_fs_t* req, const wchar_t* path, int flags, int mode) { DWORD access; DWORD share; DWORD disposition; @@ -221,7 +248,12 @@ void fs__open(uv_fs_t* req, const char* path, int flags, int mode) { goto end; } - file = CreateFileA(path, + /* Figure out whether path is a file or a directory. */ + if (GetFileAttributesW(path) & FILE_ATTRIBUTE_DIRECTORY) { + attributes |= FILE_FLAG_BACKUP_SEMANTICS; + } + + file = CreateFileW(path, access, share, NULL, @@ -238,7 +270,11 @@ end: } void fs__close(uv_fs_t* req, uv_file file) { - int result = _close(file); + int result; + + VERIFY_UV_FILE(file, req); + + result = _close(file); SET_REQ_RESULT(req, result); } @@ -250,6 +286,8 @@ void fs__read(uv_fs_t* req, uv_file file, void *buf, size_t length, LARGE_INTEGER offset_; DWORD bytes; + VERIFY_UV_FILE(file, req); + handle = (HANDLE) _get_osfhandle(file); if (handle == INVALID_HANDLE_VALUE) { SET_REQ_RESULT(req, -1); @@ -288,6 +326,8 @@ void fs__write(uv_fs_t* req, uv_file file, void *buf, size_t length, LARGE_INTEGER offset_; DWORD bytes; + VERIFY_UV_FILE(file, req); + handle = (HANDLE) _get_osfhandle(file); if (handle == INVALID_HANDLE_VALUE) { SET_REQ_RESULT(req, -1); @@ -319,42 +359,55 @@ void fs__write(uv_fs_t* req, uv_file file, void *buf, size_t length, } -void fs__unlink(uv_fs_t* req, const char* path) { - int result = _unlink(path); +void fs__unlink(uv_fs_t* req, const wchar_t* path) { + int result = _wunlink(path); SET_REQ_RESULT(req, result); } -void fs__mkdir(uv_fs_t* req, const char* path, int mode) { - int result = _mkdir(path); +void fs__mkdir(uv_fs_t* req, const wchar_t* path, int mode) { + int result = _wmkdir(path); SET_REQ_RESULT(req, result); } -void fs__rmdir(uv_fs_t* req, const char* path) { - int result = _rmdir(path); +void fs__rmdir(uv_fs_t* req, const wchar_t* path) { + int result = _wrmdir(path); SET_REQ_RESULT(req, result); } -void fs__readdir(uv_fs_t* req, const char* path, int flags) { - int result; - char* buf, *ptr, *name; +void fs__readdir(uv_fs_t* req, const wchar_t* path, int flags) { + int result, size; + wchar_t* buf = NULL, *ptr, *name; HANDLE dir; - WIN32_FIND_DATAA ent = {0}; - size_t len = strlen(path); + WIN32_FIND_DATAW ent = {0}; + size_t len = wcslen(path); size_t buf_size = 4096; - const char* fmt = !len ? "./*" - : (path[len - 1] == '/' || path[len - 1] == '\\') ? "%s*" - : "%s\\*"; + wchar_t* path2; + const wchar_t* fmt = !len ? L"./*" + : (path[len - 1] == L'/' || path[len - 1] == L'\\') ? L"%s*" + : L"%s\\*"; + + /* Figure out whether path is a file or a directory. */ + if (!(GetFileAttributesW(path) & FILE_ATTRIBUTE_DIRECTORY)) { + req->result = -1; + req->errorno = UV_ENOTDIR; + req->last_error = ERROR_SUCCESS; + return; + } - char* path2 = (char*)malloc(len + 4); + path2 = (wchar_t*)malloc(sizeof(wchar_t) * (len + 4)); if (!path2) { uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); } - sprintf(path2, fmt, path); - dir = FindFirstFileA(path2, &ent); +#ifdef _MSC_VER + swprintf(path2, len + 3, fmt, path); +#else + swprintf(path2, fmt, path); +#endif + dir = FindFirstFileW(path2, &ent); free(path2); if(dir == INVALID_HANDLE_VALUE) { @@ -362,24 +415,27 @@ void fs__readdir(uv_fs_t* req, const char* path, int flags) { return; } - buf = (char*)malloc(buf_size); - if (!buf) { - uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); - } - - ptr = buf; result = 0; do { name = ent.cFileName; - if (name[0] != '.' || (name[1] && (name[1] != '.' || name[2]))) { - len = strlen(name); + if (name[0] != L'.' || (name[1] && (name[1] != L'.' || name[2]))) { + len = wcslen(name); + + if (!buf) { + buf = (wchar_t*)malloc(buf_size * sizeof(wchar_t)); + if (!buf) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + + ptr = buf; + } while ((ptr - buf) + len + 1 > buf_size) { buf_size *= 2; path2 = buf; - buf = (char*)realloc(buf, buf_size); + buf = (wchar_t*)realloc(buf, buf_size * sizeof(wchar_t)); if (!buf) { uv_fatal_error(ERROR_OUTOFMEMORY, "realloc"); } @@ -387,25 +443,51 @@ void fs__readdir(uv_fs_t* req, const char* path, int flags) { ptr = buf + (ptr - path2); } - strcpy(ptr, name); + wcscpy(ptr, name); ptr += len + 1; result++; } - } while(FindNextFileA(dir, &ent)); + } while(FindNextFileW(dir, &ent)); FindClose(dir); - req->ptr = buf; - req->flags |= UV_FS_FREE_PTR; + if (buf) { + /* Convert result to UTF8. */ + size = uv_utf16_to_utf8(buf, buf_size / sizeof(wchar_t), NULL, 0); + if (!size) { + SET_REQ_RESULT_WIN32_ERROR(req, GetLastError()); + return; + } + + req->ptr = (char*)malloc(size + 1); + if (!req->ptr) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + + size = uv_utf16_to_utf8(buf, buf_size / sizeof(wchar_t), (char*)req->ptr, size); + if (!size) { + free(buf); + free(req->ptr); + req->ptr = NULL; + SET_REQ_RESULT_WIN32_ERROR(req, GetLastError()); + return; + } + free(buf); + + ((char*)req->ptr)[size] = '\0'; + req->flags |= UV_FS_FREE_PTR; + } else { + req->ptr = NULL; + } SET_REQ_RESULT(req, result); } -void fs__stat(uv_fs_t* req, const char* path) { +void fs__stat(uv_fs_t* req, const wchar_t* path) { int result; - result = _stati64(path, &req->stat); + result = _wstati64(path, &req->stat); if (result == -1) { req->ptr = NULL; } else { @@ -419,6 +501,8 @@ void fs__stat(uv_fs_t* req, const char* path) { void fs__fstat(uv_fs_t* req, uv_file file) { int result; + VERIFY_UV_FILE(file, req); + result = _fstati64(file, &req->stat); if (result == -1) { req->ptr = NULL; @@ -430,14 +514,18 @@ void fs__fstat(uv_fs_t* req, uv_file file) { } -void fs__rename(uv_fs_t* req, const char* path, const char* new_path) { - int result = rename(path, new_path); +void fs__rename(uv_fs_t* req, const wchar_t* path, const wchar_t* new_path) { + int result = _wrename(path, new_path); SET_REQ_RESULT(req, result); } void fs__fsync(uv_fs_t* req, uv_file file) { - int result = FlushFileBuffers((HANDLE)_get_osfhandle(file)) ? 0 : -1; + int result; + + VERIFY_UV_FILE(file, req); + + result = FlushFileBuffers((HANDLE)_get_osfhandle(file)) ? 0 : -1; if (result == -1) { SET_REQ_RESULT_WIN32_ERROR(req, GetLastError()); } else { @@ -447,7 +535,11 @@ void fs__fsync(uv_fs_t* req, uv_file file) { void fs__ftruncate(uv_fs_t* req, uv_file file, off_t offset) { - int result = _chsize(file, offset); + int result; + + VERIFY_UV_FILE(file, req); + + result = _chsize(file, offset); SET_REQ_RESULT(req, result); } @@ -492,8 +584,8 @@ void fs__sendfile(uv_fs_t* req, uv_file out_file, uv_file in_file, } -void fs__chmod(uv_fs_t* req, const char* path, int mode) { - int result = _chmod(path, mode); +void fs__chmod(uv_fs_t* req, const wchar_t* path, int mode) { + int result = _wchmod(path, mode); SET_REQ_RESULT(req, result); } @@ -505,6 +597,8 @@ void fs__fchmod(uv_fs_t* req, uv_file file, int mode) { IO_STATUS_BLOCK io_status; FILE_BASIC_INFORMATION file_info; + VERIFY_UV_FILE(file, req); + handle = (HANDLE)_get_osfhandle(file); nt_status = pNtQueryInformationFile(handle, @@ -542,10 +636,10 @@ done: } -void fs__utime(uv_fs_t* req, const char* path, double atime, double mtime) { +void fs__utime(uv_fs_t* req, const wchar_t* path, double atime, double mtime) { int result; struct _utimbuf b = {(time_t)atime, (time_t)mtime}; - result = _utime(path, &b); + result = _wutime(path, &b); SET_REQ_RESULT(req, result); } @@ -553,13 +647,16 @@ void fs__utime(uv_fs_t* req, const char* path, double atime, double mtime) { void fs__futime(uv_fs_t* req, uv_file file, double atime, double mtime) { int result; struct _utimbuf b = {(time_t)atime, (time_t)mtime}; + + VERIFY_UV_FILE(file, req); + result = _futime(file, &b); SET_REQ_RESULT(req, result); } -void fs__link(uv_fs_t* req, const char* path, const char* new_path) { - int result = CreateHardLinkA(new_path, path, NULL) ? 0 : -1; +void fs__link(uv_fs_t* req, const wchar_t* path, const wchar_t* new_path) { + int result = CreateHardLinkW(new_path, path, NULL) ? 0 : -1; if (result == -1) { SET_REQ_RESULT_WIN32_ERROR(req, GetLastError()); } else { @@ -568,26 +665,29 @@ void fs__link(uv_fs_t* req, const char* path, const char* new_path) { } -void fs__symlink(uv_fs_t* req, const char* path, const char* new_path, +void fs__symlink(uv_fs_t* req, const wchar_t* path, const wchar_t* new_path, int flags) { int result; - if (pCreateSymbolicLinkA) { - result = pCreateSymbolicLinkA(new_path, + if (pCreateSymbolicLinkW) { + result = pCreateSymbolicLinkW(new_path, path, flags & UV_FS_SYMLINK_DIR ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0) ? 0 : -1; if (result == -1) { - SET_REQ_LAST_ERROR(req, GetLastError()); + SET_REQ_RESULT_WIN32_ERROR(req, GetLastError()); + return; } } else { - result = -1; - errno = ENOSYS; + req->result = -1; + req->errorno = UV_ENOTSUP; + req->last_error = ERROR_SUCCESS; + return; } SET_REQ_RESULT(req, result); } -void fs__readlink(uv_fs_t* req, const char* path) { +void fs__readlink(uv_fs_t* req, const wchar_t* path) { int result = -1; BOOL rv; HANDLE symlink; @@ -598,7 +698,7 @@ void fs__readlink(uv_fs_t* req, const char* path) { wchar_t* substitute_name; int substitute_name_length; - symlink = CreateFileA(path, + symlink = CreateFileW(path, 0, 0, NULL, @@ -632,7 +732,7 @@ void fs__readlink(uv_fs_t* req, const char* path) { goto done; } - reparse_data = buffer; + reparse_data = (REPARSE_DATA_BUFFER*)buffer; if (reparse_data->ReparseTag != IO_REPARSE_TAG_SYMLINK) { result = -1; /* something is seriously wrong */ @@ -640,8 +740,10 @@ void fs__readlink(uv_fs_t* req, const char* path) { goto done; } - substitute_name = reparse_data->SymbolicLinkReparseBuffer.PathBuffer + (reparse_data->SymbolicLinkReparseBuffer.SubstituteNameOffset / sizeof(wchar_t)); - substitute_name_length = reparse_data->SymbolicLinkReparseBuffer.SubstituteNameLength / sizeof(wchar_t); + substitute_name = reparse_data->SymbolicLinkReparseBuffer.PathBuffer + + (reparse_data->SymbolicLinkReparseBuffer.SubstituteNameOffset / sizeof(wchar_t)); + substitute_name_length = + reparse_data->SymbolicLinkReparseBuffer.SubstituteNameLength / sizeof(wchar_t); /* Strip off the leading \??\ from the substitute name buffer.*/ if (memcmp(substitute_name, L"\\??\\", 8) == 0) { @@ -666,7 +768,7 @@ void fs__readlink(uv_fs_t* req, const char* path) { utf8size = uv_utf16_to_utf8(substitute_name, substitute_name_length, - req->ptr, + (char*)req->ptr, utf8size); if (!utf8size) { result = -1; @@ -705,7 +807,7 @@ static DWORD WINAPI uv_fs_thread_proc(void* parameter) { switch (req->fs_type) { case UV_FS_OPEN: - fs__open(req, req->path, (int)req->arg0, (int)req->arg1); + fs__open(req, req->pathw, (int)req->arg0, (int)req->arg1); break; case UV_FS_CLOSE: fs__close(req, (uv_file)req->arg0); @@ -725,26 +827,26 @@ static DWORD WINAPI uv_fs_thread_proc(void* parameter) { (off_t) req->arg3); break; case UV_FS_UNLINK: - fs__unlink(req, req->path); + fs__unlink(req, req->pathw); break; case UV_FS_MKDIR: - fs__mkdir(req, req->path, (int)req->arg0); + fs__mkdir(req, req->pathw, (int)req->arg0); break; case UV_FS_RMDIR: - fs__rmdir(req, req->path); + fs__rmdir(req, req->pathw); break; case UV_FS_READDIR: - fs__readdir(req, req->path, (int)req->arg0); + fs__readdir(req, req->pathw, (int)req->arg0); break; case UV_FS_STAT: case UV_FS_LSTAT: - fs__stat(req, req->path); + fs__stat(req, req->pathw); break; case UV_FS_FSTAT: fs__fstat(req, (uv_file)req->arg0); break; case UV_FS_RENAME: - fs__rename(req, req->path, (const char*)req->arg0); + fs__rename(req, req->pathw, (const wchar_t*)req->arg0); break; case UV_FS_FSYNC: case UV_FS_FDATASYNC: @@ -761,25 +863,25 @@ static DWORD WINAPI uv_fs_thread_proc(void* parameter) { (size_t) req->arg3); break; case UV_FS_CHMOD: - fs__chmod(req, req->path, (int)req->arg0); + fs__chmod(req, req->pathw, (int)req->arg0); break; case UV_FS_FCHMOD: fs__fchmod(req, (uv_file)req->arg0, (int)req->arg1); break; case UV_FS_UTIME: - fs__utime(req, req->path, req->arg4, req->arg5); + fs__utime(req, req->pathw, req->arg4, req->arg5); break; case UV_FS_FUTIME: fs__futime(req, (uv_file)req->arg0, req->arg4, req->arg5); break; case UV_FS_LINK: - fs__link(req, req->path, (const char*)req->arg0); + fs__link(req, req->pathw, (const wchar_t*)req->arg0); break; case UV_FS_SYMLINK: - fs__symlink(req, req->path, (const char*)req->arg0, (int)req->arg1); + fs__symlink(req, req->pathw, (const wchar_t*)req->arg0, (int)req->arg1); break; case UV_FS_READLINK: - fs__readlink(req, req->path); + fs__readlink(req, req->pathw); break; case UV_FS_CHOWN: case UV_FS_FCHOWN: @@ -797,13 +899,20 @@ static DWORD WINAPI uv_fs_thread_proc(void* parameter) { int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int mode, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_OPEN, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_OPEN, path, pathw, cb); WRAP_REQ_ARGS2(req, flags, mode); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_OPEN); - fs__open(req, path, flags, mode); + fs__open(req, pathw, flags, mode); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -814,7 +923,7 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_CLOSE, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_CLOSE, NULL, NULL, cb); WRAP_REQ_ARGS1(req, file); QUEUE_FS_TP_JOB(loop, req); } else { @@ -831,7 +940,7 @@ int uv_fs_close(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { 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) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_READ, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_READ, NULL, NULL, cb); WRAP_REQ_ARGS4(req, file, buf, length, offset); QUEUE_FS_TP_JOB(loop, req); } else { @@ -848,7 +957,7 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req, uv_file file, void* buf, 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) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_WRITE, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_WRITE, NULL, NULL, cb); WRAP_REQ_ARGS4(req, file, buf, length, offset); QUEUE_FS_TP_JOB(loop, req); } else { @@ -864,12 +973,19 @@ int uv_fs_write(uv_loop_t* loop, uv_fs_t* req, uv_file file, void* buf, int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_UNLINK, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_UNLINK, path, pathw, cb); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_UNLINK); - fs__unlink(req, path); + fs__unlink(req, pathw); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -880,13 +996,20 @@ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_MKDIR, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_MKDIR, path, pathw, cb); WRAP_REQ_ARGS1(req, mode); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_MKDIR); - fs__mkdir(req, path, mode); + fs__mkdir(req, pathw, mode); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -896,12 +1019,19 @@ int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_RMDIR, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_RMDIR, path, pathw, cb); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_RMDIR); - fs__rmdir(req, path); + fs__rmdir(req, pathw); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -912,13 +1042,20 @@ int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_READDIR, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_READDIR, path, pathw, cb); WRAP_REQ_ARGS1(req, flags); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_READDIR); - fs__readdir(req, path, flags); + fs__readdir(req, pathw, flags); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -929,14 +1066,24 @@ int uv_fs_readdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags, int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) { + wchar_t* pathw; + wchar_t* new_pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + UTF8_TO_UTF16(new_path, new_pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_LINK, path, cb); - WRAP_REQ_ARGS1(req, new_path); - STRDUP_ARG(req, 0); + uv_fs_req_init_async(loop, req, UV_FS_LINK, path, pathw, cb); + WRAP_REQ_ARGS1(req, new_pathw); + SET_ALLOCED_ARG(req, 0); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_LINK); - fs__link(req, path, new_path); + fs__link(req, pathw, new_pathw); + free(pathw); + free(new_pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -947,14 +1094,24 @@ int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path, 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) { + wchar_t* pathw; + wchar_t* new_pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + UTF8_TO_UTF16(new_path, new_pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_SYMLINK, path, cb); - WRAP_REQ_ARGS2(req, new_path, flags); - STRDUP_ARG(req, 0); + uv_fs_req_init_async(loop, req, UV_FS_SYMLINK, path, pathw, cb); + WRAP_REQ_ARGS2(req, new_pathw, flags); + SET_ALLOCED_ARG(req, 0); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_SYMLINK); - fs__symlink(req, path, new_path, flags); + fs__symlink(req, pathw, new_pathw, flags); + free(pathw); + free(new_pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -965,12 +1122,19 @@ int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_READLINK, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_READLINK, path, pathw, cb); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_READLINK); - fs__readlink(req, path); + fs__readlink(req, pathw); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -981,13 +1145,20 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, int uid, int gid, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_CHOWN, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_CHOWN, path, pathw, cb); WRAP_REQ_ARGS2(req, uid, gid); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_CHOWN); fs__nop(req); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -999,7 +1170,7 @@ int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, int uid, int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, int uid, int gid, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FCHOWN, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FCHOWN, NULL, NULL, cb); WRAP_REQ_ARGS3(req, file, uid, gid); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1016,9 +1187,11 @@ int uv_fs_fchown(uv_loop_t* loop, uv_fs_t* req, uv_file file, int uid, int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int len = strlen(path); char* path2 = NULL; - int has_backslash = (path[len - 1] == '\\' || path[len - 1] == '/'); + wchar_t* pathw; + int size; - if (path[len - 1] == '\\' || path[len - 1] == '/') { + if (len > 1 && path[len - 2] != ':' && + (path[len - 1] == '\\' || path[len - 1] == '/')) { path2 = strdup(path); if (!path2) { uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); @@ -1028,20 +1201,24 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { } if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_STAT, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_STAT, NULL, NULL, cb); if (path2) { req->path = path2; + UTF8_TO_UTF16(path2, req->pathw); } else { req->path = strdup(path); + UTF8_TO_UTF16(path, req->pathw); } QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_STAT); - fs__stat(req, path2 ? path2 : path); + UTF8_TO_UTF16(path2 ? path2 : path, pathw); + fs__stat(req, pathw); if (path2) { free(path2); } + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -1054,9 +1231,11 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int len = strlen(path); char* path2 = NULL; - int has_backslash = (path[len - 1] == '\\' || path[len - 1] == '/'); + wchar_t* pathw; + int size; - if (path[len - 1] == '\\' || path[len - 1] == '/') { + if (len > 1 && path[len - 2] != ':' && + (path[len - 1] == '\\' || path[len - 1] == '/')) { path2 = strdup(path); if (!path2) { uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); @@ -1066,20 +1245,24 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { } if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_LSTAT, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_LSTAT, NULL, NULL, cb); if (path2) { req->path = path2; + UTF8_TO_UTF16(path2, req->pathw); } else { req->path = strdup(path); + UTF8_TO_UTF16(path, req->pathw); } QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_LSTAT); - fs__stat(req, path2 ? path2 : path); + UTF8_TO_UTF16(path2 ? path2 : path, pathw); + fs__stat(req, pathw); if (path2) { free(path2); } + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -1090,7 +1273,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) { int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FSTAT, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FSTAT, NULL, NULL, cb); WRAP_REQ_ARGS1(req, file); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1106,14 +1289,24 @@ int uv_fs_fstat(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, const char* new_path, uv_fs_cb cb) { + wchar_t* pathw; + wchar_t* new_pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + UTF8_TO_UTF16(new_path, new_pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_RENAME, path, cb); - WRAP_REQ_ARGS1(req, new_path); - STRDUP_ARG(req, 0); + uv_fs_req_init_async(loop, req, UV_FS_RENAME, path, pathw, cb); + WRAP_REQ_ARGS1(req, new_pathw); + SET_ALLOCED_ARG(req, 0); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_RENAME); - fs__rename(req, path, new_path); + fs__rename(req, pathw, new_pathw); + free(pathw); + free(new_pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -1124,7 +1317,7 @@ int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path, int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FDATASYNC, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FDATASYNC, NULL, NULL, cb); WRAP_REQ_ARGS1(req, file); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1140,7 +1333,7 @@ int uv_fs_fdatasync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FSYNC, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FSYNC, NULL, NULL, cb); WRAP_REQ_ARGS1(req, file); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1157,7 +1350,7 @@ int uv_fs_fsync(uv_loop_t* loop, uv_fs_t* req, uv_file file, uv_fs_cb cb) { int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, off_t offset, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FTRUNCATE, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FTRUNCATE, NULL, NULL, cb); WRAP_REQ_ARGS2(req, file, offset); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1174,7 +1367,7 @@ int uv_fs_ftruncate(uv_loop_t* loop, uv_fs_t* req, uv_file file, 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) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_SENDFILE, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_SENDFILE, NULL, NULL, cb); WRAP_REQ_ARGS4(req, out_fd, in_fd, in_offset, length); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1190,13 +1383,20 @@ int uv_fs_sendfile(uv_loop_t* loop, uv_fs_t* req, uv_file out_fd, int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_CHMOD, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_CHMOD, path, pathw, cb); WRAP_REQ_ARGS1(req, mode); QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_CHMOD); - fs__chmod(req, path, mode); + fs__chmod(req, pathw, mode); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -1208,7 +1408,7 @@ int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode, int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FCHMOD, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FCHMOD, NULL, NULL, cb); WRAP_REQ_ARGS2(req, file, mode); QUEUE_FS_TP_JOB(loop, req); } else { @@ -1224,14 +1424,21 @@ int uv_fs_fchmod(uv_loop_t* loop, uv_fs_t* req, uv_file file, int mode, int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, double mtime, uv_fs_cb cb) { + wchar_t* pathw; + int size; + + /* Convert to UTF16. */ + UTF8_TO_UTF16(path, pathw); + if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_UTIME, path, cb); + uv_fs_req_init_async(loop, req, UV_FS_UTIME, path, pathw, cb); req->arg4 = (ssize_t)atime; req->arg5 = (ssize_t)mtime; QUEUE_FS_TP_JOB(loop, req); } else { uv_fs_req_init_sync(loop, req, UV_FS_UTIME); - fs__utime(req, path, atime, mtime); + fs__utime(req, pathw, atime, mtime); + free(pathw); SET_UV_LAST_ERROR_FROM_REQ(req); return req->result; } @@ -1243,7 +1450,7 @@ int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime, int uv_fs_futime(uv_loop_t* loop, uv_fs_t* req, uv_file file, double atime, double mtime, uv_fs_cb cb) { if (cb) { - uv_fs_req_init_async(loop, req, UV_FS_FUTIME, NULL, cb); + uv_fs_req_init_async(loop, req, UV_FS_FUTIME, NULL, NULL, cb); WRAP_REQ_ARGS1(req, file); req->arg4 = (ssize_t)atime; req->arg5 = (ssize_t)mtime; @@ -1294,6 +1501,11 @@ void uv_fs_req_cleanup(uv_fs_t* req) { req->path = NULL; } + if (req->pathw) { + free(req->pathw); + req->pathw = NULL; + } + if (req->flags & UV_FS_ASYNC_QUEUED) { uv_unref(loop); } diff --git a/src/rt/libuv/src/win/getaddrinfo.c b/src/rt/libuv/src/win/getaddrinfo.c index 1416f04d62e..f0d854216be 100644 --- a/src/rt/libuv/src/win/getaddrinfo.c +++ b/src/rt/libuv/src/win/getaddrinfo.c @@ -256,7 +256,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (handle == NULL || getaddrinfo_cb == NULL || (node == NULL && service == NULL)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); goto error; } @@ -271,7 +271,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (node != NULL) { nodesize = ALIGNED_SIZE(uv_utf8_to_utf16(node, NULL, 0) * sizeof(wchar_t)); if (nodesize == 0) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } } @@ -280,7 +280,7 @@ int uv_getaddrinfo(uv_loop_t* loop, servicesize = ALIGNED_SIZE(uv_utf8_to_utf16(service, NULL, 0) * sizeof(wchar_t)); if (servicesize == 0) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } } @@ -291,7 +291,7 @@ int uv_getaddrinfo(uv_loop_t* loop, /* allocate memory for inputs, and partition it as needed */ alloc_ptr = (char*)malloc(nodesize + servicesize + hintssize); if (!alloc_ptr) { - uv_set_sys_error(loop, WSAENOBUFS); + uv__set_sys_error(loop, WSAENOBUFS); goto error; } @@ -305,7 +305,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (uv_utf8_to_utf16(node, (wchar_t*) alloc_ptr, nodesize / sizeof(wchar_t)) == 0) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } alloc_ptr += nodesize; @@ -320,7 +320,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (uv_utf8_to_utf16(service, (wchar_t*) alloc_ptr, servicesize / sizeof(wchar_t)) == 0) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } alloc_ptr += servicesize; @@ -352,7 +352,7 @@ int uv_getaddrinfo(uv_loop_t* loop, if (QueueUserWorkItem(&getaddrinfo_thread_proc, handle, WT_EXECUTELONGFUNCTION) == 0) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } diff --git a/src/rt/libuv/src/win/handle.c b/src/rt/libuv/src/win/handle.c index ab4f64bc5ae..b67139cbc6a 100644 --- a/src/rt/libuv/src/win/handle.c +++ b/src/rt/libuv/src/win/handle.c @@ -20,11 +20,36 @@ */ #include <assert.h> +#include <io.h> #include "uv.h" #include "internal.h" +uv_handle_type uv_guess_handle(uv_file file) { + HANDLE handle = (HANDLE) _get_osfhandle(file); + DWORD mode; + + switch (GetFileType(handle)) { + case FILE_TYPE_CHAR: + if (GetConsoleMode(handle, &mode)) { + return UV_TTY; + } else { + return UV_UNKNOWN_HANDLE; + } + + case FILE_TYPE_PIPE: + return UV_NAMED_PIPE; + + case FILE_TYPE_DISK: + return UV_FILE; + + default: + return UV_UNKNOWN_HANDLE; + } +} + + int uv_is_active(uv_handle_t* handle) { switch (handle->type) { case UV_TIMER: @@ -80,6 +105,10 @@ void uv_close(uv_handle_t* handle, uv_close_cb cb) { } return; + case UV_TTY: + uv_tty_close((uv_tty_t*) handle); + return; + case UV_UDP: udp = (uv_udp_t*) handle; uv_udp_recv_stop(udp); @@ -159,6 +188,10 @@ void uv_process_endgames(uv_loop_t* loop) { uv_pipe_endgame(loop, (uv_pipe_t*) handle); break; + case UV_TTY: + uv_tty_endgame(loop, (uv_tty_t*) handle); + break; + case UV_UDP: uv_udp_endgame(loop, (uv_udp_t*) handle); break; diff --git a/src/rt/libuv/src/win/internal.h b/src/rt/libuv/src/win/internal.h index 87a64eda1b2..55e02df57e1 100644 --- a/src/rt/libuv/src/win/internal.h +++ b/src/rt/libuv/src/win/internal.h @@ -44,26 +44,30 @@ void uv_process_timers(uv_loop_t* loop); */ /* Private uv_handle flags */ -#define UV_HANDLE_CLOSING 0x0001 -#define UV_HANDLE_CLOSED 0x0002 -#define UV_HANDLE_BOUND 0x0004 -#define UV_HANDLE_LISTENING 0x0008 -#define UV_HANDLE_CONNECTION 0x0010 -#define UV_HANDLE_CONNECTED 0x0020 -#define UV_HANDLE_READING 0x0040 -#define UV_HANDLE_ACTIVE 0x0040 -#define UV_HANDLE_EOF 0x0080 -#define UV_HANDLE_SHUTTING 0x0100 -#define UV_HANDLE_SHUT 0x0200 -#define UV_HANDLE_ENDGAME_QUEUED 0x0400 -#define UV_HANDLE_BIND_ERROR 0x1000 -#define UV_HANDLE_IPV6 0x2000 -#define UV_HANDLE_PIPESERVER 0x4000 -#define UV_HANDLE_READ_PENDING 0x8000 -#define UV_HANDLE_GIVEN_OS_HANDLE 0x10000 -#define UV_HANDLE_UV_ALLOCED 0x20000 -#define UV_HANDLE_SYNC_BYPASS_IOCP 0x40000 -#define UV_HANDLE_ZERO_READ 0x80000 +#define UV_HANDLE_CLOSING 0x000001 +#define UV_HANDLE_CLOSED 0x000002 +#define UV_HANDLE_BOUND 0x000004 +#define UV_HANDLE_LISTENING 0x000008 +#define UV_HANDLE_CONNECTION 0x000010 +#define UV_HANDLE_CONNECTED 0x000020 +#define UV_HANDLE_READING 0x000040 +#define UV_HANDLE_ACTIVE 0x000040 +#define UV_HANDLE_EOF 0x000080 +#define UV_HANDLE_SHUTTING 0x000100 +#define UV_HANDLE_SHUT 0x000200 +#define UV_HANDLE_ENDGAME_QUEUED 0x000400 +#define UV_HANDLE_BIND_ERROR 0x001000 +#define UV_HANDLE_IPV6 0x002000 +#define UV_HANDLE_PIPESERVER 0x004000 +#define UV_HANDLE_READ_PENDING 0x008000 +#define UV_HANDLE_UV_ALLOCED 0x010000 +#define UV_HANDLE_SYNC_BYPASS_IOCP 0x020000 +#define UV_HANDLE_ZERO_READ 0x040000 +#define UV_HANDLE_TTY_RAW 0x080000 +#define UV_HANDLE_EMULATE_IOCP 0x100000 +#define UV_HANDLE_NON_OVERLAPPED_PIPE 0x200000 +#define UV_HANDLE_TTY_SAVED_POSITION 0x400000 +#define UV_HANDLE_TTY_SAVED_ATTRIBUTES 0x800000 void uv_want_endgame(uv_loop_t* loop, uv_handle_t* handle); void uv_process_endgames(uv_loop_t* loop); @@ -96,8 +100,8 @@ uv_req_t* uv_overlapped_to_req(OVERLAPPED* overlapped); void uv_insert_pending_req(uv_loop_t* loop, uv_req_t* req); void uv_process_reqs(uv_loop_t* loop); -#define POST_COMPLETION_FOR_REQ(loop, req) \ - if (!PostQueuedCompletionStatus((loop)->iocp, \ +#define POST_COMPLETION_FOR_REQ(loop, req) \ + if (!PostQueuedCompletionStatus((loop)->iocp, \ 0, \ 0, \ &((req)->overlapped))) { \ @@ -134,6 +138,8 @@ void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle); +int uv_tcp_import(uv_tcp_t* tcp, WSAPROTOCOL_INFOW* socket_protocol_info); + /* * UDP @@ -148,19 +154,21 @@ void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle); /* * Pipes */ -int uv_pipe_init_with_handle(uv_loop_t* loop, uv_pipe_t* handle, - HANDLE pipeHandle); int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, char* name, size_t nameSize); void close_pipe(uv_pipe_t* handle, int* status, uv_err_t* err); void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle); int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb); -int uv_pipe_accept(uv_pipe_t* server, uv_pipe_t* client); +int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client); int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, uv_read_cb read_cb); +int uv_pipe_read2_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, + uv_read2_cb read_cb); int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, uv_buf_t bufs[], int bufcnt, uv_write_cb cb); +int uv_pipe_write2(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, + uv_buf_t bufs[], int bufcnt, uv_stream_t* send_handle, uv_write_cb cb); void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, uv_req_t* req); @@ -173,6 +181,33 @@ void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, void uv_process_pipe_shutdown_req(uv_loop_t* loop, uv_pipe_t* handle, uv_shutdown_t* req); + +/* + * TTY + */ +void uv_console_init(); + +int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb); +int uv_tty_read_stop(uv_tty_t* handle); +int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, + uv_buf_t bufs[], int bufcnt, uv_write_cb cb); +void uv_tty_close(uv_tty_t* handle); + +void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req); +void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, + uv_write_t* req); +/* TODO: remove me */ +void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* raw_req); +/* TODO: remove me */ +void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, + uv_connect_t* req); + +void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle); + + /* * Loop watchers */ @@ -239,6 +274,10 @@ void uv_fs_event_close(uv_loop_t* loop, uv_fs_event_t* handle); void uv_fs_event_endgame(uv_loop_t* loop, uv_fs_event_t* handle); +/* Utils */ +int uv_parent_pid(); + + /* * Error handling */ @@ -247,9 +286,6 @@ extern const uv_err_t uv_ok_; void uv_fatal_error(const int errorno, const char* syscall); uv_err_code uv_translate_sys_error(int sys_errno); -uv_err_t uv_new_sys_error(int sys_errno); -void uv_set_sys_error(uv_loop_t* loop, int sys_errno); -void uv_set_error(uv_loop_t* loop, uv_err_code code, int sys_errno); #define SET_REQ_STATUS(req, status) \ (req)->overlapped.Internal = (ULONG_PTR) (status) @@ -272,22 +308,42 @@ void uv_set_error(uv_loop_t* loop, uv_err_code code, int sys_errno); #define GET_REQ_SOCK_ERROR(req) \ (uv_ntstatus_to_winsock_error(GET_REQ_STATUS((req)))) -#define GET_REQ_UV_ERROR(req) \ - (uv_new_sys_error(GET_REQ_ERROR((req)))) -#define GET_REQ_UV_SOCK_ERROR(req) \ - (uv_new_sys_error(GET_REQ_SOCK_ERROR((req)))) +/* + * Winapi and ntapi utility functions + */ +void uv_winapi_init(); /* - * Initialization for the windows and winsock api + * Winsock utility functions */ -void uv_winapi_init(); void uv_winsock_init(); + int uv_ntstatus_to_winsock_error(NTSTATUS status); +BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target); +BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target); + +int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); +int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, + int* addr_len, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine); + +/* Whether ipv6 is supported */ +extern int uv_allow_ipv6; + +/* Ip address used to bind to any port at any interface */ +extern struct sockaddr_in uv_addr_ip4_any_; +extern struct sockaddr_in6 uv_addr_ip6_any_; -/* Threads and synchronization */ + +/* + * Threads and synchronization + */ typedef struct uv_once_s { unsigned char ran; /* The actual event handle must be aligned to sizeof(HANDLE), so in */ diff --git a/src/rt/libuv/src/win/pipe.c b/src/rt/libuv/src/win/pipe.c index 7832c6a41af..65d1f11cd1c 100644 --- a/src/rt/libuv/src/win/pipe.c +++ b/src/rt/libuv/src/win/pipe.c @@ -20,6 +20,7 @@ */ #include <assert.h> +#include <io.h> #include <string.h> #include <stdio.h> @@ -38,6 +39,22 @@ static const uv_buf_t uv_null_buf_ = { 0, NULL }; /* when the local ends wants to shut it down. */ static const int64_t eof_timeout = 50; /* ms */ +/* IPC protocol flags. */ +#define UV_IPC_RAW_DATA 0x0001 +#define UV_IPC_UV_STREAM 0x0002 + +/* IPC frame header. */ +typedef struct { + int flags; + uint64_t raw_data_length; +} uv_ipc_frame_header_t; + +/* IPC frame, which contains an imported TCP socket stream. */ +typedef struct { + uv_ipc_frame_header_t header; + WSAPROTOCOL_INFOW socket_info; +} uv_ipc_frame_uv_stream; + static void eof_timer_init(uv_pipe_t* pipe); static void eof_timer_start(uv_pipe_t* pipe); static void eof_timer_stop(uv_pipe_t* pipe); @@ -51,13 +68,20 @@ static void uv_unique_pipe_name(char* ptr, char* name, size_t size) { } -int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle) { +int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle, int ipc) { uv_stream_init(loop, (uv_stream_t*)handle); handle->type = UV_NAMED_PIPE; handle->reqs_pending = 0; handle->handle = INVALID_HANDLE_VALUE; handle->name = NULL; + handle->ipc_pid = 0; + handle->remaining_ipc_rawdata_bytes = 0; + handle->pending_socket_info = NULL; + handle->ipc = ipc; + handle->non_overlapped_writes_tail = NULL; + + uv_req_init(loop, (uv_req_t*) &handle->ipc_header_write_req); loop->counters.pipe_init++; @@ -65,26 +89,9 @@ int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle) { } -int uv_pipe_init_with_handle(uv_loop_t* loop, uv_pipe_t* handle, - HANDLE pipeHandle) { - int err = uv_pipe_init(loop, handle); - - if (!err) { - /* - * At this point we don't know whether the pipe will be used as a client - * or a server. So, we assume that it will be a client until - * uv_listen is called. - */ - handle->handle = pipeHandle; - handle->flags |= UV_HANDLE_GIVEN_OS_HANDLE; - } - - return err; -} - - static void uv_pipe_connection_init(uv_pipe_t* handle) { uv_connection_init((uv_stream_t*) handle); + handle->read_req.data = handle; handle->eof_timer = NULL; } @@ -111,7 +118,7 @@ int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, errno = GetLastError(); if (errno != ERROR_PIPE_BUSY && errno != ERROR_ACCESS_DENIED) { - uv_set_sys_error(loop, errno); + uv__set_sys_error(loop, errno); err = -1; goto done; } @@ -124,14 +131,13 @@ int uv_stdio_pipe_server(uv_loop_t* loop, uv_pipe_t* handle, DWORD access, loop->iocp, (ULONG_PTR)handle, 0) == NULL) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); err = -1; goto done; } uv_pipe_connection_init(handle); handle->handle = pipeHandle; - handle->flags |= UV_HANDLE_GIVEN_OS_HANDLE; err = 0; done: @@ -145,19 +151,39 @@ done: static int uv_set_pipe_handle(uv_loop_t* loop, uv_pipe_t* handle, HANDLE pipeHandle) { + NTSTATUS nt_status; + IO_STATUS_BLOCK io_status; + FILE_MODE_INFORMATION mode_info; DWORD mode = PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT; if (!SetNamedPipeHandleState(pipeHandle, &mode, NULL, NULL)) { return -1; } - if (CreateIoCompletionPort(pipeHandle, - loop->iocp, - (ULONG_PTR)handle, - 0) == NULL) { + /* Check if the pipe was created with FILE_FLAG_OVERLAPPED. */ + nt_status = pNtQueryInformationFile(pipeHandle, + &io_status, + &mode_info, + sizeof(mode_info), + FileModeInformation); + if (nt_status != STATUS_SUCCESS) { return -1; } + if (mode_info.Mode & FILE_SYNCHRONOUS_IO_ALERT || + mode_info.Mode & FILE_SYNCHRONOUS_IO_NONALERT) { + /* Non-overlapped pipe. */ + handle->flags |= UV_HANDLE_NON_OVERLAPPED_PIPE; + } else { + /* Overlapped pipe. Try to associate with IOCP. */ + if (CreateIoCompletionPort(pipeHandle, + loop->iocp, + (ULONG_PTR)handle, + 0) == NULL) { + handle->flags |= UV_HANDLE_EMULATE_IOCP; + } + } + return 0; } @@ -192,7 +218,6 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { IO_STATUS_BLOCK io_status; FILE_PIPE_LOCAL_INFORMATION pipe_info; - if (handle->flags & UV_HANDLE_SHUTTING && !(handle->flags & UV_HANDLE_SHUT) && handle->write_reqs_pending == 0) { @@ -209,7 +234,7 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { /* Failure */ handle->flags &= ~UV_HANDLE_SHUTTING; if (req->cb) { - uv_set_sys_error(loop, pRtlNtStatusToDosError(nt_status)); + uv__set_sys_error(loop, pRtlNtStatusToDosError(nt_status)); req->cb(req, -1); } DECREASE_PENDING_REQ_COUNT(handle); @@ -231,12 +256,13 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { if (result) { /* Mark the handle as shut now to avoid going through this again. */ handle->flags |= UV_HANDLE_SHUT; + return; } else { /* Failure. */ handle->flags &= ~UV_HANDLE_SHUTTING; if (req->cb) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); req->cb(req, -1); } DECREASE_PENDING_REQ_COUNT(handle); @@ -249,6 +275,24 @@ void uv_pipe_endgame(uv_loop_t* loop, uv_pipe_t* handle) { assert(!(handle->flags & UV_HANDLE_CLOSED)); handle->flags |= UV_HANDLE_CLOSED; + if (handle->flags & UV_HANDLE_CONNECTION) { + if (handle->pending_socket_info) { + free(handle->pending_socket_info); + handle->pending_socket_info = NULL; + } + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (handle->read_req.wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(handle->read_req.wait_handle); + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; + } + if (handle->read_req.event_handle) { + CloseHandle(handle->read_req.event_handle); + handle->read_req.event_handle = NULL; + } + } + } + /* Remember the state of this flag because the close callback is */ /* allowed to clobber or free the handle's memory */ uv_alloced = handle->flags & UV_HANDLE_UV_ALLOCED; @@ -273,12 +317,12 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { uv_pipe_accept_t* req; if (handle->flags & UV_HANDLE_BOUND) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (!name) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } @@ -299,7 +343,7 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { } if (!uv_utf8_to_utf16(name, handle->name, nameSize / sizeof(wchar_t))) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -316,17 +360,17 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) { if (handle->accept_reqs[0].pipeHandle == INVALID_HANDLE_VALUE) { errno = GetLastError(); if (errno == ERROR_ACCESS_DENIED) { - uv_set_error(loop, UV_EADDRINUSE, errno); + uv__set_error(loop, UV_EADDRINUSE, errno); } else if (errno == ERROR_PATH_NOT_FOUND || errno == ERROR_INVALID_NAME) { - uv_set_error(loop, UV_EACCESS, errno); + uv__set_error(loop, UV_EACCESS, errno); } else { - uv_set_sys_error(loop, errno); + uv__set_sys_error(loop, errno); } goto error; } if (uv_set_pipe_handle(loop, handle, handle->accept_reqs[0].pipeHandle)) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); goto error; } @@ -472,7 +516,7 @@ error: if (pipeHandle != INVALID_HANDLE_VALUE) { CloseHandle(pipeHandle); } - uv_set_sys_error(loop, errno); + uv__set_sys_error(loop, errno); return -1; } @@ -566,30 +610,44 @@ static void uv_pipe_queue_accept(uv_loop_t* loop, uv_pipe_t* handle, } -int uv_pipe_accept(uv_pipe_t* server, uv_pipe_t* client) { +int uv_pipe_accept(uv_pipe_t* server, uv_stream_t* client) { uv_loop_t* loop = server->loop; - /* Find a connection instance that has been connected, but not yet */ - /* accepted. */ - uv_pipe_accept_t* req = server->pending_accepts; + uv_pipe_t* pipe_client; + uv_pipe_accept_t* req; - if (!req) { - /* No valid connections found, so we error out. */ - uv_set_sys_error(loop, WSAEWOULDBLOCK); - return -1; - } + if (server->ipc) { + if (!server->pending_socket_info) { + /* No valid pending sockets. */ + uv__set_sys_error(loop, WSAEWOULDBLOCK); + return -1; + } + + return uv_tcp_import((uv_tcp_t*)client, server->pending_socket_info); + } else { + pipe_client = (uv_pipe_t*)client; - /* Initialize the client handle and copy the pipeHandle to the client */ - uv_pipe_connection_init(client); - client->handle = req->pipeHandle; + /* Find a connection instance that has been connected, but not yet */ + /* accepted. */ + req = server->pending_accepts; - /* Prepare the req to pick up a new connection */ - server->pending_accepts = req->next_pending; - req->next_pending = NULL; - req->pipeHandle = INVALID_HANDLE_VALUE; + if (!req) { + /* No valid connections found, so we error out. */ + uv__set_sys_error(loop, WSAEWOULDBLOCK); + return -1; + } + + /* Initialize the client handle and copy the pipeHandle to the client */ + uv_pipe_connection_init(pipe_client); + pipe_client->handle = req->pipeHandle; + + /* Prepare the req to pick up a new connection */ + server->pending_accepts = req->next_pending; + req->next_pending = NULL; + req->pipeHandle = INVALID_HANDLE_VALUE; - if (!(server->flags & UV_HANDLE_CLOSING) && - !(server->flags & UV_HANDLE_GIVEN_OS_HANDLE)) { - uv_pipe_queue_accept(loop, server, req, FALSE); + if (!(server->flags & UV_HANDLE_CLOSING)) { + uv_pipe_queue_accept(loop, server, req, FALSE); + } } return 0; @@ -601,62 +659,130 @@ int uv_pipe_listen(uv_pipe_t* handle, int backlog, uv_connection_cb cb) { uv_loop_t* loop = handle->loop; int i, errno; - uv_pipe_accept_t* req; - HANDLE pipeHandle; - if (!(handle->flags & UV_HANDLE_BOUND) && - !(handle->flags & UV_HANDLE_GIVEN_OS_HANDLE)) { - uv_set_error(loop, UV_EINVAL, 0); + if (!(handle->flags & UV_HANDLE_BOUND)) { + uv__set_artificial_error(loop, UV_EINVAL); return -1; } if (handle->flags & UV_HANDLE_LISTENING || handle->flags & UV_HANDLE_READING) { - uv_set_error(loop, UV_EALREADY, 0); + uv__set_artificial_error(loop, UV_EALREADY); return -1; } - if (!(handle->flags & UV_HANDLE_PIPESERVER) && - !(handle->flags & UV_HANDLE_GIVEN_OS_HANDLE)) { - uv_set_error(loop, UV_ENOTSUP, 0); + if (!(handle->flags & UV_HANDLE_PIPESERVER)) { + uv__set_artificial_error(loop, UV_ENOTSUP); return -1; } handle->flags |= UV_HANDLE_LISTENING; handle->connection_cb = cb; - if (handle->flags & UV_HANDLE_GIVEN_OS_HANDLE) { - handle->flags |= UV_HANDLE_PIPESERVER; - pipeHandle = handle->handle; - assert(pipeHandle != INVALID_HANDLE_VALUE); - req = &handle->accept_reqs[0]; - uv_req_init(loop, (uv_req_t*) req); - req->pipeHandle = pipeHandle; - req->type = UV_ACCEPT; - req->data = handle; - req->next_pending = NULL; + /* First pipe handle should have already been created in uv_pipe_bind */ + assert(handle->accept_reqs[0].pipeHandle != INVALID_HANDLE_VALUE); - if (uv_set_pipe_handle(loop, handle, pipeHandle)) { - uv_set_sys_error(loop, GetLastError()); - return -1; - } + for (i = 0; i < COUNTOF(handle->accept_reqs); i++) { + uv_pipe_queue_accept(loop, handle, &handle->accept_reqs[i], i == 0); + } - uv_pipe_queue_accept(loop, handle, req, TRUE); - } else { - /* First pipe handle should have already been created in uv_pipe_bind */ - assert(handle->accept_reqs[0].pipeHandle != INVALID_HANDLE_VALUE); + return 0; +} - for (i = 0; i < COUNTOF(handle->accept_reqs); i++) { - uv_pipe_queue_accept(loop, handle, &handle->accept_reqs[i], i == 0); - } + +static DWORD WINAPI uv_pipe_zero_readfile_thread_proc(void* parameter) { + int result; + DWORD bytes; + uv_read_t* req = (uv_read_t*) parameter; + uv_pipe_t* handle = (uv_pipe_t*) req->data; + uv_loop_t* loop = handle->loop; + + assert(req != NULL); + assert(req->type == UV_READ); + assert(handle->type == UV_NAMED_PIPE); + + result = ReadFile(handle->handle, + &uv_zero_, + 0, + &bytes, + NULL); + + if (!result) { + SET_REQ_ERROR(req, GetLastError()); } + POST_COMPLETION_FOR_REQ(loop, req); return 0; } +static DWORD WINAPI uv_pipe_writefile_thread_proc(void* parameter) { + int result; + DWORD bytes; + uv_write_t* req = (uv_write_t*) parameter; + uv_pipe_t* handle = (uv_pipe_t*) req->handle; + uv_loop_t* loop = handle->loop; + + assert(req != NULL); + assert(req->type == UV_WRITE); + assert(handle->type == UV_NAMED_PIPE); + assert(req->write_buffer.base); + + result = WriteFile(handle->handle, + req->write_buffer.base, + req->write_buffer.len, + &bytes, + NULL); + + if (!result) { + SET_REQ_ERROR(req, GetLastError()); + } + + POST_COMPLETION_FOR_REQ(loop, req); + return 0; +} + + +static void CALLBACK post_completion_read_wait(void* context, BOOLEAN timed_out) { + uv_read_t* req; + uv_tcp_t* handle; + + req = (uv_read_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->data; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->overlapped.InternalHigh, + 0, + &req->overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + +static void CALLBACK post_completion_write_wait(void* context, BOOLEAN timed_out) { + uv_write_t* req; + uv_tcp_t* handle; + + req = (uv_write_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->handle; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->overlapped.InternalHigh, + 0, + &req->overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + static void uv_pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) { - uv_req_t* req; + uv_read_t* req; int result; assert(handle->flags & UV_HANDLE_READING); @@ -665,55 +791,90 @@ static void uv_pipe_queue_read(uv_loop_t* loop, uv_pipe_t* handle) { assert(handle->handle != INVALID_HANDLE_VALUE); req = &handle->read_req; - memset(&req->overlapped, 0, sizeof(req->overlapped)); - /* Do 0-read */ - result = ReadFile(handle->handle, - &uv_zero_, - 0, - NULL, - &req->overlapped); + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + if (!QueueUserWorkItem(&uv_pipe_zero_readfile_thread_proc, + req, + WT_EXECUTELONGFUNCTION)) { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + } else { + memset(&req->overlapped, 0, sizeof(req->overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->overlapped.hEvent = (HANDLE) ((DWORD) req->event_handle | 1); + } - if (!result && GetLastError() != ERROR_IO_PENDING) { - /* Make this req pending reporting an error. */ - SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, req); - handle->reqs_pending++; - return; + /* Do 0-read */ + result = ReadFile(handle->handle, + &uv_zero_, + 0, + NULL, + &req->overlapped); + + if (!result && GetLastError() != ERROR_IO_PENDING) { + /* Make this req pending reporting an error. */ + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (!req->event_handle) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (!req->event_handle) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } + if (req->wait_handle == INVALID_HANDLE_VALUE) { + if (!RegisterWaitForSingleObject(&req->wait_handle, + req->overlapped.hEvent, post_completion_read_wait, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + SET_REQ_ERROR(req, GetLastError()); + goto error; + } + } + } } /* Start the eof timer if there is one */ eof_timer_start(handle); + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + return; +error: + uv_insert_pending_req(loop, (uv_req_t*)req); handle->flags |= UV_HANDLE_READ_PENDING; handle->reqs_pending++; } -int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, - uv_read_cb read_cb) { +static int uv_pipe_read_start_impl(uv_pipe_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb, uv_read2_cb read2_cb) { uv_loop_t* loop = handle->loop; if (!(handle->flags & UV_HANDLE_CONNECTION)) { - uv_set_error(loop, UV_EINVAL, 0); + uv__set_artificial_error(loop, UV_EINVAL); return -1; } if (handle->flags & UV_HANDLE_READING) { - uv_set_error(loop, UV_EALREADY, 0); + uv__set_artificial_error(loop, UV_EALREADY); return -1; } if (handle->flags & UV_HANDLE_EOF) { - uv_set_error(loop, UV_EOF, 0); + uv__set_artificial_error(loop, UV_EOF); return -1; } handle->flags |= UV_HANDLE_READING; handle->read_cb = read_cb; + handle->read2_cb = read2_cb; handle->alloc_cb = alloc_cb; - /* If reading was stopped and then started again, there could stell be a */ + /* If reading was stopped and then started again, there could still be a */ /* read request pending. */ if (!(handle->flags & UV_HANDLE_READ_PENDING)) uv_pipe_queue_read(loop, handle); @@ -722,24 +883,93 @@ int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, } -int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, - uv_buf_t bufs[], int bufcnt, uv_write_cb cb) { +int uv_pipe_read_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + return uv_pipe_read_start_impl(handle, alloc_cb, read_cb, NULL); +} + + +int uv_pipe_read2_start(uv_pipe_t* handle, uv_alloc_cb alloc_cb, + uv_read2_cb read_cb) { + return uv_pipe_read_start_impl(handle, alloc_cb, NULL, read_cb); +} + + +static void uv_insert_non_overlapped_write_req(uv_pipe_t* handle, + uv_write_t* req) { + req->next_req = NULL; + if (handle->non_overlapped_writes_tail) { + req->next_req = + handle->non_overlapped_writes_tail->next_req; + handle->non_overlapped_writes_tail->next_req = (uv_req_t*)req; + handle->non_overlapped_writes_tail = req; + } else { + req->next_req = (uv_req_t*)req; + handle->non_overlapped_writes_tail = req; + } +} + + +static uv_write_t* uv_remove_non_overlapped_write_req(uv_pipe_t* handle) { + uv_write_t* req; + + if (handle->non_overlapped_writes_tail) { + req = (uv_write_t*)handle->non_overlapped_writes_tail->next_req; + + if (req == handle->non_overlapped_writes_tail) { + handle->non_overlapped_writes_tail = NULL; + } else { + handle->non_overlapped_writes_tail->next_req = + req->next_req; + } + + return req; + } else { + /* queue empty */ + return NULL; + } +} + + +static void uv_queue_non_overlapped_write(uv_pipe_t* handle) { + uv_write_t* req = uv_remove_non_overlapped_write_req(handle); + if (req) { + if (!QueueUserWorkItem(&uv_pipe_writefile_thread_proc, + req, + WT_EXECUTELONGFUNCTION)) { + uv_fatal_error(GetLastError(), "QueueUserWorkItem"); + } + } +} + + +static int uv_pipe_write_impl(uv_loop_t* loop, uv_write_t* req, + uv_pipe_t* handle, uv_buf_t bufs[], int bufcnt, + uv_stream_t* send_handle, uv_write_cb cb) { int result; + uv_tcp_t* tcp_send_handle; + uv_write_t* ipc_header_req; + uv_ipc_frame_uv_stream ipc_frame; + + if (bufcnt != 1 && (bufcnt != 0 || !send_handle)) { + uv__set_artificial_error(loop, UV_ENOTSUP); + return -1; + } - if (bufcnt != 1) { - uv_set_error(loop, UV_ENOTSUP, 0); + if (send_handle && send_handle->type != UV_TCP) { + uv__set_artificial_error(loop, UV_ENOTSUP); return -1; } assert(handle->handle != INVALID_HANDLE_VALUE); if (!(handle->flags & UV_HANDLE_CONNECTION)) { - uv_set_error(loop, UV_EINVAL, 0); + uv__set_artificial_error(loop, UV_EINVAL); return -1; } if (handle->flags & UV_HANDLE_SHUTTING) { - uv_set_error(loop, UV_EOF, 0); + uv__set_artificial_error(loop, UV_EOF); return -1; } @@ -747,26 +977,143 @@ int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, req->type = UV_WRITE; req->handle = (uv_stream_t*) handle; req->cb = cb; + req->ipc_header = 0; + req->event_handle = NULL; + req->wait_handle = INVALID_HANDLE_VALUE; memset(&req->overlapped, 0, sizeof(req->overlapped)); - result = WriteFile(handle->handle, - bufs[0].base, - bufs[0].len, - NULL, - &req->overlapped); + if (handle->ipc) { + assert(!(handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)); + ipc_frame.header.flags = 0; + + /* Use the IPC framing protocol. */ + if (send_handle) { + tcp_send_handle = (uv_tcp_t*)send_handle; + if (WSADuplicateSocketW(tcp_send_handle->socket, handle->ipc_pid, + &ipc_frame.socket_info)) { + uv__set_sys_error(loop, WSAGetLastError()); + return -1; + } + ipc_frame.header.flags |= UV_IPC_UV_STREAM; + } - if (!result && GetLastError() != ERROR_IO_PENDING) { - uv_set_sys_error(loop, GetLastError()); - return -1; + if (bufcnt == 1) { + ipc_frame.header.flags |= UV_IPC_RAW_DATA; + ipc_frame.header.raw_data_length = bufs[0].len; + } + + /* + * Use the provided req if we're only doing a single write. + * If we're doing multiple writes, use ipc_header_write_req to do + * the first write, and then use the provided req for the second write. + */ + if (!(ipc_frame.header.flags & UV_IPC_RAW_DATA)) { + ipc_header_req = req; + } else { + /* + * Try to use the preallocated write req if it's available. + * Otherwise allocate a new one. + */ + if (handle->ipc_header_write_req.type != UV_WRITE) { + ipc_header_req = (uv_write_t*)&handle->ipc_header_write_req; + } else { + ipc_header_req = (uv_write_t*)malloc(sizeof(uv_write_t)); + if (!handle->accept_reqs) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + } + + uv_req_init(loop, (uv_req_t*) ipc_header_req); + ipc_header_req->type = UV_WRITE; + ipc_header_req->handle = (uv_stream_t*) handle; + ipc_header_req->cb = NULL; + ipc_header_req->ipc_header = 1; + } + + /* Write the header or the whole frame. */ + memset(&ipc_header_req->overlapped, 0, sizeof(ipc_header_req->overlapped)); + + result = WriteFile(handle->handle, + &ipc_frame, + ipc_frame.header.flags & UV_IPC_UV_STREAM ? + sizeof(ipc_frame) : sizeof(ipc_frame.header), + NULL, + &ipc_header_req->overlapped); + if (!result && GetLastError() != ERROR_IO_PENDING) { + uv__set_sys_error(loop, GetLastError()); + return -1; + } + + if (result) { + /* Request completed immediately. */ + ipc_header_req->queued_bytes = 0; + } else { + /* Request queued by the kernel. */ + ipc_header_req->queued_bytes = ipc_frame.header.flags & UV_IPC_UV_STREAM ? + sizeof(ipc_frame) : sizeof(ipc_frame.header); + handle->write_queue_size += req->queued_bytes; + } + + if (handle->write_reqs_pending == 0) { + uv_ref(loop); + } + + handle->reqs_pending++; + handle->write_reqs_pending++; + + /* If we don't have any raw data to write - we're done. */ + if (!(ipc_frame.header.flags & UV_IPC_RAW_DATA)) { + return 0; + } } - if (result) { - /* Request completed immediately. */ - req->queued_bytes = 0; - } else { + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE) { + req->write_buffer = bufs[0]; + uv_insert_non_overlapped_write_req(handle, req); + if (handle->write_reqs_pending == 0) { + uv_queue_non_overlapped_write(handle); + } + /* Request queued by the kernel. */ req->queued_bytes = uv_count_bufs(bufs, bufcnt); handle->write_queue_size += req->queued_bytes; + } else { + result = WriteFile(handle->handle, + bufs[0].base, + bufs[0].len, + NULL, + &req->overlapped); + + if (!result && GetLastError() != ERROR_IO_PENDING) { + uv__set_sys_error(loop, GetLastError()); + return -1; + } + + if (result) { + /* Request completed immediately. */ + req->queued_bytes = 0; + } else { + /* Request queued by the kernel. */ + req->queued_bytes = uv_count_bufs(bufs, bufcnt); + handle->write_queue_size += req->queued_bytes; + } + + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (!req->event_handle) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + if (!RegisterWaitForSingleObject(&req->wait_handle, + req->overlapped.hEvent, post_completion_write_wait, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + uv__set_sys_error(loop, GetLastError()); + return -1; + } + } + } + + if (handle->write_reqs_pending == 0) { + uv_ref(loop); } handle->reqs_pending++; @@ -776,6 +1123,23 @@ int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, } +int uv_pipe_write(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, + uv_buf_t bufs[], int bufcnt, uv_write_cb cb) { + return uv_pipe_write_impl(loop, req, handle, bufs, bufcnt, NULL, cb); +} + + +int uv_pipe_write2(uv_loop_t* loop, uv_write_t* req, uv_pipe_t* handle, + uv_buf_t bufs[], int bufcnt, uv_stream_t* send_handle, uv_write_cb cb) { + if (!handle->ipc) { + uv__set_artificial_error(loop, UV_EINVAL); + return -1; + } + + return uv_pipe_write_impl(loop, req, handle, bufs, bufcnt, send_handle, cb); +} + + static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle, uv_buf_t buf) { /* If there is an eof timer running, we don't need it any more, */ @@ -785,8 +1149,12 @@ static void uv_pipe_read_eof(uv_loop_t* loop, uv_pipe_t* handle, handle->flags |= UV_HANDLE_EOF; uv_read_stop((uv_stream_t*) handle); - uv_set_error(loop, UV_EOF, 0); - handle->read_cb((uv_stream_t*) handle, -1, uv_null_buf_); + uv__set_artificial_error(loop, UV_EOF); + if (handle->read2_cb) { + handle->read2_cb(handle, -1, uv_null_buf_, UV_UNKNOWN_HANDLE); + } else { + handle->read_cb((uv_stream_t*) handle, -1, uv_null_buf_); + } } @@ -798,8 +1166,12 @@ static void uv_pipe_read_error(uv_loop_t* loop, uv_pipe_t* handle, int error, uv_read_stop((uv_stream_t*) handle); - uv_set_sys_error(loop, error); - handle->read_cb((uv_stream_t*)handle, -1, buf); + uv__set_sys_error(loop, error); + if (handle->read2_cb) { + handle->read2_cb(handle, -1, buf, UV_UNKNOWN_HANDLE); + } else { + handle->read_cb((uv_stream_t*)handle, -1, buf); + } } @@ -817,6 +1189,7 @@ void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, uv_req_t* req) { DWORD bytes, avail; uv_buf_t buf; + uv_ipc_frame_uv_stream ipc_frame; assert(handle->type == UV_NAMED_PIPE); @@ -835,11 +1208,11 @@ void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, /* Do non-blocking reads until the buffer is empty */ while (handle->flags & UV_HANDLE_READING) { if (!PeekNamedPipe(handle->handle, - NULL, - 0, - NULL, - &avail, - NULL)) { + NULL, + 0, + NULL, + &avail, + NULL)) { uv_pipe_read_error_or_eof(loop, handle, GetLastError(), uv_null_buf_); break; } @@ -849,6 +1222,63 @@ void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, break; } + if (handle->ipc) { + /* Use the IPC framing protocol to read the incoming data. */ + if (handle->remaining_ipc_rawdata_bytes == 0) { + /* We're reading a new frame. First, read the header. */ + assert(avail >= sizeof(ipc_frame.header)); + + if (!ReadFile(handle->handle, + &ipc_frame.header, + sizeof(ipc_frame.header), + &bytes, + NULL)) { + uv_pipe_read_error_or_eof(loop, handle, GetLastError(), + uv_null_buf_); + break; + } + + assert(bytes == sizeof(ipc_frame.header)); + assert(ipc_frame.header.flags <= (UV_IPC_UV_STREAM | UV_IPC_RAW_DATA)); + + if (ipc_frame.header.flags & UV_IPC_UV_STREAM) { + assert(avail - sizeof(ipc_frame.header) >= + sizeof(ipc_frame.socket_info)); + + /* Read the TCP socket info. */ + if (!ReadFile(handle->handle, + &ipc_frame.socket_info, + sizeof(ipc_frame) - sizeof(ipc_frame.header), + &bytes, + NULL)) { + uv_pipe_read_error_or_eof(loop, handle, GetLastError(), + uv_null_buf_); + break; + } + + assert(bytes == sizeof(ipc_frame) - sizeof(ipc_frame.header)); + + /* Store the pending socket info. */ + assert(!handle->pending_socket_info); + handle->pending_socket_info = + (WSAPROTOCOL_INFOW*)malloc(sizeof(*(handle->pending_socket_info))); + if (!handle->pending_socket_info) { + uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); + } + + *(handle->pending_socket_info) = ipc_frame.socket_info; + } + + if (ipc_frame.header.flags & UV_IPC_RAW_DATA) { + handle->remaining_ipc_rawdata_bytes = + ipc_frame.header.raw_data_length; + continue; + } + } else { + avail = min(avail, (DWORD)handle->remaining_ipc_rawdata_bytes); + } + } + buf = handle->alloc_cb((uv_handle_t*) handle, avail); assert(buf.len > 0); @@ -858,7 +1288,25 @@ void uv_process_pipe_read_req(uv_loop_t* loop, uv_pipe_t* handle, &bytes, NULL)) { /* Successful read */ - handle->read_cb((uv_stream_t*)handle, bytes, buf); + if (handle->ipc) { + assert(handle->remaining_ipc_rawdata_bytes >= bytes); + handle->remaining_ipc_rawdata_bytes = + handle->remaining_ipc_rawdata_bytes - bytes; + if (handle->read2_cb) { + handle->read2_cb(handle, bytes, buf, + handle->pending_socket_info ? UV_TCP : UV_UNKNOWN_HANDLE); + } else if (handle->read_cb) { + handle->read_cb((uv_stream_t*)handle, bytes, buf); + } + + if (handle->pending_socket_info) { + free(handle->pending_socket_info); + handle->pending_socket_info = NULL; + } + } else { + handle->read_cb((uv_stream_t*)handle, bytes, buf); + } + /* Read again only if bytes == buf.len */ if (bytes <= buf.len) { break; @@ -884,18 +1332,49 @@ void uv_process_pipe_write_req(uv_loop_t* loop, uv_pipe_t* handle, uv_write_t* req) { assert(handle->type == UV_NAMED_PIPE); + assert(handle->write_queue_size >= req->queued_bytes); handle->write_queue_size -= req->queued_bytes; - if (req->cb) { - if (!REQ_SUCCESS(req)) { - loop->last_error = GET_REQ_UV_ERROR(req); - ((uv_write_cb)req->cb)(req, -1); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } + + if (req->ipc_header) { + if (req == &handle->ipc_header_write_req) { + req->type = UV_UNKNOWN_REQ; } else { - ((uv_write_cb)req->cb)(req, 0); + free(req); + } + } else { + if (req->cb) { + if (!REQ_SUCCESS(req)) { + uv__set_sys_error(loop, GET_REQ_ERROR(req)); + ((uv_write_cb)req->cb)(req, -1); + } else { + ((uv_write_cb)req->cb)(req, 0); + } } } handle->write_reqs_pending--; + + if (handle->flags & UV_HANDLE_NON_OVERLAPPED_PIPE && + handle->non_overlapped_writes_tail) { + assert(handle->write_reqs_pending > 0); + uv_queue_non_overlapped_write(handle); + } + + if (handle->write_reqs_pending == 0) { + uv_unref(loop); + } + if (handle->write_reqs_pending == 0 && handle->flags & UV_HANDLE_SHUTTING) { uv_want_endgame(loop, (uv_handle_t*)handle); @@ -924,8 +1403,7 @@ void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle, CloseHandle(req->pipeHandle); req->pipeHandle = INVALID_HANDLE_VALUE; } - if (!(handle->flags & UV_HANDLE_CLOSING) && - !(handle->flags & UV_HANDLE_GIVEN_OS_HANDLE)) { + if (!(handle->flags & UV_HANDLE_CLOSING)) { uv_pipe_queue_accept(loop, handle, req, FALSE); } } @@ -943,7 +1421,7 @@ void uv_process_pipe_connect_req(uv_loop_t* loop, uv_pipe_t* handle, uv_pipe_connection_init(handle); ((uv_connect_cb)req->cb)(req, 0); } else { - loop->last_error = GET_REQ_UV_ERROR(req); + uv__set_sys_error(loop, GET_REQ_ERROR(req)); ((uv_connect_cb)req->cb)(req, -1); } } @@ -1062,6 +1540,19 @@ static void eof_timer_close_cb(uv_handle_t* handle) { void uv_pipe_open(uv_pipe_t* pipe, uv_file file) { - assert(0 && "implement me"); -} + HANDLE os_handle = (HANDLE)_get_osfhandle(file); + + if (os_handle == INVALID_HANDLE_VALUE || + uv_set_pipe_handle(pipe->loop, pipe, os_handle) == -1) { + return; + } + uv_pipe_connection_init(pipe); + pipe->handle = os_handle; + + if (pipe->ipc) { + assert(!(pipe->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)); + pipe->ipc_pid = uv_parent_pid(); + assert(pipe->ipc_pid != -1); + } +} diff --git a/src/rt/libuv/src/win/process.c b/src/rt/libuv/src/win/process.c index ed8015e0ef6..0e70984013a 100644 --- a/src/rt/libuv/src/win/process.c +++ b/src/rt/libuv/src/win/process.c @@ -45,7 +45,7 @@ typedef struct env_var { uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); \ } \ if (!uv_utf8_to_utf16(s, t, size / sizeof(wchar_t))) { \ - uv_set_sys_error(loop, GetLastError()); \ + uv__set_sys_error(loop, GetLastError()); \ err = -1; \ goto done; \ } @@ -739,14 +739,15 @@ void uv_process_close(uv_loop_t* loop, uv_process_t* handle) { static int uv_create_stdio_pipe_pair(uv_loop_t* loop, uv_pipe_t* server_pipe, - HANDLE* child_pipe, DWORD server_access, DWORD child_access) { + HANDLE* child_pipe, DWORD server_access, DWORD child_access, + int overlapped) { int err; SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE }; char pipe_name[64]; DWORD mode = PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT; if (server_pipe->type != UV_NAMED_PIPE) { - uv_set_error(loop, UV_EINVAL, 0); + uv__set_artificial_error(loop, UV_EINVAL); err = -1; goto done; } @@ -767,17 +768,17 @@ static int uv_create_stdio_pipe_pair(uv_loop_t* loop, uv_pipe_t* server_pipe, 0, &sa, OPEN_EXISTING, - 0, + overlapped ? FILE_FLAG_OVERLAPPED : 0, NULL); if (*child_pipe == INVALID_HANDLE_VALUE) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); err = -1; goto done; } if (!SetNamedPipeHandleState(*child_pipe, &mode, NULL, NULL)) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); err = -1; goto done; } @@ -787,7 +788,7 @@ static int uv_create_stdio_pipe_pair(uv_loop_t* loop, uv_pipe_t* server_pipe, */ if (!ConnectNamedPipe(server_pipe->handle, NULL)) { if (GetLastError() != ERROR_PIPE_CONNECTED) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); err = -1; goto done; } @@ -822,7 +823,7 @@ static int duplicate_std_handle(uv_loop_t* loop, DWORD id, HANDLE* dup) { return 0; } else if (handle == INVALID_HANDLE_VALUE) { *dup = INVALID_HANDLE_VALUE; - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -834,7 +835,7 @@ static int duplicate_std_handle(uv_loop_t* loop, DWORD id, HANDLE* dup) { TRUE, DUPLICATE_SAME_ACCESS)) { *dup = INVALID_HANDLE_VALUE; - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -848,13 +849,14 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, wchar_t* path = NULL; int size; BOOL result; - wchar_t* application_path = NULL, *application = NULL, *arguments = NULL, *env = NULL, *cwd = NULL; + wchar_t* application_path = NULL, *application = NULL, *arguments = NULL, + *env = NULL, *cwd = NULL; HANDLE* child_stdio = process->child_stdio; STARTUPINFOW startup; PROCESS_INFORMATION info; if (!options.file) { - uv_set_error(loop, UV_EINVAL, 0); + uv__set_artificial_error(loop, UV_EINVAL); return -1; } @@ -877,7 +879,7 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, } GetCurrentDirectoryW(size, cwd); } else { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); err = -1; goto done; } @@ -904,12 +906,23 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, /* Create stdio pipes. */ if (options.stdin_stream) { - err = uv_create_stdio_pipe_pair( - loop, - options.stdin_stream, - &child_stdio[0], - PIPE_ACCESS_OUTBOUND, - GENERIC_READ | FILE_WRITE_ATTRIBUTES); + if (options.stdin_stream->ipc) { + err = uv_create_stdio_pipe_pair( + loop, + options.stdin_stream, + &child_stdio[0], + PIPE_ACCESS_DUPLEX, + GENERIC_READ | FILE_WRITE_ATTRIBUTES | GENERIC_WRITE, + 1); + } else { + err = uv_create_stdio_pipe_pair( + loop, + options.stdin_stream, + &child_stdio[0], + PIPE_ACCESS_OUTBOUND, + GENERIC_READ | FILE_WRITE_ATTRIBUTES, + 0); + } } else { err = duplicate_std_handle(loop, STD_INPUT_HANDLE, &child_stdio[0]); } @@ -922,7 +935,8 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, loop, options.stdout_stream, &child_stdio[1], PIPE_ACCESS_INBOUND, - GENERIC_WRITE); + GENERIC_WRITE, + 0); } else { err = duplicate_std_handle(loop, STD_OUTPUT_HANDLE, &child_stdio[1]); } @@ -936,7 +950,8 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, options.stderr_stream, &child_stdio[2], PIPE_ACCESS_INBOUND, - GENERIC_WRITE); + GENERIC_WRITE, + 0); } else { err = duplicate_std_handle(loop, STD_ERROR_HANDLE, &child_stdio[2]); } @@ -969,6 +984,11 @@ int uv_spawn(uv_loop_t* loop, uv_process_t* process, process->process_handle = info.hProcess; process->pid = info.dwProcessId; + if (options.stdin_stream && + options.stdin_stream->ipc) { + options.stdin_stream->ipc_pid = info.dwProcessId; + } + /* Setup notifications for when the child process exits. */ result = RegisterWaitForSingleObject(&process->wait_handle, process->process_handle, exit_wait_callback, (void*)process, INFINITE, @@ -1033,13 +1053,34 @@ done: int uv_process_kill(uv_process_t* process, int signum) { - process->exit_signal = signum; + DWORD status; - /* On windows killed processes normally return 1 */ - if (process->process_handle != INVALID_HANDLE_VALUE && - TerminateProcess(process->process_handle, 1)) { + if (process->process_handle == INVALID_HANDLE_VALUE) { + uv__set_artificial_error(process->loop, UV_EINVAL); + return -1; + } + + if (signum) { + /* Kill the process. On Windows, killed processes normally return 1. */ + if (TerminateProcess(process->process_handle, 1)) { + process->exit_signal = signum; + return 0; + } + else { + uv__set_sys_error(process->loop, GetLastError()); + return -1; + } + } + else { + /* Health check: is the process still alive? */ + if (GetExitCodeProcess(process->process_handle, &status) && status == STILL_ACTIVE) { return 0; + } + else { + uv__set_artificial_error(process->loop, UV_EINVAL); + return -1; + } } - return -1; + assert(0 && "unreachable"); } diff --git a/src/rt/libuv/src/win/req.c b/src/rt/libuv/src/win/req.c index a0a6e03dc60..dd2b38809e9 100644 --- a/src/rt/libuv/src/win/req.c +++ b/src/rt/libuv/src/win/req.c @@ -87,6 +87,12 @@ static uv_req_t* uv_remove_pending_req(uv_loop_t* loop) { req); \ break; \ \ + case UV_TTY: \ + uv_process_tty_##method##_req(loop, \ + (uv_tty_t*) ((req)->handle_at), \ + req); \ + break; \ + \ default: \ assert(0); \ } \ diff --git a/src/rt/libuv/src/win/stream.c b/src/rt/libuv/src/win/stream.c index 26964110fce..c2354eecba0 100644 --- a/src/rt/libuv/src/win/stream.c +++ b/src/rt/libuv/src/win/stream.c @@ -43,6 +43,8 @@ void uv_connection_init(uv_stream_t* handle) { handle->write_reqs_pending = 0; uv_req_init(handle->loop, (uv_req_t*) &(handle->read_req)); + handle->read_req.event_handle = NULL; + handle->read_req.wait_handle = INVALID_HANDLE_VALUE; handle->read_req.type = UV_READ; handle->read_req.data = handle; } @@ -62,13 +64,11 @@ int uv_listen(uv_stream_t* stream, int backlog, uv_connection_cb cb) { int uv_accept(uv_stream_t* server, uv_stream_t* client) { - assert(client->type == server->type); - switch (server->type) { case UV_TCP: return uv_tcp_accept((uv_tcp_t*)server, (uv_tcp_t*)client); case UV_NAMED_PIPE: - return uv_pipe_accept((uv_pipe_t*)server, (uv_pipe_t*)client); + return uv_pipe_accept((uv_pipe_t*)server, client); default: assert(0); return -1; @@ -83,6 +83,8 @@ int uv_read_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, return uv_tcp_read_start((uv_tcp_t*)handle, alloc_cb, read_cb); case UV_NAMED_PIPE: return uv_pipe_read_start((uv_pipe_t*)handle, alloc_cb, read_cb); + case UV_TTY: + return uv_tty_read_start((uv_tty_t*) handle, alloc_cb, read_cb); default: assert(0); return -1; @@ -90,10 +92,25 @@ int uv_read_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, } -int uv_read_stop(uv_stream_t* handle) { - handle->flags &= ~UV_HANDLE_READING; +int uv_read2_start(uv_stream_t* handle, uv_alloc_cb alloc_cb, + uv_read2_cb read_cb) { + switch (handle->type) { + case UV_NAMED_PIPE: + return uv_pipe_read2_start((uv_pipe_t*)handle, alloc_cb, read_cb); + default: + assert(0); + return -1; + } +} - return 0; + +int uv_read_stop(uv_stream_t* handle) { + if (handle->type == UV_TTY) { + return uv_tty_read_stop((uv_tty_t*) handle); + } else { + handle->flags &= ~UV_HANDLE_READING; + return 0; + } } @@ -106,9 +123,26 @@ int uv_write(uv_write_t* req, uv_stream_t* handle, uv_buf_t bufs[], int bufcnt, return uv_tcp_write(loop, req, (uv_tcp_t*) handle, bufs, bufcnt, cb); case UV_NAMED_PIPE: return uv_pipe_write(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, cb); + case UV_TTY: + return uv_tty_write(loop, req, (uv_tty_t*) handle, bufs, bufcnt, cb); + default: + assert(0); + uv__set_sys_error(loop, WSAEINVAL); + return -1; + } +} + + +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_loop_t* loop = handle->loop; + + switch (handle->type) { + case UV_NAMED_PIPE: + return uv_pipe_write2(loop, req, (uv_pipe_t*) handle, bufs, bufcnt, send_handle, cb); default: assert(0); - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } } @@ -118,12 +152,12 @@ int uv_shutdown(uv_shutdown_t* req, uv_stream_t* handle, uv_shutdown_cb cb) { uv_loop_t* loop = handle->loop; if (!(handle->flags & UV_HANDLE_CONNECTION)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (handle->flags & UV_HANDLE_SHUTTING) { - uv_set_sys_error(loop, WSAESHUTDOWN); + uv__set_sys_error(loop, WSAESHUTDOWN); return -1; } diff --git a/src/rt/libuv/src/win/tcp.c b/src/rt/libuv/src/win/tcp.c index ebd83534983..0ff6890bcf7 100644 --- a/src/rt/libuv/src/win/tcp.c +++ b/src/rt/libuv/src/win/tcp.c @@ -47,20 +47,20 @@ static unsigned int active_tcp_streams = 0; static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, - SOCKET socket) { + SOCKET socket, int imported) { DWORD yes = 1; assert(handle->socket == INVALID_SOCKET); /* Set the socket to nonblocking mode */ if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } /* Make the socket non-inheritable */ if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -70,8 +70,12 @@ static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, loop->iocp, (ULONG_PTR)socket, 0) == NULL) { - uv_set_sys_error(loop, GetLastError()); - return -1; + if (imported) { + handle->flags |= UV_HANDLE_EMULATE_IOCP; + } else { + uv__set_sys_error(loop, GetLastError()); + return -1; + } } if (pSetFileCompletionNotificationModes) { @@ -80,7 +84,7 @@ static int uv_tcp_set_socket(uv_loop_t* loop, uv_tcp_t* handle, FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; } else if (GetLastError() != ERROR_INVALID_FUNCTION) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } } @@ -99,6 +103,8 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) { handle->socket = INVALID_SOCKET; handle->type = UV_TCP; handle->reqs_pending = 0; + handle->func_acceptex = NULL; + handle->func_connectex = NULL; loop->counters.tcp_init++; @@ -107,8 +113,10 @@ int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle) { void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { - uv_err_t err; int status; + int sys_error; + unsigned int i; + uv_tcp_accept_t* req; if (handle->flags & UV_HANDLE_CONNECTION && handle->flags & UV_HANDLE_SHUTTING && @@ -120,15 +128,17 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { handle->flags |= UV_HANDLE_SHUT; } else { status = -1; - err = uv_new_sys_error(WSAGetLastError()); + sys_error = WSAGetLastError(); } if (handle->shutdown_req->cb) { if (status == -1) { - loop->last_error = err; + uv__set_sys_error(loop, sys_error); } handle->shutdown_req->cb(handle->shutdown_req, status); } - handle->reqs_pending--; + + DECREASE_PENDING_REQ_COUNT(handle); + return; } if (handle->flags & UV_HANDLE_CLOSING && @@ -137,6 +147,20 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { handle->flags |= UV_HANDLE_CLOSED; if (!(handle->flags & UV_HANDLE_CONNECTION) && handle->accept_reqs) { + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + for (i = 0; i < uv_simultaneous_server_accepts; i++) { + req = &handle->accept_reqs[i]; + if (req->wait_handle != INVALID_HANDLE_VALUE) { + UnregisterWait(req->wait_handle); + req->wait_handle = INVALID_HANDLE_VALUE; + } + if (req->event_handle) { + CloseHandle(req->event_handle); + req->event_handle = NULL; + } + } + } + free(handle->accept_reqs); handle->accept_reqs = NULL; } @@ -152,8 +176,10 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) { } -static int uv__bind(uv_loop_t* loop, uv_tcp_t* handle, int domain, - struct sockaddr* addr, int addrsize) { +static int uv__bind(uv_tcp_t* handle, + int domain, + struct sockaddr* addr, + int addrsize) { DWORD err; int r; SOCKET sock; @@ -161,11 +187,11 @@ static int uv__bind(uv_loop_t* loop, uv_tcp_t* handle, int domain, if (handle->socket == INVALID_SOCKET) { sock = socket(domain, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(handle->loop, WSAGetLastError()); return -1; } - if (uv_tcp_set_socket(loop, handle, sock) == -1) { + if (uv_tcp_set_socket(handle->loop, handle, sock, 0) == -1) { closesocket(sock); return -1; } @@ -177,10 +203,10 @@ static int uv__bind(uv_loop_t* loop, uv_tcp_t* handle, int domain, err = WSAGetLastError(); if (err == WSAEADDRINUSE) { /* Some errors are not to be reported until connect() or listen() */ - handle->bind_error = uv_new_sys_error(err); + handle->bind_error = err; handle->flags |= UV_HANDLE_BIND_ERROR; } else { - uv_set_sys_error(loop, err); + uv__set_sys_error(handle->loop, err); return -1; } } @@ -191,63 +217,63 @@ static int uv__bind(uv_loop_t* loop, uv_tcp_t* handle, int domain, } -int uv_tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { - uv_loop_t* loop = handle->loop; - - if (addr.sin_family != AF_INET) { - uv_set_sys_error(loop, WSAEFAULT); - return -1; - } - - return uv__bind(loop, - handle, +int uv__tcp_bind(uv_tcp_t* handle, struct sockaddr_in addr) { + return uv__bind(handle, AF_INET, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)); } -int uv_tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { - uv_loop_t* loop = handle->loop; - - if (addr.sin6_family != AF_INET6) { - uv_set_sys_error(loop, WSAEFAULT); - return -1; - } - +int uv__tcp_bind6(uv_tcp_t* handle, struct sockaddr_in6 addr) { if (uv_allow_ipv6) { handle->flags |= UV_HANDLE_IPV6; - return uv__bind(loop, - handle, + return uv__bind(handle, AF_INET6, (struct sockaddr*)&addr, sizeof(struct sockaddr_in6)); } else { - uv_set_sys_error(loop, WSAEAFNOSUPPORT); + uv__set_sys_error(handle->loop, WSAEAFNOSUPPORT); return -1; } } +static void CALLBACK post_completion(void* context, BOOLEAN timed_out) { + uv_tcp_accept_t* req; + uv_tcp_t* handle; + + req = (uv_tcp_accept_t*) context; + assert(req != NULL); + handle = (uv_tcp_t*)req->data; + assert(handle != NULL); + assert(!timed_out); + + if (!PostQueuedCompletionStatus(handle->loop->iocp, + req->overlapped.InternalHigh, + 0, + &req->overlapped)) { + uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus"); + } +} + + static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { uv_loop_t* loop = handle->loop; BOOL success; DWORD bytes; SOCKET accept_socket; short family; - LPFN_ACCEPTEX pAcceptExFamily; assert(handle->flags & UV_HANDLE_LISTENING); assert(req->accept_socket == INVALID_SOCKET); /* choose family and extension function */ - if ((handle->flags & UV_HANDLE_IPV6) != 0) { + if (handle->flags & UV_HANDLE_IPV6) { family = AF_INET6; - pAcceptExFamily = pAcceptEx6; } else { family = AF_INET; - pAcceptExFamily = pAcceptEx; } /* Open a socket for the accepted connection. */ @@ -261,15 +287,18 @@ static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { /* Prepare the overlapped structure. */ memset(&(req->overlapped), 0, sizeof(req->overlapped)); + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->overlapped.hEvent = (HANDLE) ((DWORD) req->event_handle | 1); + } - success = pAcceptExFamily(handle->socket, - accept_socket, - (void*)req->accept_buffer, - 0, - sizeof(struct sockaddr_storage), - sizeof(struct sockaddr_storage), - &bytes, - &req->overlapped); + success = handle->func_acceptex(handle->socket, + accept_socket, + (void*)req->accept_buffer, + 0, + sizeof(struct sockaddr_storage), + sizeof(struct sockaddr_storage), + &bytes, + &req->overlapped); if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { /* Process the req without IOCP. */ @@ -280,6 +309,16 @@ static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { /* The req will be processed with IOCP. */ req->accept_socket = accept_socket; handle->reqs_pending++; + if (handle->flags & UV_HANDLE_EMULATE_IOCP && + req->wait_handle == INVALID_HANDLE_VALUE && + !RegisterWaitForSingleObject(&req->wait_handle, + req->overlapped.hEvent, post_completion, (void*) req, + INFINITE, WT_EXECUTEINWAITTHREAD)) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + handle->reqs_pending++; + return; + } } else { /* Make this req pending reporting an error. */ SET_REQ_ERROR(req, WSAGetLastError()); @@ -287,12 +326,17 @@ static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) { handle->reqs_pending++; /* Destroy the preallocated client socket. */ closesocket(accept_socket); + /* Destroy the event handle */ + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + CloseHandle(req->overlapped.hEvent); + req->event_handle = NULL; + } } } static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) { - uv_req_t* req; + uv_read_t* req; uv_buf_t buf; int result; DWORD bytes, flags; @@ -332,7 +376,7 @@ static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) { handle->flags |= UV_HANDLE_READ_PENDING; req->overlapped.InternalHigh = bytes; handle->reqs_pending++; - uv_insert_pending_req(loop, req); + uv_insert_pending_req(loop, (uv_req_t*)req); } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { /* The req will be processed with IOCP. */ handle->flags |= UV_HANDLE_READ_PENDING; @@ -340,7 +384,7 @@ static void uv_tcp_queue_read(uv_loop_t* loop, uv_tcp_t* handle) { } else { /* Make this req pending reporting an error. */ SET_REQ_ERROR(req, WSAGetLastError()); - uv_insert_pending_req(loop, req); + uv_insert_pending_req(loop, (uv_req_t*)req); handle->reqs_pending++; } } @@ -354,14 +398,14 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { assert(backlog > 0); if (handle->flags & UV_HANDLE_BIND_ERROR) { - loop->last_error = handle->bind_error; + uv__set_sys_error(loop, handle->bind_error); return -1; } if (handle->flags & UV_HANDLE_LISTENING || handle->flags & UV_HANDLE_READING) { /* Already listening. */ - uv_set_sys_error(loop, WSAEALREADY); + uv__set_sys_error(loop, WSAEALREADY); return -1; } @@ -369,8 +413,15 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { uv_tcp_bind(handle, uv_addr_ip4_any_) < 0) return -1; + if (!handle->func_acceptex) { + if(!uv_get_acceptex_function(handle->socket, &handle->func_acceptex)) { + uv__set_sys_error(loop, WSAEAFNOSUPPORT); + return -1; + } + } + if (listen(handle->socket, backlog) == SOCKET_ERROR) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -390,6 +441,17 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) { req->type = UV_ACCEPT; req->accept_socket = INVALID_SOCKET; req->data = handle; + + req->wait_handle = INVALID_HANDLE_VALUE; + if (handle->flags & UV_HANDLE_EMULATE_IOCP) { + req->event_handle = CreateEvent(NULL, 0, 0, NULL); + if (!req->event_handle) { + uv_fatal_error(GetLastError(), "CreateEvent"); + } + } else { + req->event_handle = NULL; + } + uv_tcp_queue_accept(handle, req); } @@ -405,16 +467,16 @@ int uv_tcp_accept(uv_tcp_t* server, uv_tcp_t* client) { if (!req) { /* No valid connections found, so we error out. */ - uv_set_sys_error(loop, WSAEWOULDBLOCK); + uv__set_sys_error(loop, WSAEWOULDBLOCK); return -1; } if (req->accept_socket == INVALID_SOCKET) { - uv_set_sys_error(loop, WSAENOTCONN); + uv__set_sys_error(loop, WSAENOTCONN); return -1; } - if (uv_tcp_set_socket(client->loop, client, req->accept_socket) == -1) { + if (uv_tcp_set_socket(client->loop, client, req->accept_socket, 0) == -1) { closesocket(req->accept_socket); rv = -1; } else { @@ -443,17 +505,17 @@ int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, uv_loop_t* loop = handle->loop; if (!(handle->flags & UV_HANDLE_CONNECTION)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (handle->flags & UV_HANDLE_READING) { - uv_set_sys_error(loop, WSAEALREADY); + uv__set_sys_error(loop, WSAEALREADY); return -1; } if (handle->flags & UV_HANDLE_EOF) { - uv_set_sys_error(loop, WSAESHUTDOWN); + uv__set_sys_error(loop, WSAESHUTDOWN); return -1; } @@ -470,20 +532,17 @@ int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb, } -int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, - struct sockaddr_in address, uv_connect_cb cb) { +int uv__tcp_connect(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in address, + uv_connect_cb cb) { uv_loop_t* loop = handle->loop; int addrsize = sizeof(struct sockaddr_in); BOOL success; DWORD bytes; if (handle->flags & UV_HANDLE_BIND_ERROR) { - loop->last_error = handle->bind_error; - return -1; - } - - if (address.sin_family != AF_INET) { - uv_set_sys_error(loop, WSAEFAULT); + uv__set_sys_error(loop, handle->bind_error); return -1; } @@ -491,19 +550,26 @@ int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, uv_tcp_bind(handle, uv_addr_ip4_any_) < 0) return -1; + if (!handle->func_connectex) { + if(!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { + uv__set_sys_error(loop, WSAEAFNOSUPPORT); + return -1; + } + } + uv_req_init(loop, (uv_req_t*) req); req->type = UV_CONNECT; req->handle = (uv_stream_t*) handle; req->cb = cb; memset(&req->overlapped, 0, sizeof(req->overlapped)); - success = pConnectEx(handle->socket, - (struct sockaddr*) &address, - addrsize, - NULL, - 0, - &bytes, - &req->overlapped); + success = handle->func_connectex(handle->socket, + (struct sockaddr*) &address, + addrsize, + NULL, + 0, + &bytes, + &req->overlapped); if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { /* Process the req without IOCP. */ @@ -513,7 +579,7 @@ int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, /* The req will be processed with IOCP. */ handle->reqs_pending++; } else { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -521,25 +587,22 @@ int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, } -int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle, - struct sockaddr_in6 address, uv_connect_cb cb) { +int uv__tcp_connect6(uv_connect_t* req, + uv_tcp_t* handle, + struct sockaddr_in6 address, + uv_connect_cb cb) { uv_loop_t* loop = handle->loop; int addrsize = sizeof(struct sockaddr_in6); BOOL success; DWORD bytes; if (!uv_allow_ipv6) { - uv_new_sys_error(WSAEAFNOSUPPORT); + uv__set_sys_error(loop, WSAEAFNOSUPPORT); return -1; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - loop->last_error = handle->bind_error; - return -1; - } - - if (address.sin6_family != AF_INET6) { - uv_set_sys_error(loop, WSAEFAULT); + uv__set_sys_error(loop, handle->bind_error); return -1; } @@ -547,19 +610,26 @@ int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle, uv_tcp_bind6(handle, uv_addr_ip6_any_) < 0) return -1; + if (!handle->func_connectex) { + if(!uv_get_connectex_function(handle->socket, &handle->func_connectex)) { + uv__set_sys_error(loop, WSAEAFNOSUPPORT); + return -1; + } + } + uv_req_init(loop, (uv_req_t*) req); req->type = UV_CONNECT; req->handle = (uv_stream_t*) handle; req->cb = cb; memset(&req->overlapped, 0, sizeof(req->overlapped)); - success = pConnectEx6(handle->socket, - (struct sockaddr*) &address, - addrsize, - NULL, - 0, - &bytes, - &req->overlapped); + success = handle->func_connectex(handle->socket, + (struct sockaddr*) &address, + addrsize, + NULL, + 0, + &bytes, + &req->overlapped); if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { handle->reqs_pending++; @@ -567,7 +637,7 @@ int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle, } else if (UV_SUCCEEDED_WITH_IOCP(success)) { handle->reqs_pending++; } else { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -581,18 +651,18 @@ int uv_tcp_getsockname(uv_tcp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - loop->last_error = handle->bind_error; + uv__set_sys_error(loop, handle->bind_error); return -1; } result = getsockname(handle->socket, name, namelen); if (result != 0) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -606,18 +676,18 @@ int uv_tcp_getpeername(uv_tcp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (handle->flags & UV_HANDLE_BIND_ERROR) { - loop->last_error = handle->bind_error; + uv__set_sys_error(loop, handle->bind_error); return -1; } result = getpeername(handle->socket, name, namelen); if (result != 0) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -631,12 +701,12 @@ int uv_tcp_write(uv_loop_t* loop, uv_write_t* req, uv_tcp_t* handle, DWORD bytes; if (!(handle->flags & UV_HANDLE_CONNECTION)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } if (handle->flags & UV_HANDLE_SHUTTING) { - uv_set_sys_error(loop, WSAESHUTDOWN); + uv__set_sys_error(loop, WSAESHUTDOWN); return -1; } @@ -668,7 +738,7 @@ int uv_tcp_write(uv_loop_t* loop, uv_write_t* req, uv_tcp_t* handle, handle->write_queue_size += req->queued_bytes; } else { /* Send failed due to an error. */ - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -689,7 +759,7 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, /* An error occurred doing the read. */ if ((handle->flags & UV_HANDLE_READING)) { handle->flags &= ~UV_HANDLE_READING; - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); buf = (handle->flags & UV_HANDLE_ZERO_READ) ? uv_buf_init(NULL, 0) : handle->read_buffer; handle->read_cb((uv_stream_t*)handle, -1, buf); @@ -710,8 +780,7 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, /* Connection closed */ handle->flags &= ~UV_HANDLE_READING; handle->flags |= UV_HANDLE_EOF; - loop->last_error.code = UV_EOF; - loop->last_error.sys_errno_ = ERROR_SUCCESS; + uv__set_error(loop, UV_EOF, ERROR_SUCCESS); buf.base = 0; buf.len = 0; handle->read_cb((uv_stream_t*)handle, -1, handle->read_buffer); @@ -742,8 +811,7 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, /* Connection closed */ handle->flags &= ~UV_HANDLE_READING; handle->flags |= UV_HANDLE_EOF; - loop->last_error.code = UV_EOF; - loop->last_error.sys_errno_ = ERROR_SUCCESS; + uv__set_error(loop, UV_EOF, ERROR_SUCCESS); handle->read_cb((uv_stream_t*)handle, -1, buf); break; } @@ -751,11 +819,11 @@ void uv_process_tcp_read_req(uv_loop_t* loop, uv_tcp_t* handle, err = WSAGetLastError(); if (err == WSAEWOULDBLOCK) { /* Read buffer was completely empty, report a 0-byte read. */ - uv_set_sys_error(loop, WSAEWOULDBLOCK); + uv__set_sys_error(loop, WSAEWOULDBLOCK); handle->read_cb((uv_stream_t*)handle, 0, buf); } else { /* Ouch! serious error. */ - uv_set_sys_error(loop, err); + uv__set_sys_error(loop, err); handle->flags &= ~UV_HANDLE_READING; handle->read_cb((uv_stream_t*)handle, -1, buf); } @@ -779,11 +847,12 @@ void uv_process_tcp_write_req(uv_loop_t* loop, uv_tcp_t* handle, uv_write_t* req) { assert(handle->type == UV_TCP); + assert(handle->write_queue_size >= req->queued_bytes); handle->write_queue_size -= req->queued_bytes; if (req->cb) { - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); - ((uv_write_cb)req->cb)(req, loop->last_error.code == UV_OK ? 0 : -1); + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); + ((uv_write_cb)req->cb)(req, loop->last_err.code == UV_OK ? 0 : -1); } handle->write_reqs_pending--; @@ -810,7 +879,7 @@ void uv_process_tcp_accept_req(uv_loop_t* loop, uv_tcp_t* handle, if (handle->flags & UV_HANDLE_LISTENING) { handle->flags &= ~UV_HANDLE_LISTENING; if (handle->connection_cb) { - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); handle->connection_cb((uv_stream_t*)handle, -1); } } @@ -857,14 +926,45 @@ void uv_process_tcp_connect_req(uv_loop_t* loop, uv_tcp_t* handle, active_tcp_streams++; ((uv_connect_cb)req->cb)(req, 0); } else { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); ((uv_connect_cb)req->cb)(req, -1); } } else { - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); ((uv_connect_cb)req->cb)(req, -1); } } DECREASE_PENDING_REQ_COUNT(handle); } + + +int uv_tcp_import(uv_tcp_t* tcp, WSAPROTOCOL_INFOW* socket_protocol_info) { + SOCKET socket = WSASocketW(AF_INET, + SOCK_STREAM, + IPPROTO_IP, + socket_protocol_info, + 0, + WSA_FLAG_OVERLAPPED); + + if (socket == INVALID_SOCKET) { + uv__set_sys_error(tcp->loop, WSAGetLastError()); + return -1; + } + + tcp->flags |= UV_HANDLE_BOUND; + + return uv_tcp_set_socket(tcp->loop, tcp, socket, 1); +} + + +int uv_tcp_nodelay(uv_tcp_t* handle, int enable) { + uv__set_artificial_error(handle->loop, UV_ENOSYS); + return -1; +} + + +int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay) { + uv__set_artificial_error(handle->loop, UV_ENOSYS); + return -1; +} diff --git a/src/rt/libuv/src/win/threadpool.c b/src/rt/libuv/src/win/threadpool.c index c40613e1f5c..4fb20d34bc4 100644 --- a/src/rt/libuv/src/win/threadpool.c +++ b/src/rt/libuv/src/win/threadpool.c @@ -57,7 +57,7 @@ int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_work_req_init(loop, req, work_cb, after_work_cb); if (!QueueUserWorkItem(&uv_work_thread_proc, req, WT_EXECUTELONGFUNCTION)) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } diff --git a/src/rt/libuv/src/win/timer.c b/src/rt/libuv/src/win/timer.c index ac20925293f..58f2eef05f0 100644 --- a/src/rt/libuv/src/win/timer.c +++ b/src/rt/libuv/src/win/timer.c @@ -77,12 +77,12 @@ uint64_t uv_hrtime(void) { /* If the performance frequency is zero, there's no support. */ if (!uv_hrtime_frequency_) { - /* uv_set_sys_error(loop, ERROR_NOT_SUPPORTED); */ + /* uv__set_sys_error(loop, ERROR_NOT_SUPPORTED); */ return 0; } if (!QueryPerformanceCounter(&counter)) { - /* uv_set_sys_error(loop, GetLastError()); */ + /* uv__set_sys_error(loop, GetLastError()); */ return 0; } @@ -181,7 +181,7 @@ int uv_timer_again(uv_timer_t* handle) { /* If timer_cb is NULL that means that the timer was never started. */ if (!handle->timer_cb) { - uv_set_sys_error(loop, ERROR_INVALID_DATA); + uv__set_sys_error(loop, ERROR_INVALID_DATA); return -1; } diff --git a/src/rt/libuv/src/win/tty.c b/src/rt/libuv/src/win/tty.c index a4a46829643..a72851276a6 100644 --- a/src/rt/libuv/src/win/tty.c +++ b/src/rt/libuv/src/win/tty.c @@ -19,43 +19,1740 @@ * IN THE SOFTWARE. */ +#include <assert.h> +#include <io.h> +#include <string.h> +#include <stdint.h> + #include "uv.h" +#include "../uv-common.h" #include "internal.h" -#include <assert.h> +#define UNICODE_REPLACEMENT_CHARACTER (0xfffd) + +#define ANSI_NORMAL 0x00 +#define ANSI_ESCAPE_SEEN 0x02 +#define ANSI_CSI 0x04 +#define ANSI_ST_CONTROL 0x08 +#define ANSI_IGNORE 0x10 +#define ANSI_IN_ARG 0x20 +#define ANSI_IN_STRING 0x40 +#define ANSI_BACKSLASH_SEEN 0x80 + + +static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info); + + +/* Null uv_buf_t */ +static const uv_buf_t uv_null_buf_ = { 0, NULL }; + + +/* + * The console virtual window. + * + * Normally cursor movement in windows is relative to the console screen buffer, + * e.g. the application is allowed to overwrite the 'history'. This is very + * inconvenient, it makes absolute cursor movement pretty useless. There is + * also the concept of 'client rect' which is defined by the actual size of + * the console window and the scroll position of the screen buffer, but it's + * very volatile because it changes when the user scrolls. + * + * To make cursor movement behave sensibly we define a virtual window to which + * cursor movement is confined. The virtual window is always as wide as the + * console screen buffer, but it's height is defined by the size of the + * console window. The top of the virtual window aligns with the position + * of the caret when the first stdout/err handle is created, unless that would + * mean that it would extend beyond the bottom of the screen buffer - in that + * that case it's located as far down as possible. + * + * When the user writes a long text or many newlines, such that the output + * reaches beyond the bottom of the virtual window, the virtual window is + * shifted downwards, but not resized. + * + * Since all tty i/o happens on the same console, this window is shared + * between all stdout/stderr handles. + */ + +static int uv_tty_virtual_offset = -1; +static int uv_tty_virtual_height = -1; +static int uv_tty_virtual_width = -1; + +static CRITICAL_SECTION uv_tty_output_lock; + + +void uv_console_init() { + InitializeCriticalSection(&uv_tty_output_lock); +} + + +int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int readable) { + HANDLE win_handle; + CONSOLE_SCREEN_BUFFER_INFO info; + + win_handle = (HANDLE) _get_osfhandle(fd); + if (win_handle == INVALID_HANDLE_VALUE) { + uv__set_sys_error(loop, ERROR_INVALID_HANDLE); + return -1; + } + + if (!GetConsoleMode(win_handle, &tty->original_console_mode)) { + uv__set_sys_error(loop, GetLastError()); + return -1; + } + + /* Initialize virtual window size; if it fails, assume that this is stdin. */ + if (GetConsoleScreenBufferInfo(win_handle, &info)) { + EnterCriticalSection(&uv_tty_output_lock); + uv_tty_update_virtual_window(&info); + LeaveCriticalSection(&uv_tty_output_lock); + } + + uv_stream_init(loop, (uv_stream_t*) tty); + uv_connection_init((uv_stream_t*) tty); + + tty->type = UV_TTY; + tty->handle = win_handle; + tty->read_line_handle = NULL; + tty->read_line_buffer = uv_null_buf_; + tty->read_raw_wait = NULL; + tty->reqs_pending = 0; + tty->flags |= UV_HANDLE_BOUND; + + /* Init keycode-to-vt100 mapper state. */ + tty->last_key_len = 0; + tty->last_key_offset = 0; + tty->last_utf16_high_surrogate = 0; + memset(&tty->last_input_record, 0, sizeof tty->last_input_record); + + /* Init utf8-to-utf16 conversion state. */ + tty->utf8_bytes_left = 0; + tty->utf8_codepoint = 0; + + /* Initialize eol conversion state */ + tty->previous_eol = 0; -int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd) { - assert(0 && "implement me"); - return -1; + /* Init ANSI parser state. */ + tty->ansi_parser_state = ANSI_NORMAL; + + return 0; } int uv_tty_set_mode(uv_tty_t* tty, int mode) { - assert(0 && "implement me"); - return -1; + DWORD flags = 0; + unsigned char was_reading; + uv_alloc_cb alloc_cb; + uv_read_cb read_cb; + + if (!!mode == !!(tty->flags & UV_HANDLE_TTY_RAW)) { + return 0; + } + + if (tty->original_console_mode & ENABLE_QUICK_EDIT_MODE) { + flags = ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS; + } + + if (mode) { + /* Raw input */ + flags |= ENABLE_WINDOW_INPUT; + } else { + /* Line-buffered mode. */ + flags |= ENABLE_ECHO_INPUT | ENABLE_INSERT_MODE | ENABLE_LINE_INPUT | + ENABLE_EXTENDED_FLAGS | ENABLE_PROCESSED_INPUT; + } + + if (!SetConsoleMode(tty->handle, flags)) { + uv__set_sys_error(tty->loop, GetLastError()); + return -1; + } + + /* If currently reading, stop, and restart reading. */ + if (tty->flags & UV_HANDLE_READING) { + was_reading = 1; + alloc_cb = tty->alloc_cb; + read_cb = tty->read_cb; + + if (was_reading && uv_tty_read_stop(tty) != 0) { + return -1; + } + } else { + was_reading = 0; + } + + /* Update flag. */ + tty->flags &= ~UV_HANDLE_TTY_RAW; + tty->flags |= mode ? UV_HANDLE_TTY_RAW : 0; + + /* If we just stopped reading, restart. */ + if (was_reading && uv_tty_read_start(tty, alloc_cb, read_cb) != 0) { + return -1; + } + + return 0; } int uv_is_tty(uv_file file) { + DWORD result; + return GetConsoleMode((HANDLE) _get_osfhandle(file), &result) != 0; } int uv_tty_get_winsize(uv_tty_t* tty, int* width, int* height) { - assert(0 && "implement me"); - return -1; + CONSOLE_SCREEN_BUFFER_INFO info; + + if (!GetConsoleScreenBufferInfo(tty->handle, &info)) { + uv__set_sys_error(tty->loop, GetLastError()); + return -1; + } + + EnterCriticalSection(&uv_tty_output_lock); + uv_tty_update_virtual_window(&info); + LeaveCriticalSection(&uv_tty_output_lock); + + *width = uv_tty_virtual_width; + *height = uv_tty_virtual_height; + + return 0; } -uv_handle_type uv_guess_handle(uv_file file) { - DWORD result; - int r = GetConsoleMode((HANDLE)_get_osfhandle(file), &result); +static void CALLBACK uv_tty_post_raw_read(void* data, BOOLEAN didTimeout) { + uv_loop_t* loop; + uv_tty_t* handle; + uv_req_t* req; + + assert(data); + assert(!didTimeout); + + req = (uv_req_t*) data; + handle = (uv_tty_t*) req->data; + loop = handle->loop; + + UnregisterWait(handle->read_raw_wait); + handle->read_raw_wait = NULL; + + SET_REQ_SUCCESS(req); + POST_COMPLETION_FOR_REQ(loop, req); +} + + +static void uv_tty_queue_read_raw(uv_loop_t* loop, uv_tty_t* handle) { + uv_read_t* req; + BOOL r; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + + assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); + + handle->read_line_buffer = uv_null_buf_; + + req = &handle->read_req; + memset(&req->overlapped, 0, sizeof(req->overlapped)); + + r = RegisterWaitForSingleObject(&handle->read_raw_wait, + handle->handle, + uv_tty_post_raw_read, + (void*) req, + INFINITE, + WT_EXECUTEINWAITTHREAD | WT_EXECUTEONLYONCE); + if (!r) { + handle->read_raw_wait = NULL; + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; +} + + +static DWORD CALLBACK uv_tty_line_read_thread(void* data) { + uv_loop_t* loop; + uv_tty_t* handle; + uv_req_t* req; + DWORD bytes, read_bytes; + + assert(data); + + req = (uv_req_t*) data; + handle = (uv_tty_t*) req->data; + loop = handle->loop; + + assert(handle->read_line_buffer.base != NULL); + assert(handle->read_line_buffer.len > 0); + + /* ReadConsole can't handle big buffers. */ + if (handle->read_line_buffer.len < 8192) { + bytes = handle->read_line_buffer.len; + } else { + bytes = 8192; + } - if (r) { - return UV_TTY; + /* Todo: Unicode */ + if (ReadConsoleA(handle->read_line_handle, + (void*) handle->read_line_buffer.base, + bytes, + &read_bytes, + NULL)) { + SET_REQ_SUCCESS(req); + req->overlapped.InternalHigh = read_bytes; + } else { + SET_REQ_ERROR(req, GetLastError()); } - assert(0 && "implement me"); + POST_COMPLETION_FOR_REQ(loop, req); + return 0; +} + + +static void uv_tty_queue_read_line(uv_loop_t* loop, uv_tty_t* handle) { + uv_read_t* req; + BOOL r; + + assert(handle->flags & UV_HANDLE_READING); + assert(!(handle->flags & UV_HANDLE_READ_PENDING)); + assert(handle->handle && handle->handle != INVALID_HANDLE_VALUE); + + req = &handle->read_req; + memset(&req->overlapped, 0, sizeof(req->overlapped)); + + handle->read_line_buffer = handle->alloc_cb((uv_handle_t*) handle, 8192); + assert(handle->read_line_buffer.base != NULL); + assert(handle->read_line_buffer.len > 0); + + /* Duplicate the console handle, so if we want to cancel the read, we can */ + /* just close this handle duplicate. */ + if (handle->read_line_handle == NULL) { + HANDLE this_process = GetCurrentProcess(); + r = DuplicateHandle(this_process, + handle->handle, + this_process, + &handle->read_line_handle, + 0, + 0, + DUPLICATE_SAME_ACCESS); + if (!r) { + handle->read_line_handle = NULL; + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + goto out; + } + } + + r = QueueUserWorkItem(uv_tty_line_read_thread, + (void*) req, + WT_EXECUTELONGFUNCTION); + if (!r) { + SET_REQ_ERROR(req, GetLastError()); + uv_insert_pending_req(loop, (uv_req_t*)req); + } + + out: + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; +} + + +static void uv_tty_queue_read(uv_loop_t* loop, uv_tty_t* handle) { + if (handle->flags & UV_HANDLE_TTY_RAW) { + uv_tty_queue_read_raw(loop, handle); + } else { + uv_tty_queue_read_line(loop, handle); + } +} + + +static const char* get_vt100_fn_key(DWORD code, char shift, char ctrl, + size_t* len) { +#define VK_CASE(vk, normal_str, shift_str, ctrl_str, shift_ctrl_str) \ + case (vk): \ + if (shift && ctrl) { \ + *len = sizeof shift_ctrl_str; \ + return "\033" shift_ctrl_str; \ + } else if (shift) { \ + *len = sizeof shift_str ; \ + return "\033" shift_str; \ + } else if (ctrl) { \ + *len = sizeof ctrl_str; \ + return "\033" ctrl_str; \ + } else { \ + *len = sizeof normal_str; \ + return "\033" normal_str; \ + } + + switch (code) { + /* These mappings are the same as Cygwin's. Unmodified and alt-modified */ + /* keypad keys comply with linux console, modifiers comply with xterm */ + /* modifier usage. F1..f12 and shift-f1..f10 comply with linux console, */ + /* f6..f12 with and without modifiers comply with rxvt. */ + VK_CASE(VK_INSERT, "[2~", "[2;2~", "[2;5~", "[2;6~") + VK_CASE(VK_END, "[4~", "[4;2~", "[4;5~", "[4;6~") + VK_CASE(VK_DOWN, "[B", "[1;2B", "[1;5B", "[1;6B") + VK_CASE(VK_NEXT, "[6~", "[6;2~", "[6;5~", "[6;6~") + VK_CASE(VK_LEFT, "[D", "[1;2D", "[1;5D", "[1;6D") + VK_CASE(VK_CLEAR, "[G", "[1;2G", "[1;5G", "[1;6G") + VK_CASE(VK_RIGHT, "[C", "[1;2C", "[1;5C", "[1;6C") + VK_CASE(VK_UP, "[A", "[1;2A", "[1;5A", "[1;6A") + VK_CASE(VK_HOME, "[1~", "[1;2~", "[1;5~", "[1;6~") + VK_CASE(VK_PRIOR, "[5~", "[5;2~", "[5;5~", "[5;6~") + VK_CASE(VK_DELETE, "[3~", "[3;2~", "[3;5~", "[3;6~") + VK_CASE(VK_NUMPAD0, "[2~", "[2;2~", "[2;5~", "[2;6~") + VK_CASE(VK_NUMPAD1, "[4~", "[4;2~", "[4;5~", "[4;6~") + VK_CASE(VK_NUMPAD2, "[B", "[1;2B", "[1;5B", "[1;6B") + VK_CASE(VK_NUMPAD3, "[6~", "[6;2~", "[6;5~", "[6;6~") + VK_CASE(VK_NUMPAD4, "[D", "[1;2D", "[1;5D", "[1;6D") + VK_CASE(VK_NUMPAD5, "[G", "[1;2G", "[1;5G", "[1;6G") + VK_CASE(VK_NUMPAD6, "[C", "[1;2C", "[1;5C", "[1;6C") + VK_CASE(VK_NUMPAD7, "[A", "[1;2A", "[1;5A", "[1;6A") + VK_CASE(VK_NUMPAD8, "[1~", "[1;2~", "[1;5~", "[1;6~") + VK_CASE(VK_NUMPAD9, "[5~", "[5;2~", "[5;5~", "[5;6~") + VK_CASE(VK_DECIMAL, "[3~", "[3;2~", "[3;5~", "[3;6~") + VK_CASE(VK_F1, "[[A", "[23~", "[11^", "[23^" ) + VK_CASE(VK_F2, "[[B", "[24~", "[12^", "[24^" ) + VK_CASE(VK_F3, "[[C", "[25~", "[13^", "[25^" ) + VK_CASE(VK_F4, "[[D", "[26~", "[14^", "[26^" ) + VK_CASE(VK_F5, "[[E", "[28~", "[15^", "[28^" ) + VK_CASE(VK_F6, "[17~", "[29~", "[17^", "[29^" ) + VK_CASE(VK_F7, "[18~", "[31~", "[18^", "[31^" ) + VK_CASE(VK_F8, "[19~", "[32~", "[19^", "[32^" ) + VK_CASE(VK_F9, "[20~", "[33~", "[20^", "[33^" ) + VK_CASE(VK_F10, "[21~", "[34~", "[21^", "[34^" ) + VK_CASE(VK_F11, "[23~", "[23$", "[23^", "[23@" ) + VK_CASE(VK_F12, "[24~", "[24$", "[24^", "[24@" ) + + default: + *len = 0; + return NULL; + } +#undef VK_CASE +} + + +void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + /* Shortcut for handle->last_input_record.Event.KeyEvent. */ +#define KEV handle->last_input_record.Event.KeyEvent + + DWORD records_left, records_read; + uv_buf_t buf; + off_t buf_used; + + assert(handle->type == UV_TTY); + handle->flags &= ~UV_HANDLE_READ_PENDING; + + if (!(handle->flags & UV_HANDLE_READING) || + !(handle->flags & UV_HANDLE_TTY_RAW)) { + goto out; + } + + if (!REQ_SUCCESS(req)) { + /* An error occurred while waiting for the event. */ + if ((handle->flags & UV_HANDLE_READING)) { + handle->flags &= ~UV_HANDLE_READING; + uv__set_sys_error(loop, GET_REQ_ERROR(req)); + handle->read_cb((uv_stream_t*)handle, -1, uv_null_buf_); + } + goto out; + } + + /* Fetch the number of events */ + if (!GetNumberOfConsoleInputEvents(handle->handle, &records_left)) { + handle->flags &= ~UV_HANDLE_READING; + uv__set_sys_error(loop, GetLastError()); + handle->read_cb((uv_stream_t*)handle, -1, uv_null_buf_); + goto out; + } + + /* Windows sends a lot of events that we're not interested in, so buf */ + /* will be allocated on demand, when there's actually something to emit. */ + buf = uv_null_buf_; + buf_used = 0; + + while ((records_left > 0 || handle->last_key_len > 0) && + (handle->flags & UV_HANDLE_READING)) { + if (handle->last_key_len == 0) { + /* Read the next input record */ + if (!ReadConsoleInputW(handle->handle, + &handle->last_input_record, + 1, + &records_read)) { + uv__set_sys_error(loop, GetLastError()); + handle->flags &= ~UV_HANDLE_READING; + handle->read_cb((uv_stream_t*) handle, -1, buf); + goto out; + } + records_left--; + + /* Ignore events that are not keyboard events */ + if (handle->last_input_record.EventType != KEY_EVENT) { + continue; + } + + /* Ignore keyup events, unless the left alt key was held and a valid */ + /* unicode character was emitted. */ + if (!KEV.bKeyDown && !(((KEV.dwControlKeyState & LEFT_ALT_PRESSED) || + KEV.wVirtualKeyCode==VK_MENU) && KEV.uChar.UnicodeChar != 0)) { + continue; + } + + /* Ignore keypresses to numpad number keys if the left alt is held */ + /* because the user is composing a character, or windows simulating */ + /* this. */ + if ((KEV.dwControlKeyState & LEFT_ALT_PRESSED) && + !(KEV.dwControlKeyState & ENHANCED_KEY) && + (KEV.wVirtualKeyCode == VK_INSERT || + KEV.wVirtualKeyCode == VK_END || + KEV.wVirtualKeyCode == VK_DOWN || + KEV.wVirtualKeyCode == VK_NEXT || + KEV.wVirtualKeyCode == VK_LEFT || + KEV.wVirtualKeyCode == VK_CLEAR || + KEV.wVirtualKeyCode == VK_RIGHT || + KEV.wVirtualKeyCode == VK_HOME || + KEV.wVirtualKeyCode == VK_UP || + KEV.wVirtualKeyCode == VK_PRIOR || + KEV.wVirtualKeyCode == VK_NUMPAD0 || + KEV.wVirtualKeyCode == VK_NUMPAD1 || + KEV.wVirtualKeyCode == VK_NUMPAD2 || + KEV.wVirtualKeyCode == VK_NUMPAD3 || + KEV.wVirtualKeyCode == VK_NUMPAD4 || + KEV.wVirtualKeyCode == VK_NUMPAD5 || + KEV.wVirtualKeyCode == VK_NUMPAD6 || + KEV.wVirtualKeyCode == VK_NUMPAD7 || + KEV.wVirtualKeyCode == VK_NUMPAD8 || + KEV.wVirtualKeyCode == VK_NUMPAD9)) { + continue; + } + + if (KEV.uChar.UnicodeChar != 0) { + int prefix_len, char_len; + + /* Character key pressed */ + if (KEV.uChar.UnicodeChar >= 0xD800 && + KEV.uChar.UnicodeChar < 0xDC00) { + /* UTF-16 high surrogate */ + handle->last_utf16_high_surrogate = KEV.uChar.UnicodeChar; + continue; + } + + /* Prefix with \u033 if alt was held, but alt was not used as part */ + /* a compose sequence. */ + if ((KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) + && !(KEV.dwControlKeyState & (LEFT_CTRL_PRESSED | + RIGHT_CTRL_PRESSED)) && KEV.bKeyDown) { + handle->last_key[0] = '\033'; + prefix_len = 1; + } else { + prefix_len = 0; + } + + if (KEV.uChar.UnicodeChar >= 0xDC00 && + KEV.uChar.UnicodeChar < 0xE000) { + /* UTF-16 surrogate pair */ + WCHAR utf16_buffer[2] = { handle->last_utf16_high_surrogate, + KEV.uChar.UnicodeChar}; + char_len = WideCharToMultiByte(CP_UTF8, + 0, + utf16_buffer, + 2, + &handle->last_key[prefix_len], + sizeof handle->last_key, + NULL, + NULL); + } else { + /* Single UTF-16 character */ + char_len = WideCharToMultiByte(CP_UTF8, + 0, + &KEV.uChar.UnicodeChar, + 1, + &handle->last_key[prefix_len], + sizeof handle->last_key, + NULL, + NULL); + } + + /* Whatever happened, the last character wasn't a high surrogate. */ + handle->last_utf16_high_surrogate = 0; + + /* If the utf16 character(s) couldn't be converted something must */ + /* be wrong. */ + if (!char_len) { + uv__set_sys_error(loop, GetLastError()); + handle->flags &= ~UV_HANDLE_READING; + handle->read_cb((uv_stream_t*) handle, -1, buf); + goto out; + } + + handle->last_key_len = (unsigned char) (prefix_len + char_len); + handle->last_key_offset = 0; + continue; + + } else { + /* Function key pressed */ + const char* vt100; + size_t prefix_len, vt100_len; + + vt100 = get_vt100_fn_key(KEV.wVirtualKeyCode, + !!(KEV.dwControlKeyState & SHIFT_PRESSED), + !!(KEV.dwControlKeyState & ( + LEFT_CTRL_PRESSED | + RIGHT_CTRL_PRESSED)), + &vt100_len); + + /* If we were unable to map to a vt100 sequence, just ignore. */ + if (!vt100) { + continue; + } + + /* Prefix with \x033 when the alt key was held. */ + if (KEV.dwControlKeyState & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) { + handle->last_key[0] = '\033'; + prefix_len = 1; + } else { + prefix_len = 0; + } + + /* Copy the vt100 sequence to the handle buffer. */ + assert(prefix_len + vt100_len < sizeof handle->last_key); + memcpy(&handle->last_key[prefix_len], vt100, vt100_len); + + handle->last_key_len = (unsigned char) (prefix_len + vt100_len); + handle->last_key_offset = 0; + continue; + } + } else { + /* Copy any bytes left from the last keypress to the user buffer. */ + if (handle->last_key_offset < handle->last_key_len) { + /* Allocate a buffer if needed */ + if (buf_used == 0) { + buf = handle->alloc_cb((uv_handle_t*) handle, 1024); + } + + buf.base[buf_used++] = handle->last_key[handle->last_key_offset++]; + + /* If the buffer is full, emit it */ + if (buf_used == buf.len) { + handle->read_cb((uv_stream_t*) handle, buf_used, buf); + buf = uv_null_buf_; + buf_used = 0; + } + + continue; + } + + /* Apply dwRepeat from the last input record. */ + if (--KEV.wRepeatCount > 0) { + handle->last_key_offset = 0; + continue; + } + + handle->last_key_len = 0; + continue; + } + } + + /* Send the buffer back to the user */ + if (buf_used > 0) { + handle->read_cb((uv_stream_t*) handle, buf_used, buf); + } + + out: + /* Wait for more input events. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_tty_queue_read(loop, handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); + +#undef KEV +} + + + +void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + uv_buf_t buf; + + assert(handle->type == UV_TTY); + + buf = handle->read_line_buffer; + + handle->flags &= ~UV_HANDLE_READ_PENDING; + handle->read_line_buffer = uv_null_buf_; + + if (!REQ_SUCCESS(req)) { + /* Read was not successful */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_TTY_RAW)) { + /* Real error */ + handle->flags &= ~UV_HANDLE_READING; + uv__set_sys_error(loop, GET_REQ_ERROR(req)); + handle->read_cb((uv_stream_t*) handle, -1, buf); + } else { + /* The read was cancelled, or whatever we don't care */ + uv__set_sys_error(loop, WSAEWOULDBLOCK); /* maps to UV_EAGAIN */ + handle->read_cb((uv_stream_t*) handle, 0, buf); + } + + } else { + /* Read successful */ + /* TODO: read unicode, convert to utf-8 */ + DWORD bytes = req->overlapped.InternalHigh; + if (bytes == 0) { + uv__set_sys_error(loop, WSAEWOULDBLOCK); /* maps to UV_EAGAIN */ + } + handle->read_cb((uv_stream_t*) handle, bytes, buf); + } + + /* Wait for more input events. */ + if ((handle->flags & UV_HANDLE_READING) && + !(handle->flags & UV_HANDLE_READ_PENDING)) { + uv_tty_queue_read(loop, handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_process_tty_read_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* req) { + + /* If the read_line_buffer member is zero, it must have been an raw read. */ + /* Otherwise it was a line-buffered read. */ + /* FIXME: This is quite obscure. Use a flag or something. */ + if (handle->read_line_buffer.len == 0) { + uv_process_tty_read_raw_req(loop, handle, req); + } else { + uv_process_tty_read_line_req(loop, handle, req); + } +} + + +int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb, + uv_read_cb read_cb) { + uv_loop_t* loop = handle->loop; + + handle->flags |= UV_HANDLE_READING; + handle->read_cb = read_cb; + handle->alloc_cb = alloc_cb; + + /* If reading was stopped and then started again, there could stell be a */ + /* read request pending. */ + if (handle->flags & UV_HANDLE_READ_PENDING) { + return 0; + } + + /* Maybe the user stopped reading half-way while processing key events. */ + /* Short-circuit if this could be the case. */ + if (handle->last_key_len > 0) { + SET_REQ_SUCCESS(&handle->read_req); + uv_insert_pending_req(handle->loop, (uv_req_t*) &handle->read_req); + return -1; + } + + uv_tty_queue_read(loop, handle); + + return 0; +} + + +int uv_tty_read_stop(uv_tty_t* handle) { + handle->flags &= ~UV_HANDLE_READING; + + /* Cancel raw read */ + if ((handle->flags & UV_HANDLE_READ_PENDING) && + (handle->flags & UV_HANDLE_TTY_RAW)) { + /* Write some bullshit event to force the console wait to return. */ + INPUT_RECORD record; + DWORD written; + memset(&record, 0, sizeof record); + if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) { + uv__set_sys_error(handle->loop, GetLastError()); + return -1; + } + } + + /* Cancel line-buffered read */ + if (handle->read_line_handle != NULL) { + /* Closing this handle will cancel the ReadConsole operation */ + CloseHandle(handle->read_line_handle); + handle->read_line_handle = NULL; + } + + + return 0; +} + + +static void uv_tty_update_virtual_window(CONSOLE_SCREEN_BUFFER_INFO* info) { + uv_tty_virtual_height = info->srWindow.Bottom - info->srWindow.Top + 1; + uv_tty_virtual_width = info->dwSize.X; + + /* Recompute virtual window offset row. */ + if (uv_tty_virtual_offset == -1) { + uv_tty_virtual_offset = info->dwCursorPosition.Y; + } else if (uv_tty_virtual_offset < info->dwCursorPosition.Y - + uv_tty_virtual_height + 1) { + /* If suddenly find the cursor outside of the virtual window, it must */ + /* have somehow scrolled. Update the virtual window offset. */ + uv_tty_virtual_offset = info->dwCursorPosition.Y - + uv_tty_virtual_height + 1; + } + if (uv_tty_virtual_offset + uv_tty_virtual_height > info->dwSize.Y) { + uv_tty_virtual_offset = info->dwSize.Y - uv_tty_virtual_height; + } + if (uv_tty_virtual_offset < 0) { + uv_tty_virtual_offset = 0; + } +} + + +static COORD uv_tty_make_real_coord(uv_tty_t* handle, + CONSOLE_SCREEN_BUFFER_INFO* info, int x, unsigned char x_relative, int y, + unsigned char y_relative) { + COORD result; + + uv_tty_update_virtual_window(info); + + /* Adjust y position */ + if (y_relative) { + y = info->dwCursorPosition.Y + y; + } else { + y = uv_tty_virtual_offset + y; + } + /* Clip y to virtual client rectangle */ + if (y < uv_tty_virtual_offset) { + y = uv_tty_virtual_offset; + } else if (y >= uv_tty_virtual_offset + uv_tty_virtual_height) { + y = uv_tty_virtual_offset + uv_tty_virtual_height - 1; + } + + /* Adjust x */ + if (x_relative) { + x = info->dwCursorPosition.X + x; + } + /* Clip x */ + if (x < 0) { + x = 0; + } else if (x >= uv_tty_virtual_width) { + x = uv_tty_virtual_width - 1; + } + + result.X = (unsigned short) x; + result.Y = (unsigned short) y; + return result; +} + + +static int uv_tty_emit_text(uv_tty_t* handle, WCHAR buffer[], DWORD length, + DWORD* error) { + DWORD written; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (!WriteConsoleW(handle->handle, + (void*) buffer, + length, + &written, + NULL)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_move_caret(uv_tty_t* handle, int x, unsigned char x_relative, + int y, unsigned char y_relative, DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + COORD pos; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + } + + pos = uv_tty_make_real_coord(handle, &info, x, x_relative, y, y_relative); + + if (!SetConsoleCursorPosition(handle->handle, pos)) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + + +static int uv_tty_reset(uv_tty_t* handle, DWORD* error) { + const COORD origin = {0, 0}; + const WORD char_attrs = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_RED; + CONSOLE_SCREEN_BUFFER_INFO info; + DWORD count, written; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + /* Reset original text attributes. */ + if (!SetConsoleTextAttribute(handle->handle, char_attrs)) { + *error = GetLastError(); + return -1; + } + + /* Move the cursor position to (0, 0). */ + if (!SetConsoleCursorPosition(handle->handle, origin)) { + *error = GetLastError(); + return -1; + } + + /* Clear the screen buffer. */ + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + count = info.dwSize.X * info.dwSize.Y; + + if (!(FillConsoleOutputCharacterW(handle->handle, + L'\x20', + count, + origin, + &written) && + FillConsoleOutputAttribute(handle->handle, + char_attrs, + written, + origin, + &written))) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + /* Move the virtual window up to the top. */ + uv_tty_virtual_offset = 0; + uv_tty_update_virtual_window(&info); + + return 0; +} + + +static int uv_tty_clear(uv_tty_t* handle, int dir, char entire_screen, + DWORD* error) { + unsigned short argc = handle->ansi_csi_argc; + unsigned short* argv = handle->ansi_csi_argv; + + CONSOLE_SCREEN_BUFFER_INFO info; + COORD start, end; + DWORD count, written; + + int x1, x2, y1, y2; + int x1r, x2r, y1r, y2r; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (dir == 0) { + /* Clear from current position */ + x1 = 0; + x1r = 1; + } else { + /* Clear from column 0 */ + x1 = 0; + x1r = 0; + } + + if (dir == 1) { + /* Clear to current position */ + x2 = 0; + x2r = 1; + } else { + /* Clear to end of row. We pretend the console is 65536 characters wide, */ + /* uv_tty_make_real_coord will clip it to the actual console width. */ + x2 = 0xffff; + x2r = 0; + } + + if (!entire_screen) { + /* Stay on our own row */ + y1 = y2 = 0; + y1r = y2r = 1; + } else { + /* Apply columns direction to row */ + y1 = x1; + y1r = x1r; + y2 = x2; + y2r = x2r; + } + + retry: + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + start = uv_tty_make_real_coord(handle, &info, x1, x1r, y1, y1r); + end = uv_tty_make_real_coord(handle, &info, x2, x2r, y2, y2r); + count = (end.Y * info.dwSize.X + end.X) - + (start.Y * info.dwSize.X + start.X) + 1; + + if (!(FillConsoleOutputCharacterW(handle->handle, + L'\x20', + count, + start, + &written) && + FillConsoleOutputAttribute(handle->handle, + info.wAttributes, + written, + start, + &written))) { + if (GetLastError() == ERROR_INVALID_PARAMETER) { + /* The console may be resized - retry */ + goto retry; + } else { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + + +static int uv_tty_set_style(uv_tty_t* handle, DWORD* error) { + unsigned short argc = handle->ansi_csi_argc; + unsigned short* argv = handle->ansi_csi_argv; + int i; + CONSOLE_SCREEN_BUFFER_INFO info; + + char fg_color = -1, bg_color = -1; + char fg_bright = -1, bg_bright = -1; + + if (argc == 0) { + /* Reset mode */ + fg_color = 7; + bg_color = 0; + fg_bright = 0; + bg_bright = 0; + } + + for (i = 0; i < argc; i++) { + short arg = argv[i]; + + if (arg == 0) { + /* Reset mode */ + fg_color = 7; + bg_color = 0; + fg_bright = 0; + bg_bright = 0; + + } else if (arg == 1) { + /* Bright */ + fg_bright = 1; + + } else if (arg == 21 || arg == 22) { + /* Bright off. */ + fg_bright = 0; + + } else if (arg >= 30 && arg <= 37) { + /* Set foreground color */ + fg_color = arg - 30; + + } else if (arg == 39) { + /* Default text color */ + fg_color = 7; + + } else if (arg >= 40 && arg <= 47) { + /* Set background color */ + bg_color = arg - 40; + + } else if (arg == 49) { + /* Default background color */ + bg_color = 0; + } + } + + if (fg_color == -1 && bg_color == -1 && fg_bright == -1 && + bg_bright == -1) { + /* Nothing changed */ + return 0; + } + + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + if (fg_color != -1) { + info.wAttributes &= ~(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); + if (fg_color & 1) info.wAttributes |= FOREGROUND_RED; + if (fg_color & 2) info.wAttributes |= FOREGROUND_GREEN; + if (fg_color & 4) info.wAttributes |= FOREGROUND_BLUE; + } + + if (fg_bright != -1) { + if (fg_bright) { + info.wAttributes |= FOREGROUND_INTENSITY; + } else { + info.wAttributes &= ~FOREGROUND_INTENSITY; + } + } + + if (bg_color != -1) { + info.wAttributes &= ~(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE); + if (bg_color & 1) info.wAttributes |= BACKGROUND_RED; + if (bg_color & 2) info.wAttributes |= BACKGROUND_GREEN; + if (bg_color & 4) info.wAttributes |= BACKGROUND_BLUE; + } + + if (bg_bright != -1) { + if (bg_bright) { + info.wAttributes |= BACKGROUND_INTENSITY; + } else { + info.wAttributes &= ~BACKGROUND_INTENSITY; + } + } + + if (!SetConsoleTextAttribute(handle->handle, info.wAttributes)) { + *error = GetLastError(); + return -1; + } + + return 0; +} + + +static int uv_tty_save_state(uv_tty_t* handle, unsigned char save_attributes, + DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + uv_tty_update_virtual_window(&info); + + handle->saved_position.X = info.dwCursorPosition.X; + handle->saved_position.Y = info.dwCursorPosition.Y - uv_tty_virtual_offset; + handle->flags |= UV_HANDLE_TTY_SAVED_POSITION; + + if (save_attributes) { + handle->saved_attributes = info.wAttributes & + (FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); + handle->flags |= UV_HANDLE_TTY_SAVED_ATTRIBUTES; + } + + return 0; +} + + +static int uv_tty_restore_state(uv_tty_t* handle, + unsigned char restore_attributes, DWORD* error) { + CONSOLE_SCREEN_BUFFER_INFO info; + WORD new_attributes; + + if (*error != ERROR_SUCCESS) { + return -1; + } + + if (handle->flags & UV_HANDLE_TTY_SAVED_POSITION) { + if (uv_tty_move_caret(handle, + handle->saved_position.X, + 0, + handle->saved_position.Y, + 0, + error) != 0) { + return -1; + } + } + + if (restore_attributes && + (handle->flags & UV_HANDLE_TTY_SAVED_ATTRIBUTES)) { + if (!GetConsoleScreenBufferInfo(handle->handle, &info)) { + *error = GetLastError(); + return -1; + } + + new_attributes = info.wAttributes; + new_attributes &= ~(FOREGROUND_INTENSITY | BACKGROUND_INTENSITY); + new_attributes |= handle->saved_attributes; + + if (!SetConsoleTextAttribute(handle->handle, new_attributes)) { + *error = GetLastError(); + return -1; + } + } + + return 0; +} + + +static int uv_tty_write_bufs(uv_tty_t* handle, uv_buf_t bufs[], int bufcnt, + DWORD* error) { + /* We can only write 8k characters at a time. Windows can't handle */ + /* much more characters in a single console write anyway. */ + WCHAR utf16_buf[8192]; + DWORD utf16_buf_used = 0; + int i; + +#define FLUSH_TEXT() \ + do { \ + if (utf16_buf_used > 0) { \ + uv_tty_emit_text(handle, utf16_buf, utf16_buf_used, error); \ + utf16_buf_used = 0; \ + } \ + } while (0) + + /* Cache for fast access */ + unsigned char utf8_bytes_left = handle->utf8_bytes_left; + unsigned int utf8_codepoint = handle->utf8_codepoint; + unsigned char previous_eol = handle->previous_eol; + unsigned char ansi_parser_state = handle->ansi_parser_state; + + /* Store the error here. If we encounter an error, stop trying to do i/o */ + /* but keep parsing the buffer so we leave the parser in a consistent */ + /* state. */ + *error = ERROR_SUCCESS; + + EnterCriticalSection(&uv_tty_output_lock); + + for (i = 0; i < bufcnt; i++) { + uv_buf_t buf = bufs[i]; + unsigned int j; + + for (j = 0; j < buf.len; j++) { + unsigned char c = buf.base[j]; + + /* Run the character through the utf8 decoder We happily accept non */ + /* shortest form encodings and invalid code points - there's no real */ + /* harm that can be done. */ + if (utf8_bytes_left == 0) { + /* Read utf-8 start byte */ + DWORD first_zero_bit; + unsigned char not_c = ~c; +#ifdef _MSC_VER /* msvc */ + if (_BitScanReverse(&first_zero_bit, not_c)) { +#else /* assume gcc */ + if (first_zero_bit = __builtin_clzl(not_c), c != 0) { +#endif + if (first_zero_bit == 7) { + /* Ascii - pass right through */ + utf8_codepoint = (unsigned int) c; + + } else if (first_zero_bit <= 5) { + /* Multibyte sequence */ + utf8_codepoint = (0xff >> (8 - first_zero_bit)) & c; + utf8_bytes_left = (char) (6 - first_zero_bit); + + } else { + /* Invalid continuation */ + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + } else { + /* 0xff -- invalid */ + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + } else if ((c & 0xc0) == 0x80) { + /* Valid continuation of utf-8 multibyte sequence */ + utf8_bytes_left--; + utf8_codepoint <<= 6; + utf8_codepoint |= ((unsigned int) c & 0x3f); + + } else { + /* Start byte where continuation was expected. */ + utf8_bytes_left = 0; + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + /* Patch buf offset so this character will be parsed again as a */ + /* start byte. */ + j--; + } + + /* Maybe we need to parse more bytes to find a character. */ + if (utf8_bytes_left != 0) { + continue; + } + + /* Parse vt100/ansi escape codes */ + if (ansi_parser_state == ANSI_NORMAL) { + switch (utf8_codepoint) { + case '\033': + ansi_parser_state = ANSI_ESCAPE_SEEN; + continue; + + case 0233: + ansi_parser_state = ANSI_CSI; + handle->ansi_csi_argc = 0; + continue; + } + + } else if (ansi_parser_state == ANSI_ESCAPE_SEEN) { + switch (utf8_codepoint) { + case '[': + ansi_parser_state = ANSI_CSI; + handle->ansi_csi_argc = 0; + continue; + + case '^': + case '_': + case 'P': + case ']': + /* Not supported, but we'll have to parse until we see a stop */ + /* code, e.g. ESC \ or BEL. */ + ansi_parser_state = ANSI_ST_CONTROL; + continue; + + case '\033': + /* Ignore double escape. */ + continue; + + case 'c': + /* Full console reset. */ + FLUSH_TEXT(); + uv_tty_reset(handle, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + case '7': + /* Save the cursor position and text attributes. */ + FLUSH_TEXT(); + uv_tty_save_state(handle, 1, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + case '8': + /* Restore the cursor position and text attributes */ + FLUSH_TEXT(); + uv_tty_restore_state(handle, 1, error); + ansi_parser_state = ANSI_NORMAL; + continue; + + default: + if (utf8_codepoint >= '@' && utf8_codepoint <= '_') { + /* Single-char control. */ + ansi_parser_state = ANSI_NORMAL; + continue; + } else { + /* Invalid - proceed as normal, */ + ansi_parser_state = ANSI_NORMAL; + } + } + + } else if (ansi_parser_state & ANSI_CSI) { + if (!(ansi_parser_state & ANSI_IGNORE)) { + if (utf8_codepoint >= '0' && utf8_codepoint <= '9') { + /* Parsing a numerical argument */ + + if (!(ansi_parser_state & ANSI_IN_ARG)) { + /* We were not currently parsing a number */ + + /* Check for too many arguments */ + if (handle->ansi_csi_argc >= COUNTOF(handle->ansi_csi_argv)) { + ansi_parser_state |= ANSI_IGNORE; + continue; + } + + ansi_parser_state |= ANSI_IN_ARG; + handle->ansi_csi_argc++; + handle->ansi_csi_argv[handle->ansi_csi_argc - 1] = + (unsigned short) utf8_codepoint - '0'; + continue; + } else { + /* We were already parsing a number. Parse next digit. */ + uint32_t value = 10 * + handle->ansi_csi_argv[handle->ansi_csi_argc - 1]; + + /* Check for overflow. */ + if (value > UINT16_MAX) { + ansi_parser_state |= ANSI_IGNORE; + continue; + } + + handle->ansi_csi_argv[handle->ansi_csi_argc - 1] = + (unsigned short) value + (utf8_codepoint - '0'); + continue; + } + + } else if (utf8_codepoint == ';') { + /* Denotes the end of an argument. */ + if (ansi_parser_state & ANSI_IN_ARG) { + ansi_parser_state &= ~ANSI_IN_ARG; + continue; + + } else { + /* If ANSI_IN_ARG is not set, add another argument and */ + /* default it to 0. */ + /* Check for too many arguments */ + if (handle->ansi_csi_argc >= COUNTOF(handle->ansi_csi_argv)) { + ansi_parser_state |= ANSI_IGNORE; + continue; + } + + handle->ansi_csi_argc++; + handle->ansi_csi_argv[handle->ansi_csi_argc - 1] = 0; + continue; + } + + } else if (utf8_codepoint >= '@' && utf8_codepoint <= '~' && + (handle->ansi_csi_argc > 0 || utf8_codepoint != '[')) { + int x, y, d; + + /* Command byte */ + switch (utf8_codepoint) { + case 'A': + /* cursor up */ + FLUSH_TEXT(); + y = -(handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, 0, 1, y, 1, error); + break; + + case 'B': + /* cursor down */ + FLUSH_TEXT(); + y = handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, 0, 1, y, 1, error); + break; + + case 'C': + /* cursor forward */ + FLUSH_TEXT(); + x = handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, x, 1, 0, 1, error); + break; + + case 'D': + /* cursor back */ + FLUSH_TEXT(); + x = -(handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, x, 1, 0, 1, error); + break; + + case 'E': + /* cursor next line */ + FLUSH_TEXT(); + y = handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1; + uv_tty_move_caret(handle, 0, 0, y, 1, error); + break; + + case 'F': + /* cursor previous line */ + FLUSH_TEXT(); + y = -(handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 1); + uv_tty_move_caret(handle, 0, 0, y, 1, error); + break; + + case 'G': + /* cursor horizontal move absolute */ + FLUSH_TEXT(); + x = (handle->ansi_csi_argc >= 1 && handle->ansi_csi_argv[0]) + ? handle->ansi_csi_argv[0] - 1 : 0; + uv_tty_move_caret(handle, x, 0, 0, 1, error); + break; + + case 'H': + case 'f': + /* cursor move absolute */ + FLUSH_TEXT(); + y = (handle->ansi_csi_argc >= 1 && handle->ansi_csi_argv[0]) + ? handle->ansi_csi_argv[0] - 1 : 0; + x = (handle->ansi_csi_argc >= 2 && handle->ansi_csi_argv[1]) + ? handle->ansi_csi_argv[1] - 1 : 0; + uv_tty_move_caret(handle, x, 0, y, 0, error); + break; + + case 'J': + /* Erase screen */ + FLUSH_TEXT(); + d = handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 0; + if (d >= 0 && d <= 2) { + uv_tty_clear(handle, d, 1, error); + } + break; + + case 'K': + /* Erase line */ + FLUSH_TEXT(); + d = handle->ansi_csi_argc ? handle->ansi_csi_argv[0] : 0; + if (d >= 0 && d <= 2) { + uv_tty_clear(handle, d, 0, error); + } + break; + + case 'm': + /* Set style */ + FLUSH_TEXT(); + uv_tty_set_style(handle, error); + break; + + case 's': + /* Save the cursor position. */ + FLUSH_TEXT(); + uv_tty_save_state(handle, 0, error); + break; + + case 'u': + /* Restore the cursor position */ + FLUSH_TEXT(); + uv_tty_restore_state(handle, 0, error); + break; + } + + /* Sequence ended - go back to normal state. */ + ansi_parser_state = ANSI_NORMAL; + continue; + + } else { + /* We don't support commands that use private mode characters or */ + /* intermediaries. Ignore the rest of the sequence. */ + ansi_parser_state |= ANSI_IGNORE; + continue; + } + } else { + /* We're ignoring this command. Stop only on command character. */ + if (utf8_codepoint >= '@' && utf8_codepoint <= '~') { + ansi_parser_state = ANSI_NORMAL; + } + continue; + } + + } else if (ansi_parser_state & ANSI_ST_CONTROL) { + /* Unsupported control code */ + /* Ignore everything until we see BEL or ESC \ */ + if (ansi_parser_state & ANSI_IN_STRING) { + if (!(ansi_parser_state & ANSI_BACKSLASH_SEEN)) { + if (utf8_codepoint == '"') { + ansi_parser_state &= ~ANSI_IN_STRING; + } else if (utf8_codepoint == '\\') { + ansi_parser_state |= ANSI_BACKSLASH_SEEN; + } + } else { + ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; + } + } else { + if (utf8_codepoint == '\007' || (utf8_codepoint == '\\' && + (ansi_parser_state & ANSI_ESCAPE_SEEN))) { + /* End of sequence */ + ansi_parser_state = ANSI_NORMAL; + } else if (utf8_codepoint == '\033') { + /* Escape character */ + ansi_parser_state |= ANSI_ESCAPE_SEEN; + } else if (utf8_codepoint == '"') { + /* String starting */ + ansi_parser_state |= ANSI_IN_STRING; + ansi_parser_state &= ~ANSI_ESCAPE_SEEN; + ansi_parser_state &= ~ANSI_BACKSLASH_SEEN; + } else { + ansi_parser_state &= ~ANSI_ESCAPE_SEEN; + } + } + continue; + } else { + /* Inconsistent state */ + abort(); + } + + /* We wouldn't mind emitting utf-16 surrogate pairs. Too bad, the */ + /* windows console doesn't really support UTF-16, so just emit the */ + /* replacement character. */ + if (utf8_codepoint > 0xffff) { + utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; + } + + if (utf8_codepoint == 0x0a || utf8_codepoint == 0x0d) { + /* EOL conversion - emit \r\n, when we see either \r or \n. */ + /* If a \n immediately follows a \r or vice versa, ignore it. */ + if (previous_eol == 0 || utf8_codepoint == previous_eol) { + /* If there's no room in the utf16 buf, flush it first. */ + if (2 > COUNTOF(utf16_buf) - utf16_buf_used) { + uv_tty_emit_text(handle, utf16_buf, utf16_buf_used, error); + utf16_buf_used = 0; + } + + utf16_buf[utf16_buf_used++] = L'\r'; + utf16_buf[utf16_buf_used++] = L'\n'; + previous_eol = (char) utf8_codepoint; + } else { + /* Ignore this newline, but don't ignore later ones. */ + previous_eol = 0; + } + + } else if (utf8_codepoint <= 0xffff) { + /* Encode character into utf-16 buffer. */ + + /* If there's no room in the utf16 buf, flush it first. */ + if (1 > COUNTOF(utf16_buf) - utf16_buf_used) { + uv_tty_emit_text(handle, utf16_buf, utf16_buf_used, error); + utf16_buf_used = 0; + } + + utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; + previous_eol = 0; + } + } + } + + /* Flush remaining characters */ + FLUSH_TEXT(); + + /* Copy cached values back to struct. */ + handle->utf8_bytes_left = utf8_bytes_left; + handle->utf8_codepoint = utf8_codepoint; + handle->previous_eol = previous_eol; + handle->ansi_parser_state = ansi_parser_state; + + LeaveCriticalSection(&uv_tty_output_lock); + + if (*error == STATUS_SUCCESS) { + return 0; + } else { + return -1; + } + +#undef FLUSH_TEXT +} + + +int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle, + uv_buf_t bufs[], int bufcnt, uv_write_cb cb) { + DWORD error; + + if ((handle->flags & UV_HANDLE_SHUTTING) || + (handle->flags & UV_HANDLE_CLOSING)) { + uv__set_sys_error(loop, WSAESHUTDOWN); + return -1; + } + + uv_req_init(loop, (uv_req_t*) req); + req->type = UV_WRITE; + req->handle = (uv_stream_t*) handle; + req->cb = cb; + + handle->reqs_pending++; + handle->write_reqs_pending++; + + req->queued_bytes = 0; + + if (!uv_tty_write_bufs(handle, bufs, bufcnt, &error)) { + SET_REQ_SUCCESS(req); + } else { + SET_REQ_ERROR(req, error); + } + + uv_insert_pending_req(loop, (uv_req_t*) req); + + return 0; +} + + +void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle, + uv_write_t* req) { + + handle->write_queue_size -= req->queued_bytes; + + if (req->cb) { + uv__set_sys_error(loop, GET_REQ_ERROR(req)); + ((uv_write_cb)req->cb)(req, loop->last_err.code == UV_OK ? 0 : -1); + } + + handle->write_reqs_pending--; + if (handle->flags & UV_HANDLE_SHUTTING && + handle->write_reqs_pending == 0) { + uv_want_endgame(loop, (uv_handle_t*)handle); + } + + DECREASE_PENDING_REQ_COUNT(handle); +} + + +void uv_tty_close(uv_tty_t* handle) { + uv_tty_read_stop(handle); + CloseHandle(handle->handle); + + if (handle->reqs_pending == 0) { + uv_want_endgame(handle->loop, (uv_handle_t*) handle); + } +} + + +void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) { + if (handle->flags & UV_HANDLE_CONNECTION && + handle->flags & UV_HANDLE_SHUTTING && + !(handle->flags & UV_HANDLE_SHUT) && + handle->write_reqs_pending == 0) { + handle->flags |= UV_HANDLE_SHUT; + + /* TTY shutdown is really just a no-op */ + if (handle->shutdown_req->cb) { + handle->shutdown_req->cb(handle->shutdown_req, 0); + } + + DECREASE_PENDING_REQ_COUNT(handle); + return; + } + + if (handle->flags & UV_HANDLE_CLOSING && + handle->reqs_pending == 0) { + /* The console handle duplicate used for line reading should be destroyed */ + /* by uv_tty_read_stop. */ + assert(handle->read_line_handle == NULL); + + /* The wait handle used for raw reading should be unregistered when the */ + /* wait callback runs. */ + assert(handle->read_raw_wait == NULL); + + assert(!(handle->flags & UV_HANDLE_CLOSED)); + handle->flags |= UV_HANDLE_CLOSED; + + if (handle->close_cb) { + handle->close_cb((uv_handle_t*)handle); + } + + uv_unref(loop); + } +} + + +/* TODO: remove me */ +void uv_process_tty_accept_req(uv_loop_t* loop, uv_tty_t* handle, + uv_req_t* raw_req) { + abort(); +} + + +/* TODO: remove me */ +void uv_process_tty_connect_req(uv_loop_t* loop, uv_tty_t* handle, + uv_connect_t* req) { + abort(); +} + - return UV_UNKNOWN_HANDLE; +void uv_tty_reset_mode() { + /* Not necessary to do anything. */ + ; } diff --git a/src/rt/libuv/src/win/udp.c b/src/rt/libuv/src/win/udp.c index 3a2ab6bc1b4..07082ddb5d4 100644 --- a/src/rt/libuv/src/win/udp.c +++ b/src/rt/libuv/src/win/udp.c @@ -24,9 +24,8 @@ #include "uv.h" #include "../uv-common.h" #include "internal.h" -#include <stdio.h> -#if 0 + /* * Threshold of active udp streams for which to preallocate udp read buffers. */ @@ -34,7 +33,6 @@ const unsigned int uv_active_udp_streams_threshold = 0; /* A zero-size buffer for use by uv_udp_read */ static char uv_zero_[] = ""; -#endif /* Counter to keep track of active udp streams */ static unsigned int active_udp_streams = 0; @@ -46,13 +44,13 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, int result; if (!(handle->flags & UV_HANDLE_BOUND)) { - uv_set_sys_error(loop, WSAEINVAL); + uv__set_sys_error(loop, WSAEINVAL); return -1; } result = getsockname(handle->socket, name, namelen); if (result != 0) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -63,18 +61,20 @@ int uv_udp_getsockname(uv_udp_t* handle, struct sockaddr* name, static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket) { DWORD yes = 1; + WSAPROTOCOL_INFOW info; + int opt_len; assert(handle->socket == INVALID_SOCKET); /* Set the socket to nonblocking mode */ if (ioctlsocket(socket, FIONBIO, &yes) == SOCKET_ERROR) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } /* Make the socket non-inheritable */ if (!SetHandleInformation((HANDLE)socket, HANDLE_FLAG_INHERIT, 0)) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } @@ -84,18 +84,38 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, loop->iocp, (ULONG_PTR)socket, 0) == NULL) { - uv_set_sys_error(loop, GetLastError()); + uv__set_sys_error(loop, GetLastError()); return -1; } if (pSetFileCompletionNotificationModes) { - if (!pSetFileCompletionNotificationModes((HANDLE)socket, - FILE_SKIP_SET_EVENT_ON_HANDLE | FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { - uv_set_sys_error(loop, GetLastError()); + /* All know windowses that support SetFileCompletionNotificationModes */ + /* have a bug that makes it impossible to use this function in */ + /* conjunction with datagram sockets. We can work around that but only */ + /* if the user is using the default UDP driver (AFD) and has no other */ + /* LSPs stacked on top. Here we check whether that is the case. */ + opt_len = (int) sizeof info; + if (!getsockopt(socket, + SOL_SOCKET, + SO_PROTOCOL_INFOW, + (char*) &info, + &opt_len) == SOCKET_ERROR) { + uv__set_sys_error(loop, GetLastError()); return -1; } - handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; + if (info.ProtocolChain.ChainLen == 1) { + if (pSetFileCompletionNotificationModes((HANDLE)socket, + FILE_SKIP_SET_EVENT_ON_HANDLE | + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)) { + handle->flags |= UV_HANDLE_SYNC_BYPASS_IOCP; + handle->func_wsarecv = uv_wsarecv_workaround; + handle->func_wsarecvfrom = uv_wsarecvfrom_workaround; + } else if (GetLastError() != ERROR_INVALID_FUNCTION) { + uv__set_sys_error(loop, GetLastError()); + return -1; + } + } } handle->socket = socket; @@ -110,6 +130,8 @@ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) { handle->reqs_pending = 0; handle->loop = loop; handle->flags = 0; + handle->func_wsarecv = WSARecv; + handle->func_wsarecvfrom = WSARecvFrom; uv_req_init(loop, (uv_req_t*) &(handle->recv_req)); handle->recv_req.type = UV_UDP_RECV; @@ -139,26 +161,29 @@ void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle) { } -static int uv__bind(uv_udp_t* handle, int domain, struct sockaddr* addr, - int addrsize, unsigned int flags) { - uv_loop_t* loop = handle->loop; +static int uv__bind(uv_udp_t* handle, + int domain, + struct sockaddr* addr, + int addrsize, + unsigned int flags) { DWORD err; int r; SOCKET sock; if ((flags & UV_UDP_IPV6ONLY) && domain != AF_INET6) { /* UV_UDP_IPV6ONLY is supported only for IPV6 sockets */ - uv_set_sys_error(loop, UV_EINVAL); + uv__set_artificial_error(handle->loop, UV_EINVAL); + return -1; } if (handle->socket == INVALID_SOCKET) { sock = socket(domain, SOCK_DGRAM, 0); if (sock == INVALID_SOCKET) { - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(handle->loop, WSAGetLastError()); return -1; } - if (uv_udp_set_socket(loop, handle, sock) == -1) { + if (uv_udp_set_socket(handle->loop, handle, sock) == -1) { closesocket(sock); return -1; } @@ -183,7 +208,7 @@ static int uv__bind(uv_udp_t* handle, int domain, struct sockaddr* addr, if (r == SOCKET_ERROR) { err = WSAGetLastError(); - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(handle->loop, WSAGetLastError()); return -1; } @@ -193,15 +218,8 @@ static int uv__bind(uv_udp_t* handle, int domain, struct sockaddr* addr, } -int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, +int uv__udp_bind(uv_udp_t* handle, struct sockaddr_in addr, unsigned int flags) { - uv_loop_t* loop = handle->loop; - - if (addr.sin_family != AF_INET) { - uv_set_sys_error(loop, WSAEFAULT); - return -1; - } - return uv__bind(handle, AF_INET, (struct sockaddr*) &addr, @@ -210,15 +228,8 @@ int uv_udp_bind(uv_udp_t* handle, struct sockaddr_in addr, } -int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, +int uv__udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, unsigned int flags) { - uv_loop_t* loop = handle->loop; - - if (addr.sin6_family != AF_INET6) { - uv_set_sys_error(loop, WSAEFAULT); - return -1; - } - if (uv_allow_ipv6) { handle->flags |= UV_HANDLE_IPV6; return uv__bind(handle, @@ -227,12 +238,21 @@ int uv_udp_bind6(uv_udp_t* handle, struct sockaddr_in6 addr, sizeof(struct sockaddr_in6), flags); } else { - uv_new_sys_error(WSAEAFNOSUPPORT); + uv__set_sys_error(handle->loop, WSAEAFNOSUPPORT); return -1; } } +int uv_udp_set_membership(uv_udp_t* handle, const char* multicast_addr, + const char* interface_addr, uv_membership membership) { + + /* not implemented yet */ + uv__set_artificial_error(handle->loop, UV_ENOSYS); + return -1; +} + + static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { uv_req_t* req; uv_buf_t buf; @@ -249,10 +269,9 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { * Preallocate a read buffer if the number of active streams is below * the threshold. */ -#if 0 if (active_udp_streams < uv_active_udp_streams_threshold) { handle->flags &= ~UV_HANDLE_ZERO_READ; -#endif + handle->recv_buffer = handle->alloc_cb((uv_handle_t*) handle, 65536); assert(handle->recv_buffer.len > 0); @@ -261,15 +280,15 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { handle->recv_from_len = sizeof handle->recv_from; flags = 0; - result = WSARecvFrom(handle->socket, - (WSABUF*) &buf, - 1, - &bytes, - &flags, - (struct sockaddr*) &handle->recv_from, - &handle->recv_from_len, - &req->overlapped, - NULL); + result = handle->func_wsarecvfrom(handle->socket, + (WSABUF*) &buf, + 1, + &bytes, + &flags, + (struct sockaddr*) &handle->recv_from, + &handle->recv_from_len, + &req->overlapped, + NULL); if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { /* Process the req without IOCP. */ @@ -287,21 +306,21 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { uv_insert_pending_req(loop, req); handle->reqs_pending++; } -#if 0 + } else { handle->flags |= UV_HANDLE_ZERO_READ; buf.base = (char*) uv_zero_; buf.len = 0; - flags = MSG_PARTIAL; + flags = MSG_PEEK; - result = WSARecv(handle->socket, - (WSABUF*) &buf, - 1, - &bytes, - &flags, - &req->overlapped, - NULL); + result = handle->func_wsarecv(handle->socket, + (WSABUF*) &buf, + 1, + &bytes, + &flags, + &req->overlapped, + NULL); if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { /* Process the req without IOCP. */ @@ -320,7 +339,6 @@ static void uv_udp_queue_recv(uv_loop_t* loop, uv_udp_t* handle) { handle->reqs_pending++; } } -#endif } @@ -329,7 +347,7 @@ int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_loop_t* loop = handle->loop; if (handle->flags & UV_HANDLE_READING) { - uv_set_sys_error(loop, WSAEALREADY); + uv__set_sys_error(loop, WSAEALREADY); return -1; } @@ -363,55 +381,6 @@ int uv_udp_recv_stop(uv_udp_t* handle) { } -int uv_udp_connect6(uv_connect_t* req, uv_udp_t* handle, - struct sockaddr_in6 address, uv_connect_cb cb) { - uv_loop_t* loop = handle->loop; - int addrsize = sizeof(struct sockaddr_in6); - BOOL success; - DWORD bytes; - - if (!uv_allow_ipv6) { - uv_new_sys_error(WSAEAFNOSUPPORT); - return -1; - } - - if (address.sin6_family != AF_INET6) { - uv_set_sys_error(loop, WSAEFAULT); - return -1; - } - - if (!(handle->flags & UV_HANDLE_BOUND) && - uv_udp_bind6(handle, uv_addr_ip6_any_, 0) < 0) - return -1; - - uv_req_init(loop, (uv_req_t*) req); - req->type = UV_CONNECT; - req->handle = (uv_stream_t*) handle; - req->cb = cb; - memset(&req->overlapped, 0, sizeof(req->overlapped)); - - success = pConnectEx6(handle->socket, - (struct sockaddr*) &address, - addrsize, - NULL, - 0, - &bytes, - &req->overlapped); - - if (UV_SUCCEEDED_WITHOUT_IOCP(success)) { - handle->reqs_pending++; - uv_insert_pending_req(loop, (uv_req_t*)req); - } else if (UV_SUCCEEDED_WITH_IOCP(success)) { - handle->reqs_pending++; - } else { - uv_set_sys_error(loop, WSAGetLastError()); - return -1; - } - - return 0; -} - - static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], int bufcnt, struct sockaddr* addr, int addr_len, uv_udp_send_cb cb) { uv_loop_t* loop = handle->loop; @@ -444,7 +413,7 @@ static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[], handle->reqs_pending++; } else { /* Send failed due to an error. */ - uv_set_sys_error(loop, WSAGetLastError()); + uv__set_sys_error(loop, WSAGetLastError()); return -1; } @@ -498,34 +467,27 @@ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, handle->flags &= ~UV_HANDLE_READ_PENDING; if (!REQ_SUCCESS(req) && - GET_REQ_STATUS(req) != STATUS_RECEIVE_EXPEDITED) { + GET_REQ_SOCK_ERROR(req) != WSAEMSGSIZE) { /* An error occurred doing the read. */ - if ((handle->flags & UV_HANDLE_READING)) { - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); + if (handle->flags & UV_HANDLE_READING) { + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); uv_udp_recv_stop(handle); -#if 0 buf = (handle->flags & UV_HANDLE_ZERO_READ) ? uv_buf_init(NULL, 0) : handle->recv_buffer; -#else - buf = handle->recv_buffer; -#endif handle->recv_cb(handle, -1, buf, NULL, 0); } goto done; } -#if 0 if (!(handle->flags & UV_HANDLE_ZERO_READ)) { -#endif /* Successful read */ - partial = (GET_REQ_STATUS(req) == STATUS_RECEIVE_EXPEDITED); + partial = !REQ_SUCCESS(req); handle->recv_cb(handle, req->overlapped.InternalHigh, handle->recv_buffer, (struct sockaddr*) &handle->recv_from, partial ? UV_UDP_PARTIAL : 0); -#if 0 - } else { + } else if (handle->flags & UV_HANDLE_READING) { DWORD bytes, err, flags; struct sockaddr_storage from; int from_len; @@ -537,7 +499,8 @@ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, memset(&from, 0, sizeof from); from_len = sizeof from; - flags = MSG_PARTIAL; + + flags = 0; if (WSARecvFrom(handle->socket, (WSABUF*)&buf, @@ -550,24 +513,27 @@ void uv_process_udp_recv_req(uv_loop_t* loop, uv_udp_t* handle, NULL) != SOCKET_ERROR) { /* Message received */ - handle->recv_cb(handle, - bytes, - buf, - (struct sockaddr*) &from, - (flags & MSG_PARTIAL) ? UV_UDP_PARTIAL : 0); + handle->recv_cb(handle, bytes, buf, (struct sockaddr*) &from, 0); } else { err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK) { - uv_set_sys_error(loop, WSAEWOULDBLOCK); + if (err == WSAEMSGSIZE) { + /* Message truncated */ + handle->recv_cb(handle, + bytes, + buf, + (struct sockaddr*) &from, + UV_UDP_PARTIAL); + } if (err == WSAEWOULDBLOCK) { + /* Kernel buffer empty */ + uv__set_sys_error(loop, WSAEWOULDBLOCK); handle->recv_cb(handle, 0, buf, NULL, 0); } else { /* Ouch! serious error. */ - uv_set_sys_error(loop, err); + uv__set_sys_error(loop, err); handle->recv_cb(handle, -1, buf, NULL, 0); } } } -#endif done: /* Post another read if still reading and not closing. */ @@ -588,7 +554,7 @@ void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle, if (REQ_SUCCESS(req)) { req->cb(req, 0); } else { - loop->last_error = GET_REQ_UV_SOCK_ERROR(req); + uv__set_sys_error(loop, GET_REQ_SOCK_ERROR(req)); req->cb(req, -1); } } diff --git a/src/rt/libuv/src/win/util.c b/src/rt/libuv/src/win/util.c index 67de53e5c04..3bc3e1dbd43 100644 --- a/src/rt/libuv/src/win/util.c +++ b/src/rt/libuv/src/win/util.c @@ -25,6 +25,7 @@ #include "uv.h" #include "internal.h" +#include "Tlhelp32.h" int uv_utf16_to_utf8(const wchar_t* utf16Buffer, size_t utf16Size, @@ -69,7 +70,7 @@ int uv_exepath(char* buffer, size_t* size) { /* Get the path as UTF-16 */ utf16Size = GetModuleFileNameW(NULL, utf16Buffer, *size - 1); if (utf16Size <= 0) { - /* uv_set_sys_error(loop, GetLastError()); */ + /* uv__set_sys_error(loop, GetLastError()); */ retVal = -1; goto done; } @@ -79,7 +80,7 @@ int uv_exepath(char* buffer, size_t* size) { /* Convert to UTF-8 */ *size = uv_utf16_to_utf8(utf16Buffer, utf16Size, buffer, *size); if (!*size) { - /* uv_set_sys_error(loop, GetLastError()); */ + /* uv__set_sys_error(loop, GetLastError()); */ retVal = -1; goto done; } @@ -94,3 +95,58 @@ done: return retVal; } + + +void uv_loadavg(double avg[3]) { + /* Can't be implemented */ + avg[0] = avg[1] = avg[2] = 0; +} + + +uint64_t uv_get_free_memory(void) { + MEMORYSTATUSEX memory_status; + memory_status.dwLength = sizeof(memory_status); + + if(!GlobalMemoryStatusEx(&memory_status)) + { + return -1; + } + + return (uint64_t)memory_status.ullAvailPhys; +} + + +uint64_t uv_get_total_memory(void) { + MEMORYSTATUSEX memory_status; + memory_status.dwLength = sizeof(memory_status); + + if(!GlobalMemoryStatusEx(&memory_status)) + { + return -1; + } + + return (uint64_t)memory_status.ullTotalPhys; +} + + +int uv_parent_pid() { + int parent_pid = -1; + HANDLE handle; + PROCESSENTRY32 pe; + int current_pid = GetCurrentProcessId(); + + pe.dwSize = sizeof(PROCESSENTRY32); + handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); + + if (Process32First(handle, &pe)) { + do { + if (pe.th32ProcessID == current_pid) { + parent_pid = pe.th32ParentProcessID; + break; + } + } while( Process32Next(handle, &pe)); + } + + CloseHandle(handle); + return parent_pid; +} diff --git a/src/rt/libuv/src/win/winapi.c b/src/rt/libuv/src/win/winapi.c index 4a58c14574f..cc21361bc70 100644 --- a/src/rt/libuv/src/win/winapi.c +++ b/src/rt/libuv/src/win/winapi.c @@ -27,11 +27,12 @@ sRtlNtStatusToDosError pRtlNtStatusToDosError; +sNtDeviceIoControlFile pNtDeviceIoControlFile; sNtQueryInformationFile pNtQueryInformationFile; sNtSetInformationFile pNtSetInformationFile; sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; sSetFileCompletionNotificationModes pSetFileCompletionNotificationModes; -sCreateSymbolicLinkA pCreateSymbolicLinkA; +sCreateSymbolicLinkW pCreateSymbolicLinkW; void uv_winapi_init() { @@ -57,6 +58,13 @@ void uv_winapi_init() { uv_fatal_error(GetLastError(), "GetProcAddress"); } + pNtDeviceIoControlFile = (sNtDeviceIoControlFile) GetProcAddress( + ntdll_module, + "NtDeviceIoControlFile"); + if (pNtDeviceIoControlFile == NULL) { + uv_fatal_error(GetLastError(), "GetProcAddress"); + } + pNtSetInformationFile = (sNtSetInformationFile) GetProcAddress( ntdll_module, "NtSetInformationFile"); @@ -76,6 +84,6 @@ void uv_winapi_init() { pSetFileCompletionNotificationModes = (sSetFileCompletionNotificationModes) GetProcAddress(kernel32_module, "SetFileCompletionNotificationModes"); - pCreateSymbolicLinkA = (sCreateSymbolicLinkA) - GetProcAddress(kernel32_module, "CreateSymbolicLinkA"); + pCreateSymbolicLinkW = (sCreateSymbolicLinkW) + GetProcAddress(kernel32_module, "CreateSymbolicLinkW"); } diff --git a/src/rt/libuv/src/win/winapi.h b/src/rt/libuv/src/win/winapi.h index 760281e8619..e0038f14aca 100644 --- a/src/rt/libuv/src/win/winapi.h +++ b/src/rt/libuv/src/win/winapi.h @@ -4137,6 +4137,13 @@ typedef struct _FILE_BASIC_INFORMATION { DWORD FileAttributes; } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; + +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 + typedef enum _FILE_INFORMATION_CLASS { FileDirectoryInformation = 1, FileFullDirectoryInformation, @@ -4204,6 +4211,10 @@ typedef enum _FILE_INFORMATION_CLASS { # define FILE_DEVICE_FILE_SYSTEM 0x00000009 #endif +#ifndef FILE_DEVICE_NETWORK +# define FILE_DEVICE_NETWORK 0x00000012 +#endif + #ifndef METHOD_BUFFERED # define METHOD_BUFFERED 0 #endif @@ -4270,9 +4281,26 @@ typedef enum _FILE_INFORMATION_CLASS { FILE_SPECIAL_ACCESS) #endif +typedef VOID (NTAPI *PIO_APC_ROUTINE) + (PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG Reserved); + typedef ULONG (NTAPI *sRtlNtStatusToDosError) (NTSTATUS Status); +typedef NTSTATUS (NTAPI *sNtDeviceIoControlFile) + (HANDLE FileHandle, + HANDLE Event, + PIO_APC_ROUTINE ApcRoutine, + PVOID ApcContext, + PIO_STATUS_BLOCK IoStatusBlock, + ULONG IoControlCode, + PVOID InputBuffer, + ULONG InputBufferLength, + PVOID OutputBuffer, + ULONG OutputBufferLength); + typedef NTSTATUS (NTAPI *sNtQueryInformationFile) (HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, @@ -4317,14 +4345,15 @@ typedef BOOL (WINAPI* sSetFileCompletionNotificationModes) (HANDLE FileHandle, UCHAR Flags); -typedef BOOLEAN (WINAPI* sCreateSymbolicLinkA) - (LPCSTR lpSymlinkFileName, - LPCSTR lpTargetFileName, +typedef BOOLEAN (WINAPI* sCreateSymbolicLinkW) + (LPCWSTR lpSymlinkFileName, + LPCWSTR lpTargetFileName, DWORD dwFlags); /* Ntapi function pointers */ extern sRtlNtStatusToDosError pRtlNtStatusToDosError; +extern sNtDeviceIoControlFile pNtDeviceIoControlFile; extern sNtQueryInformationFile pNtQueryInformationFile; extern sNtSetInformationFile pNtSetInformationFile; @@ -4332,6 +4361,6 @@ extern sNtSetInformationFile pNtSetInformationFile; /* Kernel32 function pointers */ extern sGetQueuedCompletionStatusEx pGetQueuedCompletionStatusEx; extern sSetFileCompletionNotificationModes pSetFileCompletionNotificationModes; -extern sCreateSymbolicLinkA pCreateSymbolicLinkA; +extern sCreateSymbolicLinkW pCreateSymbolicLinkW; #endif /* UV_WIN_WINAPI_H_ */ diff --git a/src/rt/libuv/src/win/winsock.c b/src/rt/libuv/src/win/winsock.c index 1f56b3d75bd..5309f1eedb1 100644 --- a/src/rt/libuv/src/win/winsock.c +++ b/src/rt/libuv/src/win/winsock.c @@ -25,21 +25,6 @@ #include "../uv-common.h" #include "internal.h" - -/* Winsock extension functions (ipv4) */ -LPFN_CONNECTEX pConnectEx; -LPFN_ACCEPTEX pAcceptEx; -LPFN_GETACCEPTEXSOCKADDRS pGetAcceptExSockAddrs; -LPFN_DISCONNECTEX pDisconnectEx; -LPFN_TRANSMITFILE pTransmitFile; - -/* Winsock extension functions (ipv6) */ -LPFN_CONNECTEX pConnectEx6; -LPFN_ACCEPTEX pAcceptEx6; -LPFN_GETACCEPTEXSOCKADDRS pGetAcceptExSockAddrs6; -LPFN_DISCONNECTEX pDisconnectEx6; -LPFN_TRANSMITFILE pTransmitFile6; - /* Whether ipv6 is supported */ int uv_allow_ipv6; @@ -74,6 +59,18 @@ static BOOL uv_get_extension_function(SOCKET socket, GUID guid, } +BOOL uv_get_acceptex_function(SOCKET socket, LPFN_ACCEPTEX* target) { + const GUID wsaid_acceptex = WSAID_ACCEPTEX; + return uv_get_extension_function(socket, wsaid_acceptex, (void**)target); +} + + +BOOL uv_get_connectex_function(SOCKET socket, LPFN_CONNECTEX* target) { + const GUID wsaid_connectex = WSAID_CONNECTEX; + return uv_get_extension_function(socket, wsaid_connectex, (void**)target); +} + + void uv_winsock_init() { const GUID wsaid_connectex = WSAID_CONNECTEX; const GUID wsaid_acceptex = WSAID_ACCEPTEX; @@ -83,7 +80,6 @@ void uv_winsock_init() { WSADATA wsa_data; int errorno; - SOCKET dummy; SOCKET dummy6; /* Initialize winsock */ @@ -96,58 +92,10 @@ void uv_winsock_init() { uv_addr_ip4_any_ = uv_ip4_addr("0.0.0.0", 0); uv_addr_ip6_any_ = uv_ip6_addr("::", 0); - /* Retrieve the needed winsock extension function pointers. */ - dummy = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); - if (dummy == INVALID_SOCKET) { - uv_fatal_error(WSAGetLastError(), "socket"); - } - - if (!uv_get_extension_function(dummy, - wsaid_connectex, - (void**)&pConnectEx) || - !uv_get_extension_function(dummy, - wsaid_acceptex, - (void**)&pAcceptEx) || - !uv_get_extension_function(dummy, - wsaid_getacceptexsockaddrs, - (void**)&pGetAcceptExSockAddrs) || - !uv_get_extension_function(dummy, - wsaid_disconnectex, - (void**)&pDisconnectEx) || - !uv_get_extension_function(dummy, - wsaid_transmitfile, - (void**)&pTransmitFile)) { - uv_fatal_error(WSAGetLastError(), - "WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER)"); - } - - if (closesocket(dummy) == SOCKET_ERROR) { - uv_fatal_error(WSAGetLastError(), "closesocket"); - } - - /* optional IPv6 versions of winsock extension functions */ + /* Detect IPV6 support */ dummy6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_IP); if (dummy6 != INVALID_SOCKET) { uv_allow_ipv6 = TRUE; - - if (!uv_get_extension_function(dummy6, - wsaid_connectex, - (void**)&pConnectEx6) || - !uv_get_extension_function(dummy6, - wsaid_acceptex, - (void**)&pAcceptEx6) || - !uv_get_extension_function(dummy6, - wsaid_getacceptexsockaddrs, - (void**)&pGetAcceptExSockAddrs6) || - !uv_get_extension_function(dummy6, - wsaid_disconnectex, - (void**)&pDisconnectEx6) || - !uv_get_extension_function(dummy6, - wsaid_transmitfile, - (void**)&pTransmitFile6)) { - uv_allow_ipv6 = FALSE; - } - if (closesocket(dummy6) == SOCKET_ERROR) { uv_fatal_error(WSAGetLastError(), "closesocket"); } @@ -268,3 +216,210 @@ int uv_ntstatus_to_winsock_error(NTSTATUS status) { } } } + + +/* + * This function provides a workaround for a bug in the winsock implementation + * of WSARecv. The problem is that when SetFileCompletionNotificationModes is + * used to avoid IOCP notifications of completed reads, WSARecv does not + * reliably indicate whether we can expect a completion package to be posted + * when the receive buffer is smaller than the received datagram. + * + * However it is desirable to use SetFileCompletionNotificationModes because + * it yields a massive performance increase. + * + * This function provides a workaround for that bug, but it only works for the + * specific case that we need it for. E.g. it assumes that the "avoid iocp" + * bit has been set, and supports only overlapped operation. It also requires + * the user to use the default msafd driver, doesn't work when other LSPs are + * stacked on top of it. + */ +int WSAAPI uv_wsarecv_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { + NTSTATUS status; + void* apc_context; + IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; + AFD_RECV_INFO info; + DWORD error; + + if (overlapped == NULL || completion_routine != NULL) { + WSASetLastError(WSAEINVAL); + return SOCKET_ERROR; + } + + info.BufferArray = buffers; + info.BufferCount = buffer_count; + info.AfdFlags = AFD_OVERLAPPED; + info.TdiFlags = TDI_RECEIVE_NORMAL; + + if (*flags & MSG_PEEK) { + info.TdiFlags |= TDI_RECEIVE_PEEK; + } + + if (*flags & MSG_PARTIAL) { + info.TdiFlags |= TDI_RECEIVE_PARTIAL; + } + + if (!((intptr_t) overlapped->hEvent & 1)) { + apc_context = (void*) overlapped; + } else { + apc_context = NULL; + } + + iosb->Status = STATUS_PENDING; + iosb->Pointer = 0; + + status = pNtDeviceIoControlFile((HANDLE) socket, + overlapped->hEvent, + NULL, + apc_context, + iosb, + IOCTL_AFD_RECEIVE, + &info, + sizeof(info), + NULL, + 0); + + *flags = 0; + *bytes = (DWORD) iosb->Information; + + switch (status) { + case STATUS_SUCCESS: + error = ERROR_SUCCESS; + break; + + case STATUS_PENDING: + error = WSA_IO_PENDING; + break; + + case STATUS_BUFFER_OVERFLOW: + error = WSAEMSGSIZE; + break; + + case STATUS_RECEIVE_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL | MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL; + break; + + default: + error = uv_ntstatus_to_winsock_error(status); + break; + } + + WSASetLastError(error); + + if (error == ERROR_SUCCESS) { + return 0; + } else { + return SOCKET_ERROR; + } +} + + +/* See description of uv_wsarecv_workaround. */ +int WSAAPI uv_wsarecvfrom_workaround(SOCKET socket, WSABUF* buffers, + DWORD buffer_count, DWORD* bytes, DWORD* flags, struct sockaddr* addr, + int* addr_len, WSAOVERLAPPED *overlapped, + LPWSAOVERLAPPED_COMPLETION_ROUTINE completion_routine) { + NTSTATUS status; + void* apc_context; + IO_STATUS_BLOCK* iosb = (IO_STATUS_BLOCK*) &overlapped->Internal; + AFD_RECV_DATAGRAM_INFO info; + DWORD error; + + if (overlapped == NULL || addr == NULL || addr_len == NULL || + completion_routine != NULL) { + WSASetLastError(WSAEINVAL); + return SOCKET_ERROR; + } + + info.BufferArray = buffers; + info.BufferCount = buffer_count; + info.AfdFlags = AFD_OVERLAPPED; + info.TdiFlags = TDI_RECEIVE_NORMAL; + info.Address = addr; + info.AddressLength = addr_len; + + if (*flags & MSG_PEEK) { + info.TdiFlags |= TDI_RECEIVE_PEEK; + } + + if (*flags & MSG_PARTIAL) { + info.TdiFlags |= TDI_RECEIVE_PARTIAL; + } + + if (!((intptr_t) overlapped->hEvent & 1)) { + apc_context = (void*) overlapped; + } else { + apc_context = NULL; + } + + iosb->Status = STATUS_PENDING; + iosb->Pointer = 0; + + status = pNtDeviceIoControlFile((HANDLE) socket, + overlapped->hEvent, + NULL, + apc_context, + iosb, + IOCTL_AFD_RECEIVE_DATAGRAM, + &info, + sizeof(info), + NULL, + 0); + + *flags = 0; + *bytes = (DWORD) iosb->Information; + + switch (status) { + case STATUS_SUCCESS: + error = ERROR_SUCCESS; + break; + + case STATUS_PENDING: + error = WSA_IO_PENDING; + break; + + case STATUS_BUFFER_OVERFLOW: + error = WSAEMSGSIZE; + break; + + case STATUS_RECEIVE_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL_EXPEDITED: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL | MSG_OOB; + break; + + case STATUS_RECEIVE_PARTIAL: + error = ERROR_SUCCESS; + *flags = MSG_PARTIAL; + break; + + default: + error = uv_ntstatus_to_winsock_error(status); + break; + } + + WSASetLastError(error); + + if (error == ERROR_SUCCESS) { + return 0; + } else { + return SOCKET_ERROR; + } +} diff --git a/src/rt/libuv/src/win/winsock.h b/src/rt/libuv/src/win/winsock.h index 2c9fb92db1b..beee032137c 100644 --- a/src/rt/libuv/src/win/winsock.h +++ b/src/rt/libuv/src/win/winsock.h @@ -27,76 +27,8 @@ #include <ws2tcpip.h> #include <windows.h> +#include "winapi.h" -/* - * 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 /* * MinGW is missing these too @@ -109,26 +41,66 @@ #define IPV6_V6ONLY 27 #endif +/* + * TDI defines that are only in the DDK. + * We only need receive flags so far. + */ +#ifndef TDI_RECEIVE_NORMAL + #define TDI_RECEIVE_BROADCAST 0x00000004 + #define TDI_RECEIVE_MULTICAST 0x00000008 + #define TDI_RECEIVE_PARTIAL 0x00000010 + #define TDI_RECEIVE_NORMAL 0x00000020 + #define TDI_RECEIVE_EXPEDITED 0x00000040 + #define TDI_RECEIVE_PEEK 0x00000080 + #define TDI_RECEIVE_NO_RESPONSE_EXP 0x00000100 + #define TDI_RECEIVE_COPY_LOOKAHEAD 0x00000200 + #define TDI_RECEIVE_ENTIRE_MESSAGE 0x00000400 + #define TDI_RECEIVE_AT_DISPATCH_LEVEL 0x00000800 + #define TDI_RECEIVE_CONTROL_INFO 0x00001000 + #define TDI_RECEIVE_FORCE_INDICATION 0x00002000 + #define TDI_RECEIVE_NO_PUSH 0x00004000 +#endif + +/* + * The "Auxiliary Function Driver" is the windows kernel-mode driver that does + * TCP, UDP etc. Winsock is just a layer that dispatches requests to it. + * Having these definitions allows us to bypass winsock and make an AFD kernel + * call directly, avoiding a bug in winsock's recvfrom implementation. + */ + +#define AFD_NO_FAST_IO 0x00000001 +#define AFD_OVERLAPPED 0x00000002 +#define AFD_IMMEDIATE 0x00000004 + +typedef struct _AFD_RECV_DATAGRAM_INFO { + LPWSABUF BufferArray; + ULONG BufferCount; + ULONG AfdFlags; + ULONG TdiFlags; + struct sockaddr* Address; + int* AddressLength; +} AFD_RECV_DATAGRAM_INFO, *PAFD_RECV_DATAGRAM_INFO; + +typedef struct _AFD_RECV_INFO { + LPWSABUF BufferArray; + ULONG BufferCount; + ULONG AfdFlags; + ULONG TdiFlags; +} AFD_RECV_INFO, *PAFD_RECV_INFO; + + +#define _AFD_CONTROL_CODE(operation, method) \ + ((FSCTL_AFD_BASE) << 12 | (operation << 2) | method) -/* Winsock extension functions (ipv4) */ -extern LPFN_CONNECTEX pConnectEx; -extern LPFN_ACCEPTEX pAcceptEx; -extern LPFN_GETACCEPTEXSOCKADDRS pGetAcceptExSockAddrs; -extern LPFN_DISCONNECTEX pDisconnectEx; -extern LPFN_TRANSMITFILE pTransmitFile; +#define FSCTL_AFD_BASE FILE_DEVICE_NETWORK -/* Winsock extension functions (ipv6) */ -extern LPFN_CONNECTEX pConnectEx6; -extern LPFN_ACCEPTEX pAcceptEx6; -extern LPFN_GETACCEPTEXSOCKADDRS pGetAcceptExSockAddrs6; -extern LPFN_DISCONNECTEX pDisconnectEx6; -extern LPFN_TRANSMITFILE pTransmitFile6; +#define AFD_RECEIVE 5 +#define AFD_RECEIVE_DATAGRAM 6 -/* Whether ipv6 is supported */ -extern int uv_allow_ipv6; +#define IOCTL_AFD_RECEIVE \ + _AFD_CONTROL_CODE(AFD_RECEIVE, METHOD_NEITHER) -/* Ip address used to bind to any port at any interface */ -extern struct sockaddr_in uv_addr_ip4_any_; -extern struct sockaddr_in6 uv_addr_ip6_any_; +#define IOCTL_AFD_RECEIVE_DATAGRAM \ + _AFD_CONTROL_CODE(AFD_RECEIVE_DATAGRAM, METHOD_NEITHER) #endif /* UV_WIN_WINSOCK_H_ */ diff --git a/src/rt/libuv/test/benchmark-list.h b/src/rt/libuv/test/benchmark-list.h index 0e5467c7a1b..0a72fb98615 100644 --- a/src/rt/libuv/test/benchmark-list.h +++ b/src/rt/libuv/test/benchmark-list.h @@ -21,6 +21,7 @@ BENCHMARK_DECLARE (sizes) BENCHMARK_DECLARE (ping_pongs) +BENCHMARK_DECLARE (tcp_write_batch) BENCHMARK_DECLARE (tcp4_pound_100) BENCHMARK_DECLARE (tcp4_pound_1000) BENCHMARK_DECLARE (pipe_pound_100) @@ -42,6 +43,7 @@ BENCHMARK_DECLARE (udp_packet_storm_1000v1000) BENCHMARK_DECLARE (gethostbyname) BENCHMARK_DECLARE (getaddrinfo) BENCHMARK_DECLARE (spawn) +HELPER_DECLARE (tcp4_blackhole_server) HELPER_DECLARE (tcp_pump_server) HELPER_DECLARE (pipe_pump_server) HELPER_DECLARE (tcp4_echo_server) @@ -54,6 +56,9 @@ TASK_LIST_START BENCHMARK_ENTRY (ping_pongs) BENCHMARK_HELPER (ping_pongs, tcp4_echo_server) + BENCHMARK_ENTRY (tcp_write_batch) + BENCHMARK_HELPER (tcp_write_batch, tcp4_blackhole_server) + BENCHMARK_ENTRY (tcp_pump100_client) BENCHMARK_HELPER (tcp_pump100_client, tcp_pump_server) diff --git a/src/rt/libuv/test/benchmark-pound.c b/src/rt/libuv/test/benchmark-pound.c index 1f56e27f69d..af7ce247dab 100644 --- a/src/rt/libuv/test/benchmark-pound.c +++ b/src/rt/libuv/test/benchmark-pound.c @@ -222,7 +222,7 @@ static void tcp_make_connect(conn_rec* p) { static void pipe_make_connect(conn_rec* p) { int r; - r = uv_pipe_init(loop, (uv_pipe_t*)&p->stream); + r = uv_pipe_init(loop, (uv_pipe_t*)&p->stream, 0); ASSERT(r == 0); r = uv_pipe_connect(&((pipe_conn_rec*)p)->conn_req, (uv_pipe_t*)&p->stream, TEST_PIPENAME, connect_cb); diff --git a/src/rt/libuv/test/benchmark-pump.c b/src/rt/libuv/test/benchmark-pump.c index d0b09301570..27e8abe0c82 100644 --- a/src/rt/libuv/test/benchmark-pump.c +++ b/src/rt/libuv/test/benchmark-pump.c @@ -253,7 +253,7 @@ static void maybe_connect_some() { } else { pipe = &pipe_write_handles[max_connect_socket++]; - r = uv_pipe_init(loop, pipe); + r = uv_pipe_init(loop, pipe, 0); ASSERT(r == 0); req = (uv_connect_t*) req_alloc(); @@ -277,7 +277,7 @@ static void connection_cb(uv_stream_t* s, int status) { ASSERT(r == 0); } else { stream = (uv_stream_t*)malloc(sizeof(uv_pipe_t)); - r = uv_pipe_init(loop, (uv_pipe_t*)stream); + r = uv_pipe_init(loop, (uv_pipe_t*)stream, 0); ASSERT(r == 0); } @@ -396,7 +396,7 @@ HELPER_IMPL(pipe_pump_server) { /* Server */ server = (uv_stream_t*)&pipeServer; - r = uv_pipe_init(loop, &pipeServer); + r = uv_pipe_init(loop, &pipeServer, 0); ASSERT(r == 0); r = uv_pipe_bind(&pipeServer, TEST_PIPENAME); ASSERT(r == 0); diff --git a/src/rt/libuv/test/benchmark-sizes.c b/src/rt/libuv/test/benchmark-sizes.c index 3967f301f9f..d75cb8e0a40 100644 --- a/src/rt/libuv/test/benchmark-sizes.c +++ b/src/rt/libuv/test/benchmark-sizes.c @@ -29,6 +29,7 @@ BENCHMARK_IMPL(sizes) { LOGF("uv_connect_t: %u bytes\n", (unsigned int) sizeof(uv_connect_t)); LOGF("uv_tcp_t: %u bytes\n", (unsigned int) sizeof(uv_tcp_t)); LOGF("uv_pipe_t: %u bytes\n", (unsigned int) sizeof(uv_pipe_t)); + LOGF("uv_tty_t: %u bytes\n", (unsigned int) sizeof(uv_tty_t)); LOGF("uv_prepare_t: %u bytes\n", (unsigned int) sizeof(uv_prepare_t)); LOGF("uv_check_t: %u bytes\n", (unsigned int) sizeof(uv_check_t)); LOGF("uv_idle_t: %u bytes\n", (unsigned int) sizeof(uv_idle_t)); diff --git a/src/rt/libuv/test/benchmark-spawn.c b/src/rt/libuv/test/benchmark-spawn.c index 6e5493d529b..d34f42b9feb 100644 --- a/src/rt/libuv/test/benchmark-spawn.c +++ b/src/rt/libuv/test/benchmark-spawn.c @@ -113,7 +113,7 @@ static void spawn() { options.args = args; options.exit_cb = exit_cb; - uv_pipe_init(loop, &out); + uv_pipe_init(loop, &out, 0); options.stdout_stream = &out; r = uv_spawn(loop, &process, options); diff --git a/src/rt/libuv/test/benchmark-tcp-write-batch.c b/src/rt/libuv/test/benchmark-tcp-write-batch.c new file mode 100644 index 00000000000..77bb0191b1e --- /dev/null +++ b/src/rt/libuv/test/benchmark-tcp-write-batch.c @@ -0,0 +1,144 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> + +#define WRITE_REQ_DATA "Hello, world." +#define NUM_WRITE_REQS (1000 * 1000) + +#define container_of(ptr, type, member) \ + ((type *) ((char *) (ptr) - offsetof(type, member))) + +typedef struct { + uv_write_t req; + uv_buf_t buf; +} write_req; + + +static write_req* write_reqs; +static uv_tcp_t tcp_client; +static uv_connect_t connect_req; +static uv_shutdown_t shutdown_req; + +static int shutdown_cb_called = 0; +static int connect_cb_called = 0; +static int write_cb_called = 0; +static int close_cb_called = 0; + +static void connect_cb(uv_connect_t* req, int status); +static void write_cb(uv_write_t* req, int status); +static void shutdown_cb(uv_shutdown_t* req, int status); +static void close_cb(uv_handle_t* handle); + + +static void connect_cb(uv_connect_t* req, int status) { + write_req* w; + int i; + int r; + + ASSERT(req->handle == (uv_stream_t*)&tcp_client); + + for (i = 0; i < NUM_WRITE_REQS; i++) { + w = &write_reqs[i]; + r = uv_write(&w->req, req->handle, &w->buf, 1, write_cb); + ASSERT(r == 0); + } + + r = uv_shutdown(&shutdown_req, req->handle, shutdown_cb); + ASSERT(r == 0); + + connect_cb_called++; +} + + +static void write_cb(uv_write_t* req, int status) { + ASSERT(req != NULL); + ASSERT(status == 0); + write_cb_called++; +} + + +static void shutdown_cb(uv_shutdown_t* req, int status) { + ASSERT(req->handle == (uv_stream_t*)&tcp_client); + ASSERT(req->handle->write_queue_size == 0); + + uv_close((uv_handle_t*)req->handle, close_cb); + free(write_reqs); + + shutdown_cb_called++; +} + + +static void close_cb(uv_handle_t* handle) { + ASSERT(handle == (uv_handle_t*)&tcp_client); + close_cb_called++; +} + + +BENCHMARK_IMPL(tcp_write_batch) { + struct sockaddr_in addr; + uv_loop_t* loop; + uint64_t start; + uint64_t stop; + int i; + int r; + + write_reqs = malloc(sizeof(*write_reqs) * NUM_WRITE_REQS); + ASSERT(write_reqs != NULL); + + /* Prepare the data to write out. */ + for (i = 0; i < NUM_WRITE_REQS; i++) { + write_reqs[i].buf = uv_buf_init(WRITE_REQ_DATA, + sizeof(WRITE_REQ_DATA) - 1); + } + + loop = uv_default_loop(); + addr = uv_ip4_addr("127.0.0.1", TEST_PORT); + + r = uv_tcp_init(loop, &tcp_client); + ASSERT(r == 0); + + r = uv_tcp_connect(&connect_req, &tcp_client, addr, connect_cb); + ASSERT(r == 0); + + start = uv_hrtime(); + + r = uv_run(loop); + ASSERT(r == 0); + + stop = uv_hrtime(); + + ASSERT(connect_cb_called == 1); + ASSERT(write_cb_called == NUM_WRITE_REQS); + ASSERT(shutdown_cb_called == 1); + ASSERT(close_cb_called == 1); + + printf("%ld write requests in %.2fs.\n", + (long)NUM_WRITE_REQS, + (stop - start) / 10e8); + + return 0; +} diff --git a/src/rt/libuv/test/blackhole-server.c b/src/rt/libuv/test/blackhole-server.c new file mode 100644 index 00000000000..85a0efc26bf --- /dev/null +++ b/src/rt/libuv/test/blackhole-server.c @@ -0,0 +1,122 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> + +#define container_of(ptr, type, member) \ + ((type *) ((char *) (ptr) - offsetof(type, member))) + +typedef struct { + uv_tcp_t handle; + uv_shutdown_t shutdown_req; +} conn_rec; + +static uv_tcp_t tcp_server; + +static void connection_cb(uv_stream_t* stream, int status); +static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size); +static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf); +static void shutdown_cb(uv_shutdown_t* req, int status); +static void close_cb(uv_handle_t* handle); + + +static void connection_cb(uv_stream_t* stream, int status) { + conn_rec* conn; + int r; + + ASSERT(status == 0); + ASSERT(stream == (uv_stream_t*)&tcp_server); + + conn = malloc(sizeof *conn); + ASSERT(conn != NULL); + + r = uv_tcp_init(stream->loop, &conn->handle); + ASSERT(r == 0); + + r = uv_accept(stream, (uv_stream_t*)&conn->handle); + ASSERT(r == 0); + + r = uv_read_start((uv_stream_t*)&conn->handle, alloc_cb, read_cb); + ASSERT(r == 0); +} + + +static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size) { + static char buf[65536]; + return uv_buf_init(buf, sizeof buf); +} + + +static void read_cb(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) { + conn_rec* conn; + int r; + + if (nread >= 0) + return; + + ASSERT(uv_last_error(stream->loop).code == UV_EOF); + + conn = container_of(stream, conn_rec, handle); + + r = uv_shutdown(&conn->shutdown_req, stream, shutdown_cb); + ASSERT(r == 0); +} + + +static void shutdown_cb(uv_shutdown_t* req, int status) { + conn_rec* conn = container_of(req, conn_rec, shutdown_req); + uv_close((uv_handle_t*)&conn->handle, close_cb); +} + + +static void close_cb(uv_handle_t* handle) { + conn_rec* conn = container_of(handle, conn_rec, handle); + free(conn); +} + + +HELPER_IMPL(tcp4_blackhole_server) { + struct sockaddr_in addr; + uv_loop_t* loop; + int r; + + loop = uv_default_loop(); + addr = uv_ip4_addr("127.0.0.1", TEST_PORT); + + r = uv_tcp_init(loop, &tcp_server); + ASSERT(r == 0); + + r = uv_tcp_bind(&tcp_server, addr); + ASSERT(r == 0); + + r = uv_listen((uv_stream_t*)&tcp_server, 128, connection_cb); + ASSERT(r == 0); + + r = uv_run(loop); + ASSERT(0 && "Blackhole server dropped out of event loop."); + + return 0; +} diff --git a/src/rt/libuv/test/echo-server.c b/src/rt/libuv/test/echo-server.c index 453ada66d24..8b1754410cd 100644 --- a/src/rt/libuv/test/echo-server.c +++ b/src/rt/libuv/test/echo-server.c @@ -151,7 +151,7 @@ static void on_connection(uv_stream_t* server, int status) { case PIPE: stream = malloc(sizeof(uv_pipe_t)); ASSERT(stream != NULL); - r = uv_pipe_init(loop, (uv_pipe_t*)stream); + r = uv_pipe_init(loop, (uv_pipe_t*)stream, 0); ASSERT(r == 0); break; @@ -248,7 +248,7 @@ static int pipe_echo_start(char* pipeName) { server = (uv_handle_t*)&pipeServer; serverType = PIPE; - r = uv_pipe_init(loop, &pipeServer); + r = uv_pipe_init(loop, &pipeServer, 0); if (r) { fprintf(stderr, "uv_pipe_init: %s\n", uv_strerror(uv_last_error(loop))); diff --git a/src/rt/libuv/test/fixtures/empty_file b/src/rt/libuv/test/fixtures/empty_file new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/src/rt/libuv/test/fixtures/empty_file diff --git a/src/rt/libuv/test/run-tests.c b/src/rt/libuv/test/run-tests.c index a187869110a..7fb48d14b68 100644 --- a/src/rt/libuv/test/run-tests.c +++ b/src/rt/libuv/test/run-tests.c @@ -22,6 +22,7 @@ #include <stdio.h> #include <string.h> +#include "uv.h" #include "runner.h" #include "task.h" @@ -48,12 +49,216 @@ int main(int argc, char **argv) { } +static uv_pipe_t channel; +static uv_tcp_t tcp_server; +static uv_write_t conn_notify_req; +static int close_cb_called; +static int connection_accepted; + +static uv_pipe_t stdin_pipe; +static uv_pipe_t stdout_pipe; +static int on_pipe_read_called; +static int after_write_called; + + +static void close_cb(uv_handle_t* handle) { + close_cb_called++; +} + + +static void close_conn_cb(uv_handle_t* handle) { + free(handle); + close_cb_called++; +} + + +void conn_notify_write_cb(uv_write_t* req, int status) { + uv_close((uv_handle_t*)&tcp_server, close_cb); + uv_close((uv_handle_t*)&channel, close_cb); +} + + +static void ipc_on_connection(uv_stream_t* server, int status) { + int r; + uv_buf_t buf; + uv_tcp_t* conn; + + if (!connection_accepted) { + /* + * Accept the connection and close it. Also let the other + * side know. + */ + ASSERT(status == 0); + ASSERT((uv_stream_t*)&tcp_server == server); + + conn = malloc(sizeof(*conn)); + ASSERT(conn); + + r = uv_tcp_init(server->loop, conn); + ASSERT(r == 0); + + r = uv_accept(server, (uv_stream_t*)conn); + ASSERT(r == 0); + + uv_close((uv_handle_t*)conn, close_conn_cb); + + buf = uv_buf_init("accepted_connection\n", 20); + r = uv_write2(&conn_notify_req, (uv_stream_t*)&channel, &buf, 1, + NULL, conn_notify_write_cb); + ASSERT(r == 0); + + connection_accepted = 1; + } +} + + +static int ipc_helper() { + /* + * This is launched from test-ipc.c. stdin is a duplex channel that we + * over which a handle will be transmitted. In this initial version only + * data is transfered over the channel. XXX edit this comment after handle + * transfer is added. + */ + + uv_write_t write_req; + int r; + uv_buf_t buf; + + r = uv_pipe_init(uv_default_loop(), &channel, 1); + ASSERT(r == 0); + + uv_pipe_open(&channel, 0); + + r = uv_tcp_init(uv_default_loop(), &tcp_server); + ASSERT(r == 0); + + r = uv_tcp_bind(&tcp_server, uv_ip4_addr("0.0.0.0", TEST_PORT)); + ASSERT(r == 0); + + r = uv_listen((uv_stream_t*)&tcp_server, 12, ipc_on_connection); + ASSERT(r == 0); + + buf = uv_buf_init("hello\n", 6); + r = uv_write2(&write_req, (uv_stream_t*)&channel, &buf, 1, + (uv_stream_t*)&tcp_server, NULL); + ASSERT(r == 0); + + r = uv_run(uv_default_loop()); + ASSERT(r == 0); + + ASSERT(connection_accepted == 1); + ASSERT(close_cb_called == 3); + + return 0; +} + + +void on_pipe_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { + ASSERT(nread > 0); + ASSERT(memcmp("hello world\n", buf.base, nread) == 0); + on_pipe_read_called++; + + free(buf.base); + + uv_close((uv_handle_t*)&stdin_pipe, close_cb); + uv_close((uv_handle_t*)&stdout_pipe, close_cb); +} + + +static uv_buf_t on_pipe_read_alloc(uv_handle_t* handle, + size_t suggested_size) { + uv_buf_t buf; + buf.base = (char*)malloc(suggested_size); + buf.len = suggested_size; + return buf; +} + + +static void after_pipe_write(uv_write_t* req, int status) { + ASSERT(status == 0); + after_write_called++; +} + + +static int stdio_over_pipes_helper() { + /* Write several buffers to test that the write order is preserved. */ + char* buffers[] = { + "he", + "ll", + "o ", + "wo", + "rl", + "d", + "\n" + }; + + uv_write_t write_req[COUNTOF(buffers)]; + uv_buf_t buf[COUNTOF(buffers)]; + int r, i; + uv_loop_t* loop = uv_default_loop(); + + ASSERT(UV_NAMED_PIPE == uv_guess_handle(0)); + ASSERT(UV_NAMED_PIPE == uv_guess_handle(1)); + + r = uv_pipe_init(loop, &stdin_pipe, 0); + ASSERT(r == 0); + r = uv_pipe_init(loop, &stdout_pipe, 0); + ASSERT(r == 0); + + uv_pipe_open(&stdin_pipe, 0); + uv_pipe_open(&stdout_pipe, 1); + + /* Unref both stdio handles to make sure that all writes complete. */ + uv_unref(loop); + uv_unref(loop); + + for (i = 0; i < COUNTOF(buffers); i++) { + buf[i] = uv_buf_init((char*)buffers[i], strlen(buffers[i])); + } + + for (i = 0; i < COUNTOF(buffers); i++) { + r = uv_write(&write_req[i], (uv_stream_t*)&stdout_pipe, &buf[i], 1, + after_pipe_write); + ASSERT(r == 0); + } + + uv_run(loop); + + ASSERT(after_write_called == 7); + ASSERT(on_pipe_read_called == 0); + ASSERT(close_cb_called == 0); + + uv_ref(loop); + uv_ref(loop); + + r = uv_read_start((uv_stream_t*)&stdin_pipe, on_pipe_read_alloc, + on_pipe_read); + ASSERT(r == 0); + + uv_run(loop); + + ASSERT(after_write_called == 7); + ASSERT(on_pipe_read_called == 1); + ASSERT(close_cb_called == 2); + + return 0; +} + + static int maybe_run_test(int argc, char **argv) { if (strcmp(argv[1], "--list") == 0) { print_tests(stdout); return 0; } + if (strcmp(argv[1], "ipc_helper") == 0) { + return ipc_helper(); + } + + if (strcmp(argv[1], "stdio_over_pipes_helper") == 0) { + return stdio_over_pipes_helper(); + } + if (strcmp(argv[1], "spawn_helper1") == 0) { return 1; } diff --git a/src/rt/libuv/test/task.h b/src/rt/libuv/test/task.h index 76c6903311e..e28b393bb72 100644 --- a/src/rt/libuv/test/task.h +++ b/src/rt/libuv/test/task.h @@ -38,6 +38,8 @@ # define TEST_PIPENAME_2 "/tmp/uv-test-sock2" #endif +#define COUNTOF(a) (sizeof(a) / sizeof(a[0])) + typedef enum { TCP = 0, PIPE diff --git a/src/rt/libuv/src/win/stdio.c b/src/rt/libuv/test/test-error.c index 30fe2a1d6e1..8d6f2355273 100644 --- a/src/rt/libuv/src/win/stdio.c +++ b/src/rt/libuv/test/test-error.c @@ -19,57 +19,41 @@ * IN THE SOFTWARE. */ -#include <assert.h> -#include <string.h> - #include "uv.h" -#include "../uv-common.h" -#include "internal.h" - - -static uv_pipe_t* uv_make_pipe_for_std_handle(uv_loop_t* loop, HANDLE handle) { - uv_pipe_t* pipe = NULL; +#include "task.h" - pipe = (uv_pipe_t*)malloc(sizeof(uv_pipe_t)); - if (!pipe) { - uv_fatal_error(ERROR_OUTOFMEMORY, "malloc"); - } - - if (uv_pipe_init_with_handle(loop, pipe, handle)) { - free(pipe); - return NULL; - } +#include <stdio.h> +#include <stdlib.h> +#include <string.h> - pipe->flags |= UV_HANDLE_UV_ALLOCED; - return pipe; -} +/* + * Synthetic errors (errors that originate from within libuv, not the system) + * should produce sensible error messages when run through uv_strerror(). + * + * See https://github.com/joyent/libuv/issues/210 + */ +TEST_IMPL(error_message) { + uv_err_t e; -uv_stream_t* uv_std_handle(uv_loop_t* loop, uv_std_type type) { - HANDLE handle; + /* Cop out. Can't do proper checks on systems with + * i18n-ized error messages... + */ + e.code = 0, e.sys_errno_ = 0; - switch (type) { - case UV_STDIN: - handle = GetStdHandle(STD_INPUT_HANDLE); - if (handle == INVALID_HANDLE_VALUE) { - return NULL; - } + if (strcmp(uv_strerror(e), "Success") != 0) { + printf("i18n error messages detected, skipping test.\n"); + return 0; + } - /* Assume only named pipes for now. */ - return (uv_stream_t*)uv_make_pipe_for_std_handle(loop, handle); - break; + e.code = UV_EINVAL, e.sys_errno_ = 0; + ASSERT(strstr(uv_strerror(e), "Success") == NULL); - case UV_STDOUT: - return NULL; - break; + e.code = UV_UNKNOWN, e.sys_errno_ = 0; + ASSERT(strcmp(uv_strerror(e), "Unknown error") == 0); - case UV_STDERR: - return NULL; - break; + e.code = 1337, e.sys_errno_ = 0; + ASSERT(strcmp(uv_strerror(e), "Unknown error") == 0); - default: - assert(0); - uv_set_error(loop, UV_EINVAL, 0); - return NULL; - } + return 0; } diff --git a/src/rt/libuv/test/test-fs-event.c b/src/rt/libuv/test/test-fs-event.c index d249ec6692c..724000db153 100644 --- a/src/rt/libuv/test/test-fs-event.c +++ b/src/rt/libuv/test/test-fs-event.c @@ -25,11 +25,12 @@ #include <string.h> #include <fcntl.h> -uv_fs_event_t fs_event; -uv_timer_t timer; -int timer_cb_called; -int close_cb_called; -int fs_event_cb_called; +static uv_fs_event_t fs_event; +static uv_timer_t timer; +static int timer_cb_called; +static int close_cb_called; +static int fs_event_cb_called; +static int timer_cb_touch_called; static void create_dir(uv_loop_t* loop, const char* name) { int r; @@ -84,7 +85,7 @@ static void fs_event_cb_dir(uv_fs_event_t* handle, const char* filename, ASSERT(handle == &fs_event); ASSERT(status == 0); ASSERT(events == UV_RENAME); - ASSERT(strcmp(filename, "file1") == 0); + ASSERT(filename == NULL || strcmp(filename, "file1") == 0); uv_close((uv_handle_t*)handle, close_cb); } @@ -94,7 +95,7 @@ static void fs_event_cb_file(uv_fs_event_t* handle, const char* filename, ASSERT(handle == &fs_event); ASSERT(status == 0); ASSERT(events == UV_CHANGE); - ASSERT(strcmp(filename, "file2") == 0); + ASSERT(filename == NULL || strcmp(filename, "file2") == 0); uv_close((uv_handle_t*)handle, close_cb); } @@ -104,7 +105,7 @@ static void fs_event_cb_file_current_dir(uv_fs_event_t* handle, ASSERT(handle == &fs_event); ASSERT(status == 0); ASSERT(events == UV_CHANGE); - ASSERT(strcmp(filename, "watch_file") == 0); + ASSERT(filename == NULL || strcmp(filename, "watch_file") == 0); uv_close((uv_handle_t*)handle, close_cb); } @@ -125,6 +126,13 @@ static void timer_cb_file(uv_timer_t* handle, int status) { } } +static void timer_cb_touch(uv_timer_t* timer, int status) { + ASSERT(status == 0); + uv_close((uv_handle_t*)timer, NULL); + touch_file(timer->loop, "watch_file"); + timer_cb_touch_called++; +} + TEST_IMPL(fs_event_watch_dir) { uv_fs_t fs_req; uv_loop_t* loop = uv_default_loop(); @@ -192,10 +200,13 @@ TEST_IMPL(fs_event_watch_file) { } TEST_IMPL(fs_event_watch_file_current_dir) { + uv_timer_t timer; + uv_loop_t* loop; uv_fs_t fs_req; - uv_loop_t* loop = uv_default_loop(); int r; + loop = uv_default_loop(); + /* Setup */ uv_fs_unlink(loop, &fs_req, "watch_file", NULL); create_file(loop, "watch_file"); @@ -203,11 +214,20 @@ TEST_IMPL(fs_event_watch_file_current_dir) { r = uv_fs_event_init(loop, &fs_event, "watch_file", fs_event_cb_file_current_dir); ASSERT(r != -1); - - touch_file(loop, "watch_file"); + + r = uv_timer_init(loop, &timer); + ASSERT(r == 0); + + r = uv_timer_start(&timer, timer_cb_touch, 1, 0); + ASSERT(r == 0); + + ASSERT(timer_cb_touch_called == 0); + ASSERT(fs_event_cb_called == 0); + ASSERT(close_cb_called == 0); uv_run(loop); + ASSERT(timer_cb_touch_called == 1); ASSERT(fs_event_cb_called == 1); ASSERT(close_cb_called == 1); diff --git a/src/rt/libuv/test/test-fs.c b/src/rt/libuv/test/test-fs.c index fbe0396bf84..a8065192fa4 100644 --- a/src/rt/libuv/test/test-fs.c +++ b/src/rt/libuv/test/test-fs.c @@ -155,7 +155,7 @@ static void fchmod_cb(uv_fs_t* req) { ASSERT(req->result == 0); fchmod_cb_count++; uv_fs_req_cleanup(req); - check_permission("test_file", (int)req->data); + check_permission("test_file", *(int*)req->data); } @@ -164,7 +164,7 @@ static void chmod_cb(uv_fs_t* req) { ASSERT(req->result == 0); chmod_cb_count++; uv_fs_req_cleanup(req); - check_permission("test_file", (int)req->data); + check_permission("test_file", *(int*)req->data); } @@ -263,6 +263,19 @@ static void open_cb(uv_fs_t* req) { } +static void open_cb_simple(uv_fs_t* req) { + ASSERT(req->fs_type == UV_FS_OPEN); + if (req->result < 0) { + /* TODO get error with uv_last_error() */ + fprintf(stderr, "async open error: %d\n", req->errorno); + ASSERT(0); + } + open_cb_count++; + ASSERT(req->path); + uv_fs_req_cleanup(req); +} + + static void fsync_cb(uv_fs_t* req) { int r; ASSERT(req == &fsync_req); @@ -354,6 +367,27 @@ static void readdir_cb(uv_fs_t* req) { } +static void empty_readdir_cb(uv_fs_t* req) { + ASSERT(req == &readdir_req); + ASSERT(req->fs_type == UV_FS_READDIR); + ASSERT(req->result == 0); + ASSERT(req->ptr == NULL); + uv_fs_req_cleanup(req); + readdir_cb_count++; +} + + +static void file_readdir_cb(uv_fs_t* req) { + ASSERT(req == &readdir_req); + ASSERT(req->fs_type == UV_FS_READDIR); + ASSERT(req->result == -1); + ASSERT(req->ptr == NULL); + ASSERT(uv_last_error(req->loop).code == UV_ENOTDIR); + uv_fs_req_cleanup(req); + readdir_cb_count++; +} + + static void stat_cb(uv_fs_t* req) { ASSERT(req == &stat_req); ASSERT(req->fs_type == UV_FS_STAT || req->fs_type == UV_FS_LSTAT); @@ -869,7 +903,10 @@ TEST_IMPL(fs_chmod) { #ifndef _WIN32 /* async chmod */ - req.data = (void*)0200; + { + static int mode = 0200; + req.data = &mode; + } r = uv_fs_chmod(loop, &req, "test_file", 0200, chmod_cb); ASSERT(r == 0); uv_run(loop); @@ -878,14 +915,20 @@ TEST_IMPL(fs_chmod) { #endif /* async chmod */ - req.data = (void*)0400; + { + static int mode = 0400; + req.data = &mode; + } r = uv_fs_chmod(loop, &req, "test_file", 0400, chmod_cb); ASSERT(r == 0); uv_run(loop); ASSERT(chmod_cb_count == 1); /* async fchmod */ - req.data = (void*)0600; + { + static int mode = 0600; + req.data = &mode; + } r = uv_fs_fchmod(loop, &req, file, 0600, fchmod_cb); ASSERT(r == 0); uv_run(loop); @@ -1077,7 +1120,7 @@ TEST_IMPL(fs_symlink) { r = uv_fs_symlink(loop, &req, "test_file", "test_file_symlink", 0, NULL); #ifdef _WIN32 if (r == -1) { - if (req.errorno == ENOSYS) { + if (uv_last_error(loop).code == UV_ENOTSUP) { /* * Windows doesn't support symlinks on older versions. * We just pass the test and bail out early if we get ENOTSUP. @@ -1163,13 +1206,21 @@ TEST_IMPL(fs_symlink) { TEST_IMPL(fs_utime) { utime_check_t checkme; - const char* path = "."; + const char* path = "test_file"; double atime; double mtime; uv_fs_t req; int r; + /* Setup. */ loop = uv_default_loop(); + unlink(path); + r = uv_fs_open(loop, &req, path, O_RDWR | O_CREAT, + S_IWRITE | S_IREAD, NULL); + ASSERT(r != -1); + ASSERT(req.result != -1); + uv_fs_req_cleanup(&req); + close(r); atime = mtime = 400497753; /* 1982-09-10 11:22:33 */ @@ -1196,24 +1247,35 @@ TEST_IMPL(fs_utime) { uv_run(loop); ASSERT(utime_cb_count == 1); + /* Cleanup. */ + unlink(path); + return 0; } TEST_IMPL(fs_futime) { utime_check_t checkme; - const char* path = "."; + const char* path = "test_file"; double atime; double mtime; uv_file file; uv_fs_t req; int r; + /* Setup. */ loop = uv_default_loop(); + unlink(path); + r = uv_fs_open(loop, &req, path, O_RDWR | O_CREAT, + S_IWRITE | S_IREAD, NULL); + ASSERT(r != -1); + ASSERT(req.result != -1); + uv_fs_req_cleanup(&req); + close(r); atime = mtime = 400497753; /* 1982-09-10 11:22:33 */ - r = uv_fs_open(loop, &req, path, O_RDONLY, 0, NULL); + r = uv_fs_open(loop, &req, path, O_RDWR, 0, NULL); ASSERT(r != -1); ASSERT(req.result != -1); file = req.result; /* FIXME probably not how it's supposed to be used */ @@ -1243,5 +1305,106 @@ TEST_IMPL(fs_futime) { uv_run(loop); ASSERT(futime_cb_count == 1); + /* Cleanup. */ + unlink(path); + + return 0; +} + + +TEST_IMPL(fs_stat_missing_path) { + uv_fs_t req; + int r; + + loop = uv_default_loop(); + + r = uv_fs_stat(loop, &req, "non_existent_file", NULL); + ASSERT(r == -1); + ASSERT(req.result == -1); + ASSERT(uv_last_error(loop).code == UV_ENOENT); + uv_fs_req_cleanup(&req); + + return 0; +} + + +TEST_IMPL(fs_readdir_empty_dir) { + const char* path; + uv_fs_t req; + int r; + + path = "./empty_dir/"; + loop = uv_default_loop(); + + uv_fs_mkdir(loop, &req, path, 0777, NULL); + uv_fs_req_cleanup(&req); + + r = uv_fs_readdir(loop, &req, path, 0, NULL); + ASSERT(r == 0); + ASSERT(req.result == 0); + ASSERT(req.ptr == NULL); + uv_fs_req_cleanup(&req); + + r = uv_fs_readdir(loop, &readdir_req, path, 0, empty_readdir_cb); + ASSERT(r == 0); + + ASSERT(readdir_cb_count == 0); + uv_run(loop); + ASSERT(readdir_cb_count == 1); + + uv_fs_rmdir(loop, &req, path, NULL); + uv_fs_req_cleanup(&req); + + return 0; +} + + +TEST_IMPL(fs_readdir_file) { + const char* path; + int r; + + path = "test/fixtures/empty_file"; + loop = uv_default_loop(); + + r = uv_fs_readdir(loop, &readdir_req, path, 0, NULL); + ASSERT(r == -1); + ASSERT(uv_last_error(loop).code == UV_ENOTDIR); + + r = uv_fs_readdir(loop, &readdir_req, path, 0, file_readdir_cb); + ASSERT(r == 0); + + ASSERT(readdir_cb_count == 0); + uv_run(loop); + ASSERT(readdir_cb_count == 1); + + return 0; +} + + +TEST_IMPL(fs_open_dir) { + const char* path; + uv_fs_t req; + int r, file; + + path = "."; + loop = uv_default_loop(); + + r = uv_fs_open(loop, &req, path, O_RDONLY, 0, NULL); + ASSERT(r != -1); + ASSERT(req.result != -1); + ASSERT(req.ptr == NULL); + file = r; + uv_fs_req_cleanup(&req); + + r = uv_fs_close(loop, &req, file, NULL); + ASSERT(r == 0); + + r = uv_fs_open(loop, &req, path, O_RDONLY, 0, open_cb_simple); + ASSERT(r == 0); + + ASSERT(open_cb_count == 0); + uv_run(loop); + ASSERT(open_cb_count == 1); + return 0; } diff --git a/src/rt/libuv/include/uv-private/uv-linux.h b/src/rt/libuv/test/test-get-loadavg.c index 7f7b05932d9..7465e18b91e 100644 --- a/src/rt/libuv/include/uv-private/uv-linux.h +++ b/src/rt/libuv/test/test-get-loadavg.c @@ -19,11 +19,18 @@ * IN THE SOFTWARE. */ -#ifndef UV_LINUX_H -#define UV_LINUX_H +#include "uv.h" +#include "task.h" -#define UV_FS_EVENT_PRIVATE_FIELDS \ - ev_io read_watcher; \ - uv_fs_event_cb cb; \ +TEST_IMPL(get_loadavg) { -#endif /* UV_LINUX_H */ + double avg[3]; + uv_loadavg(avg); + + ASSERT(avg != NULL); + ASSERT(avg[0] >= 0); + ASSERT(avg[1] >= 0); + ASSERT(avg[2] >= 0); + + return 0; +} diff --git a/src/rt/libuv/test/test-get-memory.c b/src/rt/libuv/test/test-get-memory.c new file mode 100644 index 00000000000..00281af6324 --- /dev/null +++ b/src/rt/libuv/test/test-get-memory.c @@ -0,0 +1,36 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +TEST_IMPL(get_memory) { + uint64_t free_mem = uv_get_free_memory(); + uint64_t total_mem = uv_get_total_memory(); + + printf("free_mem=%llu, total_mem=%llu\n", free_mem, total_mem); + + ASSERT(free_mem > 0); + ASSERT(total_mem > 0); + ASSERT(total_mem > free_mem); + + return 0; +} diff --git a/src/rt/libuv/test/test-ipc.c b/src/rt/libuv/test/test-ipc.c new file mode 100644 index 00000000000..5119b59bf5c --- /dev/null +++ b/src/rt/libuv/test/test-ipc.c @@ -0,0 +1,222 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +#include <stdio.h> +#include <string.h> + +static char exepath[1024]; +static size_t exepath_size = 1024; +static char* args[3]; +static uv_pipe_t channel; +static uv_tcp_t tcp_server; + +static int exit_cb_called; +static int read2_cb_called; +static int local_conn_accepted; +static int remote_conn_accepted; +static int tcp_server_listening; + +static uv_write_t write_req; + +typedef struct { + uv_connect_t conn_req; + uv_tcp_t conn; +} tcp_conn; + +#define CONN_COUNT 100 + + +static void close_server_conn_cb(uv_handle_t* handle) { + free(handle); +} + + +static void ipc_on_connection(uv_stream_t* server, int status) { + uv_tcp_t* conn; + int r; + + if (!local_conn_accepted) { + /* Accept the connection and close it. Also and close the server. */ + ASSERT(status == 0); + ASSERT((uv_stream_t*)&tcp_server == server); + + conn = malloc(sizeof(*conn)); + ASSERT(conn); + r = uv_tcp_init(server->loop, conn); + ASSERT(r == 0); + + r = uv_accept(server, (uv_stream_t*)conn); + ASSERT(r == 0); + + uv_close((uv_handle_t*)conn, close_server_conn_cb); + uv_close((uv_handle_t*)server, NULL); + local_conn_accepted = 1; + } +} + + +static void exit_cb(uv_process_t* process, int exit_status, int term_signal) { + printf("exit_cb\n"); + exit_cb_called++; + ASSERT(exit_status == 0); + uv_close((uv_handle_t*)process, NULL); +} + + +static uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { + return uv_buf_init(malloc(suggested_size), suggested_size); +} + + +static void close_client_conn_cb(uv_handle_t* handle) { + tcp_conn* p = (tcp_conn*)handle->data; + free(p); +} + + +static void connect_cb(uv_connect_t* req, int status) { + uv_close((uv_handle_t*)req->handle, close_client_conn_cb); +} + + +static void make_many_connections() { + tcp_conn* conn; + struct sockaddr_in addr; + int r, i; + + for (i = 0; i < CONN_COUNT; i++) { + conn = malloc(sizeof(*conn)); + ASSERT(conn); + + r = uv_tcp_init(uv_default_loop(), &conn->conn); + ASSERT(r == 0); + + addr = uv_ip4_addr("127.0.0.1", TEST_PORT); + + r = uv_tcp_connect(&conn->conn_req, (uv_tcp_t*)&conn->conn, addr, connect_cb); + ASSERT(r == 0); + + conn->conn.data = conn; + } +} + + +static void on_read(uv_pipe_t* pipe, ssize_t nread, uv_buf_t buf, + uv_handle_type pending) { + int r; + uv_buf_t outbuf; + uv_err_t err; + + if (nread == 0) { + /* Everything OK, but nothing read. */ + free(buf.base); + return; + } + + if (nread < 0) { + err = uv_last_error(pipe->loop); + if (err.code == UV_EOF) { + free(buf.base); + return; + } + + printf("error recving on channel: %s\n", uv_strerror(err)); + abort(); + } + + fprintf(stderr, "got %d bytes\n", (int)nread); + + if (!tcp_server_listening) { + ASSERT(nread > 0 && buf.base && pending != UV_UNKNOWN_HANDLE); + read2_cb_called++; + + /* Accept the pending TCP server, and start listening on it. */ + ASSERT(pending == UV_TCP); + r = uv_tcp_init(uv_default_loop(), &tcp_server); + ASSERT(r == 0); + + r = uv_accept((uv_stream_t*)pipe, (uv_stream_t*)&tcp_server); + ASSERT(r == 0); + + r = uv_listen((uv_stream_t*)&tcp_server, 12, ipc_on_connection); + ASSERT(r == 0); + + tcp_server_listening = 1; + + /* Make sure that the expected data is correctly multiplexed. */ + ASSERT(memcmp("hello\n", buf.base, nread) == 0); + + outbuf = uv_buf_init("world\n", 6); + r = uv_write(&write_req, (uv_stream_t*)pipe, &outbuf, 1, NULL); + ASSERT(r == 0); + + /* Create a bunch of connections to get both servers to accept. */ + make_many_connections(); + } else if (memcmp("accepted_connection\n", buf.base, nread) == 0) { + /* Remote server has accepted a connection. Close the channel. */ + ASSERT(pending == UV_UNKNOWN_HANDLE); + remote_conn_accepted = 1; + uv_close((uv_handle_t*)&channel, NULL); + } + + free(buf.base); +} + + +TEST_IMPL(ipc) { + int r; + uv_process_options_t options; + uv_process_t process; + + r = uv_pipe_init(uv_default_loop(), &channel, 1); + ASSERT(r == 0); + ASSERT(channel.ipc); + + memset(&options, 0, sizeof(uv_process_options_t)); + + r = uv_exepath(exepath, &exepath_size); + ASSERT(r == 0); + exepath[exepath_size] = '\0'; + args[0] = exepath; + args[1] = "ipc_helper"; + args[2] = NULL; + options.file = exepath; + options.args = args; + options.exit_cb = exit_cb; + options.stdin_stream = &channel; + + r = uv_spawn(uv_default_loop(), &process, options); + ASSERT(r == 0); + + uv_read2_start((uv_stream_t*)&channel, on_alloc, on_read); + + r = uv_run(uv_default_loop()); + ASSERT(r == 0); + + ASSERT(local_conn_accepted == 1); + ASSERT(remote_conn_accepted == 1); + ASSERT(read2_cb_called == 1); + ASSERT(exit_cb_called == 1); + return 0; +} diff --git a/src/rt/libuv/test/test-list.h b/src/rt/libuv/test/test-list.h index bf376e39141..19c99913267 100644 --- a/src/rt/libuv/test/test-list.h +++ b/src/rt/libuv/test/test-list.h @@ -20,8 +20,12 @@ */ TEST_DECLARE (tty) +TEST_DECLARE (stdio_over_pipes) +TEST_DECLARE (ipc) TEST_DECLARE (tcp_ping_pong) TEST_DECLARE (tcp_ping_pong_v6) +TEST_DECLARE (tcp_ref) +TEST_DECLARE (tcp_ref2) TEST_DECLARE (pipe_ping_pong) TEST_DECLARE (delayed_accept) TEST_DECLARE (tcp_writealot) @@ -33,6 +37,7 @@ TEST_DECLARE (tcp_bind_error_inval) TEST_DECLARE (tcp_bind_localhost_ok) TEST_DECLARE (tcp_listen_without_bind) TEST_DECLARE (tcp_close) +TEST_DECLARE (tcp_flags) TEST_DECLARE (tcp_write_error) TEST_DECLARE (tcp_bind6_error_addrinuse) TEST_DECLARE (tcp_bind6_error_addrnotavail) @@ -40,6 +45,7 @@ TEST_DECLARE (tcp_bind6_error_fault) TEST_DECLARE (tcp_bind6_error_inval) TEST_DECLARE (tcp_bind6_localhost_ok) TEST_DECLARE (udp_send_and_recv) +TEST_DECLARE (udp_multicast_join) TEST_DECLARE (udp_dgram_too_big) TEST_DECLARE (udp_dual_stack) TEST_DECLARE (udp_ipv6_only) @@ -51,18 +57,23 @@ TEST_DECLARE (connection_fail) TEST_DECLARE (connection_fail_doesnt_auto_close) TEST_DECLARE (shutdown_eof) TEST_DECLARE (callback_stack) +TEST_DECLARE (error_message) TEST_DECLARE (timer) +TEST_DECLARE (timer_ref) +TEST_DECLARE (timer_ref2) TEST_DECLARE (timer_again) TEST_DECLARE (idle_starvation) TEST_DECLARE (loop_handles) TEST_DECLARE (ref) TEST_DECLARE (idle_ref) +TEST_DECLARE (get_loadavg) TEST_DECLARE (async_ref) TEST_DECLARE (prepare_ref) TEST_DECLARE (check_ref) TEST_DECLARE (unref_in_prepare_cb) TEST_DECLARE (async) TEST_DECLARE (get_currentexe) +TEST_DECLARE (get_memory) TEST_DECLARE (hrtime) TEST_DECLARE (getaddrinfo_basic) TEST_DECLARE (getaddrinfo_concurrent) @@ -75,6 +86,7 @@ TEST_DECLARE (spawn_exit_code) TEST_DECLARE (spawn_stdout) TEST_DECLARE (spawn_stdin) TEST_DECLARE (spawn_and_kill) +TEST_DECLARE (spawn_and_ping) TEST_DECLARE (fs_file_noent) TEST_DECLARE (fs_file_async) TEST_DECLARE (fs_file_sync) @@ -87,9 +99,13 @@ TEST_DECLARE (fs_link) TEST_DECLARE (fs_symlink) TEST_DECLARE (fs_utime) TEST_DECLARE (fs_futime) +TEST_DECLARE (fs_stat_missing_path) TEST_DECLARE (fs_event_watch_dir) TEST_DECLARE (fs_event_watch_file) TEST_DECLARE (fs_event_watch_file_current_dir) +TEST_DECLARE (fs_readdir_empty_dir) +TEST_DECLARE (fs_readdir_file) +TEST_DECLARE (fs_open_dir) TEST_DECLARE (threadpool_queue_work_simple) #ifdef _WIN32 TEST_DECLARE (spawn_detect_pipe_name_collisions_on_windows) @@ -103,6 +119,14 @@ HELPER_DECLARE (pipe_echo_server) TASK_LIST_START TEST_ENTRY (tty) + TEST_ENTRY (stdio_over_pipes) + TEST_ENTRY (ipc) + + + TEST_ENTRY (tcp_ref) + + TEST_ENTRY (tcp_ref2) + TEST_HELPER (tcp_ref2, tcp4_echo_server) TEST_ENTRY (tcp_ping_pong) TEST_HELPER (tcp_ping_pong, tcp4_echo_server) @@ -126,6 +150,7 @@ TASK_LIST_START TEST_ENTRY (tcp_bind_localhost_ok) TEST_ENTRY (tcp_listen_without_bind) TEST_ENTRY (tcp_close) + TEST_ENTRY (tcp_flags) TEST_ENTRY (tcp_write_error) TEST_ENTRY (tcp_bind6_error_addrinuse) @@ -138,6 +163,7 @@ TASK_LIST_START TEST_ENTRY (udp_dgram_too_big) TEST_ENTRY (udp_dual_stack) TEST_ENTRY (udp_ipv6_only) + TEST_ENTRY (udp_multicast_join) TEST_ENTRY (pipe_bind_error_addrinuse) TEST_ENTRY (pipe_bind_error_addrnotavail) @@ -153,7 +179,11 @@ TASK_LIST_START TEST_ENTRY (callback_stack) TEST_HELPER (callback_stack, tcp4_echo_server) + TEST_ENTRY (error_message) + TEST_ENTRY (timer) + TEST_ENTRY (timer_ref) + TEST_ENTRY (timer_ref2) TEST_ENTRY (timer_again) @@ -172,6 +202,10 @@ TASK_LIST_START TEST_ENTRY (get_currentexe) + TEST_ENTRY (get_memory) + + TEST_ENTRY (get_loadavg) + TEST_ENTRY (hrtime) TEST_ENTRY (getaddrinfo_basic) @@ -187,6 +221,7 @@ TASK_LIST_START TEST_ENTRY (spawn_stdout) TEST_ENTRY (spawn_stdin) TEST_ENTRY (spawn_and_kill) + TEST_ENTRY (spawn_and_ping) #ifdef _WIN32 TEST_ENTRY (spawn_detect_pipe_name_collisions_on_windows) TEST_ENTRY (argument_escaping) @@ -204,10 +239,13 @@ TASK_LIST_START TEST_ENTRY (fs_utime) TEST_ENTRY (fs_futime) TEST_ENTRY (fs_symlink) + TEST_ENTRY (fs_stat_missing_path) TEST_ENTRY (fs_event_watch_dir) TEST_ENTRY (fs_event_watch_file) TEST_ENTRY (fs_event_watch_file_current_dir) - + TEST_ENTRY (fs_readdir_empty_dir) + TEST_ENTRY (fs_readdir_file) + TEST_ENTRY (fs_open_dir) TEST_ENTRY (threadpool_queue_work_simple) #if 0 diff --git a/src/rt/libuv/test/test-ping-pong.c b/src/rt/libuv/test/test-ping-pong.c index f452fce50b5..0e59166c48d 100644 --- a/src/rt/libuv/test/test-ping-pong.c +++ b/src/rt/libuv/test/test-ping-pong.c @@ -204,7 +204,7 @@ static void pipe_pinger_new() { pinger->pongs = 0; /* Try to connec to the server and do NUM_PINGS ping-pongs. */ - r = uv_pipe_init(uv_default_loop(), &pinger->stream.pipe); + r = uv_pipe_init(uv_default_loop(), &pinger->stream.pipe, 0); pinger->stream.pipe.data = pinger; ASSERT(!r); diff --git a/src/rt/libuv/test/test-pipe-bind-error.c b/src/rt/libuv/test/test-pipe-bind-error.c index 832ce023153..3443f19dc87 100644 --- a/src/rt/libuv/test/test-pipe-bind-error.c +++ b/src/rt/libuv/test/test-pipe-bind-error.c @@ -45,12 +45,12 @@ TEST_IMPL(pipe_bind_error_addrinuse) { uv_pipe_t server1, server2; int r; - r = uv_pipe_init(uv_default_loop(), &server1); + r = uv_pipe_init(uv_default_loop(), &server1, 0); ASSERT(r == 0); r = uv_pipe_bind(&server1, TEST_PIPENAME); ASSERT(r == 0); - r = uv_pipe_init(uv_default_loop(), &server2); + r = uv_pipe_init(uv_default_loop(), &server2, 0); ASSERT(r == 0); r = uv_pipe_bind(&server2, TEST_PIPENAME); ASSERT(r == -1); @@ -79,7 +79,7 @@ TEST_IMPL(pipe_bind_error_addrnotavail) { uv_pipe_t server; int r; - r = uv_pipe_init(uv_default_loop(), &server); + r = uv_pipe_init(uv_default_loop(), &server, 0); ASSERT(r == 0); r = uv_pipe_bind(&server, BAD_PIPENAME); @@ -100,7 +100,7 @@ TEST_IMPL(pipe_bind_error_inval) { uv_pipe_t server; int r; - r = uv_pipe_init(uv_default_loop(), &server); + r = uv_pipe_init(uv_default_loop(), &server, 0); ASSERT(r == 0); r = uv_pipe_bind(&server, TEST_PIPENAME); ASSERT(r == 0); @@ -123,7 +123,7 @@ TEST_IMPL(pipe_listen_without_bind) { uv_pipe_t server; int r; - r = uv_pipe_init(uv_default_loop(), &server); + r = uv_pipe_init(uv_default_loop(), &server, 0); ASSERT(r == 0); r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL); ASSERT(r == -1); diff --git a/src/rt/libuv/test/test-spawn.c b/src/rt/libuv/test/test-spawn.c index 653f9ac95d3..e73515858ce 100644 --- a/src/rt/libuv/test/test-spawn.c +++ b/src/rt/libuv/test/test-spawn.c @@ -67,7 +67,7 @@ static void kill_cb(uv_process_t* process, int exit_status, int term_signal) { } -uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { +static uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { uv_buf_t buf; buf.base = output + output_used; buf.len = OUTPUT_SIZE - output_used; @@ -138,7 +138,7 @@ TEST_IMPL(spawn_stdout) { init_process_options("spawn_helper2", exit_cb); - uv_pipe_init(uv_default_loop(), &out); + uv_pipe_init(uv_default_loop(), &out, 0); options.stdout_stream = &out; r = uv_spawn(uv_default_loop(), &process, options); @@ -160,7 +160,7 @@ TEST_IMPL(spawn_stdout) { TEST_IMPL(spawn_stdin) { -int r; + int r; uv_pipe_t out; uv_pipe_t in; uv_write_t write_req; @@ -169,8 +169,8 @@ int r; init_process_options("spawn_helper3", exit_cb); - uv_pipe_init(uv_default_loop(), &out); - uv_pipe_init(uv_default_loop(), &in); + uv_pipe_init(uv_default_loop(), &out, 0); + uv_pipe_init(uv_default_loop(), &in, 0); options.stdout_stream = &out; options.stdin_stream = ∈ @@ -220,6 +220,47 @@ TEST_IMPL(spawn_and_kill) { } +TEST_IMPL(spawn_and_ping) { + uv_write_t write_req; + uv_pipe_t in, out; + uv_buf_t buf; + int r; + + init_process_options("spawn_helper3", exit_cb); + buf = uv_buf_init("TEST", 4); + + uv_pipe_init(uv_default_loop(), &out, 0); + uv_pipe_init(uv_default_loop(), &in, 0); + options.stdout_stream = &out; + options.stdin_stream = ∈ + + r = uv_spawn(uv_default_loop(), &process, options); + ASSERT(r == 0); + + /* Sending signum == 0 should check if the + * child process is still alive, not kill it. + */ + r = uv_process_kill(&process, 0); + ASSERT(r == 0); + + r = uv_write(&write_req, (uv_stream_t*)&in, &buf, 1, write_cb); + ASSERT(r == 0); + + r = uv_read_start((uv_stream_t*)&out, on_alloc, on_read); + ASSERT(r == 0); + + ASSERT(exit_cb_called == 0); + + r = uv_run(uv_default_loop()); + ASSERT(r == 0); + + ASSERT(exit_cb_called == 1); + ASSERT(strcmp(output, "TEST") == 0); + + return 0; +} + + #ifdef _WIN32 TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) { int r; @@ -229,7 +270,7 @@ TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) { init_process_options("spawn_helper2", exit_cb); - uv_pipe_init(uv_default_loop(), &out); + uv_pipe_init(uv_default_loop(), &out, 0); options.stdout_stream = &out; /* Create a pipe that'll cause a collision. */ diff --git a/src/rt/libuv/test/test-stdio-over-pipes.c b/src/rt/libuv/test/test-stdio-over-pipes.c new file mode 100644 index 00000000000..fd96fc2d28a --- /dev/null +++ b/src/rt/libuv/test/test-stdio-over-pipes.c @@ -0,0 +1,154 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + + +static char exepath[1024]; +static size_t exepath_size = 1024; +static char* args[3]; +static uv_process_options_t options; +static int close_cb_called; +static int exit_cb_called; +static int on_read_cb_called; +static int after_write_cb_called; +uv_pipe_t out, in; +static uv_loop_t* loop; +#define OUTPUT_SIZE 1024 +static char output[OUTPUT_SIZE]; +static int output_used; + +typedef struct { + uv_write_t req; + uv_buf_t buf; +} write_req_t; + + +static void close_cb(uv_handle_t* handle) { + printf("close_cb\n"); + close_cb_called++; +} + + +static void exit_cb(uv_process_t* process, int exit_status, int term_signal) { + printf("exit_cb\n"); + exit_cb_called++; + ASSERT(exit_status == 0); + ASSERT(term_signal == 0); + uv_close((uv_handle_t*)process, close_cb); + uv_close((uv_handle_t*)&in, close_cb); + uv_close((uv_handle_t*)&out, close_cb); +} + + +static void init_process_options(char* test, uv_exit_cb exit_cb) { + int r = uv_exepath(exepath, &exepath_size); + ASSERT(r == 0); + exepath[exepath_size] = '\0'; + args[0] = exepath; + args[1] = test; + args[2] = NULL; + options.file = exepath; + options.args = args; + options.exit_cb = exit_cb; +} + + +static uv_buf_t on_alloc(uv_handle_t* handle, size_t suggested_size) { + uv_buf_t buf; + buf.base = output + output_used; + buf.len = OUTPUT_SIZE - output_used; + return buf; +} + + +static void after_write(uv_write_t* req, int status) { + write_req_t* wr; + + if (status) { + uv_err_t err = uv_last_error(loop); + fprintf(stderr, "uv_write error: %s\n", uv_strerror(err)); + ASSERT(0); + } + + wr = (write_req_t*) req; + + /* Free the read/write buffer and the request */ + free(wr); + + after_write_cb_called++; +} + + +static void on_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t buf) { + write_req_t* write_req; + int r; + uv_err_t err = uv_last_error(uv_default_loop()); + + ASSERT(nread > 0 || err.code == UV_EOF); + + if (nread > 0) { + output_used += nread; + if (output_used == 12) { + ASSERT(memcmp("hello world\n", output, 12) == 0); + write_req = (write_req_t*)malloc(sizeof(*write_req)); + write_req->buf = uv_buf_init(output, output_used); + r = uv_write(&write_req->req, (uv_stream_t*)&in, &write_req->buf, 1, after_write); + ASSERT(r == 0); + } + } + + on_read_cb_called++; +} + + +TEST_IMPL(stdio_over_pipes) { + int r; + uv_process_t process; + loop = uv_default_loop(); + + init_process_options("stdio_over_pipes_helper", exit_cb); + + uv_pipe_init(loop, &out, 0); + options.stdout_stream = &out; + uv_pipe_init(loop, &in, 0); + options.stdin_stream = ∈ + + r = uv_spawn(loop, &process, options); + ASSERT(r == 0); + + r = uv_read_start((uv_stream_t*) &out, on_alloc, on_read); + ASSERT(r == 0); + + r = uv_run(uv_default_loop()); + ASSERT(r == 0); + + ASSERT(on_read_cb_called > 1); + ASSERT(after_write_cb_called == 1); + ASSERT(exit_cb_called == 1); + ASSERT(close_cb_called == 3); + ASSERT(memcmp("hello world\n", output, 12) == 0); + ASSERT(output_used == 12); + + return 0; +} + diff --git a/src/rt/libuv/test/test-tcp-close.c b/src/rt/libuv/test/test-tcp-close.c index 5da8a84f8a2..f5dd0a44058 100644 --- a/src/rt/libuv/test/test-tcp-close.c +++ b/src/rt/libuv/test/test-tcp-close.c @@ -127,3 +127,50 @@ TEST_IMPL(tcp_close) { return 0; } + + +TEST_IMPL(tcp_ref) { + uv_tcp_t never; + int r; + + /* A tcp just initialized should count as one reference. */ + r = uv_tcp_init(uv_default_loop(), &never); + ASSERT(r == 0); + + /* One unref should set the loop ref count to zero. */ + uv_unref(uv_default_loop()); + + /* Therefore this does not block */ + uv_run(uv_default_loop()); + + return 0; +} + + +static void never_cb(uv_connect_t* conn_req, int status) { + FATAL("never_cb should never be called"); +} + + +TEST_IMPL(tcp_ref2) { + uv_tcp_t never; + int r; + + /* A tcp just initialized should count as one reference. */ + r = uv_tcp_init(uv_default_loop(), &never); + ASSERT(r == 0); + + r = uv_tcp_connect(&connect_req, + &never, + uv_ip4_addr("127.0.0.1", TEST_PORT), + never_cb); + ASSERT(r == 0); + + /* One unref should set the loop ref count to zero. */ + uv_unref(uv_default_loop()); + + /* Therefore this does not block */ + uv_run(uv_default_loop()); + + return 0; +} diff --git a/src/rt/libuv/test/test-tcp-connect-error.c b/src/rt/libuv/test/test-tcp-connect-error.c new file mode 100644 index 00000000000..5cdacab6321 --- /dev/null +++ b/src/rt/libuv/test/test-tcp-connect-error.c @@ -0,0 +1,70 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" +#include <stdio.h> +#include <stdlib.h> + + +static int connect_cb_called = 0; +static int close_cb_called = 0; + + + +static void connect_cb(uv_connect_t* handle, int status) { + ASSERT(handle != NULL); + connect_cb_called++; +} + + + +static void close_cb(uv_handle_t* handle) { + ASSERT(handle != NULL); + close_cb_called++; +} + + +TEST_IMPL(tcp_connect_error_fault) { + char garbage[] = "blah blah blah blah blah blah blah blah blah blah blah blah"; + struct sockaddr_in* garbage_addr; + uv_tcp_t server; + int r; + uv_connect_t req; + + garbage_addr = (struct sockaddr_in*) &garbage; + + r = uv_tcp_init(uv_default_loop(), &server); + ASSERT(r == 0); + r = uv_tcp_connect(&req, &server, *garbage_addr, connect_cb); + ASSERT(r == -1); + + ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + + uv_close((uv_handle_t*)&server, close_cb); + + uv_run(uv_default_loop()); + + ASSERT(connect_cb_called == 0); + ASSERT(close_cb_called == 1); + + return 0; +} diff --git a/src/rt/libuv/test/test-tcp-connect6-error.c b/src/rt/libuv/test/test-tcp-connect6-error.c new file mode 100644 index 00000000000..5c158ff8765 --- /dev/null +++ b/src/rt/libuv/test/test-tcp-connect6-error.c @@ -0,0 +1,68 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" +#include <stdio.h> +#include <stdlib.h> + + +static int connect_cb_called = 0; +static int close_cb_called = 0; + + +static void connect_cb(uv_connect_t* handle, int status) { + ASSERT(handle != NULL); + connect_cb_called++; +} + + +static void close_cb(uv_handle_t* handle) { + ASSERT(handle != NULL); + close_cb_called++; +} + + +TEST_IMPL(tcp_connect6_error_fault) { + char garbage[] = "blah blah blah blah blah blah blah blah blah blah blah blah"; + struct sockaddr_in6* garbage_addr; + uv_tcp_t server; + int r; + uv_connect_t req; + + garbage_addr = (struct sockaddr_in6*) &garbage; + + r = uv_tcp_init(uv_default_loop(), &server); + ASSERT(r == 0); + r = uv_tcp_connect6(&req, &server, *garbage_addr, connect_cb); + ASSERT(r == -1); + + ASSERT(uv_last_error(uv_default_loop()).code == UV_EINVAL); + + uv_close((uv_handle_t*)&server, close_cb); + + uv_run(uv_default_loop()); + + ASSERT(connect_cb_called == 0); + ASSERT(close_cb_called == 1); + + return 0; +} diff --git a/src/rt/libuv/test/test-tcp-flags.c b/src/rt/libuv/test/test-tcp-flags.c new file mode 100644 index 00000000000..c441b563f4a --- /dev/null +++ b/src/rt/libuv/test/test-tcp-flags.c @@ -0,0 +1,51 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +#include <stdio.h> +#include <stdlib.h> + + +TEST_IMPL(tcp_flags) { + uv_loop_t* loop; + uv_tcp_t handle; + int r; + + loop = uv_default_loop(); + + r = uv_tcp_init(loop, &handle); + ASSERT(r == 0); + + r = uv_tcp_nodelay(&handle, 1); + ASSERT(r == 0); + + r = uv_tcp_keepalive(&handle, 1, 60); + ASSERT(r == 0); + + uv_close((uv_handle_t*)&handle, NULL); + + r = uv_run(loop); + ASSERT(r == 0); + + return 0; +} diff --git a/src/rt/libuv/test/test-tcp-write-error.c b/src/rt/libuv/test/test-tcp-write-error.c index f3d12b8d6bf..c5907676be9 100644 --- a/src/rt/libuv/test/test-tcp-write-error.c +++ b/src/rt/libuv/test/test-tcp-write-error.c @@ -35,10 +35,15 @@ static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size); static uv_tcp_t tcp_server; static uv_tcp_t tcp_client; static uv_tcp_t tcp_peer; /* client socket as accept()-ed by server */ -static uv_write_t write_req; static uv_connect_t connect_req; static int write_cb_called; +static int write_cb_error_called; + +typedef struct { + uv_write_t req; + uv_buf_t buf; +} write_req_t; static void connection_cb(uv_stream_t* server, int status) { @@ -75,40 +80,47 @@ static void connect_cb(uv_connect_t* req, int status) { size_t size; char* data; int r; + write_req_t* wr; ASSERT(req == &connect_req); ASSERT(status == 0); - size = 10*1024*1024; - data = malloc(size); - ASSERT(data != NULL); - - memset(data, '$', size); - buf = uv_buf_init(data, size); - - write_req.data = data; - - r = uv_write(&write_req, req->handle, &buf, 1, write_cb); - ASSERT(r == 0); - - /* Write queue should have been updated. */ - ASSERT(req->handle->write_queue_size > 0); - - /* write_queue_size <= size, part may have already been written. */ - ASSERT(req->handle->write_queue_size <= size); + while (1) { + size = 10 * 1024 * 1024; + data = malloc(size); + ASSERT(data != NULL); + + memset(data, '$', size); + buf = uv_buf_init(data, size); + + wr = (write_req_t*) malloc(sizeof *wr); + wr->buf = buf; + wr->req.data = data; + + r = uv_write(&(wr->req), req->handle, &wr->buf, 1, write_cb); + ASSERT(r == 0); + + if (req->handle->write_queue_size > 0) { + break; + } + } } static void write_cb(uv_write_t* req, int status) { - ASSERT(req == &write_req); - ASSERT(status == -1); + write_req_t* wr; + wr = (write_req_t*) req; - /* This is what this test is all about. */ - ASSERT(tcp_client.write_queue_size == 0); + if (status == -1) { + write_cb_error_called++; + } - free(write_req.data); + if (req->handle->write_queue_size == 0) { + uv_close((uv_handle_t*)&tcp_client, NULL); + } - uv_close((uv_handle_t*)&tcp_client, NULL); + free(wr->buf.base); + free(wr); write_cb_called++; } @@ -148,7 +160,9 @@ TEST_IMPL(tcp_write_error) { r = uv_run(loop); ASSERT(r == 0); - ASSERT(write_cb_called == 1); + ASSERT(write_cb_called > 0); + ASSERT(write_cb_error_called == 1); + ASSERT(tcp_client.write_queue_size == 0); return 0; } diff --git a/src/rt/libuv/test/test-timer.c b/src/rt/libuv/test/test-timer.c index 17bcb84b770..87235a51bc7 100644 --- a/src/rt/libuv/test/test-timer.c +++ b/src/rt/libuv/test/test-timer.c @@ -130,3 +130,43 @@ TEST_IMPL(timer) { return 0; } + + +TEST_IMPL(timer_ref) { + uv_timer_t never; + int r; + + /* A timer just initialized should count as one reference. */ + r = uv_timer_init(uv_default_loop(), &never); + ASSERT(r == 0); + + /* One unref should set the loop ref count to zero. */ + uv_unref(uv_default_loop()); + + /* Therefore this does not block */ + uv_run(uv_default_loop()); + + return 0; +} + + +TEST_IMPL(timer_ref2) { + uv_timer_t never; + int r; + + /* A timer just initialized should count as one reference. */ + r = uv_timer_init(uv_default_loop(), &never); + ASSERT(r == 0); + + /* We start the timer, this should not effect the ref count. */ + r = uv_timer_start(&never, never_cb, 1000, 1000); + ASSERT(r == 0); + + /* One unref should set the loop ref count to zero. */ + uv_unref(uv_default_loop()); + + /* Therefore this does not block */ + uv_run(uv_default_loop()); + + return 0; +} diff --git a/src/rt/libuv/test/test-tty.c b/src/rt/libuv/test/test-tty.c index 11816156fff..60aedf39a94 100644 --- a/src/rt/libuv/test/test-tty.c +++ b/src/rt/libuv/test/test-tty.c @@ -33,7 +33,7 @@ TEST_IMPL(tty) { */ ASSERT(UV_TTY == uv_guess_handle(0)); - r = uv_tty_init(uv_default_loop(), &tty, 0); + r = uv_tty_init(uv_default_loop(), &tty, 0, 1); ASSERT(r == 0); r = uv_tty_get_winsize(&tty, &width, &height); @@ -48,6 +48,16 @@ TEST_IMPL(tty) { ASSERT(width > 10); ASSERT(height > 10); + /* Turn on raw mode. */ + r = uv_tty_set_mode(&tty, 1); + ASSERT(r == 0); + + /* Turn off raw mode. */ + r = uv_tty_set_mode(&tty, 0); + ASSERT(r == 0); + + /* TODO check the actual mode! */ + uv_close((uv_handle_t*)&tty, NULL); uv_run(loop); diff --git a/src/rt/libuv/test/test-udp-multicast-join.c b/src/rt/libuv/test/test-udp-multicast-join.c new file mode 100644 index 00000000000..159dba08196 --- /dev/null +++ b/src/rt/libuv/test/test-udp-multicast-join.c @@ -0,0 +1,139 @@ +/* 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. + */ + +#include "uv.h" +#include "task.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define CHECK_HANDLE(handle) \ + ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client) + +static uv_udp_t server; +static uv_udp_t client; + +static int cl_recv_cb_called; + +static int sv_send_cb_called; + +static int close_cb_called; + +static uv_buf_t alloc_cb(uv_handle_t* handle, size_t suggested_size) { + static char slab[65536]; + + CHECK_HANDLE(handle); + ASSERT(suggested_size <= sizeof slab); + + return uv_buf_init(slab, sizeof slab); +} + + +static void close_cb(uv_handle_t* handle) { + CHECK_HANDLE(handle); + close_cb_called++; +} + + +static void sv_send_cb(uv_udp_send_t* req, int status) { + ASSERT(req != NULL); + ASSERT(status == 0); + CHECK_HANDLE(req->handle); + + sv_send_cb_called++; + + uv_close((uv_handle_t*) req->handle, close_cb); +} + + +static void cl_recv_cb(uv_udp_t* handle, + ssize_t nread, + uv_buf_t buf, + struct sockaddr* addr, + unsigned flags) { + CHECK_HANDLE(handle); + ASSERT(flags == 0); + + cl_recv_cb_called++; + + if (nread < 0) { + ASSERT(0 && "unexpected error"); + } + + if (nread == 0) { + /* Returning unused buffer */ + /* Don't count towards cl_recv_cb_called */ + ASSERT(addr == NULL); + return; + } + + ASSERT(addr != NULL); + ASSERT(nread == 4); + ASSERT(!memcmp("PING", buf.base, nread)); + + /* we are done with the client handle, we can close it */ + uv_close((uv_handle_t*) &client, close_cb); +} + + +TEST_IMPL(udp_multicast_join) { + int r; + uv_udp_send_t req; + uv_buf_t buf; + struct sockaddr_in addr = uv_ip4_addr("239.255.0.1", TEST_PORT); + + r = uv_udp_init(uv_default_loop(), &server); + ASSERT(r == 0); + + r = uv_udp_init(uv_default_loop(), &client); + ASSERT(r == 0); + + /* bind to the desired port */ + r = uv_udp_bind(&client, addr, 0); + ASSERT(r == 0); + + /* join the multicast channel */ + r = uv_udp_set_membership(&client, "239.255.0.1", NULL, UV_JOIN_GROUP); + ASSERT(r == 0); + + r = uv_udp_recv_start(&client, alloc_cb, cl_recv_cb); + ASSERT(r == 0); + + buf = uv_buf_init("PING", 4); + + /* server sends "PING" */ + r = uv_udp_send(&req, &server, &buf, 1, addr, sv_send_cb); + ASSERT(r == 0); + + ASSERT(close_cb_called == 0); + ASSERT(cl_recv_cb_called == 0); + ASSERT(sv_send_cb_called == 0); + + /* run the loop till all events are processed */ + uv_run(uv_default_loop()); + + ASSERT(cl_recv_cb_called == 1); + ASSERT(sv_send_cb_called == 1); + ASSERT(close_cb_called == 2); + + return 0; +} diff --git a/src/rt/libuv/uv.gyp b/src/rt/libuv/uv.gyp index e32dddd3b5d..b4ef0144048 100644 --- a/src/rt/libuv/uv.gyp +++ b/src/rt/libuv/uv.gyp @@ -1,4 +1,17 @@ { + 'target_defaults': { + 'conditions': [ + ['OS != "win"', { + 'defines': [ + '_LARGEFILE_SOURCE', + '_FILE_OFFSET_BITS=64', + '_GNU_SOURCE', + 'EIO_STACKSIZE=262144' + ], + }], + ], + }, + 'targets': [ { 'target_name': 'uv', @@ -21,11 +34,8 @@ 'include/uv.h', 'src/uv-common.c', 'src/uv-common.h', - 'src/ares/ares__close_sockets.c', - 'src/ares/ares__get_hostent.c', - 'src/ares/ares__read_line.c', - 'src/ares/ares__timeval.c', 'src/ares/ares_cancel.c', + 'src/ares/ares__close_sockets.c', 'src/ares/ares_data.c', 'src/ares/ares_data.h', 'src/ares/ares_destroy.c', @@ -35,8 +45,10 @@ 'src/ares/ares_fds.c', 'src/ares/ares_free_hostent.c', 'src/ares/ares_free_string.c', + 'src/ares/ares_getenv.h', 'src/ares/ares_gethostbyaddr.c', 'src/ares/ares_gethostbyname.c', + 'src/ares/ares__get_hostent.c', 'src/ares/ares_getnameinfo.c', 'src/ares/ares_getopt.c', 'src/ares/ares_getopt.h', @@ -51,16 +63,18 @@ 'src/ares/ares_nowarn.c', 'src/ares/ares_nowarn.h', 'src/ares/ares_options.c', - 'src/ares/ares_parse_a_reply.c', 'src/ares/ares_parse_aaaa_reply.c', + 'src/ares/ares_parse_a_reply.c', 'src/ares/ares_parse_mx_reply.c', 'src/ares/ares_parse_ns_reply.c', 'src/ares/ares_parse_ptr_reply.c', 'src/ares/ares_parse_srv_reply.c', 'src/ares/ares_parse_txt_reply.c', + 'src/ares/ares_platform.h', 'src/ares/ares_private.h', 'src/ares/ares_process.c', 'src/ares/ares_query.c', + 'src/ares/ares__read_line.c', 'src/ares/ares_rules.h', 'src/ares/ares_search.c', 'src/ares/ares_send.c', @@ -71,6 +85,7 @@ 'src/ares/ares_strdup.h', 'src/ares/ares_strerror.c', 'src/ares/ares_timeout.c', + 'src/ares/ares__timeval.c', 'src/ares/ares_version.c', 'src/ares/ares_writev.c', 'src/ares/ares_writev.h', @@ -82,6 +97,7 @@ 'src/ares/inet_ntop.h', 'src/ares/nameser.h', 'src/ares/setup_once.h', + 'src/ares/windows_port.c', ], 'conditions': [ [ 'OS=="win"', { @@ -98,6 +114,9 @@ 'include/uv-private/uv-win.h', 'src/ares/config_win32/ares_config.h', 'src/ares/windows_port.c', + 'src/ares/ares_getenv.c', + 'src/ares/ares_iphlpapi.h', + 'src/ares/ares_platform.c', 'src/win/async.c', 'src/win/cares.c', 'src/win/core.c', @@ -111,7 +130,6 @@ 'src/win/pipe.c', 'src/win/process.c', 'src/win/req.c', - 'src/win/stdio.c', 'src/win/stream.c', 'src/win/tcp.c', 'src/win/tty.c', @@ -166,12 +184,6 @@ 'src/unix/ev/event.h', ], 'include_dirs': [ 'src/unix/ev', ], - 'defines': [ - '_LARGEFILE_SOURCE', - '_FILE_OFFSET_BITS=64', - '_GNU_SOURCE', - 'EIO_STACKSIZE=262144' - ], 'libraries': [ '-lm' ] }], [ 'OS=="mac"', { @@ -209,7 +221,11 @@ 'EIO_CONFIG_H="config_sunos.h"', ], 'direct_dependent_settings': { - 'libraries': [ '-lrt' ], + 'libraries': [ + '-lkstat', + '-lsocket', + '-lnsl', + ], }, }], [ 'OS=="freebsd"', { @@ -220,6 +236,17 @@ 'EIO_CONFIG_H="config_freebsd.h"', ], }], + [ 'OS=="openbsd"', { + 'include_dirs': [ 'src/ares/config_openbsd' ], + 'sources': [ 'src/unix/openbsd.c' ], + 'defines': [ + 'EV_CONFIG_H="config_openbsd.h"', + 'EIO_CONFIG_H="config_openbsd.h"', + ], + }], + [ 'OS=="mac" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', { + 'sources': [ 'src/unix/kqueue.c' ], + }], ] }, @@ -228,12 +255,15 @@ 'type': 'executable', 'dependencies': [ 'uv' ], 'sources': [ + 'test/blackhole-server.c', 'test/echo-server.c', 'test/run-tests.c', 'test/runner.c', 'test/runner.h', + 'test/test-get-loadavg.c', 'test/task.h', 'test/test-async.c', + 'test/test-error.c', 'test/test-callback-stack.c', 'test/test-connection-fail.c', 'test/test-delayed-accept.c', @@ -241,11 +271,13 @@ 'test/test-fs.c', 'test/test-fs-event.c', 'test/test-get-currentexe.c', + 'test/test-get-memory.c', 'test/test-getaddrinfo.c', 'test/test-gethostbyname.c', 'test/test-getsockname.c', 'test/test-hrtime.c', 'test/test-idle.c', + 'test/test-ipc.c', 'test/test-list.h', 'test/test-loop-handles.c', 'test/test-pass-always.c', @@ -254,9 +286,13 @@ 'test/test-ref.c', 'test/test-shutdown-eof.c', 'test/test-spawn.c', + 'test/test-stdio-over-pipes.c', 'test/test-tcp-bind-error.c', 'test/test-tcp-bind6-error.c', 'test/test-tcp-close.c', + 'test/test-tcp-flags.c', + 'test/test-tcp-connect-error.c', + 'test/test-tcp-connect6-error.c', 'test/test-tcp-write-error.c', 'test/test-tcp-writealot.c', 'test/test-threadpool.c', @@ -266,6 +302,7 @@ 'test/test-udp-dgram-too-big.c', 'test/test-udp-ipv6.c', 'test/test-udp-send-and-recv.c', + 'test/test-udp-multicast-join.c', ], 'conditions': [ [ 'OS=="win"', { @@ -281,7 +318,13 @@ 'test/runner-unix.c', 'test/runner-unix.h', ] - }] + }], + [ 'OS=="solaris"', { # make test-fs.c compile, needs _POSIX_C_SOURCE + 'defines': [ + '__EXTENSIONS__', + '_XOPEN_SOURCE=500', + ], + }], ], 'msvs-settings': { 'VCLinkerTool': { @@ -303,9 +346,11 @@ 'test/benchmark-pump.c', 'test/benchmark-sizes.c', 'test/benchmark-spawn.c', + 'test/benchmark-tcp-write-batch.c', 'test/benchmark-udp-packet-storm.c', 'test/dns-server.c', 'test/echo-server.c', + 'test/blackhole-server.c', 'test/run-benchmarks.c', 'test/runner.c', 'test/runner.h', |
