From b8e6c26b7b9608dffc84645f17fe4cf534af18dd Mon Sep 17 00:00:00 2001 From: Anas Nashif Date: Tue, 30 Oct 2012 13:54:38 -0700 Subject: Imported Upstream version 1.7.5 --- AUTHORS | 37 + CHANGES | 1218 ++ Makefile.Watcom | 164 + Makefile.am | 175 + Makefile.dj | 85 + Makefile.in | 1458 +++ Makefile.inc | 199 + Makefile.m32 | 68 + Makefile.msvc | 519 + Makefile.netware | 440 + NEWS | 21 + README | 60 + README.cares | 13 + README.msvc | 142 + RELEASE-NOTES | 26 + TODO | 23 + acinclude.m4 | 1938 +++ aclocal.m4 | 932 ++ acountry.1 | 53 + acountry.c | 628 + adig.1 | 71 + adig.c | 843 ++ ahost.1 | 48 + ahost.c | 202 + ares.h | 543 + ares__close_sockets.c | 66 + ares__get_hostent.c | 263 + ares__read_line.c | 71 + ares__timeval.c | 111 + ares_build.h | 252 + ares_build.h.in | 110 + ares_cancel.3 | 43 + ares_cancel.c | 63 + ares_cancel.pdf | Bin 0 -> 3782 bytes ares_config.h.in | 515 + ares_data.c | 190 + ares_data.h | 65 + ares_destroy.3 | 43 + ares_destroy.c | 105 + ares_destroy.pdf | Bin 0 -> 3909 bytes ares_destroy_options.3 | 38 + ares_destroy_options.pdf | Bin 0 -> 3582 bytes ares_dns.h | 90 + ares_dup.3 | 43 + ares_dup.pdf | Bin 0 -> 3868 bytes ares_expand_name.3 | 63 + ares_expand_name.c | 200 + ares_expand_name.pdf | Bin 0 -> 4337 bytes ares_expand_string.3 | 61 + ares_expand_string.c | 75 + ares_expand_string.pdf | Bin 0 -> 4263 bytes ares_fds.3 | 61 + ares_fds.c | 63 + ares_fds.pdf | Bin 0 -> 4132 bytes ares_free_data.3 | 72 + ares_free_data.pdf | Bin 0 -> 4317 bytes ares_free_hostent.3 | 45 + ares_free_hostent.c | 42 + ares_free_hostent.pdf | 111 + ares_free_string.3 | 35 + ares_free_string.c | 25 + ares_free_string.pdf | Bin 0 -> 3455 bytes ares_get_servers.3 | 78 + ares_get_servers.pdf | Bin 0 -> 5064 bytes ares_getenv.c | 30 + ares_getenv.h | 26 + ares_gethostbyaddr.3 | 101 + ares_gethostbyaddr.c | 301 + ares_gethostbyaddr.pdf | Bin 0 -> 5371 bytes ares_gethostbyname.3 | 105 + ares_gethostbyname.c | 523 + ares_gethostbyname.pdf | Bin 0 -> 5471 bytes ares_gethostbyname_file.3 | 83 + ares_gethostbyname_file.pdf | Bin 0 -> 5000 bytes ares_getnameinfo.3 | 149 + ares_getnameinfo.c | 427 + ares_getnameinfo.pdf | Bin 0 -> 7096 bytes ares_getopt.c | 122 + ares_getopt.h | 53 + ares_getsock.3 | 57 + ares_getsock.c | 72 + ares_getsock.pdf | Bin 0 -> 4291 bytes ares_init.3 | 223 + ares_init.c | 1806 +++ ares_init.pdf | Bin 0 -> 10526 bytes ares_init_options.3 | 1 + ares_init_options.pdf | Bin 0 -> 10526 bytes ares_iphlpapi.h | 221 + ares_ipv6.h | 78 + ares_library_cleanup.3 | 73 + ares_library_cleanup.pdf | Bin 0 -> 4927 bytes ares_library_init.3 | 96 + ares_library_init.c | 142 + ares_library_init.h | 42 + ares_library_init.pdf | Bin 0 -> 6451 bytes ares_llist.c | 86 + ares_llist.h | 42 + ares_mkquery.3 | 75 + ares_mkquery.c | 195 + ares_mkquery.pdf | Bin 0 -> 4897 bytes ares_nowarn.c | 181 + ares_nowarn.h | 55 + ares_options.c | 248 + ares_parse_a_reply.3 | 78 + ares_parse_a_reply.c | 263 + ares_parse_a_reply.pdf | Bin 0 -> 4509 bytes ares_parse_aaaa_reply.3 | 78 + ares_parse_aaaa_reply.c | 259 + ares_parse_aaaa_reply.pdf | Bin 0 -> 4457 bytes ares_parse_mx_reply.3 | 79 + ares_parse_mx_reply.c | 170 + ares_parse_mx_reply.pdf | Bin 0 -> 4357 bytes ares_parse_ns_reply.3 | 66 + ares_parse_ns_reply.c | 182 + ares_parse_ns_reply.pdf | Bin 0 -> 4269 bytes ares_parse_ptr_reply.3 | 74 + ares_parse_ptr_reply.c | 217 + ares_parse_ptr_reply.pdf | Bin 0 -> 4496 bytes ares_parse_srv_reply.3 | 81 + ares_parse_srv_reply.c | 179 + ares_parse_srv_reply.pdf | Bin 0 -> 4460 bytes ares_parse_txt_reply.3 | 80 + ares_parse_txt_reply.c | 201 + ares_parse_txt_reply.pdf | Bin 0 -> 4402 bytes ares_platform.c | 11035 ++++++++++++++++ ares_platform.h | 43 + ares_private.h | 355 + ares_process.3 | 80 + ares_process.c | 1295 ++ ares_process.pdf | Bin 0 -> 4776 bytes ares_query.3 | 146 + ares_query.c | 183 + ares_query.pdf | Bin 0 -> 6935 bytes ares_rules.h | 144 + ares_save_options.3 | 74 + ares_save_options.pdf | Bin 0 -> 4908 bytes ares_search.3 | 148 + ares_search.c | 321 + ares_search.pdf | Bin 0 -> 7197 bytes ares_send.3 | 120 + ares_send.c | 134 + ares_send.pdf | Bin 0 -> 5711 bytes ares_set_servers.3 | 84 + ares_set_servers.pdf | Bin 0 -> 5153 bytes ares_set_socket_callback.3 | 28 + ares_set_socket_callback.pdf | Bin 0 -> 3940 bytes ares_setup.h | 197 + ares_strcasecmp.c | 66 + ares_strcasecmp.h | 30 + ares_strdup.c | 42 + ares_strdup.h | 26 + ares_strerror.3 | 37 + ares_strerror.c | 56 + ares_strerror.pdf | Bin 0 -> 3546 bytes ares_timeout.3 | 61 + ares_timeout.c | 80 + ares_timeout.pdf | Bin 0 -> 4257 bytes ares_version.3 | 40 + ares_version.c | 11 + ares_version.h | 24 + ares_version.pdf | Bin 0 -> 3715 bytes ares_writev.c | 79 + ares_writev.h | 36 + bitncmp.c | 59 + bitncmp.h | 26 + buildconf | 117 + cares.rc | 65 + compile | 142 + config-dos.h | 116 + config-win32.h | 369 + config.guess | 1517 +++ config.sub | 1760 +++ configure | 28311 +++++++++++++++++++++++++++++++++++++++++ configure.ac | 857 ++ depcomp | 530 + get_ver.awk | 35 + inet_net_pton.c | 451 + inet_net_pton.h | 31 + inet_ntop.c | 208 + inet_ntop.h | 26 + install-sh | 250 + libcares.pc.in | 20 + ltmain.sh | 9642 ++++++++++++++ m4/cares-compilers.m4 | 1573 +++ m4/cares-confopts.m4 | 352 + m4/cares-functions.m4 | 3545 ++++++ m4/cares-override.m4 | 111 + m4/cares-reentrant.m4 | 611 + m4/cares-system.m4 | 83 + m4/libtool.m4 | 7851 ++++++++++++ m4/ltoptions.m4 | 369 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 98 + m4/xc-translit.m4 | 164 + maketgz | 74 + missing | 360 + mkinstalldirs | 39 + nameser.h | 203 + setup_once.h | 504 + vc/acountry/vc6acountry.dsp | 190 + vc/adig/vc6adig.dsp | 190 + vc/ahost/vc6ahost.dsp | 190 + vc/cares/vc6cares.dsp | 441 + vc/cares/vc6cares.dsw | 29 + vc/vc6aws.dsw | 74 + windows_port.c | 22 + 207 files changed, 97251 insertions(+) create mode 100644 AUTHORS create mode 100644 CHANGES create mode 100644 Makefile.Watcom create mode 100644 Makefile.am create mode 100644 Makefile.dj create mode 100644 Makefile.in create mode 100644 Makefile.inc create mode 100644 Makefile.m32 create mode 100644 Makefile.msvc create mode 100644 Makefile.netware create mode 100644 NEWS create mode 100644 README create mode 100644 README.cares create mode 100644 README.msvc create mode 100644 RELEASE-NOTES create mode 100644 TODO create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100644 acountry.1 create mode 100644 acountry.c create mode 100644 adig.1 create mode 100644 adig.c create mode 100644 ahost.1 create mode 100644 ahost.c create mode 100644 ares.h create mode 100644 ares__close_sockets.c create mode 100644 ares__get_hostent.c create mode 100644 ares__read_line.c create mode 100644 ares__timeval.c create mode 100644 ares_build.h create mode 100644 ares_build.h.in create mode 100644 ares_cancel.3 create mode 100644 ares_cancel.c create mode 100644 ares_cancel.pdf create mode 100644 ares_config.h.in create mode 100644 ares_data.c create mode 100644 ares_data.h create mode 100644 ares_destroy.3 create mode 100644 ares_destroy.c create mode 100644 ares_destroy.pdf create mode 100644 ares_destroy_options.3 create mode 100644 ares_destroy_options.pdf create mode 100644 ares_dns.h create mode 100644 ares_dup.3 create mode 100644 ares_dup.pdf create mode 100644 ares_expand_name.3 create mode 100644 ares_expand_name.c create mode 100644 ares_expand_name.pdf create mode 100644 ares_expand_string.3 create mode 100644 ares_expand_string.c create mode 100644 ares_expand_string.pdf create mode 100644 ares_fds.3 create mode 100644 ares_fds.c create mode 100644 ares_fds.pdf create mode 100644 ares_free_data.3 create mode 100644 ares_free_data.pdf create mode 100644 ares_free_hostent.3 create mode 100644 ares_free_hostent.c create mode 100644 ares_free_hostent.pdf create mode 100644 ares_free_string.3 create mode 100644 ares_free_string.c create mode 100644 ares_free_string.pdf create mode 100644 ares_get_servers.3 create mode 100644 ares_get_servers.pdf create mode 100644 ares_getenv.c create mode 100644 ares_getenv.h create mode 100644 ares_gethostbyaddr.3 create mode 100644 ares_gethostbyaddr.c create mode 100644 ares_gethostbyaddr.pdf create mode 100644 ares_gethostbyname.3 create mode 100644 ares_gethostbyname.c create mode 100644 ares_gethostbyname.pdf create mode 100644 ares_gethostbyname_file.3 create mode 100644 ares_gethostbyname_file.pdf create mode 100644 ares_getnameinfo.3 create mode 100644 ares_getnameinfo.c create mode 100644 ares_getnameinfo.pdf create mode 100644 ares_getopt.c create mode 100644 ares_getopt.h create mode 100644 ares_getsock.3 create mode 100644 ares_getsock.c create mode 100644 ares_getsock.pdf create mode 100644 ares_init.3 create mode 100644 ares_init.c create mode 100644 ares_init.pdf create mode 100644 ares_init_options.3 create mode 100644 ares_init_options.pdf create mode 100644 ares_iphlpapi.h create mode 100644 ares_ipv6.h create mode 100644 ares_library_cleanup.3 create mode 100644 ares_library_cleanup.pdf create mode 100644 ares_library_init.3 create mode 100644 ares_library_init.c create mode 100644 ares_library_init.h create mode 100644 ares_library_init.pdf create mode 100644 ares_llist.c create mode 100644 ares_llist.h create mode 100644 ares_mkquery.3 create mode 100644 ares_mkquery.c create mode 100644 ares_mkquery.pdf create mode 100644 ares_nowarn.c create mode 100644 ares_nowarn.h create mode 100644 ares_options.c create mode 100644 ares_parse_a_reply.3 create mode 100644 ares_parse_a_reply.c create mode 100644 ares_parse_a_reply.pdf create mode 100644 ares_parse_aaaa_reply.3 create mode 100644 ares_parse_aaaa_reply.c create mode 100644 ares_parse_aaaa_reply.pdf create mode 100644 ares_parse_mx_reply.3 create mode 100644 ares_parse_mx_reply.c create mode 100644 ares_parse_mx_reply.pdf create mode 100644 ares_parse_ns_reply.3 create mode 100644 ares_parse_ns_reply.c create mode 100644 ares_parse_ns_reply.pdf create mode 100644 ares_parse_ptr_reply.3 create mode 100644 ares_parse_ptr_reply.c create mode 100644 ares_parse_ptr_reply.pdf create mode 100644 ares_parse_srv_reply.3 create mode 100644 ares_parse_srv_reply.c create mode 100644 ares_parse_srv_reply.pdf create mode 100644 ares_parse_txt_reply.3 create mode 100644 ares_parse_txt_reply.c create mode 100644 ares_parse_txt_reply.pdf create mode 100644 ares_platform.c create mode 100644 ares_platform.h create mode 100644 ares_private.h create mode 100644 ares_process.3 create mode 100644 ares_process.c create mode 100644 ares_process.pdf create mode 100644 ares_query.3 create mode 100644 ares_query.c create mode 100644 ares_query.pdf create mode 100644 ares_rules.h create mode 100644 ares_save_options.3 create mode 100644 ares_save_options.pdf create mode 100644 ares_search.3 create mode 100644 ares_search.c create mode 100644 ares_search.pdf create mode 100644 ares_send.3 create mode 100644 ares_send.c create mode 100644 ares_send.pdf create mode 100644 ares_set_servers.3 create mode 100644 ares_set_servers.pdf create mode 100644 ares_set_socket_callback.3 create mode 100644 ares_set_socket_callback.pdf create mode 100644 ares_setup.h create mode 100644 ares_strcasecmp.c create mode 100644 ares_strcasecmp.h create mode 100644 ares_strdup.c create mode 100644 ares_strdup.h create mode 100644 ares_strerror.3 create mode 100644 ares_strerror.c create mode 100644 ares_strerror.pdf create mode 100644 ares_timeout.3 create mode 100644 ares_timeout.c create mode 100644 ares_timeout.pdf create mode 100644 ares_version.3 create mode 100644 ares_version.c create mode 100644 ares_version.h create mode 100644 ares_version.pdf create mode 100644 ares_writev.c create mode 100644 ares_writev.h create mode 100644 bitncmp.c create mode 100644 bitncmp.h create mode 100755 buildconf create mode 100644 cares.rc create mode 100755 compile create mode 100644 config-dos.h create mode 100644 config-win32.h create mode 100755 config.guess create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100755 depcomp create mode 100644 get_ver.awk create mode 100644 inet_net_pton.c create mode 100644 inet_net_pton.h create mode 100644 inet_ntop.c create mode 100644 inet_ntop.h create mode 100755 install-sh create mode 100644 libcares.pc.in create mode 100755 ltmain.sh create mode 100644 m4/cares-compilers.m4 create mode 100644 m4/cares-confopts.m4 create mode 100644 m4/cares-functions.m4 create mode 100644 m4/cares-override.m4 create mode 100644 m4/cares-reentrant.m4 create mode 100644 m4/cares-system.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/xc-translit.m4 create mode 100755 maketgz create mode 100755 missing create mode 100755 mkinstalldirs create mode 100644 nameser.h create mode 100644 setup_once.h create mode 100644 vc/acountry/vc6acountry.dsp create mode 100644 vc/adig/vc6adig.dsp create mode 100644 vc/ahost/vc6ahost.dsp create mode 100644 vc/cares/vc6cares.dsp create mode 100644 vc/cares/vc6cares.dsw create mode 100644 vc/vc6aws.dsw create mode 100644 windows_port.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..e197a74 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,37 @@ +c-ares is based on ares, and these are the people that have worked on it since +the fork was made: + +Alexander Lazic +Alexey Simak +Andreas Rieke +Ashish Sharma +Brad House +Brad Spencer +Bram Matthys +Dan Fandrich +Daniel Stenberg +Dirk Manske +Dominick Meglio +Doug Goldstein +Duncan Wilcox +Eino Tuominen +Erik Kline +George Neill +Gisle Vanem +Guilherme Balena Versiani +Gunter Knauf +Henrik Stoerner +James Bursa +Michael Wallner +Nick Mathewson +Phil Blundell +Ravi Pratap +Robin Cornelius +Sebastian at basti79.de +Shmulik Regev +Steinar H. Gunderson +Tofu Linden +Vlad Dinulescu +William Ahern +Yang Tse +liren at vivisimo.com diff --git a/CHANGES b/CHANGES new file mode 100644 index 0000000..73fe8c7 --- /dev/null +++ b/CHANGES @@ -0,0 +1,1218 @@ + Changelog for the c-ares project + +Version 1.7.5 (August 16, 2011) + +Fixed: + + o detection of semicolon comments in resolv.conf + o avoid using system's inet_net_pton affected by the WLB-2008080064 advisory + o replacement ares_inet_net_pton affected by the WLB-2008080064 advisory + o replacement ares_inet_ntop affected by potential out of bounds write + o added install target to Makefile.msvc + o only fall back to AF_INET searches when looking for AF_UNSPEC addresses + o fixed ares_parse_*_reply memory leaks + o Use correct sizeof in ares_getnameinfo() + o IPv6-on-windows: find DNS servers correctly + o man pages: docs for the c-ares utility programs + o getservbyport replacement for Win CE + o config_sortlist: (win32) missing else + o advance_tcp_send_queue: avoid NULL ptr dereference + o configure: fix a bashism + o ares_expand_name: Fix encoded length for indirect root + +Version 1.7.4 (December 9, 2010) + +Changed: + + o local-bind: Support binding to local interface/IPs, see + ares_set_local_ip4, ares_set_local_ip6, ares_set_local_dev + +Fixed: + + o memory leak in ares_getnameinfo + o add missing break that caused get_ares_servers to fail + o ares_parse_a_reply: fix CNAME response parsing + o init_by_options: don't copy an empty sortlist + o Replaced uint32_t with unsigned int to fix broken builds + on a couple of platforms + o Fix lookup with HOSTALIASES set + o adig: fix NAPTR parsing + o compiler warning cleanups + +Version 1.7.3 (June 11, 2010) + +Fixed: + + o builds on Android + o now includes all files necessary to build it (1.7.2 lacked a file) + +Version 1.7.2 (June 10, 2010) + +Changed: + + o Added ares_parse_mx_reply() + +Fixed: + + o ares_init: Last, not first instance of domain or search should win + o improve alternative definition of bool + o fix VS2010 compiler warnings + + +Version 1.7.1 (Mar 23, 2010) + +* May 31, 2010 (Jakub Hrozek) +- Use the last instance of domain/search, not the first one + +* March 23, 2010 (Daniel Stenberg) +- We switched from CVS to git. See http://github.com/bagder/c-ares + +* March 5, 2010 (Daniel Stenberg) +- Daniel Johnson provided fixes for building with the clang compiler. + +* March 5, 2010 (Yang Tse) +- Added IPv6 name servers support. Implementation has been based on code, + comments and feedback provided November and December of 2008 by Daniel + Stenberg, Gregor Jasny, Phil Blundell and myself, December 2009 by Cedric + Bail, and February 2010 by Jakub Hrozek on the c-ares mailing list. On + March I reviewed all that, selected the best of each, and adjusted or + extended parts of it to make the best fit. + + The external and visible result of all this is that two new functions are + added to the external API, ares_get_servers() and ares_set_servers(), which + becomes now the preferred way of getting and setting name servers for any + ares channel as these support both IPv4 and IPv6 name servers. + + In order to not break ABI compatibility, ares_init_options() with option + mask ARES_OPT_SERVERS and ares_save_options() may still be used in code + which is intended to run on IPv4-only stacks. But remember that these + functions do not support IPv6 name servers. This implies that if the user + is capable of defining or providing an IPv6 name server, and the app is + using ares_init_options() or ares_save_options() at some point to handle + the name servers, the app will likely lose IPv6 name servers. + +* January 28, 2010 (Daniel Stenberg) +- Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't + check for broken connections like ares_process() did. Based on that, I + merged the two functions into a single generic one with two front-ends. + +* December 29, 2009 (Yang Tse) +- Laszlo Tamas Szabo adjusted Makefile.msvc compiler options so that where + run-time error checks enabling compiler option /GZ was used it is replaced + with equivalent /RTCsu for Visual Studio 2003 and newer versions. Option + /GX is replaced with equivalent /EHsc for all versions. Also fixed socket + data type for internal configure_socket function. + +* December 21, 2009 (Yang Tse) +- Ingmar Runge noticed that Windows config-win32.h configuration file + did not include a definition for HAVE_CLOSESOCKET which resulted in + function close() being inappropriately used to close sockets. + +Version 1.7.0 (Nov 30, 2009) + +* November 26, 2009 (Yang Tse) +- Larry Lansing fixed ares_parse_srv_reply to properly parse replies + which might contain non-SRV answers, skipping over potential non-SRV + ones such as CNAMEs. + +* November 23, 2009 (Yang Tse) +- Changed naming convention for c-ares libraries built with MSVC, details + and build instructions provided in README.msvc file. + +* November 22, 2009 (Yang Tse) +- Jakub Hrozek fixed more function prototypes in man pages to sync them + with the ones declared in ares.h + +- Jakub Hrozek renamed addrttl and addr6ttl structs to ares_addrttl and + ares_addr6ttl in order to prevent name space pollution, along with + necessary changes to code base and man pages.This change does not break + ABI, there is no need to recompile existing applications. But existing + applications using these structs with the old name will need source code + adjustments when recompiled using c-ares 1.7.0. + +* November 21, 2009 (Yang Tse) +- Added manifest stuff to Makefile.msvc. + +* November 20, 2009 (Yang Tse) +- Fixed several function prototypes in man pages that were out of sync + with the ones declared in ares.h. Added ares_free_data() along with + man page. Updated ares_parse_srv_reply() and ares_parse_txt_reply() + with changes from Jakub Hrozek making these now return linked lists + instead of arrays, and merging the ares_free_data() adjustments. + +* November 10, 2009 (Yang Tse) +- Updated MSVC 6.0 project files to match settings from Makefile.msvc. + +* November 9, 2009 (Yang Tse) +- Makefile.msvc is now the reference method to build c-ares and sample + programs with any MSVC compiler or MS Visual Studio version. If no + option or target are specified it builds dynamic and static c-ares + libraries in debug and release flavours and also builds all sample + programs using each of the different c-ares libraries. + +* November 2, 2009 (Yang Tse) +- Renamed c-ares setup.h to ares_setup.h + +* October 31, 2009 (Yang Tse) +- Symbol hiding configure options are named now --enable-symbol-hiding + and --disable-symbol-hiding in an attempt to make them less ambiguous. + +* October 30, 2009 (Yang Tse) +- Many fixes for ares_parse_txt_reply() + +* October 29, 2009 (Daniel Stenberg) +- Jakub Hrozek added ares_parse_txt_reply() for TXT parsing + +* October 29, 2009 (Yang Tse) +- Updated MSVC 6.0 workspace and project files that allows building + dynamic and static c-ares libraries in debug and release flavours. + Additionally each of the three sample programs is built against + each of the four possible c-ares libraries, generating all this + a total number of 12 executables and 4 libraries. + +* October 28, 2009 (Yang Tse) +- Initial step towards the ability to reduce c-ares exported symbols + when built as a shared library based on the 'visibility' attribute + for GNUC and Intel compilers and based on __global for Sun compilers, + taking also in account __declspec function decoration for Win32 and + Symbian DLL's. + +* October 27, 2009 (Yang Tse) +- Fixed Pelles C Win32 target compilation issues. + +* October 23, 2009 (Yang Tse) +- John Engelhart noticed an unreleased problem relative to a duplicate + ARES_ECANCELLED error code value and missing error code description. + +* October 7, 2009 (Yang Tse) +- Overhauled ares__get_hostent() Fixing out of bounds memory overwrite + triggered with malformed /etc/hosts file. Improving parsing of /etc/hosts + file. Validating requested address family. Ensuring that failures always + return a NULL pointer. Adjusting header inclusions. + +* October 6, 2009 (Yang Tse) +- Fix ssize_t redefinition errors on WIN64 reported by Alexey Simak. + +* September 29, 2009 (Yang Tse) +- Make configure script also check if _REENTRANT definition is required to + make errno available as a preprocessor macro. + +* September 7, 2009 (Yang Tse) +- Add T_SRV portability check to ares_parse_srv_reply.c + +* 4 Sep 2009 (Daniel Stenberg) +- Jakub Hrozek added ares_parse_srv_reply() for SRV parsing + +* 3 Aug 2009 (Daniel Stenberg) +- Joshua Kwan fixed the init routine to fill in the defaults for stuff that + fails to get inited by other means. This fixes a case of when the c-ares + init fails when internet access is fone. + +- Timo Teras changed the reason code used in the resolve callback done when + ares_cancel() is used, to be ARES_ECANCELLED instead of ARES_ETIMEOUT to + better allow the callback to know what's happening. + +* 14 Jul 2009 (Guenter Knauf) +- renamed generated config.h to ares_config.h to avoid any future clashes + with config.h from other projects. + +* June 20 2009 (Yang Tse) +- Refactor how libraries are checked for connect() function in configure + script and check for connect() as it is done for other functions. + +* June 19 2009 (Yang Tse) +- Make sclose() function-like macro definition used to close a socket, + now solely based on HAVE_CLOSESOCKET and HAVE_CLOSESOCKET_CAMEL + config file preprocessor definitions + +* June 18 2009 (Yang Tse) +- Add CloseSocket camel case function check for configure script. + +* June 17 2009 (Yang Tse) +- Check for socket() and closesocket() as it is done for other functions + in configure script. + +* June 11 2009 (Yang Tse) +- Modified buildconf so that when automake runs it copies missing files + instead of symlinking them. + +* June 8 2009 (Yang Tse) +- Removed buildconf.bat from release and daily snapshot archives. This + file is only for CVS tree checkout builds. + +* May 26 2009 (Yang Tse) +- Added --enable-curldebug configure option to enable and disable building + with the low-level curl debug memory tracking 'feature' to allow decoupled + setting from --enable-debug, allowing again to build c-ares independently + out of the CVS tree. + + For the c-ares library option --enable-debug enables debug build features + which are _not_ related with memory tracking. For the c-ares library when + --enable-debug is given it does not enable the memory tracking feature. If + you wish to enable the curl debug memory tracking you must use configure + option --enable-curldebug explicitily to do so. + + Internally, definition of preprocessor symbol DEBUGBUILD restricts code + which is only compiled for debug enabled builds. And symbol CURLDEBUG is + used to differentiate code which is _only_ used for memory tracking. + + Make ares_init(), ares_dup() and ares_init_options() fail returning + ARES_ENOTINITIALIZED if library initialization has not been performed + calling ares_library_init(). + +* May 20 2009 (Yang Tse) +- Added ares_library_init() and ares_library_cleanup() man pages. + +* May 19 2009 (Yang Tse) +- Introduced ares_library_init() and ares_library_cleanup() functions. + + This is an API and ABI break for Win32/64 systems. Non-Win32/64 build targets + using c-ares 1.7.0 can still survive without calling these functions. Read all + the details on ares_library_init(3) and ares_library_cleanup(3) man pages that + are included. + + curl/libcurl 7.19.5 is fully compatible with c-ares 1.7.0 on all systems. + + In order to use c-ares 1.7.0 with curl/libcurl on Win32/64 systems it is + required that curl/libcurl is 7.19.5 or newer. In other words, it is not + possible on Win32/64 to use c-ares 1.7.0 with a curl/libcurl version less + than 7.19.5 + +* May 11 2009 (Daniel Stenberg) +- Gregor Jasny made c-ares link with libtool 's -export-symbols-regex option to + only expose functions starting with ares_. + +* May 7 2009 (Yang Tse) +- Fix an m4 overquoting triggering a spurious 'AS_TR_CPP' symbol definition + attempt in generated config.h + +* May 2 2009 (Yang Tse) +- Use a build-time configured ares_socklen_t data type instead of socklen_t. + +* April 21 2009 (Yang Tse) +- Moved potential inclusion of system's malloc.h and memory.h header files to + setup_once.h. Inclusion of each header file is based on the definition of + NEED_MALLOC_H and NEED_MEMORY_H respectively. + +* March 11 2009 (Yang Tse) +- Japheth Cleaver fixed acountry.c replacing u_long with unsigned long. + +* February 20 2009 (Yang Tse) +- Do not halt compilation when using VS2008 to build a Windows 2000 target. + +* February 3 2009 (Phil Blundell) +- If the server returns garbage or nothing at all in response to an AAAA query, + go on and ask for A records anyway. + +* January 31 2009 (Daniel Stenberg) +- ares_gethostbyname() now accepts 'AF_UNSPEC' as a family for resolving + either AF_INET6 or AF_INET. It works by accepting any of the looksups in the + hosts file, and it resolves the AAAA field with a fallback to A. + +* January 14 2009 (Daniel Stenberg) +- ares.h no longer uses the HAVE_STRUCT_IN6_ADDR define check, but instead it + now declares the private struct ares_in6_addr for all systems instead of + relying on one possibly not present in the system. + +* January 13 2009 (Phil Blundell) +- ares__send_query() now varies the retry timeout pseudo-randomly to avoid + packet storms when several queries were started at the same time. + +* January 11 2009 (Daniel Stenberg) +- Phil Blundell added the internal function ares__expand_name_for_response() + that is now used by the ares_parse_*_reply() functions instead of the + ares_expand_name() simply to easier return ARES_EBADRESP for the cases where + the name expansion fails as in responses that really isn't expected. + +Version 1.6.0 (Dec 9, 2008) + +* December 9 2008 (Gisle Vanem) + + Fixes for Win32 targets using the Watt-32 tcp/ip stack. + +* Dec 4 2008 (Daniel Stenberg) + + Gregor Jasny provided the patch that introduces ares_set_socket_callback(), + and I edited it to also get duped by ares_dup(). + +* Dec 3 2008 (Daniel Stenberg) + + API changes: + + I made sure the public ares_config struct looks like before and yet it + supports the ROTATE option thanks to c-ares now storing the "optmask" + internally. Thus we should be ABI compatible with the past release(s) + now. My efforts mentioned below should not break backwards ABI compliance. + + Here's how I suggest we proceed with the API: + + ares_init() will be primary "channel creator" function. + + ares_init_options() will continue to work exactly like now and before. For + starters, it will be the (only) way to set the existing options. + + ares_save_options() will continue to work like today, but will ONLY save + options that you can set today (including ARES_OPT_ROTATE actually) but new + options that we add may not be saved with this. + + Instead we introduce: + + ares_dup() that instead can make a new channel and clone the config used + from an existing channel. It will then clone all config options, including + future new things we add. + + ares_set_*() style functions that set (new) config options. As a start we + simply add these for new functionality, but over time we can also introduce + them for existing "struct ares_options" so that we can eventually deprecate + the two ares_*_options() functions. + + ares_get_*() style functions for extracting info from a channel handle that + should be used instead of ares_save_options(). + +* Nov 26 2008 (Yang Tse) +- Brad Spencer provided changes to allow buildconf to work on OS X. + +- Gerald Combs fixed a bug in ares_parse_ptr_reply() which would cause a + buffer to shrink instead of expand if a reply contained 8 or more records. + +* Nov 25 2008 (Yang Tse) +- In preparation for the upcomming IPv6 nameservers patch, the internal + ares_addr union is now changed into an internal struct which also holds + the address family. + +* Nov 19 2008 (Daniel Stenberg) +- Brad Spencer brought the new function ares_gethostbyname_file() which simply + resolves a host name from the given file, using the regular hosts syntax. + +* Nov 1 2008 (Daniel Stenberg) +- Carlo Contavalli added support for the glibc "rotate" option, as documented + in man resolv.conf: + + causes round robin selection of nameservers from among those listed. This + has the effect of spreading the query load among all listed servers, rather + than having all clients try the first listed server first every time. + + You can enable it with ARES_OPT_ROTATE + +* Oct 21 2008 (Yang Tse) + Charles Hardin added handling of EINPROGRESS for UDP connects. + +* Oct 18 2008 (Daniel Stenberg) + Charles Hardin made adig support a regular numerical dotted IP address for the + -s option as well. + +* Oct 7 2008 (Yang Tse) +- Added --enable-optimize configure option to enable and disable compiler + optimizations to allow decoupled setting from --enable-debug. + +* Oct 2 2008 (Yang Tse) +- Added --enable-warnings configure option to enable and disable strict + compiler warnings to allow decoupled setting from --enable-debug. + +* Sep 17 2008 (Yang Tse) +- Code reorganization to allow internal/private use of "nameser.h" to any + system that lacks arpa/nameser.h or arpa/nameser_compat.h header files. + +* Sep 16 2008 (Yang Tse) +- Code reorganization to allow internal/private use of ares_writev to any + system that lacks the writev function. + +* Sep 15 2008 (Yang Tse) +- Code reorganization to allow internal/private use of ares_strcasecmp to any + system that lacks the strcasecmp function. + +- Improve configure detection of some string functions. + +* Sep 11 2008 (Yang Tse) +- Code reorganization to allow internal/private use of ares_strdup to any + system that lacks the strdup function. + +Version 1.5.3 (Aug 29, 2008) + +* Aug 25 2008 (Yang Tse) +- Improvement by Brad House: + + This patch addresses an issue in which a response could be sent back to the + source port of a client from a different address than the request was made to. + This is one form of a DNS cache poisoning attack. + + The patch simply uses recvfrom() rather than recv() and validates that the + address returned from recvfrom() matches the address of the server we have + connected to. Only necessary on UDP sockets as they are connection-less, TCP + is unaffected. + +- Fix by George Neill: + Fixed compilation of acountry sample application failure on some systems. + +* Aug 4 2008 (Daniel Stenberg) +- Fix by Tofu Linden: + + The symptom: + * Users (usually, but not always) on 2-Wire routers and the Comcast service + and a wired connection to their router would find that the second and + subsequent DNS lookups from fresh processes using c-ares to resolve the same + address would cause the process to never see a reply (it keeps polling for + around 1m15s before giving up). + + The repro: + * On such a machine (and yeah, it took us a lot of QA to find the systems + that reproduce such a specific problem!), do 'ahost www.secondlife.com', + then do it again. The first process's lookup will work, subsequent lookups + will time-out and fail. + + The cause: + * init_id_key() was calling randomize_key() *before* it initialized + key->state, meaning that the randomness generated by randomize_key() is + immediately overwritten with deterministic values. (/dev/urandom was also + being read incorrectly in the c-ares version we were using, but this was + fixed in a later version.) + * This makes the stream of generated query-IDs from any new c-ares process + be an identical and predictable sequence of IDs. + * This makes the 2-Wire's default built-in DNS server detect these queries + as probable-duplicates and (erroneously) not respond at all. + + +* Aug 4 2008 (Yang Tse) +- Autoconf 2.62 has changed the behaviour of the AC_AIX macro which we use. + Prior versions of autoconf defined _ALL_SOURCE if _AIX was defined. 2.62 + version of AC_AIX defines _ALL_SOURCE and other four preprocessor symbols + no matter if the system is AIX or not. To keep the traditional behaviour, + and an uniform one across autoconf versions AC_AIX is replaced with our + own internal macro CARES_CHECK_AIX_ALL_SOURCE. + +* Aug 1 2008 (Yang Tse) +- Configure process now checks if the preprocessor _REENTRANT symbol is already + defined. If it isn't currently defined a set of checks are performed to test + if its definition is required to make visible to the compiler a set of *_r + functions. Finally, if _REENTRANT is already defined or needed it takes care + of making adjustments necessary to ensure that it is defined equally for the + configure process tests and generated config file. + +* Jul 20 2008 (Yang Tse) +- When recvfrom prototype uses a void pointer for arguments 2, 5 or 6 this will + now cause the definition, as appropriate, of RECVFROM_TYPE_ARG2_IS_VOID, + RECVFROM_TYPE_ARG5_IS_VOID or RECVFROM_TYPE_ARG6_IS_VOID. + +* Jul 17 2008 (Yang Tse) +- RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined + to the data type pointed by its respective argument and not the pointer type. + +* Jul 16 2008 (Yang Tse) +- Improved configure detection of number of arguments for getservbyport_r. + Detection is now based on compilation checks instead of linker ones. + +- Configure process now checks availability of recvfrom() socket function and + finds out its return type and the types of its arguments. Added definitions + for non-configure systems config files, and introduced macro sreadfrom which + will be used on udp sockets as a recvfrom() wrapper in the future. + +* Jul 15 2008 (Yang Tse) +- Introduce definition of _REENTRANT symbol in setup.h to improve library + usability. Previously the configure process only used the AC_SYS_LARGEFILE + macro for debug builds, now it is also used for non-debug ones enabling the + use of configure options --enable-largefile and --disable-largefile which + might be needed for library compatibility. Remove checking the size of + curl_off_t, it is no longer needed. + +* Jul 3 2008 (Daniel Stenberg) +- Phil Blundell: If you ask ares_gethostbyname() to do an AF_INET6 lookup and + the target host has only A records, it automatically falls back to an + AF_INET lookup and gives you the A results. However, if the target host has + a CNAME record, this behaviour is defeated since the original query does + return some data even though ares_parse_aaa_reply() doesn't consider it + relevant. Here's a small patch to make it behave the same with and without + the CNAME. + +* Jul 2 2008 (Yang Tse) +- Fallback to gettimeofday when monotonic clock is unavailable at run-time. + +* Jun 30 2008 (Daniel Stenberg) + +- As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is + not posix or anything and thus c-ares failed to build on hurd (and possibly + elsewhere). The define was also somewhat artificially used in the windows + port. Now, I instead rewrote the use of gethostbyname to enlarge the host + name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN + define. I thus also removed the defien from the namser.h file where it was + once added for the windows build. + + I also fixed init_by_defaults() function to not leak memory in case if + error. + +* Jun 9 2008 (Yang Tse) + +- Make libcares.pc generated file for pkg-config include information relative + to the libraries needed for the static linking of c-ares. + +* May 30 2008 (Yang Tse) + +- Brad House fixed a missing header file inclusion in adig sample program. + +Version 1.5.2 (May 29, 2008) + +* May 13 2008 (Daniel Stenberg) + +- Introducing millisecond resolution support for the timeout option. See + ares_init_options()'s ARES_OPT_TIMEOUTMS. + +* May 9 2008 (Yang Tse) + +- Use monotonic time source if available, for private function ares__tvnow() + +* May 7 2008 (Daniel Stenberg) + +- Sebastian made c-ares able to return all PTR-records when doing reverse + lookups. It is not common practice to have multiple PTR-Records for a single + IP, but its perfectly legal and some sites have those. + +- Doug Goldstein provided a configure patch: updates autoconf 2.13 usage to + autoconf 2.57 usage (which is the version you have specified as the minimum + version). It's a minor change but it does clean up some warnings with newer + autoconf (specifically 2.62). + +* May 5 2008 (Yang Tse) + +- Improved parsing of resolver configuration files. + +* April 4 2008 (Daniel Stenberg) + +- Eino Tuominen improved the code when a file is used to seed the randomizer. + +- Alexey Simak made adig support NAPTR records + +- Alexey Simak fixed the VC dsp file by adding the missing source file + ares_expand_string.c + +* December 11 2007 (Gisle Vanem) + +- Added another sample application; acountry.c which converts an + IPv4-address(es) and/or host-name(s) to country-name and country-code. + This uses the service of the DNSBL at countries.nerd.dk. + +* December 3 2007 (Daniel Stenberg) + +- Brad Spencer fixed the configure script to assume that there's no + /dev/urandom when built cross-compiled as then the script cannot check for + it. + +- Erik Kline cleaned up ares_gethostbyaddr.c:next_lookup() somewhat + +Version 1.5.1 (Nov 21, 2007) + +* November 21 2007 (Daniel Stenberg) + +- Robin Cornelius pointed out that ares_llist.h was missing in the release + archive for 1.5.0 + +Version 1.5.0 (Nov 21, 2007) + +* October 2 2007 (Daniel Stenberg) + +- ares_strerror() segfaulted if the input error number was out of the currently + supported range. + +- Yang Tse: Avoid a segfault when generating a DNS "Transaction ID" in + internal function init_id_key() under low memory conditions. + +* September 28 2007 (Daniel Stenberg) + +- Bumped version to 1.5.0 for next release and soname bumped to 2 due to ABI + and API changes in the progress callback (and possibly more coming up from + Steinar) + +* September 28 2007 (Steinar H. Gunderson) + +- Don't skip a server if it's the only one. (Bugfix from the Google tree.) + +- Made the query callbacks receive the number of timeouts that happened during + the execution of a query, and updated documentation accordingly. (Patch from + the Google tree.) + +- Support a few more socket options: ARES_OPT_SOCK_SNDBUF and + ARES_OPT_SOCK_RCVBUF + +- Always register for TCP events even if there are no outstanding queries, as + the other side could always close the connection, which is a valid event + which should be responded to. + +* September 22 2007 (Daniel Stenberg) + +- Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in + several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that + if it fails and the socket is closed the following code doesn't try to use + the file descriptor. + +- Steinar H. Gunderson modified c-ares to now also do to DNS retries even when + TCP is used since there are several edge cases where it still makes sense. + +- Brad House provided a fix for ares_save_options(): + + Apparently I overlooked something with the ares_save_options() where it + would try to do a malloc(0) when no options of that type needed to be saved. + On most platforms, this was fine because malloc(0) doesn't actually return + NULL, but on AIX it does, so ares_save_options would return ARES_ENOMEM. + +* July 14 2007 (Daniel Stenberg) + +- Vlad Dinulescu fixed two outstanding valgrind reports: + + 1. In ares_query.c , in find_query_by_id we compare q->qid (which is a short + int variable) with qid, which is declared as an int variable. Moreover, + DNS_HEADER_SET_QID is used to set the value of qid, but DNS_HEADER_SET_QID + sets only the first two bytes of qid. I think that qid should be declared as + "unsigned short" in this function. + + 2. The same problem occurs in ares_process.c, process_answer() . query->qid + (an unsigned short integer variable) is compared with id, which is an + integer variable. Moreover, id is initialized from DNS_HEADER_QID which sets + only the first two bytes of id. I think that the id variable should be + declared as "unsigned short" in this function. + + Even after declaring these variables as "unsigned short", the valgrind + errors are still there. Which brings us to the third problem. + + 3. The third problem is that Valgrind assumes that query->qid is not + initialised correctly. And it does that because query->qid is set from + DNS_HEADER_QID(qbuf); Valgrind says that qbuf has unitialised bytes. And + qbuf has uninitialised bytes because of channel->next_id . And next_id is + set by ares_init.c:ares__generate_new_id() . I found that putting short r=0 + in this function (instead of short r) makes all Valgrind warnings go away. + I have studied ares__rc4() too, and this is the offending line: + + buffer_ptr[counter] ^= state[xorIndex]; (ares_query.c:62) + + This is what triggers Valgrind.. buffer_ptr is unitialised in this function, + and by applying ^= on it, it remains unitialised. + +Version 1.4.0 (June 8, 2007) + +* June 4 2007 (Daniel Stenberg) + +- James Bursa reported a major memory problem when resolving multi-IP names + and I found and fixed the problem. It was added by Ashish Sharma's patch + two days ago. + + When I then tried to verify multiple entries in /etc/hosts after my fix, I + got another segfault and decided this code was not ripe for inclusion and I + reverted the patch. + +* June 2 2007 + +- Brad Spencer found and fixed three flaws in the code, found with the new + gcc 4.2.0 warning: -Waddress + +- Brad House fixed VS2005 compiler warnings due to time_t being 64bit. + He also made recent Microsoft compilers use _strdup() instead of strdup(). + +- Brad House's man pages for ares_save_options() and ares_destroy_options() + were added. + +- Ashish Sharma provided a patch for supporting multiple entries in the + /etc/hosts file. Patch edited for coding style and functionality by me + (Daniel). + +* May 30 2007 + +- Shmulik Regev brought cryptographically secure transaction IDs: + + The c-ares library implementation uses a DNS "Transaction ID" field that is + seeded with a pseudo random number (based on gettimeofday) which is + incremented (++) between consecutive calls and is therefore rather + predictable. In general, predictability of DNS Transaction ID is a well + known security problem (e.g. + http://bak.spc.org/dms/archive/dns_id_attack.txt) and makes a c-ares based + implementation vulnerable to DNS poisoning. Credit goes to Amit Klein + (Trusteer) for identifying this problem. + + The patch I wrote changes the implementation to use a more secure way of + generating unique IDs. It starts by obtaining a key with reasonable entropy + which is used with an RC4 stream to generate the cryptographically secure + transaction IDs. + + Note that the key generation code (in ares_init:randomize_key) has two + versions, the Windows specific one uses a cryptographically safe function + provided (but undocumented :) by the operating system (described at + http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx). The + default implementation is a bit naive and uses the standard 'rand' + function. Surely a better way to generate random keys exists for other + platforms. + + The patch can be tested by using the adig utility and using the '-s' option. + +- Brad House added ares_save_options() and ares_destroy_options() that can be + used to keep options for later re-usal when ares_init_options() is used. + + Problem: Calling ares_init() for each lookup can be unnecessarily resource + intensive. On windows, it must LoadLibrary() or search the registry + on each call to ares_init(). On unix, it must read and parse + multiple files to obtain the necessary configuration information. In + a single-threaded environment, it would make sense to only + ares_init() once, but in a heavily multi-threaded environment, it is + undesirable to ares_init() and ares_destroy() for each thread created + and track that. + + Solution: Create ares_save_options() and ares_destroy_options() functions to + retrieve and free options obtained from an initialized channel. The + options populated can be used to pass back into ares_init_options(), + it should populate all needed fields and not retrieve any information + from the system. Probably wise to destroy the cache every minute or + so to prevent the data from becoming stale. + +- Daniel S added ares_process_fd() to allow applications to ask for processing + on specific sockets and thus avoiding select() and associated + functions/macros. This function will be used by upcoming libcurl releases + for this very reason. It also made me export the ares_socket_t type in the + public ares.h header file, since ares_process_fd() uses that type for two of + the arguments. + +* May 25 2007 + +- Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows + that could cause it to return a bad return code. + +* April 16 2007 + +- Yang Tse: Provide ares_getopt() command-line parser function as a source + code helper function, not belonging to the actual c-ares library. + +* February 19 2007 + +- Vlad Dinulescu added ares_parse_ns_reply(). + +* February 13 2007 + +- Yang Tse: Fix failure to get the search sequence of /etc/hosts and + DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when + /etc/resolv.conf did not exist or was unable to read it. + +* November 22 2006 + +- Install ares_dns.h too + +- Michael Wallner fixed this problem: When I set domains in the options + struct, and there are domain/search entries in /etc/resolv.conf, the domains + of the options struct will be overridden. + +* November 6 2006 + +- Yang Tse removed a couple of potential zero size memory allocations. + +- Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel) + broke in the 1.3.2 release. We should switch to a system where that file is + auto-generated. We could rip some code for that from curl... + +Version 1.3.2 (November 3, 2006) + +* October 12 2006 + +- Prevent ares_getsock() to overflow if more than 16 sockets are used. + +* September 11 2006 + +- Guilherme Balena Versiani: I noted a strange BUG in Win32 port + (ares_init.c/get_iphlpapi_dns_info() function): when I disable the network + by hand or disconnect the network cable in Windows 2000 or Windows XP, my + application gets 127.0.0.1 as the only name server. The problem comes from + 'GetNetworkParams' function, that returns the empty string "" as the only + name server in that case. Moreover, the Windows implementation of + inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE. + +* August 29 2006 + +- Brad Spencer did + + o made ares_version.h use extern "C" for c++ compilers + o fixed compiler warnings in ares_getnameinfo.c + o fixed a buffer position init for TCP reads + +* August 3 2006 + +- Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and + not always zero! + +Version 1.3.1 (June 24, 2006) + +* July 23, 2006 + +- Gisle Vanem added getopt() to the ahost program. Currently accepts + only [-t {a|aaaa}] to specify address family in ares_gethostbyname(). + +* June 19, 2006 + +- (wahern) Removed "big endian" DNS section and RR data integer parser + macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise + operations in C operate on logical values. And in any event the octets are + already in big-endian (aka network) byte order so they're being reversed + (thus the source of the breakage). + +* June 18, 2006 + +- William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls + from area_process.c. + + TODO: Handle one last EAGAIN for a UDP socket send(2) in + ares__send_query(). + +* May 10, 2006 + +- Bram Matthys brought my attention to a libtool peculiarity where detecting + things such as C++ compiler actually is a bad thing and since we don't need + that detection I added a work-around, much inspired by a previous patch by + Paolo Bonzini. This also shortens the configure script quite a lot. + +* May 3, 2006 + +- Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes + c-ares call a callback on socket state changes. A better way than the + ares_getsock() to get full control over the socket state. + +* January 9, 2006 + +- Alexander Lazic improved the getservbyport_r() configure check. + +* January 6, 2006 + +- Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS + variable for easier controlling what it does and how it runs. + +* January 5, 2006 + +- James Bursa fixed c-ares to find the hosts file on RISC OS, and made it + build with newer gcc versions that no longer defines "riscos". + +* December 22 + +- Daniel Stenberg added ares_getsock() that extracts the set of sockets to + wait for action on. Similar to ares_fds() but not restricted to using + select() for the waiting. + +* November 25 + +- Yang Tse fixed some send() / recv() compiler warnings + +* September 18 + +- Added constants that will be used by ares_getaddrinfo + +- Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it + is available to ensure it works properly in a threaded environment. + +* September 10 + +- configure fix for detecting a member in the sockaddr_in6 struct which failed + on ipv6-enabled HP-UX 11.00 + +Version 1.3.0 (August 29, 2005) + +* August 21 + +- Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info() + when getting the DNS server etc. + +* June 19 + +- Added some checks for the addrinfo structure. + +* June 2 + +- William Ahern: + + Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a + read event can come back from poll() on a valid SOCK_DGRAM socket but + recv(2) will still block. This patch doesn't ignore EAGAIN in + read_udp_packets(), though maybe it should. (This patch was edited by Daniel + Stenberg and a new configure test was added (imported from curl's configure) + to properly detect what non-blocking socket approach to use.) + + I'm not quite sure how this was happening, but I've been seeing PTR queries + which seem to return empty responses. At least, they were empty when calling + ares_expand_name() on the record. Here's a patch which guarantees to + NUL-terminate the expanded name. The old behavior failed to NUL-terminate if + len was 0, and this was causing strlen() to run past the end of the buffer + after calling ares_expand_name() and getting ARES_SUCCESS as the return + value. If q is not greater than *s then it's equal and *s is always + allocated with at least one byte. + +* May 16 + +- Added ares_getnameinfo which mimics the getnameinfo API (another feature + that could use testing). + +* May 14 + +- Added an inet_ntop function from BIND for systems that do not have it. + +* April 9 + +- Made sortlist support IPv6 (this can probably use some testing). + +- Made sortlist support CIDR matching for IPv4. + +* April 8 + +- Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist + does not work with IPv6. Also provided an implementation of bitncmp from + BIND for systems that do not supply this function. This will be used to add + IPv6 support to sortlist. + +- Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family. + The function can lookup IPv6 addresses both from files (/etc/hosts) and + DNS lookups. + +* April 7 + +- Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac + OS X. + +* April 5 + +- Dominick Meglio: Provided implementations of inet_net_pton and inet_pton + from BIND for systems that do not include these functions. + +* March 11, 2005 + +- Dominick Meglio added ares_parse_aaaa_reply.c and did various + adjustments. The first little steps towards IPv6 support! + +* November 7 + +- Fixed the VC project and makefile to use ares_cancel and ares_version + +* October 24 + +- The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw. + This is now fixed. + +Version 1.2.1 (October 20, 2004) + +* September 29 + +- Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital + when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for + other OSes. He made c-ares check for and understand it if present. + +- Now c-ares will use local host name lookup _before_ DNS resolving by default + if nothing else is told. + +* September 26 + +- Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf + file to determine the sequence in which to search /etc/hosts and DNS. So on + systems where this order is defined by /etc/host.conf instead of a "lookup" + entry in /etc/resolv.conf, c-ares will always default to looking in DNS + first, and /etc/hosts second. + + c-ares now looks at + + 1) resolv.conf (for the "lookup" line); + 2) nsswitch.fon (for the "hosts:" line); + 3) host.conf (for the "order" line). + + First match wins. + +- Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is + located in a static location. It assumed + C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact, + the location of the HOSTS file can be changed via a registry setting. + + There is a key called DatabasePath which specifies the path to the HOSTS + file: + http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx + + The patch will make c-ares correctly consult the registry for the location + of this file. + +* August 29 + +- Gisle Vanem fixed the MSVC build files. + +* August 20 + +- Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack. + +* August 13 + +- Harshal Pradhan made a minor syntax change in ares_init.c to make it build + fine with MSVC 7.1 + +* July 24 + +- Made the lib get built static only if --enable-debug is used. + +- Gisle Vanem fixed: + + Basically in loops like handle_errors(), 'query->next' was assigned a local + variable and then query was referenced after the memory was freed by + next_server(). I've changed that so next_server() and end_query() returns + the next query. So callers should use this ret-value. + + The next problem was that 'server->tcp_buffer_pos' had a random value at + entry to 1st recv() (luckily causing Winsock to return ENOBUFS). + + I've also added a ares_writev() for Windows to streamline the code a bit + more. + +* July 20 +- Fixed a few variable return types for some system calls. Made configure + check for ssize_t to make it possible to use that when receiving the send() + error code. This is necessary to prevent compiler warnings on some systems. + +- Made configure create config.h, and all source files now include setup.h that + might include the proper config.h (or a handicrafted alternative). + +- Switched to 'ares_socket_t' type for sockets in ares, since Windows don't + use 'int' for that. + +- automake-ified and libool-ified c-ares. Now it builds libcares as a shared + lib on most platforms if wanted. (This bloated the size of the release + archive with another 200K!) + +- Makefile.am now uses Makefile.inc for the c sources, h headers and man + pages, to make it easier for other makefiles to use the exact same set of + files. + +- Adjusted 'maketgz' to use the new automake magic when building distribution + archives. + +- Anyone desires HTML and/or PDF versions of the man pages in the release + archives? + +* July 3 +- Gnter Knauf made c-ares build and run on Novell Netware. + +* July 1 +- Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp + fixes and made ares not use 'errno' to provide further info on Windows. + +* June 30 +- Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack. + +* June 10 +- Gisle Vanem's init patch for Windows: + + The init_by_resolv_conf() function fetches the DNS-server(s) + from a series of registry branches. + + This can be wrong in the case where DHCP has assigned nameservers, but the + user has overridden these servers with other prefered settings. Then it's + wrong to use the DHCPNAMESERVER setting in registry. + + In the case of no global DHCP-assigned or fixed servers, but DNS server(s) + per adapter, one has to query the adapter branches. But how can c-ares know + which adapter is valid for use? AFAICS it can't. There could be one adapter + that is down (e.g. a VPN adapter). + + So it's better to leave this to the IP Helper API (iphlapi) available in + Win-98/2000 and later. My patch falls-back to the old way if not available. + +* June 8 +- James Bursa fixed an init issue for RISC OS. + +* May 11 +- Nico Stappenbelt reported that when processing domain and search lines in + the resolv.conf file, the first entry encountered is processed and used as + the search list. According to the manual pages for both Linux, Solaris and + Tru64, the last entry of either a domain or a search field is used. + + This is now adjusted in the code + +Version 1.2.0 (April 13, 2004) + +* April 2, 2004 +- Updated various man pages to look nicer when converted to HTML on the web + site. + +* April 1, 2004 +- Dirk Manske provided a new function that is now named ares_cancel(). It is + used to cancel/cleanup a resolve/request made using ares functions on the + given ares channel. It does not destroy/kill the ares channel itself. + +- Dominick Meglio cleaned up the formatting in several man pages. + +* March 30, 2004 +- Dominick Meglio's new ares_expand_string. A helper function when decoding + incoming DNS packages. + +- Daniel Stenberg modified the Makefile.in to use a for loop for the man page + installation to improve overview and make it easier to add man pages. + +Version 1.1.0 (March 11, 2004) + +* March 9, 2004 +- Gisle Vanem improved build on Windows. + +* February 25, 2004 +- Dan Fandrich found a flaw in the Feb 22 fix. + +- Added better configure --enable-debug logic (taken from the curl configure + script). Added acinclude.m4 to the tarball. + +* February 23, 2004 +- Removed ares_free_errmem(), the function, the file and the man page. It was + not used and it did nothing. + +- Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of + compiler warnings on picky compilers. + +* February 22, 2004 +- Dominick Meglio made ares init support multiple name servers in the + NameServer key on Windows. + +* February 16, 2004 +- Modified ares_private.h to include libcurl's memory debug header if + CURLDEBUG is set. This makes all the ares-functions supervised properly by + the curl test suite. This also forced me to add inclusion of the + ares_private.h header in a few more files that are using some kind of + memory-related resources. + +- Made the makefile only build ahost and adig if 'make demos' is used. + +* February 10, 2004 +- Dirk Manske made ares_version.h installed with 'make install' + +* February 4, 2004 +- ares_free_errmem() is subject for removal, it is simply present for future + purposes, and since we removed the extra parameter in strerror() it won't + be used by c-ares! +- configure --enable-debug now enables picky compiler options if gcc is used +- fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk + reported + +Version 1.0.0 (February 3, 2004) + +* February 3, 2004 +- now we produce the libcares.a library instead of the previous libares.a + since we are no longer compatible + +* February 2, 2004 + +- ares_strerror() has one argument less. This is the first official + modification of the existing provided ares API. + +* January 29, 2004 + +- Dirk Manske fixed how the socket is set non-blocking. + +* January 4, 2004 + +- Dominick Meglio made the private gettimeofday() become ares_gettimeofday() + instead in order to not pollute the name space and risk colliding with + other libraries' versions of this function. + +* October 24, 2003. Daniel Stenberg + + Added ares_version(). + +Version 1.0-pre1 (8 October 2003) + +- James Bursa made it run on RISC OS + +- Dominick Meglio made it run fine on NT4 + +- Duncan Wilcox made it work fine on Mac OS X + +- Daniel Stenberg adjusted the windows port + +- liren at vivisimo.com made the initial windows port + +* Imported the sources from ares 1.1.1 diff --git a/Makefile.Watcom b/Makefile.Watcom new file mode 100644 index 0000000..7a450a0 --- /dev/null +++ b/Makefile.Watcom @@ -0,0 +1,164 @@ +# +# Watcom / OpenWatcom / Win32 makefile for cares. +# Quick hack by Guenter; comments to: /dev/nul +# + +!ifndef %watcom +!error WATCOM environment variable not set! +!else +SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h +SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386 +!endif + +!ifdef %libname +LIBNAME = $(%libname) +!else +LIBNAME = cares +!endif +TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib +DEMOS = adig.exe ahost.exe acountry.exe + +CC = wcc386 +LD = wlink +AR = wlib +RC = wrc + +!ifdef __LOADDLL__ +! loaddll wcc386 wccd386 +! loaddll wpp386 wppd386 +! loaddll wlib wlibd +!endif + +!if $(__VERSION__) < 1250 +RM = del /q /f 2>NUL +!else +RM = rm -f +!endif +MD = mkdir +RD = rmdir /q /s 2>NUL +CP = copy + +CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm & + -wcd=201 -bt=nt -d+ -dWIN32 -dCARES_BUILDING_LIBRARY & + -dNTDDI_VERSION=0x05010000 -I. $(SYS_INCL) + +LFLAGS = option quiet, map, caseexact, eliminate + +!ifdef %debug +DEBUG = -dDEBUG=1 -dDEBUGBUILD +CFLAGS += -d3 $(DEBUG) +LFLAGS += debug all +!else +CFLAGS += -d0 +!endif + +CFLAGS += -d_WIN32_WINNT=0x0501 + +# +# Change to suite. +# +!ifdef %use_watt32 +CFLAGS += -dWATT32 -I$(%watt_root)\inc +!endif + +OBJ_BASE = WC_Win32.obj +LINK_ARG = $(OBJ_BASE)\dyn\wlink.arg +LIB_ARG = $(OBJ_BASE)\stat\wlib.arg + +# In order to process Makefile.inc wmake must be called with -u switch! +!ifneq __MAKEOPTS__ -u +!error You MUST call wmake with the -u switch! +!else +!include Makefile.inc +!endif + +OBJS = $(CSOURCES:.c=.obj) +OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\) + +# +# Use $(OBJS) as a template to generate $(OBJS_STAT) and $(OBJS_DYN). +# +OBJ_DIR = $(OBJ_BASE)\stat +OBJS_STAT = $+ $(OBJS) $- + +OBJ_DIR = $(OBJ_BASE)\dyn +OBJS_DYN = $+ $(OBJS) $- + +ARESBUILDH = ares_build.h +RESOURCE = $(OBJ_BASE)\dyn\cares.res + +all: $(ARESBUILDH) $(OBJ_BASE) $(TARGETS) $(DEMOS) .SYMBOLIC + @echo Welcome to cares + +$(OBJ_BASE): + -$(MD) $^@ + -$(MD) $^@\stat + -$(MD) $^@\dyn + -$(MD) $^@\demos + +$(ARESBUILDH): .EXISTSONLY + $(CP) $^@.dist $^@ + +$(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG) + $(LD) name $^@ @$]@ + +$(LIBNAME).lib: $(OBJS_STAT) $(LIB_ARG) + $(AR) -q -b -c $^@ @$]@ + +adig.exe: $(OBJ_BASE)\demos\adig.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +ahost.exe: $(OBJ_BASE)\demos\ahost.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +acountry.exe: $(OBJ_BASE)\demos\acountry.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +clean: .SYMBOLIC + -$(RM) $(OBJS_STAT) + -$(RM) $(OBJS_DYN) + -$(RM) $(RESOURCE) $(LINK_ARG) $(LIB_ARG) + +vclean realclean: clean .SYMBOLIC + -$(RM) $(TARGETS) $(LIBNAME).map + -$(RM) $(DEMOS) $(DEMOS:.exe=.map) + -$(RD) $(OBJ_BASE)\stat + -$(RD) $(OBJ_BASE)\dyn + -$(RD) $(OBJ_BASE)\demos + -$(RD) $(OBJ_BASE) + +.ERASE +$(RESOURCE): cares.rc .AUTODEPEND + $(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\dyn}.obj: + $(CC) $(CFLAGS) -bd $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\stat}.obj: + $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\demos}.obj: + $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@ + +$(LINK_ARG): $(__MAKEFILES__) + %create $^@ + @%append $^@ system nt dll + @%append $^@ file { $(OBJS_DYN) } + @%append $^@ option res=$(RESOURCE), implib=$(LIBNAME)_imp.lib + @%append $^@ $(LFLAGS) + @%append $^@ libpath $(SYS_LIBS) +# @%append $^@ library clib3r.lib +!ifdef %use_watt32 + @%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib +!else + @%append $^@ library ws2_32.lib +!endif + +$(LIB_ARG): $(__MAKEFILES__) + %create $^@ + @for %f in ($(OBJS_STAT)) do @%append $^@ +- %f + + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..8969403 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,175 @@ +AUTOMAKE_OPTIONS = foreign nostdinc + +ACLOCAL_AMFLAGS = -I m4 + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. +# +# When using the low-level hard-hacking memory leak tracking code from +# libcurl the generated curl/curlbuild.h file must also be reachable. +# Using the libcurl lowlevel code from within c-ares library is ugly and +# only works when c-ares is built and linked with a similarly debug-build +# libcurl, but we do this anyway for convenience. +# +# $(top_builddir)/../include/curl for generated curlbuild.h included from curl.h +# $(top_builddir)/../include is for libcurl's generated curl/curlbuild.h file +# $(top_srcdir)/../include is for libcurl's external include files +# $(top_builddir)/../lib is for libcurl's generated lib/curl_config.h file +# $(top_srcdir)/../lib is for libcurl's lib/setup.h and other "private" files +# $(top_builddir) is for c-ares's generated ares_config.h file +# $(top_srcdir) is for c-ares's ares_setup.h and other "c-ares-private" files + +if CURLDEBUG +INCLUDES = -I$(top_builddir)/../include/curl \ + -I$(top_builddir)/../include \ + -I$(top_srcdir)/../include \ + -I$(top_builddir)/../lib \ + -I$(top_srcdir)/../lib \ + -I$(top_builddir) \ + -I$(top_srcdir) +else +INCLUDES = -I$(top_builddir) \ + -I$(top_srcdir) +endif + +lib_LTLIBRARIES = libcares.la + +man_MANS = $(MANPAGES) + +MSVCFILES = vc/vc6aws.dsw vc/acountry/vc6acountry.dsp vc/adig/vc6adig.dsp \ + vc/ahost/vc6ahost.dsp vc/cares/vc6cares.dsp vc/cares/vc6cares.dsw + +if CURLDEBUG +PROGS = +else +PROGS = ahost adig acountry +endif + +noinst_PROGRAMS =$(PROGS) + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = AUTHORS CHANGES README.cares Makefile.inc Makefile.dj \ + Makefile.m32 Makefile.netware Makefile.msvc Makefile.Watcom $(man_MANS) \ + config-win32.h RELEASE-NOTES libcares.pc.in buildconf get_ver.awk maketgz \ + TODO ares_build.h.in $(PDFPAGES) cares.rc README.msvc $(MSVCFILES) \ + $(CSOURCES) $(HHEADERS) config-dos.h acountry.1 adig.1 ahost.1 + +CLEANFILES = $(PDFPAGES) $(HTMLPAGES) + +DISTCLEANFILES = ares_build.h + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libcares.pc + +VER=-version-info 2:0:0 +# This flag accepts an argument of the form current[:revision[:age]]. So, +# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to +# 1. +# +# If either revision or age are omitted, they default to 0. Also note that age +# must be less than or equal to the current interface number. +# +# Here are a set of rules to help you update your library version information: +# +# 1.Start with version information of 0:0:0 for each libtool library. +# +# 2.Update the version information only immediately before a public release of +# your software. More frequent updates are unnecessary, and only guarantee +# that the current interface number gets larger faster. +# +# 3.If the library source code has changed at all since the last update, then +# increment revision (c:r+1:a) +# +# 4.If any interfaces have been added, removed, or changed since the last +# update, increment current, and set revision to 0. (c+1:r=0:a) +# +# 5.If any interfaces have been added since the last public release, then +# increment age. (c:r:a+1) +# +# 6.If any interfaces have been removed since the last public release, then +# set age to 0. (c:r:a=0) +# + +if NO_UNDEFINED +# The -no-undefined flag is crucial for this to build fine on some platforms +UNDEF = -no-undefined +endif + +libcares_la_LDFLAGS = $(UNDEF) $(VER) + +# Add -Werror if defined +CFLAGS += @CARES_CFLAG_EXTRAS@ + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include Makefile.inc + +libcares_la_SOURCES = $(CSOURCES) $(HHEADERS) + +# where to install the c-ares headers +libcares_ladir = $(includedir) +# what headers to install on 'make install': +libcares_la_HEADERS = ares.h ares_version.h ares_dns.h \ + ares_build.h ares_rules.h + +ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +ahost_LDADD = $(top_builddir)/libcares.la +ahost_CFLAGS = $(AM_CFLAGS) + +adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_LDADD = $(top_builddir)/libcares.la +adig_CFLAGS = $(AM_CFLAGS) + +acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +acountry_LDADD = $(top_builddir)/libcares.la +acountry_CFLAGS = $(AM_CFLAGS) + +SOURCEDMANDIR = man3 +SOURCEDMANPAGES = ares_init.3 + +clean-local: clean-sourced-manpages + +clean-sourced-manpages: + @srcdmandir='$(SOURCEDMANDIR)'; \ + echo "rm -rf $(top_builddir)/$$srcdmandir"; \ + rm -rf $(top_builddir)/$$srcdmandir + +sourced-manpages: clean-sourced-manpages + @srcdmandir='$(SOURCEDMANDIR)'; \ + srcdmanfiles='$(SOURCEDMANPAGES)'; \ + mkdir $(top_builddir)/$$srcdmandir; \ + for file in $$srcdmanfiles; do \ + if test -f $(top_srcdir)/$$file; then \ + echo "cp $(top_srcdir)/$$file $(top_builddir)/$$srcdmandir/$$file"; \ + cp $(top_srcdir)/$$file $(top_builddir)/$$srcdmandir/$$file; \ + fi; \ + done + +MAN2HTML = roffit --mandir=. < $< >$@ + +SUFFIXES = .3 .html + +html: sourced-manpages $(HTMLPAGES) + +.3.html: + $(MAN2HTML) + +pdf: sourced-manpages $(PDFPAGES) + +.3.pdf: + @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ + groff -Tps -man $< >$$foo.ps; \ + ps2pdf $$foo.ps $@; \ + rm $$foo.ps; \ + echo "converted $< to $@") + +# Make files named *.dist replace the file without .dist extension +dist-hook: + find $(distdir) -name "*.dist" -exec rm {} \; + (distit=`find $(srcdir) -name "*.dist"`; \ + for file in $$distit; do \ + strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ + cp $$file $(distdir)$$strip; \ + done) diff --git a/Makefile.dj b/Makefile.dj new file mode 100644 index 0000000..799611f --- /dev/null +++ b/Makefile.dj @@ -0,0 +1,85 @@ +# +# c-ares Makefile for djgpp/gcc/Watt-32. +# By Gisle Vanem 2004. +# + + +TOPDIR = .. + +DEPEND_PREREQ = ares_config.h + +include ../packages/DOS/common.dj +include Makefile.inc + +CFLAGS += -DWATT32 -Dselect=select_s + +LDFLAGS = -s + +ifeq ($(USE_CURLDEBUG),1) + EX_LIBS = ../lib/libcurl.a + OBJ_HACK = $(OBJECTS) +else + OBJ_HACK = libcares.a +endif + +ifeq ($(USE_SSL),1) + EX_LIBS += $(OPENSSL_ROOT)/lib/libssl.a $(OPENSSL_ROOT)/lib/libcrypt.a +endif + +ifeq ($(USE_ZLIB),1) + EX_LIBS += $(ZLIB_ROOT)/libz.a +endif + +ifeq ($(USE_IDNA),1) + EX_LIBS += $(LIBIDN_ROOT)/lib/dj_obj/libidn.a -liconv +endif + +EX_LIBS += $(WATT32_ROOT)/lib/libwatt.a + +OBJECTS = $(addprefix $(OBJ_DIR)/, $(CSOURCES:.c=.o)) + +all: $(OBJ_DIR) ares_config.h libcares.a ahost.exe adig.exe acountry.exe + @echo Welcome to c-ares. + +libcares.a: $(OBJECTS) + ar rs $@ $? + +ares_config.h: config-dos.h + $(COPY) $^ $@ + +ahost.exe: ahost.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK) + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS) + +adig.exe: adig.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK) + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS) + +acountry.exe: acountry.c $(OBJ_DIR)/ares_getopt.o $(OBJ_HACK) + $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $^ $(EX_LIBS) + +# clean generated files +# +genclean: + - $(DELETE) ares_config.h + +# clean object files and subdir +# +objclean: genclean + - $(DELETE) $(OBJ_DIR)$(DS)*.o + - $(RMDIR) $(OBJ_DIR) + +# clean without removing built library and programs +# +clean: objclean + - $(DELETE) depend.dj + +# clean everything +# +realclean vclean: clean + - $(DELETE) libcares.a + - $(DELETE) acountry.exe + - $(DELETE) adig.exe + - $(DELETE) ahost.exe + - $(DELETE) libcares.a + +-include depend.dj + diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..1b8b556 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1458 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = $(am__EXEEXT_1) +DIST_COMMON = README $(am__configure_deps) $(libcares_la_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.inc $(srcdir)/ares_build.h.in \ + $(srcdir)/ares_config.h.in $(srcdir)/libcares.pc.in \ + $(top_srcdir)/configure AUTHORS NEWS TODO compile config.guess \ + config.sub depcomp install-sh ltmain.sh missing mkinstalldirs +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-override.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/cares-system.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-translit.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno configure.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ares_config.h ares_build.h +CONFIG_CLEAN_FILES = libcares.pc +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \ + "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libcares_ladir)" +libLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(lib_LTLIBRARIES) +libcares_la_LIBADD = +am__objects_1 = ares__close_sockets.lo ares__get_hostent.lo \ + ares__read_line.lo ares__timeval.lo ares_cancel.lo \ + ares_data.lo ares_destroy.lo ares_expand_name.lo \ + ares_expand_string.lo ares_fds.lo ares_free_hostent.lo \ + ares_free_string.lo ares_getenv.lo ares_gethostbyaddr.lo \ + ares_gethostbyname.lo ares_getnameinfo.lo ares_getsock.lo \ + ares_init.lo ares_library_init.lo ares_llist.lo \ + ares_mkquery.lo ares_nowarn.lo ares_options.lo \ + ares_parse_a_reply.lo ares_parse_aaaa_reply.lo \ + ares_parse_mx_reply.lo ares_parse_ns_reply.lo \ + ares_parse_ptr_reply.lo ares_parse_srv_reply.lo \ + ares_parse_txt_reply.lo ares_platform.lo ares_process.lo \ + ares_query.lo ares_search.lo ares_send.lo ares_strcasecmp.lo \ + ares_strdup.lo ares_strerror.lo ares_timeout.lo \ + ares_version.lo ares_writev.lo bitncmp.lo inet_net_pton.lo \ + inet_ntop.lo windows_port.lo +am__objects_2 = +am_libcares_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libcares_la_OBJECTS = $(am_libcares_la_OBJECTS) +@CURLDEBUG_FALSE@am__EXEEXT_1 = ahost$(EXEEXT) adig$(EXEEXT) \ +@CURLDEBUG_FALSE@ acountry$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__objects_3 = acountry-ares_getopt.$(OBJEXT) \ + acountry-ares_nowarn.$(OBJEXT) \ + acountry-ares_strcasecmp.$(OBJEXT) \ + acountry-inet_net_pton.$(OBJEXT) acountry-inet_ntop.$(OBJEXT) +am_acountry_OBJECTS = acountry-acountry.$(OBJEXT) $(am__objects_3) \ + $(am__objects_2) +acountry_OBJECTS = $(am_acountry_OBJECTS) +acountry_DEPENDENCIES = $(top_builddir)/libcares.la +am__objects_4 = adig-ares_getopt.$(OBJEXT) adig-ares_nowarn.$(OBJEXT) \ + adig-ares_strcasecmp.$(OBJEXT) adig-inet_net_pton.$(OBJEXT) \ + adig-inet_ntop.$(OBJEXT) +am_adig_OBJECTS = adig-adig.$(OBJEXT) $(am__objects_4) \ + $(am__objects_2) +adig_OBJECTS = $(am_adig_OBJECTS) +adig_DEPENDENCIES = $(top_builddir)/libcares.la +am__objects_5 = ahost-ares_getopt.$(OBJEXT) \ + ahost-ares_nowarn.$(OBJEXT) ahost-ares_strcasecmp.$(OBJEXT) \ + ahost-inet_net_pton.$(OBJEXT) ahost-inet_ntop.$(OBJEXT) +am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_5) \ + $(am__objects_2) +ahost_OBJECTS = $(am_ahost_OBJECTS) +ahost_DEPENDENCIES = $(top_builddir)/libcares.la +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libcares_la_SOURCES) $(acountry_SOURCES) $(adig_SOURCES) \ + $(ahost_SOURCES) +DIST_SOURCES = $(libcares_la_SOURCES) $(acountry_SOURCES) \ + $(adig_SOURCES) $(ahost_SOURCES) +man3dir = $(mandir)/man3 +NROFF = nroff +MANS = $(man_MANS) +pkgconfigDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgconfig_DATA) +libcares_laHEADERS_INSTALL = $(INSTALL_HEADER) +HEADERS = $(libcares_la_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ + +# Add -Werror if defined +CFLAGS = @CFLAGS@ @CARES_CFLAG_EXTRAS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLDEBUG_FALSE = @CURLDEBUG_FALSE@ +CURLDEBUG_TRUE = @CURLDEBUG_TRUE@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@ +NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH = @PATH@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANDOM_FILE = @RANDOM_FILE@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +AUTOMAKE_OPTIONS = foreign nostdinc +ACLOCAL_AMFLAGS = -I m4 +@CURLDEBUG_FALSE@INCLUDES = -I$(top_builddir) \ +@CURLDEBUG_FALSE@ -I$(top_srcdir) + + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. +# +# When using the low-level hard-hacking memory leak tracking code from +# libcurl the generated curl/curlbuild.h file must also be reachable. +# Using the libcurl lowlevel code from within c-ares library is ugly and +# only works when c-ares is built and linked with a similarly debug-build +# libcurl, but we do this anyway for convenience. +# +# $(top_builddir)/../include/curl for generated curlbuild.h included from curl.h +# $(top_builddir)/../include is for libcurl's generated curl/curlbuild.h file +# $(top_srcdir)/../include is for libcurl's external include files +# $(top_builddir)/../lib is for libcurl's generated lib/curl_config.h file +# $(top_srcdir)/../lib is for libcurl's lib/setup.h and other "private" files +# $(top_builddir) is for c-ares's generated ares_config.h file +# $(top_srcdir) is for c-ares's ares_setup.h and other "c-ares-private" files +@CURLDEBUG_TRUE@INCLUDES = -I$(top_builddir)/../include/curl \ +@CURLDEBUG_TRUE@ -I$(top_builddir)/../include \ +@CURLDEBUG_TRUE@ -I$(top_srcdir)/../include \ +@CURLDEBUG_TRUE@ -I$(top_builddir)/../lib \ +@CURLDEBUG_TRUE@ -I$(top_srcdir)/../lib \ +@CURLDEBUG_TRUE@ -I$(top_builddir) \ +@CURLDEBUG_TRUE@ -I$(top_srcdir) + +lib_LTLIBRARIES = libcares.la +man_MANS = $(MANPAGES) +MSVCFILES = vc/vc6aws.dsw vc/acountry/vc6acountry.dsp vc/adig/vc6adig.dsp \ + vc/ahost/vc6ahost.dsp vc/cares/vc6cares.dsp vc/cares/vc6cares.dsw + +@CURLDEBUG_FALSE@PROGS = ahost adig acountry +@CURLDEBUG_TRUE@PROGS = + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = AUTHORS CHANGES README.cares Makefile.inc Makefile.dj \ + Makefile.m32 Makefile.netware Makefile.msvc Makefile.Watcom $(man_MANS) \ + config-win32.h RELEASE-NOTES libcares.pc.in buildconf get_ver.awk maketgz \ + TODO ares_build.h.in $(PDFPAGES) cares.rc README.msvc $(MSVCFILES) \ + $(CSOURCES) $(HHEADERS) config-dos.h acountry.1 adig.1 ahost.1 + +CLEANFILES = $(PDFPAGES) $(HTMLPAGES) +DISTCLEANFILES = ares_build.h +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libcares.pc +VER = -version-info 2:0:0 +# This flag accepts an argument of the form current[:revision[:age]]. So, +# passing -version-info 3:12:1 sets current to 3, revision to 12, and age to +# 1. +# +# If either revision or age are omitted, they default to 0. Also note that age +# must be less than or equal to the current interface number. +# +# Here are a set of rules to help you update your library version information: +# +# 1.Start with version information of 0:0:0 for each libtool library. +# +# 2.Update the version information only immediately before a public release of +# your software. More frequent updates are unnecessary, and only guarantee +# that the current interface number gets larger faster. +# +# 3.If the library source code has changed at all since the last update, then +# increment revision (c:r+1:a) +# +# 4.If any interfaces have been added, removed, or changed since the last +# update, increment current, and set revision to 0. (c+1:r=0:a) +# +# 5.If any interfaces have been added since the last public release, then +# increment age. (c:r:a+1) +# +# 6.If any interfaces have been removed since the last public release, then +# set age to 0. (c:r:a=0) +# + +# The -no-undefined flag is crucial for this to build fine on some platforms +@NO_UNDEFINED_TRUE@UNDEF = -no-undefined +libcares_la_LDFLAGS = $(UNDEF) $(VER) +CSOURCES = ares__close_sockets.c \ + ares__get_hostent.c \ + ares__read_line.c \ + ares__timeval.c \ + ares_cancel.c \ + ares_data.c \ + ares_destroy.c \ + ares_expand_name.c \ + ares_expand_string.c \ + ares_fds.c \ + ares_free_hostent.c \ + ares_free_string.c \ + ares_getenv.c \ + ares_gethostbyaddr.c \ + ares_gethostbyname.c \ + ares_getnameinfo.c \ + ares_getsock.c \ + ares_init.c \ + ares_library_init.c \ + ares_llist.c \ + ares_mkquery.c \ + ares_nowarn.c \ + ares_options.c \ + ares_parse_a_reply.c \ + ares_parse_aaaa_reply.c \ + ares_parse_mx_reply.c \ + ares_parse_ns_reply.c \ + ares_parse_ptr_reply.c \ + ares_parse_srv_reply.c \ + ares_parse_txt_reply.c \ + ares_platform.c \ + ares_process.c \ + ares_query.c \ + ares_search.c \ + ares_send.c \ + ares_strcasecmp.c \ + ares_strdup.c \ + ares_strerror.c \ + ares_timeout.c \ + ares_version.c \ + ares_writev.c \ + bitncmp.c \ + inet_net_pton.c \ + inet_ntop.c \ + windows_port.c + +HHEADERS = ares.h \ + ares_build.h \ + ares_data.h \ + ares_dns.h \ + ares_getenv.h \ + ares_iphlpapi.h \ + ares_ipv6.h \ + ares_library_init.h \ + ares_llist.h \ + ares_nowarn.h \ + ares_platform.h \ + ares_private.h \ + ares_rules.h \ + ares_strcasecmp.h \ + ares_strdup.h \ + ares_version.h \ + ares_writev.h \ + bitncmp.h \ + inet_net_pton.h \ + inet_ntop.h \ + nameser.h \ + ares_setup.h \ + setup_once.h + +MANPAGES = ares_cancel.3 \ + ares_destroy.3 \ + ares_destroy_options.3 \ + ares_dup.3 \ + ares_expand_name.3 \ + ares_expand_string.3 \ + ares_fds.3 \ + ares_free_data.3 \ + ares_free_hostent.3 \ + ares_free_string.3 \ + ares_get_servers.3 \ + ares_gethostbyaddr.3 \ + ares_gethostbyname.3 \ + ares_gethostbyname_file.3 \ + ares_getnameinfo.3 \ + ares_getsock.3 \ + ares_init.3 \ + ares_init_options.3 \ + ares_library_cleanup.3 \ + ares_library_init.3 \ + ares_mkquery.3 \ + ares_parse_a_reply.3 \ + ares_parse_aaaa_reply.3 \ + ares_parse_mx_reply.3 \ + ares_parse_ns_reply.3 \ + ares_parse_ptr_reply.3 \ + ares_parse_srv_reply.3 \ + ares_parse_txt_reply.3 \ + ares_process.3 \ + ares_query.3 \ + ares_save_options.3 \ + ares_search.3 \ + ares_send.3 \ + ares_set_servers.3 \ + ares_set_socket_callback.3 \ + ares_strerror.3 \ + ares_timeout.3 \ + ares_version.3 + +HTMLPAGES = ares_cancel.html \ + ares_destroy.html \ + ares_destroy_options.html \ + ares_dup.html \ + ares_expand_name.html \ + ares_expand_string.html \ + ares_fds.html \ + ares_free_data.html \ + ares_free_hostent.html \ + ares_free_string.html \ + ares_get_servers.html \ + ares_gethostbyaddr.html \ + ares_gethostbyname.html \ + ares_gethostbyname_file.html \ + ares_getnameinfo.html \ + ares_getsock.html \ + ares_init.html \ + ares_init_options.html \ + ares_library_cleanup.html \ + ares_library_init.html \ + ares_mkquery.html \ + ares_parse_a_reply.html \ + ares_parse_aaaa_reply.html \ + ares_parse_mx_reply.html \ + ares_parse_ns_reply.html \ + ares_parse_ptr_reply.html \ + ares_parse_srv_reply.html \ + ares_parse_txt_reply.html \ + ares_process.html \ + ares_query.html \ + ares_save_options.html \ + ares_search.html \ + ares_send.html \ + ares_set_servers.html \ + ares_set_socket_callback.html \ + ares_strerror.html \ + ares_timeout.html \ + ares_version.html + +PDFPAGES = ares_cancel.pdf \ + ares_destroy.pdf \ + ares_destroy_options.pdf \ + ares_dup.pdf \ + ares_expand_name.pdf \ + ares_expand_string.pdf \ + ares_fds.pdf \ + ares_free_data.pdf \ + ares_free_hostent.pdf \ + ares_free_string.pdf \ + ares_get_servers.pdf \ + ares_gethostbyaddr.pdf \ + ares_gethostbyname.pdf \ + ares_gethostbyname_file.pdf \ + ares_getnameinfo.pdf \ + ares_getsock.pdf \ + ares_init.pdf \ + ares_init_options.pdf \ + ares_library_cleanup.pdf \ + ares_library_init.pdf \ + ares_mkquery.pdf \ + ares_parse_a_reply.pdf \ + ares_parse_aaaa_reply.pdf \ + ares_parse_mx_reply.pdf \ + ares_parse_ns_reply.pdf \ + ares_parse_ptr_reply.pdf \ + ares_parse_srv_reply.pdf \ + ares_parse_txt_reply.pdf \ + ares_process.pdf \ + ares_query.pdf \ + ares_save_options.pdf \ + ares_search.pdf \ + ares_send.pdf \ + ares_set_servers.pdf \ + ares_set_socket_callback.pdf \ + ares_strerror.pdf \ + ares_timeout.pdf \ + ares_version.pdf + +SAMPLESOURCES = ares_getopt.c \ + ares_nowarn.c \ + ares_strcasecmp.c \ + inet_net_pton.c \ + inet_ntop.c + +SAMPLEHEADERS = ares_getopt.h \ + ares_nowarn.h \ + ares_strcasecmp.h \ + inet_net_pton.h \ + inet_ntop.h + + +# Makefile.inc provides the CSOURCES and HHEADERS defines +libcares_la_SOURCES = $(CSOURCES) $(HHEADERS) + +# where to install the c-ares headers +libcares_ladir = $(includedir) +# what headers to install on 'make install': +libcares_la_HEADERS = ares.h ares_version.h ares_dns.h \ + ares_build.h ares_rules.h + +ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +ahost_LDADD = $(top_builddir)/libcares.la +ahost_CFLAGS = $(AM_CFLAGS) +adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_LDADD = $(top_builddir)/libcares.la +adig_CFLAGS = $(AM_CFLAGS) +acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +acountry_LDADD = $(top_builddir)/libcares.la +acountry_CFLAGS = $(AM_CFLAGS) +SOURCEDMANDIR = man3 +SOURCEDMANPAGES = ares_init.3 +MAN2HTML = roffit --mandir=. < $< >$@ +SUFFIXES = .3 .html +all: ares_config.h ares_build.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .3 .html .c .lo .o .obj .pdf +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ + cd $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +ares_config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/ares_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status ares_config.h +$(srcdir)/ares_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +ares_build.h: stamp-h2 + @if test ! -f $@; then \ + rm -f stamp-h2; \ + $(MAKE) stamp-h2; \ + else :; fi + +stamp-h2: $(srcdir)/ares_build.h.in $(top_builddir)/config.status + @rm -f stamp-h2 + cd $(top_builddir) && $(SHELL) ./config.status ares_build.h + +distclean-hdr: + -rm -f ares_config.h stamp-h1 ares_build.h stamp-h2 +libcares.pc: $(top_builddir)/config.status $(srcdir)/libcares.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + else :; fi; \ + done + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libcares.la: $(libcares_la_OBJECTS) $(libcares_la_DEPENDENCIES) + $(LINK) -rpath $(libdir) $(libcares_la_LDFLAGS) $(libcares_la_OBJECTS) $(libcares_la_LIBADD) $(LIBS) + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +acountry$(EXEEXT): $(acountry_OBJECTS) $(acountry_DEPENDENCIES) + @rm -f acountry$(EXEEXT) + $(LINK) $(acountry_LDFLAGS) $(acountry_OBJECTS) $(acountry_LDADD) $(LIBS) +adig$(EXEEXT): $(adig_OBJECTS) $(adig_DEPENDENCIES) + @rm -f adig$(EXEEXT) + $(LINK) $(adig_LDFLAGS) $(adig_OBJECTS) $(adig_LDADD) $(LIBS) +ahost$(EXEEXT): $(ahost_OBJECTS) $(ahost_DEPENDENCIES) + @rm -f ahost$(EXEEXT) + $(LINK) $(ahost_LDFLAGS) $(ahost_OBJECTS) $(ahost_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-acountry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-ares_getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-ares_nowarn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-ares_strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-inet_net_pton.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-inet_ntop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-adig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_nowarn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-inet_net_pton.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-inet_ntop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ahost.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ares_getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ares_nowarn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ares_strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-inet_net_pton.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-inet_ntop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares__close_sockets.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares__get_hostent.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares__read_line.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares__timeval.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_cancel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_data.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_destroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_expand_name.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_expand_string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_fds.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_free_hostent.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_free_string.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_getenv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_gethostbyaddr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_gethostbyname.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_getnameinfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_getsock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_library_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_llist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_mkquery.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_nowarn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_options.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_a_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_aaaa_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_mx_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_ns_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_ptr_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_srv_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_parse_txt_reply.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_platform.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_process.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_query.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_search.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_send.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_strcasecmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_strdup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_strerror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_timeout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_version.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ares_writev.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bitncmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_net_pton.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_ntop.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows_port.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +acountry-acountry.o: acountry.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.o -MD -MP -MF "$(DEPDIR)/acountry-acountry.Tpo" -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-acountry.Tpo" "$(DEPDIR)/acountry-acountry.Po"; else rm -f "$(DEPDIR)/acountry-acountry.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='acountry.c' object='acountry-acountry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c + +acountry-acountry.obj: acountry.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.obj -MD -MP -MF "$(DEPDIR)/acountry-acountry.Tpo" -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-acountry.Tpo" "$(DEPDIR)/acountry-acountry.Po"; else rm -f "$(DEPDIR)/acountry-acountry.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='acountry.c' object='acountry-acountry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi` + +acountry-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.o -MD -MP -MF "$(DEPDIR)/acountry-ares_getopt.Tpo" -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_getopt.Tpo" "$(DEPDIR)/acountry-ares_getopt.Po"; else rm -f "$(DEPDIR)/acountry-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='acountry-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +acountry-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.obj -MD -MP -MF "$(DEPDIR)/acountry-ares_getopt.Tpo" -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_getopt.Tpo" "$(DEPDIR)/acountry-ares_getopt.Po"; else rm -f "$(DEPDIR)/acountry-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='acountry-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +acountry-ares_nowarn.o: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_nowarn.o -MD -MP -MF "$(DEPDIR)/acountry-ares_nowarn.Tpo" -c -o acountry-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_nowarn.Tpo" "$(DEPDIR)/acountry-ares_nowarn.Po"; else rm -f "$(DEPDIR)/acountry-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='acountry-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c + +acountry-ares_nowarn.obj: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_nowarn.obj -MD -MP -MF "$(DEPDIR)/acountry-ares_nowarn.Tpo" -c -o acountry-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_nowarn.Tpo" "$(DEPDIR)/acountry-ares_nowarn.Po"; else rm -f "$(DEPDIR)/acountry-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='acountry-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi` + +acountry-ares_strcasecmp.o: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_strcasecmp.o -MD -MP -MF "$(DEPDIR)/acountry-ares_strcasecmp.Tpo" -c -o acountry-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_strcasecmp.Tpo" "$(DEPDIR)/acountry-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/acountry-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='acountry-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c + +acountry-ares_strcasecmp.obj: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_strcasecmp.obj -MD -MP -MF "$(DEPDIR)/acountry-ares_strcasecmp.Tpo" -c -o acountry-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-ares_strcasecmp.Tpo" "$(DEPDIR)/acountry-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/acountry-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='acountry-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi` + +acountry-inet_net_pton.o: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-inet_net_pton.o -MD -MP -MF "$(DEPDIR)/acountry-inet_net_pton.Tpo" -c -o acountry-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-inet_net_pton.Tpo" "$(DEPDIR)/acountry-inet_net_pton.Po"; else rm -f "$(DEPDIR)/acountry-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='acountry-inet_net_pton.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c + +acountry-inet_net_pton.obj: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-inet_net_pton.obj -MD -MP -MF "$(DEPDIR)/acountry-inet_net_pton.Tpo" -c -o acountry-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-inet_net_pton.Tpo" "$(DEPDIR)/acountry-inet_net_pton.Po"; else rm -f "$(DEPDIR)/acountry-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='acountry-inet_net_pton.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi` + +acountry-inet_ntop.o: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-inet_ntop.o -MD -MP -MF "$(DEPDIR)/acountry-inet_ntop.Tpo" -c -o acountry-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-inet_ntop.Tpo" "$(DEPDIR)/acountry-inet_ntop.Po"; else rm -f "$(DEPDIR)/acountry-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='acountry-inet_ntop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c + +acountry-inet_ntop.obj: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-inet_ntop.obj -MD -MP -MF "$(DEPDIR)/acountry-inet_ntop.Tpo" -c -o acountry-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/acountry-inet_ntop.Tpo" "$(DEPDIR)/acountry-inet_ntop.Po"; else rm -f "$(DEPDIR)/acountry-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='acountry-inet_ntop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi` + +adig-adig.o: adig.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-adig.o -MD -MP -MF "$(DEPDIR)/adig-adig.Tpo" -c -o adig-adig.o `test -f 'adig.c' || echo '$(srcdir)/'`adig.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-adig.Tpo" "$(DEPDIR)/adig-adig.Po"; else rm -f "$(DEPDIR)/adig-adig.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='adig.c' object='adig-adig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-adig.o `test -f 'adig.c' || echo '$(srcdir)/'`adig.c + +adig-adig.obj: adig.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-adig.obj -MD -MP -MF "$(DEPDIR)/adig-adig.Tpo" -c -o adig-adig.obj `if test -f 'adig.c'; then $(CYGPATH_W) 'adig.c'; else $(CYGPATH_W) '$(srcdir)/adig.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-adig.Tpo" "$(DEPDIR)/adig-adig.Po"; else rm -f "$(DEPDIR)/adig-adig.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='adig.c' object='adig-adig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-adig.obj `if test -f 'adig.c'; then $(CYGPATH_W) 'adig.c'; else $(CYGPATH_W) '$(srcdir)/adig.c'; fi` + +adig-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.o -MD -MP -MF "$(DEPDIR)/adig-ares_getopt.Tpo" -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_getopt.Tpo" "$(DEPDIR)/adig-ares_getopt.Po"; else rm -f "$(DEPDIR)/adig-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='adig-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +adig-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.obj -MD -MP -MF "$(DEPDIR)/adig-ares_getopt.Tpo" -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_getopt.Tpo" "$(DEPDIR)/adig-ares_getopt.Po"; else rm -f "$(DEPDIR)/adig-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='adig-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +adig-ares_nowarn.o: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_nowarn.o -MD -MP -MF "$(DEPDIR)/adig-ares_nowarn.Tpo" -c -o adig-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_nowarn.Tpo" "$(DEPDIR)/adig-ares_nowarn.Po"; else rm -f "$(DEPDIR)/adig-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='adig-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c + +adig-ares_nowarn.obj: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_nowarn.obj -MD -MP -MF "$(DEPDIR)/adig-ares_nowarn.Tpo" -c -o adig-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_nowarn.Tpo" "$(DEPDIR)/adig-ares_nowarn.Po"; else rm -f "$(DEPDIR)/adig-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='adig-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi` + +adig-ares_strcasecmp.o: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_strcasecmp.o -MD -MP -MF "$(DEPDIR)/adig-ares_strcasecmp.Tpo" -c -o adig-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_strcasecmp.Tpo" "$(DEPDIR)/adig-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/adig-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='adig-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c + +adig-ares_strcasecmp.obj: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_strcasecmp.obj -MD -MP -MF "$(DEPDIR)/adig-ares_strcasecmp.Tpo" -c -o adig-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-ares_strcasecmp.Tpo" "$(DEPDIR)/adig-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/adig-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='adig-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi` + +adig-inet_net_pton.o: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-inet_net_pton.o -MD -MP -MF "$(DEPDIR)/adig-inet_net_pton.Tpo" -c -o adig-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-inet_net_pton.Tpo" "$(DEPDIR)/adig-inet_net_pton.Po"; else rm -f "$(DEPDIR)/adig-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='adig-inet_net_pton.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c + +adig-inet_net_pton.obj: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-inet_net_pton.obj -MD -MP -MF "$(DEPDIR)/adig-inet_net_pton.Tpo" -c -o adig-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-inet_net_pton.Tpo" "$(DEPDIR)/adig-inet_net_pton.Po"; else rm -f "$(DEPDIR)/adig-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='adig-inet_net_pton.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi` + +adig-inet_ntop.o: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-inet_ntop.o -MD -MP -MF "$(DEPDIR)/adig-inet_ntop.Tpo" -c -o adig-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-inet_ntop.Tpo" "$(DEPDIR)/adig-inet_ntop.Po"; else rm -f "$(DEPDIR)/adig-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='adig-inet_ntop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c + +adig-inet_ntop.obj: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-inet_ntop.obj -MD -MP -MF "$(DEPDIR)/adig-inet_ntop.Tpo" -c -o adig-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/adig-inet_ntop.Tpo" "$(DEPDIR)/adig-inet_ntop.Po"; else rm -f "$(DEPDIR)/adig-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='adig-inet_ntop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi` + +ahost-ahost.o: ahost.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ahost.o -MD -MP -MF "$(DEPDIR)/ahost-ahost.Tpo" -c -o ahost-ahost.o `test -f 'ahost.c' || echo '$(srcdir)/'`ahost.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ahost.Tpo" "$(DEPDIR)/ahost-ahost.Po"; else rm -f "$(DEPDIR)/ahost-ahost.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ahost.c' object='ahost-ahost.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ahost.o `test -f 'ahost.c' || echo '$(srcdir)/'`ahost.c + +ahost-ahost.obj: ahost.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ahost.obj -MD -MP -MF "$(DEPDIR)/ahost-ahost.Tpo" -c -o ahost-ahost.obj `if test -f 'ahost.c'; then $(CYGPATH_W) 'ahost.c'; else $(CYGPATH_W) '$(srcdir)/ahost.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ahost.Tpo" "$(DEPDIR)/ahost-ahost.Po"; else rm -f "$(DEPDIR)/ahost-ahost.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ahost.c' object='ahost-ahost.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ahost.obj `if test -f 'ahost.c'; then $(CYGPATH_W) 'ahost.c'; else $(CYGPATH_W) '$(srcdir)/ahost.c'; fi` + +ahost-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_getopt.o -MD -MP -MF "$(DEPDIR)/ahost-ares_getopt.Tpo" -c -o ahost-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_getopt.Tpo" "$(DEPDIR)/ahost-ares_getopt.Po"; else rm -f "$(DEPDIR)/ahost-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='ahost-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +ahost-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_getopt.obj -MD -MP -MF "$(DEPDIR)/ahost-ares_getopt.Tpo" -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_getopt.Tpo" "$(DEPDIR)/ahost-ares_getopt.Po"; else rm -f "$(DEPDIR)/ahost-ares_getopt.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_getopt.c' object='ahost-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +ahost-ares_nowarn.o: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_nowarn.o -MD -MP -MF "$(DEPDIR)/ahost-ares_nowarn.Tpo" -c -o ahost-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_nowarn.Tpo" "$(DEPDIR)/ahost-ares_nowarn.Po"; else rm -f "$(DEPDIR)/ahost-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='ahost-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_nowarn.o `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c + +ahost-ares_nowarn.obj: ares_nowarn.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_nowarn.obj -MD -MP -MF "$(DEPDIR)/ahost-ares_nowarn.Tpo" -c -o ahost-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_nowarn.Tpo" "$(DEPDIR)/ahost-ares_nowarn.Po"; else rm -f "$(DEPDIR)/ahost-ares_nowarn.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_nowarn.c' object='ahost-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_nowarn.obj `if test -f 'ares_nowarn.c'; then $(CYGPATH_W) 'ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/ares_nowarn.c'; fi` + +ahost-ares_strcasecmp.o: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_strcasecmp.o -MD -MP -MF "$(DEPDIR)/ahost-ares_strcasecmp.Tpo" -c -o ahost-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_strcasecmp.Tpo" "$(DEPDIR)/ahost-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/ahost-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='ahost-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_strcasecmp.o `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c + +ahost-ares_strcasecmp.obj: ares_strcasecmp.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_strcasecmp.obj -MD -MP -MF "$(DEPDIR)/ahost-ares_strcasecmp.Tpo" -c -o ahost-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-ares_strcasecmp.Tpo" "$(DEPDIR)/ahost-ares_strcasecmp.Po"; else rm -f "$(DEPDIR)/ahost-ares_strcasecmp.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ares_strcasecmp.c' object='ahost-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_strcasecmp.obj `if test -f 'ares_strcasecmp.c'; then $(CYGPATH_W) 'ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/ares_strcasecmp.c'; fi` + +ahost-inet_net_pton.o: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-inet_net_pton.o -MD -MP -MF "$(DEPDIR)/ahost-inet_net_pton.Tpo" -c -o ahost-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-inet_net_pton.Tpo" "$(DEPDIR)/ahost-inet_net_pton.Po"; else rm -f "$(DEPDIR)/ahost-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='ahost-inet_net_pton.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-inet_net_pton.o `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c + +ahost-inet_net_pton.obj: inet_net_pton.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-inet_net_pton.obj -MD -MP -MF "$(DEPDIR)/ahost-inet_net_pton.Tpo" -c -o ahost-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-inet_net_pton.Tpo" "$(DEPDIR)/ahost-inet_net_pton.Po"; else rm -f "$(DEPDIR)/ahost-inet_net_pton.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_net_pton.c' object='ahost-inet_net_pton.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-inet_net_pton.obj `if test -f 'inet_net_pton.c'; then $(CYGPATH_W) 'inet_net_pton.c'; else $(CYGPATH_W) '$(srcdir)/inet_net_pton.c'; fi` + +ahost-inet_ntop.o: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-inet_ntop.o -MD -MP -MF "$(DEPDIR)/ahost-inet_ntop.Tpo" -c -o ahost-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-inet_ntop.Tpo" "$(DEPDIR)/ahost-inet_ntop.Po"; else rm -f "$(DEPDIR)/ahost-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='ahost-inet_ntop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-inet_ntop.o `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c + +ahost-inet_ntop.obj: inet_ntop.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-inet_ntop.obj -MD -MP -MF "$(DEPDIR)/ahost-inet_ntop.Tpo" -c -o ahost-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ahost-inet_ntop.Tpo" "$(DEPDIR)/ahost-inet_ntop.Po"; else rm -f "$(DEPDIR)/ahost-inet_ntop.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop.c' object='ahost-inet_ntop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-inet_ntop.obj `if test -f 'inet_ntop.c'; then $(CYGPATH_W) 'inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +install-man3: $(man3_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)" + @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.3*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 3*) ;; \ + *) ext='3' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \ + done +uninstall-man3: + @$(NORMAL_UNINSTALL) + @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.3*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 3*) ;; \ + *) ext='3' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man3dir)/$$inst"; \ + done +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(mkdir_p) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ + done +install-libcares_laHEADERS: $(libcares_la_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(libcares_ladir)" || $(mkdir_p) "$(DESTDIR)$(libcares_ladir)" + @list='$(libcares_la_HEADERS)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(libcares_laHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libcares_ladir)/$$f'"; \ + $(libcares_laHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libcares_ladir)/$$f"; \ + done + +uninstall-libcares_laHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(libcares_la_HEADERS)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(libcares_ladir)/$$f'"; \ + rm -f "$(DESTDIR)$(libcares_ladir)/$$f"; \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) ares_config.h.in ares_build.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) ares_config.h.in ares_build.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) ares_config.h.in ares_build.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) ares_config.h.in ares_build.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkdir_p) $(distdir)/. $(distdir)/m4 $(distdir)/vc $(distdir)/vc/acountry $(distdir)/vc/adig $(distdir)/vc/ahost $(distdir)/vc/cares + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) \ + ares_config.h ares_build.h +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(libcares_ladir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: install-libcares_laHEADERS install-man \ + install-pkgconfigDATA + +install-exec-am: install-libLTLIBRARIES + +install-info: install-info-am + +install-man: install-man3 + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES \ + uninstall-libcares_laHEADERS uninstall-man \ + uninstall-pkgconfigDATA + +uninstall-man: uninstall-man3 + +.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + clean-noinstPROGRAMS ctags dist dist-all dist-bzip2 dist-gzip \ + dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-libcares_laHEADERS install-man \ + install-man3 install-pkgconfigDATA install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-libLTLIBRARIES uninstall-libcares_laHEADERS \ + uninstall-man uninstall-man3 uninstall-pkgconfigDATA + + +clean-local: clean-sourced-manpages + +clean-sourced-manpages: + @srcdmandir='$(SOURCEDMANDIR)'; \ + echo "rm -rf $(top_builddir)/$$srcdmandir"; \ + rm -rf $(top_builddir)/$$srcdmandir + +sourced-manpages: clean-sourced-manpages + @srcdmandir='$(SOURCEDMANDIR)'; \ + srcdmanfiles='$(SOURCEDMANPAGES)'; \ + mkdir $(top_builddir)/$$srcdmandir; \ + for file in $$srcdmanfiles; do \ + if test -f $(top_srcdir)/$$file; then \ + echo "cp $(top_srcdir)/$$file $(top_builddir)/$$srcdmandir/$$file"; \ + cp $(top_srcdir)/$$file $(top_builddir)/$$srcdmandir/$$file; \ + fi; \ + done + +html: sourced-manpages $(HTMLPAGES) + +.3.html: + $(MAN2HTML) + +pdf: sourced-manpages $(PDFPAGES) + +.3.pdf: + @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ + groff -Tps -man $< >$$foo.ps; \ + ps2pdf $$foo.ps $@; \ + rm $$foo.ps; \ + echo "converted $< to $@") + +# Make files named *.dist replace the file without .dist extension +dist-hook: + find $(distdir) -name "*.dist" -exec rm {} \; + (distit=`find $(srcdir) -name "*.dist"`; \ + for file in $$distit; do \ + strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ + cp $$file $(distdir)$$strip; \ + done) +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/Makefile.inc b/Makefile.inc new file mode 100644 index 0000000..d6d4851 --- /dev/null +++ b/Makefile.inc @@ -0,0 +1,199 @@ + +CSOURCES = ares__close_sockets.c \ + ares__get_hostent.c \ + ares__read_line.c \ + ares__timeval.c \ + ares_cancel.c \ + ares_data.c \ + ares_destroy.c \ + ares_expand_name.c \ + ares_expand_string.c \ + ares_fds.c \ + ares_free_hostent.c \ + ares_free_string.c \ + ares_getenv.c \ + ares_gethostbyaddr.c \ + ares_gethostbyname.c \ + ares_getnameinfo.c \ + ares_getsock.c \ + ares_init.c \ + ares_library_init.c \ + ares_llist.c \ + ares_mkquery.c \ + ares_nowarn.c \ + ares_options.c \ + ares_parse_a_reply.c \ + ares_parse_aaaa_reply.c \ + ares_parse_mx_reply.c \ + ares_parse_ns_reply.c \ + ares_parse_ptr_reply.c \ + ares_parse_srv_reply.c \ + ares_parse_txt_reply.c \ + ares_platform.c \ + ares_process.c \ + ares_query.c \ + ares_search.c \ + ares_send.c \ + ares_strcasecmp.c \ + ares_strdup.c \ + ares_strerror.c \ + ares_timeout.c \ + ares_version.c \ + ares_writev.c \ + bitncmp.c \ + inet_net_pton.c \ + inet_ntop.c \ + windows_port.c + +HHEADERS = ares.h \ + ares_build.h \ + ares_data.h \ + ares_dns.h \ + ares_getenv.h \ + ares_iphlpapi.h \ + ares_ipv6.h \ + ares_library_init.h \ + ares_llist.h \ + ares_nowarn.h \ + ares_platform.h \ + ares_private.h \ + ares_rules.h \ + ares_strcasecmp.h \ + ares_strdup.h \ + ares_version.h \ + ares_writev.h \ + bitncmp.h \ + inet_net_pton.h \ + inet_ntop.h \ + nameser.h \ + ares_setup.h \ + setup_once.h + +MANPAGES = ares_cancel.3 \ + ares_destroy.3 \ + ares_destroy_options.3 \ + ares_dup.3 \ + ares_expand_name.3 \ + ares_expand_string.3 \ + ares_fds.3 \ + ares_free_data.3 \ + ares_free_hostent.3 \ + ares_free_string.3 \ + ares_get_servers.3 \ + ares_gethostbyaddr.3 \ + ares_gethostbyname.3 \ + ares_gethostbyname_file.3 \ + ares_getnameinfo.3 \ + ares_getsock.3 \ + ares_init.3 \ + ares_init_options.3 \ + ares_library_cleanup.3 \ + ares_library_init.3 \ + ares_mkquery.3 \ + ares_parse_a_reply.3 \ + ares_parse_aaaa_reply.3 \ + ares_parse_mx_reply.3 \ + ares_parse_ns_reply.3 \ + ares_parse_ptr_reply.3 \ + ares_parse_srv_reply.3 \ + ares_parse_txt_reply.3 \ + ares_process.3 \ + ares_query.3 \ + ares_save_options.3 \ + ares_search.3 \ + ares_send.3 \ + ares_set_servers.3 \ + ares_set_socket_callback.3 \ + ares_strerror.3 \ + ares_timeout.3 \ + ares_version.3 + +HTMLPAGES = ares_cancel.html \ + ares_destroy.html \ + ares_destroy_options.html \ + ares_dup.html \ + ares_expand_name.html \ + ares_expand_string.html \ + ares_fds.html \ + ares_free_data.html \ + ares_free_hostent.html \ + ares_free_string.html \ + ares_get_servers.html \ + ares_gethostbyaddr.html \ + ares_gethostbyname.html \ + ares_gethostbyname_file.html \ + ares_getnameinfo.html \ + ares_getsock.html \ + ares_init.html \ + ares_init_options.html \ + ares_library_cleanup.html \ + ares_library_init.html \ + ares_mkquery.html \ + ares_parse_a_reply.html \ + ares_parse_aaaa_reply.html \ + ares_parse_mx_reply.html \ + ares_parse_ns_reply.html \ + ares_parse_ptr_reply.html \ + ares_parse_srv_reply.html \ + ares_parse_txt_reply.html \ + ares_process.html \ + ares_query.html \ + ares_save_options.html \ + ares_search.html \ + ares_send.html \ + ares_set_servers.html \ + ares_set_socket_callback.html \ + ares_strerror.html \ + ares_timeout.html \ + ares_version.html + +PDFPAGES = ares_cancel.pdf \ + ares_destroy.pdf \ + ares_destroy_options.pdf \ + ares_dup.pdf \ + ares_expand_name.pdf \ + ares_expand_string.pdf \ + ares_fds.pdf \ + ares_free_data.pdf \ + ares_free_hostent.pdf \ + ares_free_string.pdf \ + ares_get_servers.pdf \ + ares_gethostbyaddr.pdf \ + ares_gethostbyname.pdf \ + ares_gethostbyname_file.pdf \ + ares_getnameinfo.pdf \ + ares_getsock.pdf \ + ares_init.pdf \ + ares_init_options.pdf \ + ares_library_cleanup.pdf \ + ares_library_init.pdf \ + ares_mkquery.pdf \ + ares_parse_a_reply.pdf \ + ares_parse_aaaa_reply.pdf \ + ares_parse_mx_reply.pdf \ + ares_parse_ns_reply.pdf \ + ares_parse_ptr_reply.pdf \ + ares_parse_srv_reply.pdf \ + ares_parse_txt_reply.pdf \ + ares_process.pdf \ + ares_query.pdf \ + ares_save_options.pdf \ + ares_search.pdf \ + ares_send.pdf \ + ares_set_servers.pdf \ + ares_set_socket_callback.pdf \ + ares_strerror.pdf \ + ares_timeout.pdf \ + ares_version.pdf + +SAMPLESOURCES = ares_getopt.c \ + ares_nowarn.c \ + ares_strcasecmp.c \ + inet_net_pton.c \ + inet_ntop.c + +SAMPLEHEADERS = ares_getopt.h \ + ares_nowarn.h \ + ares_strcasecmp.h \ + inet_net_pton.h \ + inet_ntop.h diff --git a/Makefile.m32 b/Makefile.m32 new file mode 100644 index 0000000..52d9310 --- /dev/null +++ b/Makefile.m32 @@ -0,0 +1,68 @@ +############################################################# +# +## Makefile for building libcares.a with MingW32 (GCC-3.2) +## Use: make -f Makefile.m32 [demos] +## +## Quick hack by Guenter; comments to: /dev/nul +# +######################################################## +## Nothing more to do below this line! + +LIB = libcares.a + +CC = gcc +LD = gcc +RANLIB = ranlib +#RM = rm -f + +CFLAGS = -O2 -Wall +LDFLAGS = -s +LIBS = -lwsock32 + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include Makefile.inc + +OBJLIB := $(patsubst %.c,%.o,$(strip $(CSOURCES))) + + +$(LIB): $(OBJLIB) + ar cru $@ $^ + $(RANLIB) $@ + +all: $(LIB) demos + +demos: adig.exe ahost.exe acountry.exe + +tags: + etags *.[ch] + +%.exe: %.o ares_getopt.o $(LIB) + $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) + +$(OBJLIB): ares.h ares_dns.h ares_private.h ares_build.h ares_rules.h + +.c.o: + $(CC) $(CFLAGS) -c $< + +check: + +install: + ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir} + ${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir} + ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3 + ${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir} + ${RANLIB} ${DESTDIR}${libdir}/$(LIB) + chmod u-w ${DESTDIR}${libdir}/$(LIB) + ${INSTALL} -m 444 ${srcdir}/ares.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/ares_build.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/ares_rules.h ${DESTDIR}${includedir} + (for man in $(MANPAGES); do \ + ${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \ + done) + +clean: + $(RM) ares_getopt.o $(OBJLIB) $(LIB) adig.exe ahost.exe acountry.exe + +distclean: clean + $(RM) config.cache config.log config.status Makefile + diff --git a/Makefile.msvc b/Makefile.msvc new file mode 100644 index 0000000..64af1c1 --- /dev/null +++ b/Makefile.msvc @@ -0,0 +1,519 @@ + +# Copyright (C) 2009-2010 by Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this +# software and its documentation for any purpose and without +# fee is hereby granted, provided that the above copyright +# notice appear in all copies and that both that copyright +# notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in +# advertising or publicity pertaining to distribution of the +# software without specific, written prior permission. +# M.I.T. makes no representations about the suitability of +# this software for any purpose. It is provided "as is" +# without express or implied warranty. + +# ------------------------------------------------------------------------------ +# +# Makefile for building c-ares libraries and sample programs with MSVC. +# +# Usage: nmake /f makefile.msvc CFG= +# +# must be one of: [ lib-release | lib-debug | dll-release | dll-debug } +# must be one of: [ ALL | c-ares | acountry | adig | ahost | clean } +# +# If a other than ALL or clean is given, becomes mandatory. +# +# If neither nor are specified this results in +# all targets being built for all c-ares library types. +# +# This makefile must be processed from the subdir where it is located. +# +# All results are generated below a subdirectory named msvcXXX. +# +# ------------------------------------------------------------------------------ + +NAME = cares + +# ------------------------------------------------ +# c-ares static and dynamic libraries common base +# file names for release and debug configurations +# ------------------------------------------------ + +STA_LIB_REL = lib$(NAME) +DYN_LIB_REL = $(NAME) +STA_LIB_DBG = $(STA_LIB_REL)d +DYN_LIB_DBG = $(DYN_LIB_REL)d + +# ------------------------------------------- +# Base names for c-ares DLL import libraries +# ------------------------------------------- + +IMP_LIB_REL = $(DYN_LIB_REL) +IMP_LIB_DBG = $(DYN_LIB_DBG) + +# -------------------------- +# Runtime library selection +# -------------------------- + +RTLIB = /MD +RTLIBD = /MDd + +!IF "$(RTLIBCFG)" == "static" +RTLIB = /MT +RTLIBD = /MTd +!ENDIF + +# -------------------------------------------------------- +# Define USE_WATT32 to 1 to use the Watt-32 tcp/ip stack, +# otherwise Winsock tcp/ip stack will be used as default. +# -------------------------------------------------------- + +USE_WATT32 = 0 + +# ------------------------------------------- +# Detect NMAKE version deducing MSVC version +# ------------------------------------------- + +!IFNDEF _NMAKE_VER +! MESSAGE Macro _NMAKE_VER not defined. +! MESSAGE Use MSVC's NMAKE to process this makefile. +! ERROR See previous message. +!ENDIF + +!IF "$(_NMAKE_VER)" == "6.00.8168.0" +CC_VERS_NUM = 60 +!ELSEIF "$(_NMAKE_VER)" == "6.00.9782.0" +CC_VERS_NUM = 60 +!ELSEIF "$(_NMAKE_VER)" == "7.00.8882" +CC_VERS_NUM = 70 +!ELSEIF "$(_NMAKE_VER)" == "7.00.9466" +CC_VERS_NUM = 70 +!ELSEIF "$(_NMAKE_VER)" == "7.00.9955" +CC_VERS_NUM = 70 +!ELSEIF "$(_NMAKE_VER)" == "7.10.2240.8" +CC_VERS_NUM = 71 +!ELSEIF "$(_NMAKE_VER)" == "7.10.3077" +CC_VERS_NUM = 71 +!ELSEIF "$(_NMAKE_VER)" == "8.00.40607.16" +CC_VERS_NUM = 80 +!ELSEIF "$(_NMAKE_VER)" == "8.00.50727.42" +CC_VERS_NUM = 80 +!ELSEIF "$(_NMAKE_VER)" == "8.00.50727.762" +CC_VERS_NUM = 80 +!ELSEIF "$(_NMAKE_VER)" == "9.00.20706.01" +CC_VERS_NUM = 90 +!ELSEIF "$(_NMAKE_VER)" == "9.00.21022.08" +CC_VERS_NUM = 90 +!ELSEIF "$(_NMAKE_VER)" == "9.00.30729.01" +CC_VERS_NUM = 90 +!ELSEIF "$(_NMAKE_VER)" == "10.00.20506.01" +CC_VERS_NUM = 100 +!ELSEIF "$(_NMAKE_VER)" == "10.00.21003.01" +CC_VERS_NUM = 100 +!ELSEIF "$(_NMAKE_VER)" == "10.00.30128.01" +CC_VERS_NUM = 100 +!ELSEIF "$(_NMAKE_VER)" == "10.00.30319.01" +CC_VERS_NUM = 100 +!ELSE +! MESSAGE Unknown value for _NMAKE_VER macro: "$(_NMAKE_VER)" +! MESSAGE Please, report this condition on the c-ares development +! MESSAGE mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/ +! ERROR See previous message. +!ENDIF + +CC_VERS_STR = msvc$(CC_VERS_NUM) + +# ---------------------------------------------------- +# Verify that current subdir is the c-ares source one +# ---------------------------------------------------- + +!IF ! EXIST(.\ares_init.c) +! MESSAGE Can not process Makefile.msvc from outside of c-ares source subdirectory. +! MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again. +! ERROR See previous message. +!ENDIF + +# ------------------------------------------------------------------ +# Base subdir is the common root from which other subdirs will hang, +# the name depends on MSVC version being used when building c-ares. +# ------------------------------------------------------------------ + +BASE_DIR = .\$(CC_VERS_STR) + +# ---------------------------------------- +# Subdir holding sources for all projects +# ---------------------------------------- + +SRCDIR = . + +# ----------------------------- +# Default installation subdirs +# ----------------------------- + +!IFNDEF INSTALL_DIR +INSTALL_DIR = . +!ENDIF + +!IFNDEF INSTALL_DIR_LIB +INSTALL_DIR_LIB = $(INSTALL_DIR)\lib +!ENDIF + +!IFNDEF INSTALL_DIR_INC +INSTALL_DIR_INC = $(INSTALL_DIR)\include +!ENDIF + +# ------------------------- +# Configuration validation +# ------------------------- + +VALID_CFGSET = FALSE +!IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \ + "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug" +VALID_CFGSET = TRUE +!ENDIF + +!IF "$(VALID_CFGSET)" == "FALSE" && "$(CFG)" != "" +! MESSAGE MSVC c-ares makefile +! MESSAGE +! MESSAGE Usage: nmake /f makefile.msvc CFG= +! MESSAGE +! MESSAGE must be one of: [ lib-release | lib-debug | dll-release | dll-debug } +! MESSAGE must be one of: [ ALL | c-ares | acountry | adig | ahost | clean } +! MESSAGE +! MESSAGE If a other than ALL or clean is given, becomes mandatory. +! MESSAGE +! MESSAGE If neither nor are specified this results in +! MESSAGE all targets being built for all c-ares library types. +! MESSAGE +! ERROR Choose a valid configuration. +!ENDIF + +# -------------------------------------------------------- +# Project subdirs independent of configuration being used +# -------------------------------------------------------- + +CARES_DIR = $(BASE_DIR)\cares +PROG1_DIR = $(BASE_DIR)\acountry +PROG2_DIR = $(BASE_DIR)\adig +PROG3_DIR = $(BASE_DIR)\ahost + +# --------------------------------------------------- +# Subdirs which are configuration dependent are only +# defined when a valid configuration has been given. +# --------------------------------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" +CARES_OUTDIR = $(CARES_DIR)\$(CFG) +PROG1_OUTDIR = $(PROG1_DIR)\$(CFG) +PROG2_OUTDIR = $(PROG2_DIR)\$(CFG) +PROG3_OUTDIR = $(PROG3_DIR)\$(CFG) +CARES_OBJDIR = $(CARES_OUTDIR)\obj +PROG1_OBJDIR = $(PROG1_OUTDIR)\obj +PROG2_OBJDIR = $(PROG2_OUTDIR)\obj +PROG3_OBJDIR = $(PROG3_OUTDIR)\obj +!ELSE +!UNDEF CARES_OUTDIR +!UNDEF PROG1_OUTDIR +!UNDEF PROG2_OUTDIR +!UNDEF PROG3_OUTDIR +!UNDEF CARES_OBJDIR +!UNDEF PROG1_OBJDIR +!UNDEF PROG2_OBJDIR +!UNDEF PROG3_OBJDIR +!ENDIF + +# ------------------------------------- +# Settings that depend on tcp/ip stack +# ------------------------------------- + +!IF "$(USE_WATT32)" == "1" +CFLAGS = /UWIN32 /DWATT32 /I$(WATT_ROOT)\inc +EX_LIBS_REL = $(WATT_ROOT)\lib\wattcpvc_imp.lib +EX_LIBS_DBG = $(WATT_ROOT)\lib\wattcpvc_imp_d.lib +!ELSE +CFLAGS = /DWIN32 +EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib +EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib +!ENDIF + +# ----------------------------------------- +# Switches that depend on compiler version +# ----------------------------------------- + +!IF $(CC_VERS_NUM) == 60 +PDB_NONE = /pdb:none +PDBTYPE_CONSOLIDATE = /pdbtype:consolidate +!ELSE +!UNDEF PDB_NONE +!UNDEF PDBTYPE_CONSOLIDATE +!ENDIF + +!IF $(CC_VERS_NUM) <= 70 +RT_ERROR_CHECKING = /GZ +!ELSE +RT_ERROR_CHECKING = /RTCsu +!ENDIF + +# ---------------------------- +# Assorted commands and flags +# ---------------------------- + +CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 +CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi $(RT_ERROR_CHECKING) +CC_CFLAGS = $(CFLAGS) /I. /W3 /EHsc /FD + +RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG" +RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG" + +LINK_CMD_LIB = link.exe /lib /nologo +LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no +LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console + +LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE) +LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE) + +# --------------------------------- +# Configuration dependent settings +# --------------------------------- + +!IF "$(CFG)" == "lib-release" +CARES_TARGET = $(STA_LIB_REL).lib +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB +CARES_LFLAGS = +SPROG_CFLAGS = /DCARES_STATICLIB +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib +CARES_LINK = $(LINK_CMD_LIB) +SPROG_LINK = $(LINK_CMD_EXE_REL) +CC_CMD = $(CC_CMD_REL) +!ENDIF + +!IF "$(CFG)" == "lib-debug" +CARES_TARGET = $(STA_LIB_DBG).lib +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD +CARES_LFLAGS = +SPROG_CFLAGS = /DCARES_STATICLIB +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib +CARES_LINK = $(LINK_CMD_LIB) +SPROG_LINK = $(LINK_CMD_EXE_DBG) +CC_CMD = $(CC_CMD_DBG) +!ENDIF + +!IF "$(CFG)" == "dll-release" +CARES_TARGET = $(DYN_LIB_REL).dll +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY +CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE) +SPROG_CFLAGS = +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib +CARES_LINK = $(LINK_CMD_DLL) +SPROG_LINK = $(LINK_CMD_EXE_REL) +CC_CMD = $(CC_CMD_REL) +USE_RES_FILE = TRUE +RC_CMD = $(RC_CMD_REL) +!ENDIF + +!IF "$(CFG)" == "dll-debug" +CARES_TARGET = $(DYN_LIB_DBG).dll +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD +CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE) +SPROG_CFLAGS = +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib +CARES_LINK = $(LINK_CMD_DLL) +SPROG_LINK = $(LINK_CMD_EXE_DBG) +CC_CMD = $(CC_CMD_DBG) +USE_RES_FILE = TRUE +RC_CMD = $(RC_CMD_DBG) +!ENDIF + +# -------------------------------------------- +# Makefile.inc provides lists of source files +# -------------------------------------------- + +!INCLUDE .\Makefile.inc + +# ---------------------------- +# Build lists of object files +# ---------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" + +!IF [ECHO CARES_OBJS=^$(CARES_OBJDIR)\$(CSOURCES: = $(CARES_OBJDIR^)\) > .\cares_objs.inc] == 0 +!INCLUDE .\cares_objs.inc +!IF [DEL .\cares_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating CARES_OBJS list. +!ENDIF +CARES_OBJS = $(CARES_OBJS:.c=.obj) +!IF "$(USE_RES_FILE)" == "TRUE" +CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res +!ENDIF + +!IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0 +!INCLUDE .\prog1_objs.inc +!IF [DEL .\prog1_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG1_OBJS list. +!ENDIF +PROG1_OBJS = $(PROG1_OBJS:.c=.obj) +PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj + +!IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0 +!INCLUDE .\prog2_objs.inc +!IF [DEL .\prog2_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG2_OBJS list. +!ENDIF +PROG2_OBJS = $(PROG2_OBJS:.c=.obj) +PROG2_OBJS = $(PROG2_OBJS) $(PROG2_OBJDIR)\adig.obj + +!IF [ECHO PROG3_OBJS=^$(PROG3_OBJDIR)\$(SAMPLESOURCES: = $(PROG3_OBJDIR^)\) > .\prog3_objs.inc] == 0 +!INCLUDE .\prog3_objs.inc +!IF [DEL .\prog3_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG3_OBJS list. +!ENDIF +PROG3_OBJS = $(PROG3_OBJS:.c=.obj) +PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj + +!ENDIF + +# -------------------------------- +# Only our custom inference rules +# -------------------------------- + +.SUFFIXES: +.SUFFIXES: .c .rc + +{$(SRCDIR)}.rc{$(CARES_OBJDIR)}.res: + $(RC_CMD) /Fo $@ $< + +{$(SRCDIR)}.c{$(CARES_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)}.c{$(PROG1_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)}.c{$(PROG2_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)}.c{$(PROG3_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +# ------------------------------------------------------------- # +# ------------------------------------------------------------- # +# Default target when no CFG library type has been specified, # +# results in building target ALL for all c-ares library types. # +# ------------------------------------------------------------- # +# ------------------------------------------------------------- # + +!IF "$(VALID_CFGSET)" == "FALSE" + +ALL: + $(MAKE) /f .\Makefile.msvc CFG=lib-release ALL + $(MAKE) /f .\Makefile.msvc CFG=lib-debug ALL + $(MAKE) /f .\Makefile.msvc CFG=dll-release ALL + $(MAKE) /f .\Makefile.msvc CFG=dll-debug ALL + +clean: + @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1 + +install: + @$(MAKE) /nologo /f .\Makefile.msvc CFG=lib-release install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=lib-debug install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=dll-release install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=dll-debug install + +!ENDIF + +# --------------------------------------------------------------------- +# Targets only available when a proper CFG library type has been given +# --------------------------------------------------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" + +ALL: c-ares acountry adig ahost + @ + +c-ares: $(HHEADERS) $(CSOURCES) $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR) + $(CARES_LINK) $(CARES_LFLAGS) /out:$(CARES_OUTDIR)\$(CARES_TARGET) $(CARES_OBJS) +! IF "$(USE_RES_FILE)" == "TRUE" + @if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2 +! ENDIF + +acountry: c-ares acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS) + @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1 + +adig: c-ares adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS) + @if exist $(PROG2_OUTDIR)\adig.exe.manifest mt -nologo -manifest $(PROG2_OUTDIR)\adig.exe.manifest -outputresource:$(PROG2_OUTDIR)\adig.exe;1 + +ahost: c-ares ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG3_OUTDIR)\ahost.exe $(PROG3_OBJS) + @if exist $(PROG3_OUTDIR)\ahost.exe.manifest mt -nologo -manifest $(PROG3_OUTDIR)\ahost.exe.manifest -outputresource:$(PROG3_OUTDIR)\ahost.exe;1 + +$(CARES_OUTDIR): $(CARES_DIR) + @if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR) + +$(PROG1_OUTDIR): $(PROG1_DIR) + @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR) + +$(PROG2_OUTDIR): $(PROG2_DIR) + @if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR) + +$(PROG3_OUTDIR): $(PROG3_DIR) + @if not exist $(PROG3_OUTDIR) mkdir $(PROG3_OUTDIR) + +$(CARES_OBJDIR): $(CARES_OUTDIR) + @if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR) + +$(PROG1_OBJDIR): $(PROG1_OUTDIR) + @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR) + +$(PROG2_OBJDIR): $(PROG2_OUTDIR) + @if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR) + +$(PROG3_OBJDIR): $(PROG3_OUTDIR) + @if not exist $(PROG3_OBJDIR) mkdir $(PROG3_OBJDIR) + +clean: + @-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1 + +install: + @if not exist $(CARES_OUTDIR)\$(CARES_TARGET) \ + $(MAKE) /f .\Makefile.msvc CFG=$(CFG) c-ares + @if not exist "$(INSTALL_DIR)" mkdir "$(INSTALL_DIR)" + @if not exist "$(INSTALL_DIR_LIB)" mkdir "$(INSTALL_DIR_LIB)" + @if not exist "$(INSTALL_DIR_INC)" mkdir "$(INSTALL_DIR_INC)" + @copy /y $(CARES_OUTDIR)\*.* "$(INSTALL_DIR_LIB)" >NUL + @copy /y $(SRCDIR)\ares.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\ares_build.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\ares_rules.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\ares_version.h "$(INSTALL_DIR_INC)" >NUL + @echo Installed c-ares $(CFG) + +!ENDIF + +$(BASE_DIR): + @if not exist $(BASE_DIR) mkdir $(BASE_DIR) + +$(CARES_DIR): $(BASE_DIR) + @if not exist $(CARES_DIR) mkdir $(CARES_DIR) + +$(PROG1_DIR): $(BASE_DIR) + @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR) + +$(PROG2_DIR): $(BASE_DIR) + @if not exist $(PROG2_DIR) mkdir $(PROG2_DIR) + +$(PROG3_DIR): $(BASE_DIR) + @if not exist $(PROG3_DIR) mkdir $(PROG3_DIR) + +# End of Makefile.msvc diff --git a/Makefile.netware b/Makefile.netware new file mode 100644 index 0000000..0cb1530 --- /dev/null +++ b/Makefile.netware @@ -0,0 +1,440 @@ +################################################################# +# +## Makefile for building libcares (NetWare version - gnu make) +## Use: make -f Makefile.netware +## +## Comments to: Guenter Knauf http://www.gknw.de/phpbb +# +################################################################# + +# Edit the path below to point to the base of your Novell NDK. +ifndef NDKBASE +NDKBASE = c:/novell +endif + +ifndef INSTDIR +INSTDIR = ../ares-$(LIBCARES_VERSION_STR)-bin-nw +endif + +# Edit the vars below to change NLM target settings. +TARGETS = adig.nlm ahost.nlm acountry.nlm +LTARGET = libcares.$(LIBEXT) +VERSION = $(LIBCARES_VERSION) +COPYR = $(LIBCARES_COPYRIGHT_STR) +DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se +MTSAFE = YES +STACK = 64000 +SCREEN = none +#EXPORTS = +# Comment the line below if you dont want to load protected automatically. +#LDRING = 3 + +# Edit the var below to point to your lib architecture. +ifndef LIBARCH +LIBARCH = LIBC +endif + +# must be equal to NDEBUG or DEBUG, CURLDEBUG +ifndef DB +DB = NDEBUG +endif +# Optimization: -O or debugging: -g +ifeq ($(DB),NDEBUG) + OPT = -O2 + OBJDIR = release +else + OPT = -g + OBJDIR = debug +endif + +# Include the version info retrieved from curlver.h +-include $(OBJDIR)/version.inc + +# The following lines defines your compiler. +ifdef CWFolder + METROWERKS = $(CWFolder) +endif +ifdef METROWERKS + # MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support + MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support/Metrowerks Support + CC = mwccnlm +else + CC = gcc +endif +# a native win32 awk can be downloaded from here: +# http://www.gknw.net/development/prgtools/awk-20070501.zip +AWK = awk +YACC = bison -y +CP = cp -afv +MKDIR = mkdir +# RM = rm -f +# if you want to mark the target as MTSAFE you will need a tool for +# generating the xdc data for the linker; here's a minimal tool: +# http://www.gknw.net/development/prgtools/mkxdc.zip +MPKXDC = mkxdc + +# Global flags for all compilers +CFLAGS += $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc + +ifeq ($(CC),mwccnlm) +LD = mwldnlm +LDFLAGS = -nostdlib $(PRELUDE) $(OBJEXE) $(<:.def=.o) -o $@ -commandfile +AR = mwldnlm +ARFLAGS = -nostdlib -type library -o +LIBEXT = lib +#RANLIB = +CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586 +CFLAGS += -relax_pointers +#CFLAGS += -w on +ifeq ($(LIBARCH),LIBC) + PRELUDE = $(SDK_LIBC)/imports/libcpre.o + CFLAGS += -align 4 +else + # PRELUDE = $(SDK_CLIB)/imports/clibpre.o + # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK + PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj" + # CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h" + CFLAGS += -align 1 +endif +else +LD = nlmconv +LDFLAGS = -T +AR = ar +ARFLAGS = -cq +LIBEXT = a +RANLIB = ranlib +CFLAGS += -m32 +CFLAGS += -fno-builtin -fno-strict-aliasing +ifeq ($(findstring gcc,$(CC)),gcc) +CFLAGS += -fpcc-struct-return +endif +CFLAGS += -Wall # -pedantic +ifeq ($(LIBARCH),LIBC) + PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o +else + # PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o + # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK + # http://www.gknw.net/development/mk_nlm/gcc_pre.zip + PRELUDE = $(NDK_ROOT)/pre/prelude.o + CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h +endif +endif + +NDK_ROOT = $(NDKBASE)/ndk +SDK_CLIB = $(NDK_ROOT)/nwsdk +SDK_LIBC = $(NDK_ROOT)/libc + +ifeq ($(LIBARCH),LIBC) + INCLUDES += -I$(SDK_LIBC)/include + # INCLUDES += -I$(SDK_LIBC)/include/nks + # INCLUDES += -I$(SDK_LIBC)/include/winsock + CFLAGS += -D_POSIX_SOURCE +else + INCLUDES += -I$(SDK_CLIB)/include/nlm + # INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete + # INCLUDES += -I$(SDK_CLIB)/include +endif +ifeq ($(DB),CURLDEBUG) +INCLUDES += -I../include +endif +CFLAGS += -I. $(INCLUDES) + +ifeq ($(MTSAFE),YES) + XDCOPT = -n +endif +ifeq ($(MTSAFE),NO) + XDCOPT = -u +endif + +ifeq ($(findstring /sh,$(SHELL)),/sh) +DL = ' +#-include $(NDKBASE)/nlmconv/ncpfs.inc +endif + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include Makefile.inc + +OBJLIB := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES))) +OBJEXE = $(OBJLIB) $(OBJDIR)/ares_getopt.o + +.PHONY: lib nlm prebuild dist install clean + +lib: prebuild $(LTARGET) + +nlm: prebuild $(TARGETS) + +prebuild: $(OBJDIR) ares_build.h $(OBJDIR)/version.inc ares_config.h + +install: $(INSTDIR) all + @$(CP) *.nlm $(INSTDIR) + @$(CP) ../CHANGES $(INSTDIR) + @$(CP) ../COPYING $(INSTDIR) + @$(CP) ../README $(INSTDIR) + @$(CP) ../RELEASE-NOTES $(INSTDIR) + +clean: + -$(RM) $(LTARGET) $(TARGETS) ares_config.h + -$(RM) -r $(OBJDIR) + -$(RM) -r arpa + +%.$(LIBEXT): $(OBJLIB) + @echo Creating $@ + @-$(RM) $@ + @$(AR) $(ARFLAGS) $@ $^ +ifdef RANLIB + @$(RANLIB) $@ +endif + +%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJEXE) + @echo Linking $@ + @-$(RM) $@ + @$(LD) $(LDFLAGS) $< + +$(OBJDIR) $(INSTDIR): + @$(MKDIR) $@ + +$(OBJDIR)/%.o: %.c +# @echo Compiling $< + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/version.inc: ares_version.h $(OBJDIR) + @echo Creating $@ + @$(AWK) -f get_ver.awk $< > $@ + +$(OBJDIR)/%.xdc: Makefile.netware + @echo Creating $@ + @$(MPKXDC) $(XDCOPT) $@ + +$(OBJDIR)/%.def: Makefile.netware + @echo Creating $@ + @echo $(DL)# DEF file for linking with $(LD)$(DL) > $@ + @echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)# All your changes will be lost!!$(DL) >> $@ + @echo $(DL)#$(DL) >> $@ + @echo $(DL)copyright "$(COPYR)"$(DL) >> $@ + @echo $(DL)description "$(DESCR)"$(DL) >> $@ + @echo $(DL)version $(VERSION)$(DL) >> $@ +ifdef NLMTYPE + @echo $(DL)type $(NLMTYPE)$(DL) >> $@ +endif +ifdef STACK + @echo $(DL)stack $(STACK)$(DL) >> $@ +endif +ifdef SCREEN + @echo $(DL)screenname "$(SCREEN)"$(DL) >> $@ +else + @echo $(DL)screenname "DEFAULT"$(DL) >> $@ +endif +ifeq ($(DB),DEBUG) + @echo $(DL)debug$(DL) >> $@ +endif + @echo $(DL)threadname "$^"$(DL) >> $@ +ifdef XDCOPT + @echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@ +endif +ifeq ($(LDRING),0) + @echo $(DL)flag_on 16$(DL) >> $@ +endif +ifeq ($(LDRING),3) + @echo $(DL)flag_on 512$(DL) >> $@ +endif +ifeq ($(LIBARCH),CLIB) + @echo $(DL)start _Prelude$(DL) >> $@ + @echo $(DL)exit _Stop$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@ + @echo $(DL)module clib$(DL) >> $@ +else + @echo $(DL)flag_on 64$(DL) >> $@ + @echo $(DL)pseudopreemption$(DL) >> $@ + @echo $(DL)start _LibCPrelude$(DL) >> $@ + @echo $(DL)exit _LibCPostlude$(DL) >> $@ + @echo $(DL)check _LibCCheckUnload$(DL) >> $@ + @echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@ + @echo $(DL)module libc$(DL) >> $@ +endif +ifdef MODULES + @echo $(DL)module $(MODULES)$(DL) >> $@ +endif +ifdef EXPORTS + @echo $(DL)export $(EXPORTS)$(DL) >> $@ +endif +ifdef IMPORTS + @echo $(DL)import $(IMPORTS)$(DL) >> $@ +endif +ifeq ($(LD),nlmconv) + @echo $(DL)input $(PRELUDE)$(DL) >> $@ + @echo $(DL)input $(OBJEXE)$(DL) >> $@ + @echo $(DL)input $(@:.def=.o)$(DL) >> $@ + @echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@ +endif + +ares_config.h: Makefile.netware + @echo Creating $@ + @echo $(DL)/* $@ for NetWare target.$(DL) > $@ + @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)** All your changes will be lost!!$(DL) >> $@ + @echo $(DL)*/$(DL) >> $@ + @echo $(DL)#ifndef NETWARE$(DL) >> $@ + @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + @echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@ + @echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@ +ifeq ($(LIBARCH),CLIB) + @echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@ + @echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@ + @echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@ + @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@ + @echo $(DL)#define SIZEOF_SIZE_T 4$(DL) >> $@ +else + @echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@ + @echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@ + @echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@ + @echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@ + @echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@ + @echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@ + @echo $(DL)#define HAVE_FREEADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@ + @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@ + @echo $(DL)#define SIZEOF_SIZE_T 8$(DL) >> $@ + @echo $(DL)#define SIZEOF_STRUCT_IN6_ADDR 16$(DL) >> $@ +endif + @echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ERRNO_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETENV 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@ + @echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@ + @echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@ + @echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_LL 1$(DL) >> $@ + @echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@ + @echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_RECV 1$(DL) >> $@ + @echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@ + @echo $(DL)#define HAVE_SELECT 1$(DL) >> $@ + @echo $(DL)#define HAVE_SEND 1$(DL) >> $@ + @echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@ + @echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@ + @echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_UNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_UTIME 1$(DL) >> $@ + @echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@ + @echo $(DL)#define RETSIGTYPE void$(DL) >> $@ + @echo $(DL)#define SIZEOF_INT 4$(DL) >> $@ + @echo $(DL)#define SIZEOF_STRUCT_IN_ADDR 4$(DL) >> $@ + @echo $(DL)#define STDC_HEADERS 1$(DL) >> $@ + @echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@ +ifdef NW_WINSOCK + @echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@ +else + @echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@ +endif + @echo $(DL)#ifdef __GNUC__$(DL) >> $@ + @echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@ + @echo $(DL)#else$(DL) >> $@ + @echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + +FORCE: ; + +ares_build.h: Makefile.netware FORCE + @echo Creating $@ + @echo $(DL)/* $@ intended for NetWare target.$(DL) > $@ + @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)** All your changes will be lost!!$(DL) >> $@ + @echo $(DL)*/$(DL) >> $@ + @echo $(DL)#ifndef NETWARE$(DL) >> $@ + @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + @echo $(DL)#ifndef __CARES_BUILD_H$(DL) >> $@ + @echo $(DL)#define __CARES_BUILD_H$(DL) >> $@ +ifeq ($(LIBARCH),CLIB) + @echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T int$(DL) >> $@ + @echo $(DL)#define CARES_SIZEOF_ARES_SOCKLEN_T 4$(DL) >> $@ +else + @echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int$(DL) >> $@ + @echo $(DL)#define CARES_SIZEOF_ARES_SOCKLEN_T 4$(DL) >> $@ +endif + @echo $(DL)#define CARES_SIZEOF_LONG 4$(DL) >> $@ + @echo $(DL)typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;$(DL) >> $@ + @echo $(DL)#endif /* __CARES_BUILD_H */$(DL) >> $@ diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..95a2eee --- /dev/null +++ b/NEWS @@ -0,0 +1,21 @@ +Major changes since: +* see the CHANGES file + +Major changes in release 1.1.1: +* ares should now compile as C++ code (no longer uses reserved word + "class"). +* Added SRV support to adig test program. +* Fixed a few error handling bugs in query processing. + +Major changes in release 1.1.0: +* Added ares_free_string() function so that memory can be freed in the + same layer as it is allocated, a desirable feature in some + environments. +* A few of the ares_dns.h macros are fixed to use the proper bitwise + operator. +* Fixed a couple of fenceposts fixed in ares_expand_name()'s + bounds-checking. +* In process_timeouts(), extract query->next before calling + next_server() and possibly freeing the query structure. +* Casted arguments to ctype macros casted to unsigned char, since not + all char values are valid inputs to those macros according to ANSI. diff --git a/README b/README new file mode 100644 index 0000000..56a43c5 --- /dev/null +++ b/README @@ -0,0 +1,60 @@ +c-ares +====== + +This is c-ares, an asynchronous resolver library. It is intended for +applications which need to perform DNS queries without blocking, or need to +perform multiple DNS queries in parallel. The primary examples of such +applications are servers which communicate with multiple clients and programs +with graphical user interfaces. + +The full source code is available in the 'c-ares' release archives, and in a +git repository: http://github.com/bagder/c-ares + +If you find bugs, correct flaws, have questions or have comments in general in +regard to c-ares (or by all means the original ares too), get in touch with us +on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares + +c-ares is of course distributed under the same MIT-style license as the +original ares. + +You'll find all c-ares details and news here: + + http://c-ares.haxx.se/ + + +NOTES FOR C-ARES HACKERS + +The following notes apply to c-ares version 1.7.0 and later. + +* The distributed ares_build.h file is only intended to be used on systems + which can not run the also distributed configure script. + +* The distributed ares_build.h file is generated as a copy of ares_build.h.dist + when the c-ares source code distribution archive file is originally created. + +* If you check out from git on a non-configure platform, you must run the + appropriate buildconf* script to set up ares_build.h and other local files + before being able of compiling the library. + +* On systems capable of running the configure script, the configure process + will overwrite the distributed ares_build.h file with one that is suitable + and specific to the library being configured and built, this new file is + generated from the ares_build.h.in template file. + +* If you intend to distribute an already compiled c-ares library you _MUST_ + also distribute along with it the generated ares_build.h which has been + used to compile it. Otherwise the library will be of no use for the users of + the library that you have built. It is _your_ responsibility to provide this + file. No one at the c-ares project can know how you have built the library. + +* File ares_build.h includes platform and configuration dependent info, + and must not be modified by anyone. Configure script generates it for you. + +* We cannot assume anything else but very basic compiler features being + present. While c-ares requires an ANSI C compiler to build, some of the + earlier ANSI compilers clearly can't deal with some preprocessor operators. + +* Newlines must remain unix-style for older compilers' sake. + +* Comments must be written in the old-style /* unnested C-fashion */ + diff --git a/README.cares b/README.cares new file mode 100644 index 0000000..aca54c8 --- /dev/null +++ b/README.cares @@ -0,0 +1,13 @@ +c-ares +====== + +This package is based on ares 1.1.1 (written by Greg Hudson). I decided to +fork and release a separate project since the ares author didn't want the +improvements that were vital for our use of it. + +This package is dubbed 'c-ares' since I (Daniel Stenberg) wanted this for use +within the curl project (hence the letter C) and it makes a nice pun. Also, +c-ares is not API compatible with ares: a new name makes that more obvious to +the public. + +The original libares was distributed at athena-dist.mit.edu:pub/ATHENA/ares. diff --git a/README.msvc b/README.msvc new file mode 100644 index 0000000..4ff8700 --- /dev/null +++ b/README.msvc @@ -0,0 +1,142 @@ + + + ___ __ _ _ __ ___ ___ + / __| ___ / _` | '__/ _ \/ __| + | (_ |___| (_| | | | __/\__ \ + \___| \__,_|_| \___||___/ + + + How to build c-ares using MSVC or Visual Studio + ================================================= + + + + How to build using MSVC from the command line + --------------------------------------------- + + Open a command prompt window and ensure that the environment is properly + set up in order to use MSVC or Visual Studio compiler tools. + + Change to c-ares source folder where Makefile.msvc file is located and run: + + > nmake -f Makefile.msvc + + This will build all c-ares libraries as well as three sample programs. + + Once the above command has finished a new folder named MSVCXX will exist + below the folder where makefile.msvc is found. The name of the folder + depends on the MSVC compiler version being used to build c-ares. + + Below the MSVCXX folder there will exist four folders named 'cares', + 'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that + holds the c-ares libraries you have just generated, the other three + hold sample programs that use the libraries. + + The above command builds four versions of the c-ares library, dynamic + and static versions and each one in release and debug flavours. Each + of these is found in folders named dll-release, dll-debug, lib-release, + and lib-debug, which hang from the 'cares' folder mentioned above. Each + sample program also has folders with the same names to reflect which + library version it is using. + + + How to install using MSVC from the command line + ----------------------------------------------- + + In order to allow easy usage of c-ares libraries it may be convenient to + install c-ares libraries and header files to a common subdirectory tree. + + Once that c-ares libraries have been built using procedure described above, + use same command prompt window to define environment variable INSTALL_DIR + to designate the top subdirectory where installation of c-ares libraries and + header files will be done. + + > set INSTALL_DIR=c:\c-ares + + Afterwards, run following command to actually perform the installation: + + > nmake -f Makefile.msvc install + + Installation procedure will copy c-ares libraries to subdirectory 'lib' and + c-ares header files to subdirectory 'include' below the INSTALL_DIR subdir. + + When environment variable INSTALL_DIR is not defined, installation is done + to c-ares source folder where Makefile.msvc file is located. + + + How to build using Visual Studio 6 IDE + -------------------------------------- + + A VC++ 6.0 reference workspace (vc6aws.dsw) is available within the 'vc' + folder to allow proper building of the library and sample programs. + + 1) Open the vc6aws.dsw workspace with MSVC6's IDE. + 2) Select 'Build' from top menu. + 3) Select 'Batch Build' from dropdown menu. + 4) Make sure that the sixteen project configurations are 'checked'. + 5) Click on the 'Build' button. + 6) Once the sixteen project configurations are built you are done. + + Dynamic and static c-ares libraries are built in debug and release flavours, + and can be located each one in its own subdirectory, dll-debug, dll-release, + lib-debug and lib-release, all of them below the 'vc\cares' subdirectory. + + In the same way four executable versions of each sample program are built, + each using its respective library. The resulting sample executables are + located in its own subdirectory, dll-debug, dll-release, lib-debug and + lib-release, below the 'vc\acountry', 'vc\adig' and 'vc\ahost'folders. + + These reference VC++ 6.0 configurations are generated using the dynamic CRT. + + + How to build using Visual Studio 2003 or newer IDE + -------------------------------------------------- + + First you have to convert the VC++ 6.0 reference workspace and project files + to the Visual Studio IDE version you are using, following next steps: + + 1) Open vc\vc6aws.dsw with VS20XX. + 2) Allow VS20XX to update all projects and workspaces. + 3) Save ALL and close VS20XX. + 4) Open vc\vc6aws.sln with VS20XX. + 5) Select batch build, check 'all' projects and click 'build' button. + + Same comments relative to generated files and folders as done above for + Visual Studio 6 IDE apply here. + + + Relationship between c-ares library file names and versions + ----------------------------------------------------------- + + c-ares static release library version files: + + libcares.lib -> static release library + + c-ares static debug library version files: + + libcaresd.lib -> static debug library + + c-ares dynamic release library version files: + + cares.dll -> dynamic release library + cares.lib -> import library for the dynamic release library + cares.exp -> export file for the dynamic release library + + c-ares dynamic debug library version files: + + caresd.dll -> dynamic debug library + caresd.lib -> import library for the dynamic debug library + caresd.exp -> export file for the dynamic debug library + caresd.pdb -> debug symbol file for the dynamic debug library + + + How to use c-ares static libraries + ---------------------------------- + + When using the c-ares static library in your program, you will have to + define preprocessor symbol CARES_STATICLIB while building your program, + otherwise you will get errors at linkage stage. + + +Have Fun! + diff --git a/RELEASE-NOTES b/RELEASE-NOTES new file mode 100644 index 0000000..06d7856 --- /dev/null +++ b/RELEASE-NOTES @@ -0,0 +1,26 @@ +c-ares version 1.7.5 + +Fixed: + + o detection of semicolon comments in resolv.conf + o avoid using system's inet_net_pton affected by the WLB-2008080064 advisory + o replacement ares_inet_net_pton affected by the WLB-2008080064 advisory + o replacement ares_inet_ntop affected by potential out of bounds write + o added install target to Makefile.msvc + o only fall back to AF_INET searches when looking for AF_UNSPEC addresses + o fixed ares_parse_*_reply memory leaks + o Use correct sizeof in ares_getnameinfo() + o IPv6-on-windows: find DNS servers correctly + o man pages: docs for the c-ares utility programs + o getservbyport replacement for Win CE + o config_sortlist: (win32) missing else + o advance_tcp_send_queue: avoid NULL ptr dereference + o configure: fix a bashism + o ares_expand_name: Fix encoded length for indirect root + +Thanks go to these friendly people for their efforts and contributions: + + Yang Tse, Jakub Hrozek, Gisle Vanem, Tom Hughes, David Stuart, Dima Tisnek, + Peter Pentchev, Stefan Buhler + +Have fun! diff --git a/TODO b/TODO new file mode 100644 index 0000000..fa31cea --- /dev/null +++ b/TODO @@ -0,0 +1,23 @@ +TODO +==== + +ares_reinit() + +- To allow an app to force a re-read of /etc/resolv.conf etc, pretty much + like the res_init() resolver function offers + +ares_gethostbyname + +- When built to support IPv6, it needs to also support PF_UNSPEC or similar, + so that an application can ask for any protocol and then c-ares would return + all known resolves and not just explicitly IPv4 _or_ IPv6 resolves. + +ares_process + +- Upon next ABI breakage ares_process() should be changed to return 'int' + and return ARES_ENOTINITIALIZED if ares_library_init() has not been called. + +ares_process_fd + +- Upon next ABI breakage ares_process_fd() should be changed to return + 'int' and return ARES_ENOTINITIALIZED if library has not been initialized. diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..9606131 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,1938 @@ + + +dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C preprocessor to find out if the given object-style symbol +dnl is defined and get its expansion. This macro will not use default +dnl includes even if no INCLUDES argument is given. This macro will run +dnl silently when invoked with three arguments. If the expansion would +dnl result in a set of double-quoted strings the returned expansion will +dnl actually be a single double-quoted string concatenating all them. + +AC_DEFUN([CURL_CHECK_DEF], [ + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl + if test -z "$SED"; then + AC_MSG_ERROR([SED not set. Cannot continue without SED being set.]) + fi + if test -z "$GREP"; then + AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.]) + fi + ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])]) + tmp_exp="" + AC_PREPROC_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +#ifdef $1 +CURL_DEF_TOKEN $1 +#endif + ]]) + ],[ + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[[ ]]//' 2>/dev/null | \ + "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then + tmp_exp="" + fi + ]) + if test -z "$tmp_exp"; then + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + else + AS_VAR_SET(ac_HaveDef, yes) + AS_VAR_SET(ac_Def, $tmp_exp) + ifelse($3,,[AC_MSG_RESULT([$tmp_exp])]) + fi + AS_VAR_POPDEF([ac_Def])dnl + AS_VAR_POPDEF([ac_HaveDef])dnl +]) + + +dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C compiler to find out only if the given symbol is defined +dnl or not, this can not find out its expansion. This macro will not use +dnl default includes even if no INCLUDES argument is given. This macro +dnl will run silently when invoked with three arguments. + +AC_DEFUN([CURL_CHECK_DEF_CC], [ + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])]) + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +int main (void) +{ +#ifdef $1 + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_symbol_defined="yes" + ],[ + tst_symbol_defined="no" + ]) + if test "$tst_symbol_defined" = "yes"; then + AS_VAR_SET(ac_HaveDef, yes) + ifelse($3,,[AC_MSG_RESULT([yes])]) + else + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + fi + AS_VAR_POPDEF([ac_HaveDef])dnl +]) + + +dnl CARES_CHECK_LIB_XNET +dnl ------------------------------------------------- +dnl Verify if X/Open network library is required. + +AC_DEFUN([CARES_CHECK_LIB_XNET], [ + AC_MSG_CHECKING([if X/Open network library is required]) + tst_lib_xnet_required="no" + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ +int main (void) +{ +#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) + return 0; +#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_lib_xnet_required="yes" + LIBS="$LIBS -lxnet" + ]) + AC_MSG_RESULT([$tst_lib_xnet_required]) +]) + + +dnl CARES_CHECK_AIX_ALL_SOURCE +dnl ------------------------------------------------- +dnl Provides a replacement of traditional AC_AIX with +dnl an uniform behaviour across all autoconf versions, +dnl and with our own placement rules. + +AC_DEFUN([CARES_CHECK_AIX_ALL_SOURCE], [ + AH_VERBATIM([_ALL_SOURCE], + [/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif]) + AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl + AC_BEFORE([$0], [CARES_CONFIGURE_REENTRANT])dnl + AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)]) + AC_EGREP_CPP([yes_this_is_aix],[ +#ifdef _AIX + yes_this_is_aix +#endif + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(_ALL_SOURCE) + ],[ + AC_MSG_RESULT([no]) + ]) +]) + + +dnl CURL_CHECK_HEADER_WINDOWS +dnl ------------------------------------------------- +dnl Check for compilable and valid windows.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ + AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + ]]) + ],[ + ac_cv_header_windows_h="yes" + ],[ + ac_cv_header_windows_h="no" + ]) + ]) + case "$ac_cv_header_windows_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, + [Define to 1 if you have the windows.h header file.]) + AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1, + [Define to avoid automatic inclusion of winsock.h]) + ;; + esac +]) + + +dnl CURL_CHECK_NATIVE_WINDOWS +dnl ------------------------------------------------- +dnl Check if building a native Windows target + +AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [ + if test "$ac_cv_header_windows_h" = "no"; then + ac_cv_native_windows="no" + else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ + (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) + int dummy=1; +#else + Not a native Windows build target. +#endif + ]]) + ],[ + ac_cv_native_windows="yes" + ],[ + ac_cv_native_windows="no" + ]) + fi + ]) + case "$ac_cv_native_windows" in + yes) + AC_DEFINE_UNQUOTED(NATIVE_WINDOWS, 1, + [Define to 1 if you are building a native Windows target.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WINSOCK +dnl ------------------------------------------------- +dnl Check for compilable and valid winsock.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINSOCK_H shall not be defined. +#else + int dummy=WSACleanup(); +#endif + ]]) + ],[ + ac_cv_header_winsock_h="yes" + ],[ + ac_cv_header_winsock_h="no" + ]) + ]) + case "$ac_cv_header_winsock_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, + [Define to 1 if you have the winsock.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WINSOCK2 +dnl ------------------------------------------------- +dnl Check for compilable and valid winsock2.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + ]]) + ],[ + ac_cv_header_winsock2_h="yes" + ],[ + ac_cv_header_winsock2_h="no" + ]) + ]) + case "$ac_cv_header_winsock2_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, + [Define to 1 if you have the winsock2.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WS2TCPIP +dnl ------------------------------------------------- +dnl Check for compilable and valid ws2tcpip.h header + +AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WS2TCPIP_H shall not be defined. +#else + int dummy=2*IP_PKTINFO; +#endif + ]]) + ],[ + ac_cv_header_ws2tcpip_h="yes" + ],[ + ac_cv_header_ws2tcpip_h="no" + ]) + ]) + case "$ac_cv_header_ws2tcpip_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, + [Define to 1 if you have the ws2tcpip.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_MALLOC +dnl ------------------------------------------------- +dnl Check for compilable and valid malloc.h header, +dnl and check if it is needed even with stdlib.h + +AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [ + AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + ac_cv_header_malloc_h="yes" + ],[ + ac_cv_header_malloc_h="no" + ]) + ]) + if test "$ac_cv_header_malloc_h" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1, + [Define to 1 if you have the malloc.h header file.]) + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + curl_cv_need_header_malloc_h="no" + ],[ + curl_cv_need_header_malloc_h="yes" + ]) + # + case "$curl_cv_need_header_malloc_h" in + yes) + AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1, + [Define to 1 if you need the malloc.h header file even with stdlib.h]) + ;; + esac + fi +]) + + +dnl CURL_CHECK_HEADER_MEMORY +dnl ------------------------------------------------- +dnl Check for compilable and valid memory.h header, +dnl and check if it is needed even with stdlib.h for +dnl memory related functions. + +AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [ + AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + ac_cv_header_memory_h="yes" + ],[ + ac_cv_header_memory_h="no" + ]) + ]) + if test "$ac_cv_header_memory_h" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1, + [Define to 1 if you have the memory.h header file.]) + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + curl_cv_need_header_memory_h="no" + ],[ + curl_cv_need_header_memory_h="yes" + ]) + # + case "$curl_cv_need_header_memory_h" in + yes) + AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1, + [Define to 1 if you need the memory.h header file even with stdlib.h]) + ;; + esac + fi +]) + + +dnl CURL_CHECK_FUNC_GETNAMEINFO +dnl ------------------------------------------------- +dnl Test if the getnameinfo function is available, +dnl and check the types of five of its arguments. +dnl If the function succeeds HAVE_GETNAMEINFO will be +dnl defined, defining the types of the arguments in +dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, +dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7, +dnl and also defining the type qualifier of first +dnl argument in GETNAMEINFO_QUAL_ARG1. + +AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ + AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) + # + AC_MSG_CHECKING([for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getnameinfo]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_getnameinfo="no" + ]) + # + if test "$curl_cv_getnameinfo" != "yes"; then + AC_MSG_CHECKING([deeper for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + getnameinfo(); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([but still no]) + curl_cv_getnameinfo="no" + ]) + fi + # + if test "$curl_cv_getnameinfo" != "yes"; then + AC_MSG_CHECKING([deeper and deeper for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#endif + ]],[[ + getnameinfo(0, 0, 0, 0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([but still no]) + curl_cv_getnameinfo="no" + ]) + fi + # + if test "$curl_cv_getnameinfo" = "yes"; then + AC_CACHE_CHECK([types of arguments for getnameinfo], + [curl_cv_func_getnameinfo_args], [ + curl_cv_func_getnameinfo_args="unknown" + for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do + for gni_arg2 in 'socklen_t' 'size_t' 'int'; do + for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do + for gni_arg7 in 'int' 'unsigned int'; do + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#define GNICALLCONV WSAAPI +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#define GNICALLCONV +#endif + extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, + char *, $gni_arg46, + char *, $gni_arg46, + $gni_arg7); + ]],[[ + $gni_arg2 salen=0; + $gni_arg46 hostlen=0; + $gni_arg46 servlen=0; + $gni_arg7 flags=0; + int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); + ]]) + ],[ + curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" + ]) + fi + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) + AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) + else + gni_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` + IFS=$gni_prev_IFS + shift + # + gni_qual_type_arg1=$[1] + # + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], + [Define to the type of arg 2 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], + [Define to the type of args 4 and 6 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], + [Define to the type of arg 7 for getnameinfo.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$gni_qual_type_arg1" in + const*) + gni_qual_arg1=const + gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'` + ;; + *) + gni_qual_arg1= + gni_type_arg1=$gni_qual_type_arg1 + ;; + esac + # + AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1, + [Define to the type qualifier of arg 1 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1, + [Define to the type of arg 1 for getnameinfo.]) + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, + [Define to 1 if you have the getnameinfo function.]) + ac_cv_func_getnameinfo="yes" + fi + fi +]) + + +dnl TYPE_SOCKADDR_STORAGE +dnl ------------------------------------------------- +dnl Check for struct sockaddr_storage. Most IPv6-enabled +dnl hosts have it, but AIX 4.3 is one known exception. + +AC_DEFUN([TYPE_SOCKADDR_STORAGE], +[ + AC_CHECK_TYPE([struct sockaddr_storage], + AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, + [if struct sockaddr_storage is defined]), , + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + + +dnl CURL_CHECK_NI_WITHSCOPEID +dnl ------------------------------------------------- +dnl Check for working NI_WITHSCOPEID in getnameinfo() + +AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ + AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl + AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl + AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \ + netdb.h netinet/in.h arpa/inet.h) + # + AC_CACHE_CHECK([for working NI_WITHSCOPEID], + [ac_cv_working_ni_withscopeid], [ + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif + ]],[[ +#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO) +#ifdef HAVE_STRUCT_SOCKADDR_STORAGE + struct sockaddr_storage sa; +#else + unsigned char sa[256]; +#endif + char hostbuf[NI_MAXHOST]; + int rc; + GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa); + GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf); + GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; + int fd = socket(AF_INET6, SOCK_STREAM, 0); + if(fd < 0) { + perror("socket()"); + return 1; /* Error creating socket */ + } + rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen); + if(rc) { + perror("getsockname()"); + return 2; /* Error retrieving socket name */ + } + rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags); + if(rc) { + printf("rc = %s\n", gai_strerror(rc)); + return 3; /* Error translating socket address */ + } + return 0; /* Ok, NI_WITHSCOPEID works */ +#else + return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */ +#endif + ]]) # AC-LANG-PROGRAM + ],[ + # Exit code == 0. Program worked. + ac_cv_working_ni_withscopeid="yes" + ],[ + # Exit code != 0. Program failed. + ac_cv_working_ni_withscopeid="no" + ],[ + # Program is not run when cross-compiling. So we assume + # NI_WITHSCOPEID will work if we are able to compile it. + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include +#include + ]],[[ + unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; + ]]) + ],[ + ac_cv_working_ni_withscopeid="yes" + ],[ + ac_cv_working_ni_withscopeid="no" + ]) # AC-COMPILE-IFELSE + ]) # AC-RUN-IFELSE + ]) # AC-CACHE-CHECK + case "$ac_cv_working_ni_withscopeid" in + yes) + AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, + [Define to 1 if NI_WITHSCOPEID exists and works.]) + ;; + esac +]) + + +dnl CURL_CHECK_FUNC_RECV +dnl ------------------------------------------------- +dnl Test if the socket recv() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_RECV +dnl will be defined, defining the types of the arguments +dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3 +dnl and RECV_TYPE_ARG4, defining the type of the function +dnl return value in RECV_TYPE_RETV. + +AC_DEFUN([CURL_CHECK_FUNC_RECV], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for recv]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + recv(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_recv="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_recv="no" + ]) + # + if test "$curl_cv_recv" = "yes"; then + AC_CACHE_CHECK([types of args and return type for recv], + [curl_cv_func_recv_args], [ + curl_cv_func_recv_args="unknown" + for recv_retv in 'int' 'ssize_t'; do + for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recv_arg2 in 'char *' 'void *'; do + for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recv_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_recv_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVCALLCONV +#endif + extern $recv_retv RECVCALLCONV + recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); + ]],[[ + $recv_arg1 s=0; + $recv_arg2 buf=0; + $recv_arg3 len=0; + $recv_arg4 flags=0; + $recv_retv res = recv(s, buf, len, flags); + ]]) + ],[ + curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" + ]) + fi + done + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_recv_args" = "unknown"; then + AC_MSG_ERROR([Cannot find proper types to use for recv args]) + else + recv_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` + IFS=$recv_prev_IFS + shift + # + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1], + [Define to the type of arg 1 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2], + [Define to the type of arg 2 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3], + [Define to the type of arg 3 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4], + [Define to the type of arg 4 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5], + [Define to the function return type for recv.]) + # + AC_DEFINE_UNQUOTED(HAVE_RECV, 1, + [Define to 1 if you have the recv function.]) + ac_cv_func_recv="yes" + fi + else + AC_MSG_ERROR([Unable to link function recv]) + fi +]) + + +dnl CURL_CHECK_FUNC_SEND +dnl ------------------------------------------------- +dnl Test if the socket send() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_SEND +dnl will be defined, defining the types of the arguments +dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3 +dnl and SEND_TYPE_ARG4, defining the type of the function +dnl return value in SEND_TYPE_RETV, and also defining the +dnl type qualifier of second argument in SEND_QUAL_ARG2. + +AC_DEFUN([CURL_CHECK_FUNC_SEND], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for send]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + send(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_send="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_send="no" + ]) + # + if test "$curl_cv_send" = "yes"; then + AC_CACHE_CHECK([types of args and return type for send], + [curl_cv_func_send_args], [ + curl_cv_func_send_args="unknown" + for send_retv in 'int' 'ssize_t'; do + for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do + for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for send_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_send_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define SENDCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define SENDCALLCONV +#endif + extern $send_retv SENDCALLCONV + send($send_arg1, $send_arg2, $send_arg3, $send_arg4); + ]],[[ + $send_arg1 s=0; + $send_arg3 len=0; + $send_arg4 flags=0; + $send_retv res = send(s, 0, len, flags); + ]]) + ],[ + curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" + ]) + fi + done + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_send_args" = "unknown"; then + AC_MSG_ERROR([Cannot find proper types to use for send args]) + else + send_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` + IFS=$send_prev_IFS + shift + # + send_qual_type_arg2=$[2] + # + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1], + [Define to the type of arg 1 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3], + [Define to the type of arg 3 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4], + [Define to the type of arg 4 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5], + [Define to the function return type for send.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$send_qual_type_arg2" in + const*) + send_qual_arg2=const + send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` + ;; + *) + send_qual_arg2= + send_type_arg2=$send_qual_type_arg2 + ;; + esac + # + AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2, + [Define to the type qualifier of arg 2 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2, + [Define to the type of arg 2 for send.]) + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_SEND, 1, + [Define to 1 if you have the send function.]) + ac_cv_func_send="yes" + fi + else + AC_MSG_ERROR([Unable to link function send]) + fi +]) + + +dnl CURL_CHECK_FUNC_RECVFROM +dnl ------------------------------------------------- +dnl Test if the socket recvfrom() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_RECVFROM +dnl will be defined, defining the types of the arguments +dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on +dnl to RECVFROM_TYPE_ARG6, defining also the type of the +dnl function return value in RECVFROM_TYPE_RETV. +dnl Notice that the types returned for pointer arguments +dnl will actually be the type pointed by the pointer. + +AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for recvfrom]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + recvfrom(0, 0, 0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_recvfrom="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_recvfrom="no" + ]) + # + if test "$curl_cv_recvfrom" = "yes"; then + AC_CACHE_CHECK([types of args and return type for recvfrom], + [curl_cv_func_recvfrom_args], [ + curl_cv_func_recvfrom_args="unknown" + for recvfrom_retv in 'int' 'ssize_t'; do + for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recvfrom_arg2 in 'char *' 'void *'; do + for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recvfrom_arg4 in 'int' 'unsigned int'; do + for recvfrom_arg5 in 'struct sockaddr *' 'void *' 'const struct sockaddr *'; do + for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVFROMCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVFROMCALLCONV +#endif + extern $recvfrom_retv RECVFROMCALLCONV + recvfrom($recvfrom_arg1, $recvfrom_arg2, + $recvfrom_arg3, $recvfrom_arg4, + $recvfrom_arg5, $recvfrom_arg6); + ]],[[ + $recvfrom_arg1 s=0; + $recvfrom_arg2 buf=0; + $recvfrom_arg3 len=0; + $recvfrom_arg4 flags=0; + $recvfrom_arg5 addr=0; + $recvfrom_arg6 addrlen=0; + $recvfrom_retv res=0; + res = recvfrom(s, buf, len, flags, addr, addrlen); + ]]) + ],[ + curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv" + ]) + fi + done + done + done + done + done + done + done + ]) # AC-CACHE-CHECK + # Nearly last minute change for this release starts here + AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1, + [Define to 1 if you have the recvfrom function.]) + ac_cv_func_recvfrom="yes" + # Nearly last minute change for this release ends here + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + AC_MSG_WARN([Cannot find proper types to use for recvfrom args]) + else + recvfrom_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'` + IFS=$recvfrom_prev_IFS + shift + # + recvfrom_ptrt_arg2=$[2] + recvfrom_qual_ptrt_arg5=$[5] + recvfrom_ptrt_arg6=$[6] + # + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1], + [Define to the type of arg 1 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3], + [Define to the type of arg 3 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4], + [Define to the type of arg 4 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7], + [Define to the function return type for recvfrom.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$recvfrom_qual_ptrt_arg5" in + const*) + recvfrom_qual_arg5=const + recvfrom_ptrt_arg5=`echo $recvfrom_qual_ptrt_arg5 | sed 's/^const //'` + ;; + *) + recvfrom_qual_arg5= + recvfrom_ptrt_arg5=$recvfrom_qual_ptrt_arg5 + ;; + esac + # + recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'` + recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'` + recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'` + # + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2, + [Define to the type pointed by arg 2 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_QUAL_ARG5, $recvfrom_qual_arg5, + [Define to the type qualifier pointed by arg 5 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5, + [Define to the type pointed by arg 5 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6, + [Define to the type pointed by arg 6 for recvfrom.]) + # + if test "$recvfrom_type_arg2" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1, + [Define to 1 if the type pointed by arg 2 for recvfrom is void.]) + fi + if test "$recvfrom_type_arg5" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1, + [Define to 1 if the type pointed by arg 5 for recvfrom is void.]) + fi + if test "$recvfrom_type_arg6" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1, + [Define to 1 if the type pointed by arg 6 for recvfrom is void.]) + fi + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1, + [Define to 1 if you have the recvfrom function.]) + ac_cv_func_recvfrom="yes" + fi + else + AC_MSG_WARN([Unable to link function recvfrom]) + AC_MSG_WARN([Your system will be vulnerable to some forms of DNS cache poisoning]) + fi +]) + + +dnl CURL_CHECK_MSG_NOSIGNAL +dnl ------------------------------------------------- +dnl Check for MSG_NOSIGNAL + +AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + int flag=MSG_NOSIGNAL; + ]]) + ],[ + ac_cv_msg_nosignal="yes" + ],[ + ac_cv_msg_nosignal="no" + ]) + ]) + case "$ac_cv_msg_nosignal" in + yes) + AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, + [Define to 1 if you have the MSG_NOSIGNAL flag.]) + ;; + esac +]) + + +dnl CURL_CHECK_STRUCT_TIMEVAL +dnl ------------------------------------------------- +dnl Check for timeval struct + +AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ + AC_REQUIRE([AC_HEADER_TIME])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h) + AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + ]],[[ + struct timeval ts; + ts.tv_sec = 0; + ts.tv_usec = 0; + ]]) + ],[ + ac_cv_struct_timeval="yes" + ],[ + ac_cv_struct_timeval="no" + ]) + ]) + case "$ac_cv_struct_timeval" in + yes) + AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, + [Define to 1 if you have the timeval struct.]) + ;; + esac +]) + + +dnl TYPE_SIG_ATOMIC_T +dnl ------------------------------------------------- +dnl Check if the sig_atomic_t type is available, and +dnl verify if it is already defined as volatile. + +AC_DEFUN([TYPE_SIG_ATOMIC_T], [ + AC_CHECK_HEADERS(signal.h) + AC_CHECK_TYPE([sig_atomic_t],[ + AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, + [Define to 1 if sig_atomic_t is an available typedef.]) + ], ,[ +#ifdef HAVE_SIGNAL_H +#include +#endif + ]) + case "$ac_cv_type_sig_atomic_t" in + yes) + # + AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SIGNAL_H +#include +#endif + ]],[[ + static volatile sig_atomic_t dummy = 0; + ]]) + ],[ + AC_MSG_RESULT([no]) + ac_cv_sig_atomic_t_volatile="no" + ],[ + AC_MSG_RESULT([yes]) + ac_cv_sig_atomic_t_volatile="yes" + ]) + # + if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then + AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1, + [Define to 1 if sig_atomic_t is already defined as volatile.]) + fi + ;; + esac +]) + + +dnl TYPE_IN_ADDR_T +dnl ------------------------------------------------- +dnl Check for in_addr_t: it is used to receive the return code of inet_addr() +dnl and a few other things. + +AC_DEFUN([TYPE_IN_ADDR_T], [ + AC_CHECK_TYPE([in_addr_t], ,[ + dnl in_addr_t not available + AC_CACHE_CHECK([for in_addr_t equivalent], + [curl_cv_in_addr_t_equiv], [ + curl_cv_in_addr_t_equiv="unknown" + for t in "unsigned long" int size_t unsigned long; do + if test "$curl_cv_in_addr_t_equiv" = "unknown"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]],[[ + $t data = inet_addr ("1.2.3.4"); + ]]) + ],[ + curl_cv_in_addr_t_equiv="$t" + ]) + fi + done + ]) + case "$curl_cv_in_addr_t_equiv" in + unknown) + AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) + ;; + *) + AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, + [Type to use in place of in_addr_t when system does not provide it.]) + ;; + esac + ],[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + + +dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl Check if monotonic clock_gettime is available. + +AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ + AC_REQUIRE([AC_HEADER_TIME])dnl + AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) + AC_MSG_CHECKING([for monotonic clock_gettime]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ac_cv_func_clock_gettime="yes" + ],[ + AC_MSG_RESULT([no]) + ac_cv_func_clock_gettime="no" + ]) + dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed + dnl until library linking and run-time checks for clock_gettime succeed. +]) + + +dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl If monotonic clock_gettime is available then, +dnl check and prepended to LIBS any needed libraries. + +AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ + AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl + # + if test "$ac_cv_func_clock_gettime" = "yes"; then + # + AC_MSG_CHECKING([for clock_gettime in libraries]) + # + curl_cv_save_LIBS="$LIBS" + curl_cv_gclk_LIBS="unknown" + # + for x_xlibs in '' '-lrt' '-lposix4' ; do + if test "$curl_cv_gclk_LIBS" = "unknown"; then + if test -z "$x_xlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_xlibs $curl_cv_save_LIBS" + fi + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + curl_cv_gclk_LIBS="$x_xlibs" + ]) + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_gclk_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find clock_gettime]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + ac_cv_func_clock_gettime="no" + ;; + X-) + AC_MSG_RESULT([no additional lib required]) + ac_cv_func_clock_gettime="yes" + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_gclk_LIBS" + else + LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" + fi + AC_MSG_RESULT([$curl_cv_gclk_LIBS]) + ac_cv_func_clock_gettime="yes" + ;; + esac + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$ac_cv_func_clock_gettime" = "yes"; then + AC_MSG_CHECKING([if monotonic clock_gettime works]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) + exit(0); + else + exit(1); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + ac_cv_func_clock_gettime="no" + LIBS="$curl_cv_save_LIBS" + ]) + fi + # + case "$ac_cv_func_clock_gettime" in + yes) + AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, + [Define to 1 if you have the clock_gettime function and monotonic timer.]) + ;; + esac + # + fi + # +]) + + +dnl CARES_CHECK_LIBS_CONNECT +dnl ------------------------------------------------- +dnl Verify if network connect function is already available +dnl using current libraries or if another one is required. + +AC_DEFUN([CARES_CHECK_LIBS_CONNECT], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_MSG_CHECKING([for connect in libraries]) + tst_connect_save_LIBS="$LIBS" + tst_connect_need_LIBS="unknown" + for tst_lib in '' '-lsocket' ; do + if test "$tst_connect_need_LIBS" = "unknown"; then + LIBS="$tst_lib $tst_connect_save_LIBS" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + #ifndef HAVE_WINDOWS_H + int connect(int, void*, int); + #endif + ]],[[ + if(0 != connect(0, 0, 0)) + return 1; + ]]) + ],[ + tst_connect_need_LIBS="$tst_lib" + ]) + fi + done + LIBS="$tst_connect_save_LIBS" + # + case X-"$tst_connect_need_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find connect]) + AC_MSG_ERROR([cannot find connect function in libraries.]) + ;; + X-) + AC_MSG_RESULT([yes]) + ;; + *) + AC_MSG_RESULT([$tst_connect_need_LIBS]) + LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" + ;; + esac +]) + + +dnl CARES_DEFINE_UNQUOTED (VARIABLE, [VALUE]) +dnl ------------------------------------------------- +dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor +dnl symbol that can be further used in custom template configuration +dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third +dnl argument for the description. Symbol definitions done with this +dnl macro are intended to be exclusively used in handcrafted *.h.in +dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one +dnl prevents autoheader generation and insertion of symbol template +dnl stub and definition into the first configuration header file. Do +dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each +dnl one serves different functional needs. + +AC_DEFUN([CARES_DEFINE_UNQUOTED], [ +cat >>confdefs.h <<_EOF +[@%:@define] $1 ifelse($#, 2, [$2], 1) +_EOF +]) + + +dnl CARES_CONFIGURE_LONG +dnl ------------------------------------------------- +dnl Find out the size of long as reported by sizeof() and define +dnl CARES_SIZEOF_LONG as appropriate to be used in template file +dnl ares_build.h.in to properly configure the library. +dnl The size of long is a build time characteristic and as such +dnl must be recorded in ares_build.h + +AC_DEFUN([CARES_CONFIGURE_LONG], [ + if test -z "$ac_cv_sizeof_long" || + test "$ac_cv_sizeof_long" -eq "0"; then + AC_MSG_ERROR([cannot find out size of long.]) + fi + CARES_DEFINE_UNQUOTED([CARES_SIZEOF_LONG], [$ac_cv_sizeof_long]) +]) + + +dnl CARES_CONFIGURE_ARES_SOCKLEN_T +dnl ------------------------------------------------- +dnl Find out suitable ares_socklen_t data type definition and size, making +dnl appropriate definitions for template file ares_build.h.in +dnl to properly configure and use the library. +dnl +dnl The need for the ares_socklen_t definition arises mainly to properly +dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t +dnl data type which is 32 or 64-Bit wide depending on the data model being +dnl used, and that on the other hand is only actually used when interfacing +dnl the X/Open sockets provided in the xnet library. + +AC_DEFUN([CARES_CONFIGURE_ARES_SOCKLEN_T], [ + AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl + # + AC_MSG_CHECKING([for ares_socklen_t data type]) + cares_typeof_ares_socklen_t="unknown" + for arg1 in int SOCKET; do + for arg2 in 'struct sockaddr' void; do + for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do + if test "$cares_typeof_ares_socklen_t" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_preprocess_callconv + extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *); + ]],[[ + $t *lenptr = 0; + if(0 != getpeername(0, 0, lenptr)) + return 1; + ]]) + ],[ + cares_typeof_ares_socklen_t="$t" + ]) + fi + done + done + done + for t in socklen_t int; do + if test "$cares_typeof_ares_socklen_t" = "void"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_socket + typedef $t ares_socklen_t; + ]],[[ + ares_socklen_t dummy; + ]]) + ],[ + cares_typeof_ares_socklen_t="$t" + ]) + fi + done + AC_MSG_RESULT([$cares_typeof_ares_socklen_t]) + if test "$cares_typeof_ares_socklen_t" = "void" || + test "$cares_typeof_ares_socklen_t" = "unknown"; then + AC_MSG_ERROR([cannot find data type for ares_socklen_t.]) + fi + # + AC_MSG_CHECKING([size of ares_socklen_t]) + cares_sizeof_ares_socklen_t="unknown" + cares_pull_headers_socklen_t="unknown" + if test "$ac_cv_header_ws2tcpip_h" = "yes"; then + tst_pull_header_checks='none ws2tcpip' + tst_size_checks='4' + else + tst_pull_header_checks='none systypes syssocket' + tst_size_checks='4 8 2' + fi + for tst_size in $tst_size_checks; do + for tst_pull_headers in $tst_pull_header_checks; do + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + case $tst_pull_headers in + ws2tcpip) + tmp_includes="$cares_includes_ws2tcpip" + ;; + systypes) + tmp_includes="$cares_includes_sys_types" + ;; + syssocket) + tmp_includes="$cares_includes_sys_socket" + ;; + *) + tmp_includes="" + ;; + esac + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $tmp_includes + typedef $cares_typeof_ares_socklen_t ares_socklen_t; + typedef char dummy_arr[sizeof(ares_socklen_t) == $tst_size ? 1 : -1]; + ]],[[ + ares_socklen_t dummy; + ]]) + ],[ + cares_sizeof_ares_socklen_t="$tst_size" + cares_pull_headers_socklen_t="$tst_pull_headers" + ]) + fi + done + done + AC_MSG_RESULT([$cares_sizeof_ares_socklen_t]) + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + AC_MSG_ERROR([cannot find out size of ares_socklen_t.]) + fi + # + case $cares_pull_headers_socklen_t in + ws2tcpip) + CARES_DEFINE_UNQUOTED([CARES_PULL_WS2TCPIP_H]) + ;; + systypes) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H]) + ;; + syssocket) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H]) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_SOCKET_H]) + ;; + esac + CARES_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SOCKLEN_T], [$cares_typeof_ares_socklen_t]) + CARES_DEFINE_UNQUOTED([CARES_SIZEOF_ARES_SOCKLEN_T], [$cares_sizeof_ares_socklen_t]) +]) + + +dnl This macro determines if the specified struct exists in the specified file +dnl Syntax: +dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found]) + +AC_DEFUN([CARES_CHECK_STRUCT], [ + AC_MSG_CHECKING([for struct $2]) + AC_TRY_COMPILE([$1], + [ + struct $2 struct_instance; + ], ac_struct="yes", ac_found="no") + if test "$ac_struct" = "yes" ; then + AC_MSG_RESULT(yes) + $3 + else + AC_MSG_RESULT(no) + $4 + fi +]) + +dnl This macro determines if the specified constant exists in the specified file +dnl Syntax: +dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found]) + +AC_DEFUN([CARES_CHECK_CONSTANT], [ + AC_MSG_CHECKING([for $2]) + AC_EGREP_CPP(VARIABLEWASDEFINED, + [ + $1 + + #ifdef $2 + VARIABLEWASDEFINED + #else + NJET + #endif + ], ac_constant="yes", ac_constant="no" + ) + if test "$ac_constant" = "yes" ; then + AC_MSG_RESULT(yes) + $3 + else + AC_MSG_RESULT(no) + $4 + fi +]) + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..8600666 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,932 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([AM_MAINTAINER_MODE], +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/cares-compilers.m4]) +m4_include([m4/cares-confopts.m4]) +m4_include([m4/cares-functions.m4]) +m4_include([m4/cares-override.m4]) +m4_include([m4/cares-reentrant.m4]) +m4_include([m4/cares-system.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/xc-translit.m4]) +m4_include([acinclude.m4]) diff --git a/acountry.1 b/acountry.1 new file mode 100644 index 0000000..74c4e34 --- /dev/null +++ b/acountry.1 @@ -0,0 +1,53 @@ +.TH ACOUNTRY "1" "April 2011" "c-ares utilities" +.SH NAME +acountry \- print the country where an IPv4 address or host is located +.SH SYNOPSIS +.B acountry +[\fIOPTION\fR]... \fIHOST\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Print the country where HOST (an IPv4 address or hostname) is located, +using the countries.nerd.dk DNS domain to identify the country. +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-v\fR +Be more verbose. Print extra information. +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +\fBhttp://cool.haxx.se/mailman/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +adig(1), ahost(1). +.PP +The DNSBL countries.nerd.dk +.br +\fBhttp://countries.nerd.dk/\fR +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +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. +.br +No further copyright claims are being made by the author(s) of this utility. +.SH AUTHOR +Gisle Vanem diff --git a/acountry.c b/acountry.c new file mode 100644 index 0000000..d989018 --- /dev/null +++ b/acountry.c @@ -0,0 +1,628 @@ +/* + * + * IP-address/hostname to country converter. + * + * Problem; you want to know where IP a.b.c.d is located. + * + * Use ares_gethostbyname ("d.c.b.a.zz.countries.nerd.dk") + * and get the CNAME (host->h_name). Result will be: + * CNAME = zz.countries.nerd.dk with address 127.0.x.y (ver 1) or + * CNAME = .zz.countries.nerd.dk with address 127.0.x.y (ver 2) + * + * The 2 letter country code is in and the ISO-3166 country + * number is in x.y (number = x*256 + y). Version 2 of the protocol is missing + * the number. + * + * Ref: http://countries.nerd.dk/more.html + * + * Written by G. Vanem 2006, 2007 + * + * NB! This program may not be big-endian aware. + * + * 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 +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_STRINGS_H +#include +#endif + +#if defined(WIN32) && !defined(WATT32) + #include +#else + #include + #include + #include + #include +#endif + +#include "ares.h" +#include "ares_getopt.h" +#include "inet_net_pton.h" +#include "inet_ntop.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +#ifndef INADDR_NONE +#define INADDR_NONE 0xffffffff +#endif + +static const char *usage = "acountry [-vh?] {host|addr} ...\n"; +static const char nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk"; +static const char *nerd_ver1 = nerd_fmt + 14; +static const char *nerd_ver2 = nerd_fmt + 11; +static int verbose = 0; + +#define TRACE(fmt) do { \ + if (verbose > 0) \ + printf fmt ; \ + } while (0) + +static void wait_ares(ares_channel channel); +static void callback(void *arg, int status, int timeouts, struct hostent *host); +static void callback2(void *arg, int status, int timeouts, struct hostent *host); +static void find_country_from_cname(const char *cname, struct in_addr addr); + +static void Abort(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + exit(1); +} + +int main(int argc, char **argv) +{ + ares_channel channel; + int ch, status; + +#if defined(WIN32) && !defined(WATT32) + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + while ((ch = ares_getopt(argc, argv, "dvh?")) != -1) + switch (ch) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + case 'v': + verbose++; + break; + case 'h': + case '?': + default: + Abort(usage); + } + + argc -= optind; + argv += optind; + if (argc < 1) + Abort(usage); + + status = ares_init(&channel); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init: %s\n", ares_strerror(status)); + return 1; + } + + /* Initiate the queries, one per command-line argument. */ + for ( ; *argv; argv++) + { + struct in_addr addr; + char buf[100]; + + /* If this fails, assume '*argv' is a host-name that + * must be resolved first + */ + if (ares_inet_pton(AF_INET, *argv, &addr) != 1) + { + ares_gethostbyname(channel, *argv, AF_INET, callback2, &addr); + wait_ares(channel); + if (addr.s_addr == INADDR_NONE) + { + printf("Failed to lookup %s\n", *argv); + continue; + } + } + + sprintf(buf, nerd_fmt, + (unsigned int)(addr.s_addr >> 24), + (unsigned int)((addr.s_addr >> 16) & 255), + (unsigned int)((addr.s_addr >> 8) & 255), + (unsigned int)(addr.s_addr & 255)); + TRACE(("Looking up %s...", buf)); + fflush(stdout); + ares_gethostbyname(channel, buf, AF_INET, callback, buf); + } + + wait_ares(channel); + ares_destroy(channel); + + ares_library_cleanup(); + +#if defined(WIN32) && !defined(WATT32) + WSACleanup(); +#endif + + return 0; +} + +/* + * Wait for the queries to complete. + */ +static void wait_ares(ares_channel channel) +{ + for (;;) + { + struct timeval *tvp, tv; + fd_set read_fds, write_fds; + int nfds; + + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + select(nfds, &read_fds, &write_fds, NULL, tvp); + ares_process(channel, &read_fds, &write_fds); + } +} + +/* + * This is the callback used when we have the IP-address of interest. + * Extract the CNAME and figure out the country-code from it. + */ +static void callback(void *arg, int status, int timeouts, struct hostent *host) +{ + const char *name = (const char*)arg; + const char *cname; + char buf[20]; + + (void)timeouts; + + if (!host || status != ARES_SUCCESS) + { + printf("Failed to lookup %s: %s\n", name, ares_strerror(status)); + return; + } + + TRACE(("\nFound address %s, name %s\n", + ares_inet_ntop(AF_INET,(const char*)host->h_addr,buf,sizeof(buf)), + host->h_name)); + + cname = host->h_name; /* CNAME gets put here */ + if (!cname) + printf("Failed to get CNAME for %s\n", name); + else + find_country_from_cname(cname, *(struct in_addr*)host->h_addr); +} + +/* + * This is the callback used to obtain the IP-address of the host of interest. + */ +static void callback2(void *arg, int status, int timeouts, struct hostent *host) +{ + struct in_addr *addr = (struct in_addr*) arg; + + (void)timeouts; + if (!host || status != ARES_SUCCESS) + memset(addr, INADDR_NONE, sizeof(*addr)); + else + memcpy(addr, host->h_addr, sizeof(*addr)); +} + +struct search_list { + int country_number; /* ISO-3166 country number */ + char short_name[3]; /* A2 short country code */ + const char *long_name; /* normal country name */ + }; + +static const struct search_list *list_lookup(int number, const struct search_list *list, int num) +{ + while (num > 0 && list->long_name) + { + if (list->country_number == number) + return (list); + num--; + list++; + } + return (NULL); +} + +/* + * Ref: ftp://ftp.ripe.net/iso3166-countrycodes.txt + */ +static const struct search_list country_list[] = { + { 4, "af", "Afghanistan" }, + { 248, "ax", "land Island" }, + { 8, "al", "Albania" }, + { 12, "dz", "Algeria" }, + { 16, "as", "American Samoa" }, + { 20, "ad", "Andorra" }, + { 24, "ao", "Angola" }, + { 660, "ai", "Anguilla" }, + { 10, "aq", "Antarctica" }, + { 28, "ag", "Antigua & Barbuda" }, + { 32, "ar", "Argentina" }, + { 51, "am", "Armenia" }, + { 533, "aw", "Aruba" }, + { 36, "au", "Australia" }, + { 40, "at", "Austria" }, + { 31, "az", "Azerbaijan" }, + { 44, "bs", "Bahamas" }, + { 48, "bh", "Bahrain" }, + { 50, "bd", "Bangladesh" }, + { 52, "bb", "Barbados" }, + { 112, "by", "Belarus" }, + { 56, "be", "Belgium" }, + { 84, "bz", "Belize" }, + { 204, "bj", "Benin" }, + { 60, "bm", "Bermuda" }, + { 64, "bt", "Bhutan" }, + { 68, "bo", "Bolivia" }, + { 70, "ba", "Bosnia & Herzegowina" }, + { 72, "bw", "Botswana" }, + { 74, "bv", "Bouvet Island" }, + { 76, "br", "Brazil" }, + { 86, "io", "British Indian Ocean Territory" }, + { 96, "bn", "Brunei Darussalam" }, + { 100, "bg", "Bulgaria" }, + { 854, "bf", "Burkina Faso" }, + { 108, "bi", "Burundi" }, + { 116, "kh", "Cambodia" }, + { 120, "cm", "Cameroon" }, + { 124, "ca", "Canada" }, + { 132, "cv", "Cape Verde" }, + { 136, "ky", "Cayman Islands" }, + { 140, "cf", "Central African Republic" }, + { 148, "td", "Chad" }, + { 152, "cl", "Chile" }, + { 156, "cn", "China" }, + { 162, "cx", "Christmas Island" }, + { 166, "cc", "Cocos Islands" }, + { 170, "co", "Colombia" }, + { 174, "km", "Comoros" }, + { 178, "cg", "Congo" }, + { 180, "cd", "Congo" }, + { 184, "ck", "Cook Islands" }, + { 188, "cr", "Costa Rica" }, + { 384, "ci", "Cote d'Ivoire" }, + { 191, "hr", "Croatia" }, + { 192, "cu", "Cuba" }, + { 196, "cy", "Cyprus" }, + { 203, "cz", "Czech Republic" }, + { 208, "dk", "Denmark" }, + { 262, "dj", "Djibouti" }, + { 212, "dm", "Dominica" }, + { 214, "do", "Dominican Republic" }, + { 218, "ec", "Ecuador" }, + { 818, "eg", "Egypt" }, + { 222, "sv", "El Salvador" }, + { 226, "gq", "Equatorial Guinea" }, + { 232, "er", "Eritrea" }, + { 233, "ee", "Estonia" }, + { 231, "et", "Ethiopia" }, + { 238, "fk", "Falkland Islands" }, + { 234, "fo", "Faroe Islands" }, + { 242, "fj", "Fiji" }, + { 246, "fi", "Finland" }, + { 250, "fr", "France" }, + { 249, "fx", "France, Metropolitan" }, + { 254, "gf", "French Guiana" }, + { 258, "pf", "French Polynesia" }, + { 260, "tf", "French Southern Territories" }, + { 266, "ga", "Gabon" }, + { 270, "gm", "Gambia" }, + { 268, "ge", "Georgia" }, + { 276, "de", "Germany" }, + { 288, "gh", "Ghana" }, + { 292, "gi", "Gibraltar" }, + { 300, "gr", "Greece" }, + { 304, "gl", "Greenland" }, + { 308, "gd", "Grenada" }, + { 312, "gp", "Guadeloupe" }, + { 316, "gu", "Guam" }, + { 320, "gt", "Guatemala" }, + { 324, "gn", "Guinea" }, + { 624, "gw", "Guinea-Bissau" }, + { 328, "gy", "Guyana" }, + { 332, "ht", "Haiti" }, + { 334, "hm", "Heard & Mc Donald Islands" }, + { 336, "va", "Vatican City" }, + { 340, "hn", "Honduras" }, + { 344, "hk", "Hong kong" }, + { 348, "hu", "Hungary" }, + { 352, "is", "Iceland" }, + { 356, "in", "India" }, + { 360, "id", "Indonesia" }, + { 364, "ir", "Iran" }, + { 368, "iq", "Iraq" }, + { 372, "ie", "Ireland" }, + { 376, "il", "Israel" }, + { 380, "it", "Italy" }, + { 388, "jm", "Jamaica" }, + { 392, "jp", "Japan" }, + { 400, "jo", "Jordan" }, + { 398, "kz", "Kazakhstan" }, + { 404, "ke", "Kenya" }, + { 296, "ki", "Kiribati" }, + { 408, "kp", "Korea (north)" }, + { 410, "kr", "Korea (south)" }, + { 414, "kw", "Kuwait" }, + { 417, "kg", "Kyrgyzstan" }, + { 418, "la", "Laos" }, + { 428, "lv", "Latvia" }, + { 422, "lb", "Lebanon" }, + { 426, "ls", "Lesotho" }, + { 430, "lr", "Liberia" }, + { 434, "ly", "Libya" }, + { 438, "li", "Liechtenstein" }, + { 440, "lt", "Lithuania" }, + { 442, "lu", "Luxembourg" }, + { 446, "mo", "Macao" }, + { 807, "mk", "Macedonia" }, + { 450, "mg", "Madagascar" }, + { 454, "mw", "Malawi" }, + { 458, "my", "Malaysia" }, + { 462, "mv", "Maldives" }, + { 466, "ml", "Mali" }, + { 470, "mt", "Malta" }, + { 584, "mh", "Marshall Islands" }, + { 474, "mq", "Martinique" }, + { 478, "mr", "Mauritania" }, + { 480, "mu", "Mauritius" }, + { 175, "yt", "Mayotte" }, + { 484, "mx", "Mexico" }, + { 583, "fm", "Micronesia" }, + { 498, "md", "Moldova" }, + { 492, "mc", "Monaco" }, + { 496, "mn", "Mongolia" }, + { 500, "ms", "Montserrat" }, + { 504, "ma", "Morocco" }, + { 508, "mz", "Mozambique" }, + { 104, "mm", "Myanmar" }, + { 516, "na", "Namibia" }, + { 520, "nr", "Nauru" }, + { 524, "np", "Nepal" }, + { 528, "nl", "Netherlands" }, + { 530, "an", "Netherlands Antilles" }, + { 540, "nc", "New Caledonia" }, + { 554, "nz", "New Zealand" }, + { 558, "ni", "Nicaragua" }, + { 562, "ne", "Niger" }, + { 566, "ng", "Nigeria" }, + { 570, "nu", "Niue" }, + { 574, "nf", "Norfolk Island" }, + { 580, "mp", "Northern Mariana Islands" }, + { 578, "no", "Norway" }, + { 512, "om", "Oman" }, + { 586, "pk", "Pakistan" }, + { 585, "pw", "Palau" }, + { 275, "ps", "Palestinian Territory" }, + { 591, "pa", "Panama" }, + { 598, "pg", "Papua New Guinea" }, + { 600, "py", "Paraguay" }, + { 604, "pe", "Peru" }, + { 608, "ph", "Philippines" }, + { 612, "pn", "Pitcairn" }, + { 616, "pl", "Poland" }, + { 620, "pt", "Portugal" }, + { 630, "pr", "Puerto Rico" }, + { 634, "qa", "Qatar" }, + { 638, "re", "Reunion" }, + { 642, "ro", "Romania" }, + { 643, "ru", "Russia" }, + { 646, "rw", "Rwanda" }, + { 659, "kn", "Saint Kitts & Nevis" }, + { 662, "lc", "Saint Lucia" }, + { 670, "vc", "Saint Vincent" }, + { 882, "ws", "Samoa" }, + { 674, "sm", "San Marino" }, + { 678, "st", "Sao Tome & Principe" }, + { 682, "sa", "Saudi Arabia" }, + { 686, "sn", "Senegal" }, + { 891, "cs", "Serbia and Montenegro" }, + { 690, "sc", "Seychelles" }, + { 694, "sl", "Sierra Leone" }, + { 702, "sg", "Singapore" }, + { 703, "sk", "Slovakia" }, + { 705, "si", "Slovenia" }, + { 90, "sb", "Solomon Islands" }, + { 706, "so", "Somalia" }, + { 710, "za", "South Africa" }, + { 239, "gs", "South Georgia" }, + { 724, "es", "Spain" }, + { 144, "lk", "Sri Lanka" }, + { 654, "sh", "St. Helena" }, + { 666, "pm", "St. Pierre & Miquelon" }, + { 736, "sd", "Sudan" }, + { 740, "sr", "Suriname" }, + { 744, "sj", "Svalbard & Jan Mayen Islands" }, + { 748, "sz", "Swaziland" }, + { 752, "se", "Sweden" }, + { 756, "ch", "Switzerland" }, + { 760, "sy", "Syrian Arab Republic" }, + { 626, "tl", "Timor-Leste" }, + { 158, "tw", "Taiwan" }, + { 762, "tj", "Tajikistan" }, + { 834, "tz", "Tanzania" }, + { 764, "th", "Thailand" }, + { 768, "tg", "Togo" }, + { 772, "tk", "Tokelau" }, + { 776, "to", "Tonga" }, + { 780, "tt", "Trinidad & Tobago" }, + { 788, "tn", "Tunisia" }, + { 792, "tr", "Turkey" }, + { 795, "tm", "Turkmenistan" }, + { 796, "tc", "Turks & Caicos Islands" }, + { 798, "tv", "Tuvalu" }, + { 800, "ug", "Uganda" }, + { 804, "ua", "Ukraine" }, + { 784, "ae", "United Arab Emirates" }, + { 826, "gb", "United Kingdom" }, + { 840, "us", "United States" }, + { 581, "um", "United States Minor Outlying Islands" }, + { 858, "uy", "Uruguay" }, + { 860, "uz", "Uzbekistan" }, + { 548, "vu", "Vanuatu" }, + { 862, "ve", "Venezuela" }, + { 704, "vn", "Vietnam" }, + { 92, "vg", "Virgin Islands (British)" }, + { 850, "vi", "Virgin Islands (US)" }, + { 876, "wf", "Wallis & Futuna Islands" }, + { 732, "eh", "Western Sahara" }, + { 887, "ye", "Yemen" }, + { 894, "zm", "Zambia" }, + { 716, "zw", "Zimbabwe" } + }; + +/* + * Check if start of 'str' is simply an IPv4 address. + */ +#define BYTE_OK(x) ((x) >= 0 && (x) <= 255) + +static int is_addr(char *str, char **end) +{ + int a0, a1, a2, a3, num, rc = 0, length = 0; + + num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length); + if( (num == 4) && + BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) && + length >= (3+4)) + { + rc = 1; + *end = str + length; + } + return rc; +} + +/* + * Find the country-code and name from the CNAME. E.g.: + * version 1: CNAME = zzno.countries.nerd.dk with address 127.0.2.66 + * yields ccode_A" = "no" and cnumber 578 (2.66). + * version 2: CNAME = .zz.countries.nerd.dk with address 127.0.2.66 + * yields cnumber 578 (2.66). ccode_A is ""; + */ +static void find_country_from_cname(const char *cname, struct in_addr addr) +{ + const struct search_list *country; + char ccode_A2[3], *ccopy, *dot_4; + int cnumber, z0, z1, ver_1, ver_2; + unsigned long ip; + + ip = ntohl(addr.s_addr); + z0 = TOLOWER(cname[0]); + z1 = TOLOWER(cname[1]); + ccopy = strdup(cname); + dot_4 = NULL; + + ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1)); + ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2)); + + if (ver_1) + { + const char *dot = strchr(cname, '.'); + if ((z0 != 'z' && z1 != 'z') || dot != cname+4) + { + printf("Unexpected CNAME %s (ver_1)\n", cname); + return; + } + } + else if (ver_2) + { + z0 = TOLOWER(dot_4[1]); + z1 = TOLOWER(dot_4[2]); + if (z0 != 'z' && z1 != 'z') + { + printf("Unexpected CNAME %s (ver_2)\n", cname); + return; + } + } + else + { + printf("Unexpected CNAME %s (ver?)\n", cname); + return; + } + + if (ver_1) + { + ccode_A2[0] = (char)TOLOWER(cname[2]); + ccode_A2[1] = (char)TOLOWER(cname[3]); + ccode_A2[2] = '\0'; + } + else + ccode_A2[0] = '\0'; + + cnumber = ip & 0xFFFF; + + TRACE(("Found country-code `%s', number %d\n", + ver_1 ? ccode_A2 : "", cnumber)); + + country = list_lookup(cnumber, country_list, + sizeof(country_list) / sizeof(country_list[0])); + if (!country) + printf("Name for country-number %d not found.\n", cnumber); + else + { + if (ver_1) + { + if ((country->short_name[0] != ccode_A2[0]) || + (country->short_name[1] != ccode_A2[1]) || + (country->short_name[2] != ccode_A2[2])) + printf("short-name mismatch; %s vs %s\n", + country->short_name, ccode_A2); + } + printf("%s (%s), number %d.\n", + country->long_name, country->short_name, cnumber); + } + free(ccopy); +} + diff --git a/adig.1 b/adig.1 new file mode 100644 index 0000000..76e9689 --- /dev/null +++ b/adig.1 @@ -0,0 +1,71 @@ +.TH ADIG "1" "April 2011" "c-ares utilities" +.SH NAME +adig \- print information collected from Domain Name System (DNS) servers +.SH SYNOPSIS +.B adig +[\fIOPTION\fR]... \fINAME\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Send queries to DNS servers about \fINAME\fR and print received +information, where \fINAME\fR is a valid DNS name (e.g. www.example.com, +1.2.3.10.in-addr.arpa). +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-c\fR class +Set the query class. +Possible values for class are +NY, CHAOS, HS, IN (default). +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-f\fR flag +Add a flag. +Possible values for flag are +igntc, noaliases, norecurse, primary, stayopen, usevc. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-T\fR port +Use specified TCP port to connect to DNS server. +.TP +\fB\-s\fR server +Connect to specified DNS server, instead of the system's default one(s). +.TP +\fB\-t\fR type +Query records of specified type. +Possible values for type are +A (default), AAAA, AFSDB, ANY, AXFR, CNAME, GPOS, HINFO, ISDN, KEY, LOC, MAILA, +MAILB, MB, MD, MF, MG, MINFO, MR, MX, NAPTR, NS, NSAP, NSAP_PTR, NULL, +PTR, PX, RP, RT, SIG, SOA, SRV, TXT, WKS, X25, +.TP +\fB\-U\fR port +Use specified UDP port to connect to DNS server. +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +\fBhttp://cool.haxx.se/mailman/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +acountry(1), ahost(1). +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +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. +.br +No further copyright claims are being made by the author(s) of this utility. diff --git a/adig.c b/adig.c new file mode 100644 index 0000000..9e3c553 --- /dev/null +++ b/adig.c @@ -0,0 +1,843 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_SYS_TIME_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include +#include +#include + +#include "ares.h" +#include "ares_dns.h" +#include "inet_ntop.h" +#include "inet_net_pton.h" +#include "ares_getopt.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +#ifdef WATT32 +#undef WIN32 /* Redefined in MingW headers */ +#endif + +#ifndef T_SRV +# define T_SRV 33 /* Server selection */ +#endif +#ifndef T_NAPTR +# define T_NAPTR 35 /* Naming authority pointer */ +#endif +#ifndef T_DS +# define T_DS 43 /* Delegation Signer (RFC4034) */ +#endif +#ifndef T_SSHFP +# define T_SSHFP 44 /* SSH Key Fingerprint (RFC4255) */ +#endif +#ifndef T_RRSIG +# define T_RRSIG 46 /* Resource Record Signature (RFC4034) */ +#endif +#ifndef T_NSEC +# define T_NSEC 47 /* Next Secure (RFC4034) */ +#endif +#ifndef T_DNSKEY +# define T_DNSKEY 48 /* DNS Public Key (RFC4034) */ +#endif + +struct nv { + const char *name; + int value; +}; + +static const struct nv flags[] = { + { "usevc", ARES_FLAG_USEVC }, + { "primary", ARES_FLAG_PRIMARY }, + { "igntc", ARES_FLAG_IGNTC }, + { "norecurse", ARES_FLAG_NORECURSE }, + { "stayopen", ARES_FLAG_STAYOPEN }, + { "noaliases", ARES_FLAG_NOALIASES } +}; +static const int nflags = sizeof(flags) / sizeof(flags[0]); + +static const struct nv classes[] = { + { "IN", C_IN }, + { "CHAOS", C_CHAOS }, + { "HS", C_HS }, + { "ANY", C_ANY } +}; +static const int nclasses = sizeof(classes) / sizeof(classes[0]); + +static const struct nv types[] = { + { "A", T_A }, + { "NS", T_NS }, + { "MD", T_MD }, + { "MF", T_MF }, + { "CNAME", T_CNAME }, + { "SOA", T_SOA }, + { "MB", T_MB }, + { "MG", T_MG }, + { "MR", T_MR }, + { "NULL", T_NULL }, + { "WKS", T_WKS }, + { "PTR", T_PTR }, + { "HINFO", T_HINFO }, + { "MINFO", T_MINFO }, + { "MX", T_MX }, + { "TXT", T_TXT }, + { "RP", T_RP }, + { "AFSDB", T_AFSDB }, + { "X25", T_X25 }, + { "ISDN", T_ISDN }, + { "RT", T_RT }, + { "NSAP", T_NSAP }, + { "NSAP_PTR", T_NSAP_PTR }, + { "SIG", T_SIG }, + { "KEY", T_KEY }, + { "PX", T_PX }, + { "GPOS", T_GPOS }, + { "AAAA", T_AAAA }, + { "LOC", T_LOC }, + { "SRV", T_SRV }, + { "AXFR", T_AXFR }, + { "MAILB", T_MAILB }, + { "MAILA", T_MAILA }, + { "NAPTR", T_NAPTR }, + { "DS", T_DS }, + { "SSHFP", T_SSHFP }, + { "RRSIG", T_RRSIG }, + { "NSEC", T_NSEC }, + { "DNSKEY", T_DNSKEY }, + { "ANY", T_ANY } +}; +static const int ntypes = sizeof(types) / sizeof(types[0]); + +static const char *opcodes[] = { + "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", + "UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA", + "ZONEINIT", "ZONEREF" +}; + +static const char *rcodes[] = { + "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE" +}; + +static void callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static const unsigned char *display_question(const unsigned char *aptr, + const unsigned char *abuf, + int alen); +static const unsigned char *display_rr(const unsigned char *aptr, + const unsigned char *abuf, int alen); +static const char *type_name(int type); +static const char *class_name(int dnsclass); +static void usage(void); +static void destroy_addr_list(struct ares_addr_node *head); +static void append_addr_list(struct ares_addr_node **head, + struct ares_addr_node *node); + +int main(int argc, char **argv) +{ + ares_channel channel; + int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A; + int status, nfds, count; + struct ares_options options; + struct hostent *hostent; + fd_set read_fds, write_fds; + struct timeval *tvp, tv; + struct ares_addr_node *srvr, *servers = NULL; + +#ifdef USE_WINSOCK + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + options.flags = ARES_FLAG_NOCHECKRESP; + options.servers = NULL; + options.nservers = 0; + while ((c = ares_getopt(argc, argv, "df:s:c:t:T:U:")) != -1) + { + switch (c) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + + case 'f': + /* Add a flag. */ + for (i = 0; i < nflags; i++) + { + if (strcmp(flags[i].name, optarg) == 0) + break; + } + if (i < nflags) + options.flags |= flags[i].value; + else + usage(); + break; + + case 's': + /* User-specified name servers override default ones. */ + srvr = malloc(sizeof(struct ares_addr_node)); + if (!srvr) + { + fprintf(stderr, "Out of memory!\n"); + destroy_addr_list(servers); + return 1; + } + append_addr_list(&servers, srvr); + if (ares_inet_pton(AF_INET, optarg, &srvr->addr.addr4) > 0) + srvr->family = AF_INET; + else if (ares_inet_pton(AF_INET6, optarg, &srvr->addr.addr6) > 0) + srvr->family = AF_INET6; + else + { + hostent = gethostbyname(optarg); + if (!hostent) + { + fprintf(stderr, "adig: server %s not found.\n", optarg); + destroy_addr_list(servers); + return 1; + } + switch (hostent->h_addrtype) + { + case AF_INET: + srvr->family = AF_INET; + memcpy(&srvr->addr.addr4, hostent->h_addr, + sizeof(srvr->addr.addr4)); + break; + case AF_INET6: + srvr->family = AF_INET6; + memcpy(&srvr->addr.addr6, hostent->h_addr, + sizeof(srvr->addr.addr6)); + break; + default: + fprintf(stderr, + "adig: server %s unsupported address family.\n", optarg); + destroy_addr_list(servers); + return 1; + } + } + /* Notice that calling ares_init_options() without servers in the + * options struct and with ARES_OPT_SERVERS set simultaneously in + * the options mask, results in an initialization with no servers. + * When alternative name servers have been specified these are set + * later calling ares_set_servers() overriding any existing server + * configuration. To prevent initial configuration with default + * servers that will be discarded later, ARES_OPT_SERVERS is set. + * If this flag is not set here the result shall be the same but + * ares_init_options() will do needless work. */ + optmask |= ARES_OPT_SERVERS; + break; + + case 'c': + /* Set the query class. */ + for (i = 0; i < nclasses; i++) + { + if (strcasecmp(classes[i].name, optarg) == 0) + break; + } + if (i < nclasses) + dnsclass = classes[i].value; + else + usage(); + break; + + case 't': + /* Set the query type. */ + for (i = 0; i < ntypes; i++) + { + if (strcasecmp(types[i].name, optarg) == 0) + break; + } + if (i < ntypes) + type = types[i].value; + else + usage(); + break; + + case 'T': + /* Set the TCP port number. */ + if (!ISDIGIT(*optarg)) + usage(); + options.tcp_port = (unsigned short)strtol(optarg, NULL, 0); + optmask |= ARES_OPT_TCP_PORT; + break; + + case 'U': + /* Set the UDP port number. */ + if (!ISDIGIT(*optarg)) + usage(); + options.udp_port = (unsigned short)strtol(optarg, NULL, 0); + optmask |= ARES_OPT_UDP_PORT; + break; + } + } + argc -= optind; + argv += optind; + if (argc == 0) + usage(); + + status = ares_init_options(&channel, &options, optmask); + + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init_options: %s\n", + ares_strerror(status)); + return 1; + } + + if(servers) + { + status = ares_set_servers(channel, servers); + destroy_addr_list(servers); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init_options: %s\n", + ares_strerror(status)); + return 1; + } + } + + /* Initiate the queries, one per command-line argument. If there is + * only one query to do, supply NULL as the callback argument; + * otherwise, supply the query name as an argument so we can + * distinguish responses for the user when printing them out. + */ + if (argc == 1) + ares_query(channel, *argv, dnsclass, type, callback, (char *) NULL); + else + { + for (; *argv; argv++) + ares_query(channel, *argv, dnsclass, type, callback, *argv); + } + + /* Wait for all queries to complete. */ + for (;;) + { + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + count = select(nfds, &read_fds, &write_fds, NULL, tvp); + if (count < 0 && SOCKERRNO != EINVAL) + { + perror("select"); + return 1; + } + ares_process(channel, &read_fds, &write_fds); + } + + ares_destroy(channel); + + ares_library_cleanup(); + +#ifdef USE_WINSOCK + WSACleanup(); +#endif + + return 0; +} + +static void callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + char *name = (char *) arg; + int id, qr, opcode, aa, tc, rd, ra, rcode; + unsigned int qdcount, ancount, nscount, arcount, i; + const unsigned char *aptr; + + (void) timeouts; + + /* Display the query name if given. */ + if (name) + printf("Answer for query %s:\n", name); + + /* Display an error message if there was an error, but only stop if + * we actually didn't get an answer buffer. + */ + if (status != ARES_SUCCESS) + { + printf("%s\n", ares_strerror(status)); + if (!abuf) + return; + } + + /* Won't happen, but check anyway, for safety. */ + if (alen < HFIXEDSZ) + return; + + /* Parse the answer header. */ + id = DNS_HEADER_QID(abuf); + qr = DNS_HEADER_QR(abuf); + opcode = DNS_HEADER_OPCODE(abuf); + aa = DNS_HEADER_AA(abuf); + tc = DNS_HEADER_TC(abuf); + rd = DNS_HEADER_RD(abuf); + ra = DNS_HEADER_RA(abuf); + rcode = DNS_HEADER_RCODE(abuf); + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + nscount = DNS_HEADER_NSCOUNT(abuf); + arcount = DNS_HEADER_ARCOUNT(abuf); + + /* Display the answer header. */ + printf("id: %d\n", id); + printf("flags: %s%s%s%s%s\n", + qr ? "qr " : "", + aa ? "aa " : "", + tc ? "tc " : "", + rd ? "rd " : "", + ra ? "ra " : ""); + printf("opcode: %s\n", opcodes[opcode]); + printf("rcode: %s\n", rcodes[rcode]); + + /* Display the questions. */ + printf("Questions:\n"); + aptr = abuf + HFIXEDSZ; + for (i = 0; i < qdcount; i++) + { + aptr = display_question(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the answers. */ + printf("Answers:\n"); + for (i = 0; i < ancount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the NS records. */ + printf("NS records:\n"); + for (i = 0; i < nscount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the additional records. */ + printf("Additional records:\n"); + for (i = 0; i < arcount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } +} + +static const unsigned char *display_question(const unsigned char *aptr, + const unsigned char *abuf, + int alen) +{ + char *name; + int type, dnsclass, status; + long len; + + /* Parse the question name. */ + status = ares_expand_name(aptr, abuf, alen, &name, &len); + if (status != ARES_SUCCESS) + return NULL; + aptr += len; + + /* Make sure there's enough data after the name for the fixed part + * of the question. + */ + if (aptr + QFIXEDSZ > abuf + alen) + { + ares_free_string(name); + return NULL; + } + + /* Parse the question type and class. */ + type = DNS_QUESTION_TYPE(aptr); + dnsclass = DNS_QUESTION_CLASS(aptr); + aptr += QFIXEDSZ; + + /* Display the question, in a format sort of similar to how we will + * display RRs. + */ + printf("\t%-15s.\t", name); + if (dnsclass != C_IN) + printf("\t%s", class_name(dnsclass)); + printf("\t%s\n", type_name(type)); + ares_free_string(name); + return aptr; +} + +static const unsigned char *display_rr(const unsigned char *aptr, + const unsigned char *abuf, int alen) +{ + const unsigned char *p; + int type, dnsclass, ttl, dlen, status; + long len; + char addr[46]; + union { + unsigned char * as_uchar; + char * as_char; + } name; + + /* Parse the RR name. */ + status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + aptr += len; + + /* Make sure there is enough data after the RR name for the fixed + * part of the RR. + */ + if (aptr + RRFIXEDSZ > abuf + alen) + { + ares_free_string(name.as_char); + return NULL; + } + + /* Parse the fixed part of the RR, and advance to the RR data + * field. */ + type = DNS_RR_TYPE(aptr); + dnsclass = DNS_RR_CLASS(aptr); + ttl = DNS_RR_TTL(aptr); + dlen = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + if (aptr + dlen > abuf + alen) + { + ares_free_string(name.as_char); + return NULL; + } + + /* Display the RR name, class, and type. */ + printf("\t%-15s.\t%d", name.as_char, ttl); + if (dnsclass != C_IN) + printf("\t%s", class_name(dnsclass)); + printf("\t%s", type_name(type)); + ares_free_string(name.as_char); + + /* Display the RR data. Don't touch aptr. */ + switch (type) + { + case T_CNAME: + case T_MB: + case T_MD: + case T_MF: + case T_MG: + case T_MR: + case T_NS: + case T_PTR: + /* For these types, the RR data is just a domain name. */ + status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_HINFO: + /* The RR data is two length-counted character strings. */ + p = aptr; + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + p += len; + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + break; + + case T_MINFO: + /* The RR data is two domain names. */ + p = aptr; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + p += len; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_MX: + /* The RR data is two bytes giving a preference ordering, and + * then a domain name. + */ + if (dlen < 2) + return NULL; + printf("\t%d", DNS__16BIT(aptr)); + status = ares_expand_name(aptr + 2, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_SOA: + /* The RR data is two domain names and then five four-byte + * numbers giving the serial number and some timeouts. + */ + p = aptr; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.\n", name.as_char); + ares_free_string(name.as_char); + p += len; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s.\n", name.as_char); + ares_free_string(name.as_char); + p += len; + if (p + 20 > aptr + dlen) + return NULL; + printf("\t\t\t\t\t\t( %lu %lu %lu %lu %lu )", + (unsigned long)DNS__32BIT(p), (unsigned long)DNS__32BIT(p+4), + (unsigned long)DNS__32BIT(p+8), (unsigned long)DNS__32BIT(p+12), + (unsigned long)DNS__32BIT(p+16)); + break; + + case T_TXT: + /* The RR data is one or more length-counted character + * strings. */ + p = aptr; + while (p < aptr + dlen) + { + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + p += len; + } + break; + + case T_A: + /* The RR data is a four-byte Internet address. */ + if (dlen != 4) + return NULL; + printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr))); + break; + + case T_AAAA: + /* The RR data is a 16-byte IPv6 address. */ + if (dlen != 16) + return NULL; + printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr))); + break; + + case T_WKS: + /* Not implemented yet */ + break; + + case T_SRV: + /* The RR data is three two-byte numbers representing the + * priority, weight, and port, followed by a domain name. + */ + + printf("\t%d", DNS__16BIT(aptr)); + printf(" %d", DNS__16BIT(aptr + 2)); + printf(" %d", DNS__16BIT(aptr + 4)); + + status = ares_expand_name(aptr + 6, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_NAPTR: + + printf("\t%d", DNS__16BIT(aptr)); /* order */ + printf(" %d\n", DNS__16BIT(aptr + 2)); /* preference */ + + p = aptr + 4; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s\n", name.as_char); + ares_free_string(name.as_char); + p += len; + + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s\n", name.as_char); + ares_free_string(name.as_char); + p += len; + + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s\n", name.as_char); + ares_free_string(name.as_char); + p += len; + + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s", name.as_char); + ares_free_string(name.as_char); + break; + + case T_DS: + case T_SSHFP: + case T_RRSIG: + case T_NSEC: + case T_DNSKEY: + printf("\t[RR type parsing unavailable]"); + break; + + default: + printf("\t[Unknown RR; cannot parse]"); + break; + } + printf("\n"); + + return aptr + dlen; +} + +static const char *type_name(int type) +{ + int i; + + for (i = 0; i < ntypes; i++) + { + if (types[i].value == type) + return types[i].name; + } + return "(unknown)"; +} + +static const char *class_name(int dnsclass) +{ + int i; + + for (i = 0; i < nclasses; i++) + { + if (classes[i].value == dnsclass) + return classes[i].name; + } + return "(unknown)"; +} + +static void usage(void) +{ + fprintf(stderr, "usage: adig [-f flag] [-s server] [-c class] " + "[-t type] [-p port] name ...\n"); + exit(1); +} + +static void destroy_addr_list(struct ares_addr_node *head) +{ + while(head) + { + struct ares_addr_node *detached = head; + head = head->next; + free(detached); + } +} + +static void append_addr_list(struct ares_addr_node **head, + struct ares_addr_node *node) +{ + struct ares_addr_node *last; + node->next = NULL; + if(*head) + { + last = *head; + while(last->next) + last = last->next; + last->next = node; + } + else + *head = node; +} diff --git a/ahost.1 b/ahost.1 new file mode 100644 index 0000000..892e9e1 --- /dev/null +++ b/ahost.1 @@ -0,0 +1,48 @@ +.TH AHOST "1" "April 2011" "c-ares utilities" +.SH NAME +ahost \- print the A or AAAA record associated with a hostname or IP address +.SH SYNOPSIS +.B ahost +[\fIOPTION\fR]... \fIHOST\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Look up the DNS A or AAAA record associated with HOST (a hostname or an +IP address). +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-t\fR type +If type is "aa", print the A record (default). +If type is "aaaa", print the AAAA record. +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +\fBhttp://cool.haxx.se/mailman/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +acountry(1), adig(1). +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +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. +.br +No further copyright claims are being made by the author(s) of this utility. diff --git a/ahost.c b/ahost.c new file mode 100644 index 0000000..fb67f1f --- /dev/null +++ b/ahost.c @@ -0,0 +1,202 @@ +/* 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" + +#if !defined(WIN32) || defined(WATT32) +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#endif +#ifdef HAVE_STRINGS_H +#include +#endif + +#include +#include +#include + +#include "ares.h" +#include "ares_dns.h" +#include "inet_ntop.h" +#include "inet_net_pton.h" +#include "ares_getopt.h" +#include "ares_ipv6.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +static void callback(void *arg, int status, int timeouts, struct hostent *host); +static void usage(void); + +int main(int argc, char **argv) +{ + ares_channel channel; + int status, nfds, c, addr_family = AF_INET; + fd_set read_fds, write_fds; + struct timeval *tvp, tv; + struct in_addr addr4; + struct ares_in6_addr addr6; + +#ifdef USE_WINSOCK + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + while ((c = ares_getopt(argc,argv,"dt:h")) != -1) + { + switch (c) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + case 't': + if (!strcasecmp(optarg,"a")) + addr_family = AF_INET; + else if (!strcasecmp(optarg,"aaaa")) + addr_family = AF_INET6; + else + usage(); + break; + case 'h': + default: + usage(); + break; + } + } + + argc -= optind; + argv += optind; + if (argc < 1) + usage(); + + status = ares_init(&channel); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init: %s\n", ares_strerror(status)); + return 1; + } + + /* Initiate the queries, one per command-line argument. */ + for ( ; *argv; argv++) + { + if (ares_inet_pton(AF_INET, *argv, &addr4) == 1) + { + ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback, + *argv); + } + else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1) + { + ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback, + *argv); + } + else + { + ares_gethostbyname(channel, *argv, addr_family, callback, *argv); + } + } + + /* Wait for all queries to complete. */ + for (;;) + { + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + select(nfds, &read_fds, &write_fds, NULL, tvp); + ares_process(channel, &read_fds, &write_fds); + } + + ares_destroy(channel); + + ares_library_cleanup(); + +#ifdef USE_WINSOCK + WSACleanup(); +#endif + + return 0; +} + +static void callback(void *arg, int status, int timeouts, struct hostent *host) +{ + char **p; + + (void)timeouts; + + if (status != ARES_SUCCESS) + { + fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status)); + return; + } + + for (p = host->h_addr_list; *p; p++) + { + char addr_buf[46] = "??"; + + ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf)); + printf("%-32s\t%s", host->h_name, addr_buf); +#if 0 + if (host->h_aliases[0]) + { + int i; + + printf (", Aliases: "); + for (i = 0; host->h_aliases[i]; i++) + printf("%s ", host->h_aliases[i]); + } +#endif + puts(""); + } +} + +static void usage(void) +{ + fprintf(stderr, "usage: ahost [-t {a|aaaa}] {host|addr} ...\n"); + exit(1); +} diff --git a/ares.h b/ares.h new file mode 100644 index 0000000..2b38303 --- /dev/null +++ b/ares.h @@ -0,0 +1,543 @@ + +/* Copyright 1998, 2009 by the Massachusetts Institute of Technology. + * Copyright (C) 2007-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef ARES__H +#define ARES__H + +#include "ares_version.h" /* c-ares version defines */ +#include "ares_build.h" /* c-ares build definitions */ +#include "ares_rules.h" /* c-ares rules enforcement */ + +/* + * Define WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__)) && \ + !defined(WIN32) && !defined(__SYMBIAN32__) +# define WIN32 +#endif + +#include + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on system that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) +#include +#endif +#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) +#include +#endif + +#if defined(WATT32) +# include +# include +# include +#elif defined(_WIN32_WCE) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +#elif defined(WIN32) +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +# include +#else +# include +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** c-ares external API function linkage decorations. +*/ + +#if !defined(CARES_STATICLIB) && \ + (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)) + /* __declspec function decoration for Win32 and Symbian DLL's */ +# if defined(CARES_BUILDING_LIBRARY) +# define CARES_EXTERN __declspec(dllexport) +# else +# define CARES_EXTERN __declspec(dllimport) +# endif +#else + /* visibility function decoration for other cases */ +# if !defined(CARES_SYMBOL_HIDING) || \ + defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__) +# define CARES_EXTERN +# else +# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN +# endif +#endif + + +#define ARES_SUCCESS 0 + +/* Server error codes (ARES_ENODATA indicates no relevant answer) */ +#define ARES_ENODATA 1 +#define ARES_EFORMERR 2 +#define ARES_ESERVFAIL 3 +#define ARES_ENOTFOUND 4 +#define ARES_ENOTIMP 5 +#define ARES_EREFUSED 6 + +/* Locally generated error codes */ +#define ARES_EBADQUERY 7 +#define ARES_EBADNAME 8 +#define ARES_EBADFAMILY 9 +#define ARES_EBADRESP 10 +#define ARES_ECONNREFUSED 11 +#define ARES_ETIMEOUT 12 +#define ARES_EOF 13 +#define ARES_EFILE 14 +#define ARES_ENOMEM 15 +#define ARES_EDESTRUCTION 16 +#define ARES_EBADSTR 17 + +/* ares_getnameinfo error codes */ +#define ARES_EBADFLAGS 18 + +/* ares_getaddrinfo error codes */ +#define ARES_ENONAME 19 +#define ARES_EBADHINTS 20 + +/* Uninitialized library error code */ +#define ARES_ENOTINITIALIZED 21 /* introduced in 1.7.0 */ + +/* ares_library_init error codes */ +#define ARES_ELOADIPHLPAPI 22 /* introduced in 1.7.0 */ +#define ARES_EADDRGETNETWORKPARAMS 23 /* introduced in 1.7.0 */ + +/* More error codes */ +#define ARES_ECANCELLED 24 /* introduced in 1.7.0 */ + +/* Flag values */ +#define ARES_FLAG_USEVC (1 << 0) +#define ARES_FLAG_PRIMARY (1 << 1) +#define ARES_FLAG_IGNTC (1 << 2) +#define ARES_FLAG_NORECURSE (1 << 3) +#define ARES_FLAG_STAYOPEN (1 << 4) +#define ARES_FLAG_NOSEARCH (1 << 5) +#define ARES_FLAG_NOALIASES (1 << 6) +#define ARES_FLAG_NOCHECKRESP (1 << 7) + +/* Option mask values */ +#define ARES_OPT_FLAGS (1 << 0) +#define ARES_OPT_TIMEOUT (1 << 1) +#define ARES_OPT_TRIES (1 << 2) +#define ARES_OPT_NDOTS (1 << 3) +#define ARES_OPT_UDP_PORT (1 << 4) +#define ARES_OPT_TCP_PORT (1 << 5) +#define ARES_OPT_SERVERS (1 << 6) +#define ARES_OPT_DOMAINS (1 << 7) +#define ARES_OPT_LOOKUPS (1 << 8) +#define ARES_OPT_SOCK_STATE_CB (1 << 9) +#define ARES_OPT_SORTLIST (1 << 10) +#define ARES_OPT_SOCK_SNDBUF (1 << 11) +#define ARES_OPT_SOCK_RCVBUF (1 << 12) +#define ARES_OPT_TIMEOUTMS (1 << 13) +#define ARES_OPT_ROTATE (1 << 14) + +/* Nameinfo flag values */ +#define ARES_NI_NOFQDN (1 << 0) +#define ARES_NI_NUMERICHOST (1 << 1) +#define ARES_NI_NAMEREQD (1 << 2) +#define ARES_NI_NUMERICSERV (1 << 3) +#define ARES_NI_DGRAM (1 << 4) +#define ARES_NI_TCP 0 +#define ARES_NI_UDP ARES_NI_DGRAM +#define ARES_NI_SCTP (1 << 5) +#define ARES_NI_DCCP (1 << 6) +#define ARES_NI_NUMERICSCOPE (1 << 7) +#define ARES_NI_LOOKUPHOST (1 << 8) +#define ARES_NI_LOOKUPSERVICE (1 << 9) +/* Reserved for future use */ +#define ARES_NI_IDN (1 << 10) +#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11) +#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12) + +/* Addrinfo flag values */ +#define ARES_AI_CANONNAME (1 << 0) +#define ARES_AI_NUMERICHOST (1 << 1) +#define ARES_AI_PASSIVE (1 << 2) +#define ARES_AI_NUMERICSERV (1 << 3) +#define ARES_AI_V4MAPPED (1 << 4) +#define ARES_AI_ALL (1 << 5) +#define ARES_AI_ADDRCONFIG (1 << 6) +/* Reserved for future use */ +#define ARES_AI_IDN (1 << 10) +#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11) +#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12) +#define ARES_AI_CANONIDN (1 << 13) + +#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \ + ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \ + ARES_AI_ADDRCONFIG) +#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this + many sockets */ +#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) +#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ + ARES_GETSOCK_MAXNUM))) + +/* c-ares library initialization flag values */ +#define ARES_LIB_INIT_NONE (0) +#define ARES_LIB_INIT_WIN32 (1 << 0) +#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32) + + +/* + * Typedef our socket type + */ + +#ifndef ares_socket_typedef +#ifdef WIN32 +typedef SOCKET ares_socket_t; +#define ARES_SOCKET_BAD INVALID_SOCKET +#else +typedef int ares_socket_t; +#define ARES_SOCKET_BAD -1 +#endif +#define ares_socket_typedef +#endif /* ares_socket_typedef */ + +typedef void (*ares_sock_state_cb)(void *data, + ares_socket_t socket_fd, + int readable, + int writable); + +struct apattern; + +/* NOTE about the ares_options struct to users and developers. + + This struct will remain looking like this. It will not be extended nor + shrunk in future releases, but all new options will be set by ares_set_*() + options instead of with the ares_init_options() function. + + Eventually (in a galaxy far far away), all options will be settable by + ares_set_*() options and the ares_init_options() function will become + deprecated. + + When new options are added to c-ares, they are not added to this + struct. And they are not "saved" with the ares_save_options() function but + instead we encourage the use of the ares_dup() function. Needless to say, + if you add config options to c-ares you need to make sure ares_dup() + duplicates this new option. + + */ +struct ares_options { + int flags; + int timeout; /* in seconds or milliseconds, depending on options */ + int tries; + int ndots; + unsigned short udp_port; + unsigned short tcp_port; + int socket_send_buffer_size; + int socket_receive_buffer_size; + struct in_addr *servers; + int nservers; + char **domains; + int ndomains; + char *lookups; + ares_sock_state_cb sock_state_cb; + void *sock_state_cb_data; + struct apattern *sortlist; + int nsort; +}; + +struct hostent; +struct timeval; +struct sockaddr; +struct ares_channeldata; + +typedef struct ares_channeldata *ares_channel; + +typedef void (*ares_callback)(void *arg, + int status, + int timeouts, + unsigned char *abuf, + int alen); + +typedef void (*ares_host_callback)(void *arg, + int status, + int timeouts, + struct hostent *hostent); + +typedef void (*ares_nameinfo_callback)(void *arg, + int status, + int timeouts, + char *node, + char *service); + +typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd, + int type, + void *data); + +CARES_EXTERN int ares_library_init(int flags); + +CARES_EXTERN void ares_library_cleanup(void); + +CARES_EXTERN const char *ares_version(int *version); + +CARES_EXTERN int ares_init(ares_channel *channelptr); + +CARES_EXTERN int ares_init_options(ares_channel *channelptr, + struct ares_options *options, + int optmask); + +CARES_EXTERN int ares_save_options(ares_channel channel, + struct ares_options *options, + int *optmask); + +CARES_EXTERN void ares_destroy_options(struct ares_options *options); + +CARES_EXTERN int ares_dup(ares_channel *dest, + ares_channel src); + +CARES_EXTERN void ares_destroy(ares_channel channel); + +CARES_EXTERN void ares_cancel(ares_channel channel); + +/* These next 3 configure local binding for the out-going socket + * connection. Use these to specify source IP and/or network device + * on multi-homed systems. + */ +CARES_EXTERN void ares_set_local_ip4(ares_channel channel, unsigned int local_ip); + +/* local_ip6 should be 16 bytes in length */ +CARES_EXTERN void ares_set_local_ip6(ares_channel channel, + const unsigned char* local_ip6); + +/* local_dev_name should be null terminated. */ +CARES_EXTERN void ares_set_local_dev(ares_channel channel, + const char* local_dev_name); + +CARES_EXTERN void ares_set_socket_callback(ares_channel channel, + ares_sock_create_callback callback, + void *user_data); + +CARES_EXTERN void ares_send(ares_channel channel, + const unsigned char *qbuf, + int qlen, + ares_callback callback, + void *arg); + +CARES_EXTERN void ares_query(ares_channel channel, + const char *name, + int dnsclass, + int type, + ares_callback callback, + void *arg); + +CARES_EXTERN void ares_search(ares_channel channel, + const char *name, + int dnsclass, + int type, + ares_callback callback, + void *arg); + +CARES_EXTERN void ares_gethostbyname(ares_channel channel, + const char *name, + int family, + ares_host_callback callback, + void *arg); + +CARES_EXTERN int ares_gethostbyname_file(ares_channel channel, + const char *name, + int family, + struct hostent **host); + +CARES_EXTERN void ares_gethostbyaddr(ares_channel channel, + const void *addr, + int addrlen, + int family, + ares_host_callback callback, + void *arg); + +CARES_EXTERN void ares_getnameinfo(ares_channel channel, + const struct sockaddr *sa, + ares_socklen_t salen, + int flags, + ares_nameinfo_callback callback, + void *arg); + +CARES_EXTERN int ares_fds(ares_channel channel, + fd_set *read_fds, + fd_set *write_fds); + +CARES_EXTERN int ares_getsock(ares_channel channel, + ares_socket_t *socks, + int numsocks); + +CARES_EXTERN struct timeval *ares_timeout(ares_channel channel, + struct timeval *maxtv, + struct timeval *tv); + +CARES_EXTERN void ares_process(ares_channel channel, + fd_set *read_fds, + fd_set *write_fds); + +CARES_EXTERN void ares_process_fd(ares_channel channel, + ares_socket_t read_fd, + ares_socket_t write_fd); + +CARES_EXTERN int ares_mkquery(const char *name, + int dnsclass, + int type, + unsigned short id, + int rd, + unsigned char **buf, + int *buflen); + +CARES_EXTERN int ares_expand_name(const unsigned char *encoded, + const unsigned char *abuf, + int alen, + char **s, + long *enclen); + +CARES_EXTERN int ares_expand_string(const unsigned char *encoded, + const unsigned char *abuf, + int alen, + unsigned char **s, + long *enclen); + +/* + * NOTE: before c-ares 1.7.0 we would most often use the system in6_addr + * struct below when ares itself was built, but many apps would use this + * private version since the header checked a HAVE_* define for it. Starting + * with 1.7.0 we always declare and use our own to stop relying on the + * system's one. + */ +struct ares_in6_addr { + union { + unsigned char _S6_u8[16]; + } _S6_un; +}; + +struct ares_addrttl { + struct in_addr ipaddr; + int ttl; +}; + +struct ares_addr6ttl { + struct ares_in6_addr ip6addr; + int ttl; +}; + +struct ares_srv_reply { + struct ares_srv_reply *next; + char *host; + unsigned short priority; + unsigned short weight; + unsigned short port; +}; + +struct ares_mx_reply { + struct ares_mx_reply *next; + char *host; + unsigned short priority; +}; + +struct ares_txt_reply { + struct ares_txt_reply *next; + unsigned char *txt; + size_t length; /* length excludes null termination */ +}; + +/* +** Parse the buffer, starting at *abuf and of length alen bytes, previously +** obtained from an ares_search call. Put the results in *host, if nonnull. +** Also, if addrttls is nonnull, put up to *naddrttls IPv4 addresses along with +** their TTLs in that array, and set *naddrttls to the number of addresses +** so written. +*/ + +CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf, + int alen, + struct hostent **host, + struct ares_addrttl *addrttls, + int *naddrttls); + +CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf, + int alen, + struct hostent **host, + struct ares_addr6ttl *addrttls, + int *naddrttls); + +CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf, + int alen, + const void *addr, + int addrlen, + int family, + struct hostent **host); + +CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf, + int alen, + struct hostent **host); + +CARES_EXTERN int ares_parse_srv_reply(const unsigned char* abuf, + int alen, + struct ares_srv_reply** srv_out); + +CARES_EXTERN int ares_parse_mx_reply(const unsigned char* abuf, + int alen, + struct ares_mx_reply** mx_out); + +CARES_EXTERN int ares_parse_txt_reply(const unsigned char* abuf, + int alen, + struct ares_txt_reply** txt_out); + +CARES_EXTERN void ares_free_string(void *str); + +CARES_EXTERN void ares_free_hostent(struct hostent *host); + +CARES_EXTERN void ares_free_data(void *dataptr); + +CARES_EXTERN const char *ares_strerror(int code); + +/* TODO: Hold port here as well. */ +struct ares_addr_node { + struct ares_addr_node *next; + int family; + union { + struct in_addr addr4; + struct ares_in6_addr addr6; + } addr; +}; + +CARES_EXTERN int ares_set_servers(ares_channel channel, + struct ares_addr_node *servers); + +/* Incomming string format: host[:port][,host[:port]]... */ +CARES_EXTERN int ares_set_servers_csv(ares_channel channel, + const char* servers); + +CARES_EXTERN int ares_get_servers(ares_channel channel, + struct ares_addr_node **servers); + +#ifdef __cplusplus +} +#endif + +#endif /* ARES__H */ diff --git a/ares__close_sockets.c b/ares__close_sockets.c new file mode 100644 index 0000000..5d391a9 --- /dev/null +++ b/ares__close_sockets.c @@ -0,0 +1,66 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include +#ifdef HAVE_UNISTD_H +#include +#endif + +#include "ares.h" +#include "ares_private.h" + +void ares__close_sockets(ares_channel channel, struct server_state *server) +{ + struct send_request *sendreq; + + /* Free all pending output buffers. */ + while (server->qhead) + { + /* Advance server->qhead; pull out query as we go. */ + sendreq = server->qhead; + server->qhead = sendreq->next; + if (sendreq->data_storage != NULL) + free(sendreq->data_storage); + free(sendreq); + } + server->qtail = NULL; + + /* Reset any existing input buffer. */ + if (server->tcp_buffer) + free(server->tcp_buffer); + server->tcp_buffer = NULL; + server->tcp_lenbuf_pos = 0; + + /* Reset brokenness */ + server->is_broken = 0; + + /* Close the TCP and UDP sockets. */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0); + sclose(server->tcp_socket); + server->tcp_socket = ARES_SOCKET_BAD; + server->tcp_connection_generation = ++channel->tcp_connection_generation; + } + if (server->udp_socket != ARES_SOCKET_BAD) + { + SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0); + sclose(server->udp_socket); + server->udp_socket = ARES_SOCKET_BAD; + } +} diff --git a/ares__get_hostent.c b/ares__get_hostent.c new file mode 100644 index 0000000..298df09 --- /dev/null +++ b/ares__get_hostent.c @@ -0,0 +1,263 @@ + +/* Copyright 1998, 2010 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares.h" +#include "inet_net_pton.h" +#include "ares_private.h" + +int ares__get_hostent(FILE *fp, int family, struct hostent **host) +{ + char *line = NULL, *p, *q, **alias; + char *txtaddr, *txthost, *txtalias; + int status; + size_t addrlen, linesize, naliases; + struct ares_addr addr; + struct hostent *hostent = NULL; + + *host = NULL; /* Assume failure */ + + /* Validate family */ + switch (family) { + case AF_INET: + case AF_INET6: + case AF_UNSPEC: + break; + default: + return ARES_EBADFAMILY; + } + + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + + /* Trim line comment. */ + p = line; + while (*p && (*p != '#')) + p++; + *p = '\0'; + + /* Trim trailing whitespace. */ + q = p - 1; + while ((q >= line) && ISSPACE(*q)) + q--; + *++q = '\0'; + + /* Skip leading whitespace. */ + p = line; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if empty. */ + continue; + + /* Pointer to start of IPv4 or IPv6 address part. */ + txtaddr = p; + + /* Advance past address part. */ + while (*p && !ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; + + /* Null terminate address part. */ + *p = '\0'; + + /* Advance to host name */ + p++; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; + + /* Pointer to start of host name. */ + txthost = p; + + /* Advance past host name. */ + while (*p && !ISSPACE(*p)) + p++; + + /* Pointer to start of first alias. */ + txtalias = NULL; + if (*p) + { + q = p + 1; + while (*q && ISSPACE(*q)) + q++; + if (*q) + txtalias = q; + } + + /* Null terminate host name. */ + *p = '\0'; + + /* find out number of aliases. */ + naliases = 0; + if (txtalias) + { + p = txtalias; + while (*p) + { + while (*p && !ISSPACE(*p)) + p++; + while (*p && ISSPACE(*p)) + p++; + naliases++; + } + } + + /* Convert address string to network address for the requested family. */ + addrlen = 0; + addr.family = AF_UNSPEC; + addr.addrV4.s_addr = INADDR_NONE; + if ((family == AF_INET) || (family == AF_UNSPEC)) + { + addr.addrV4.s_addr = inet_addr(txtaddr); + if (addr.addrV4.s_addr != INADDR_NONE) + { + /* Actual network address family and length. */ + addr.family = AF_INET; + addrlen = sizeof(addr.addrV4); + } + } + if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen))) + { + if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0) + { + /* Actual network address family and length. */ + addr.family = AF_INET6; + addrlen = sizeof(addr.addrV6); + } + } + if (!addrlen) + /* Ignore line if invalid address string for the requested family. */ + continue; + + /* + ** Actual address family possible values are AF_INET and AF_INET6 only. + */ + + /* Allocate memory for the hostent structure. */ + hostent = malloc(sizeof(struct hostent)); + if (!hostent) + break; + + /* Initialize fields for out of memory condition. */ + hostent->h_aliases = NULL; + hostent->h_addr_list = NULL; + + /* Copy official host name. */ + hostent->h_name = strdup(txthost); + if (!hostent->h_name) + break; + + /* Copy network address. */ + hostent->h_addr_list = malloc(2 * sizeof(char *)); + if (!hostent->h_addr_list) + break; + hostent->h_addr_list[1] = NULL; + hostent->h_addr_list[0] = malloc(addrlen); + if (!hostent->h_addr_list[0]) + break; + if (addr.family == AF_INET) + memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4)); + else + memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6)); + + /* Copy aliases. */ + hostent->h_aliases = malloc((naliases + 1) * sizeof(char *)); + if (!hostent->h_aliases) + break; + alias = hostent->h_aliases; + while (naliases) + *(alias + naliases--) = NULL; + *alias = NULL; + while (txtalias) + { + p = txtalias; + while (*p && !ISSPACE(*p)) + p++; + q = p; + while (*q && ISSPACE(*q)) + q++; + *p = '\0'; + if ((*alias = strdup(txtalias)) == NULL) + break; + alias++; + txtalias = *q ? q : NULL; + } + if (txtalias) + /* Alias memory allocation failure. */ + break; + + /* Copy actual network address family and length. */ + hostent->h_addrtype = addr.family; + hostent->h_length = (int)addrlen; + + /* Free line buffer. */ + free(line); + + /* Return hostent successfully */ + *host = hostent; + return ARES_SUCCESS; + + } + + /* If allocated, free line buffer. */ + if (line) + free(line); + + if (status == ARES_SUCCESS) + { + /* Memory allocation failure; clean up. */ + if (hostent) + { + if (hostent->h_name) + free((char *) hostent->h_name); + if (hostent->h_aliases) + { + for (alias = hostent->h_aliases; *alias; alias++) + free(*alias); + free(hostent->h_aliases); + } + if (hostent->h_addr_list) + { + if (hostent->h_addr_list[0]) + free(hostent->h_addr_list[0]); + free(hostent->h_addr_list); + } + free(hostent); + } + return ARES_ENOMEM; + } + + return status; +} diff --git a/ares__read_line.c b/ares__read_line.c new file mode 100644 index 0000000..ca01803 --- /dev/null +++ b/ares__read_line.c @@ -0,0 +1,71 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include +#include +#include +#include "ares.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +/* This is an internal function. Its contract is to read a line from + * a file into a dynamically allocated buffer, zeroing the trailing + * newline if there is one. The calling routine may call + * ares__read_line multiple times with the same buf and bufsize + * pointers; *buf will be reallocated and *bufsize adjusted as + * appropriate. The initial value of *buf should be NULL. After the + * calling routine is done reading lines, it should free *buf. + */ +int ares__read_line(FILE *fp, char **buf, size_t *bufsize) +{ + char *newbuf; + size_t offset = 0; + size_t len; + + if (*buf == NULL) + { + *buf = malloc(128); + if (!*buf) + return ARES_ENOMEM; + *bufsize = 128; + } + + for (;;) + { + int bytestoread = aresx_uztosi(*bufsize - offset); + + if (!fgets(*buf + offset, bytestoread, fp)) + return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; + len = offset + strlen(*buf + offset); + if ((*buf)[len - 1] == '\n') + { + (*buf)[len - 1] = 0; + break; + } + offset = len; + if(len < *bufsize - 1) + continue; + + /* Allocate more space. */ + newbuf = realloc(*buf, *bufsize * 2); + if (!newbuf) + return ARES_ENOMEM; + *buf = newbuf; + *bufsize *= 2; + } + return ARES_SUCCESS; +} diff --git a/ares__timeval.c b/ares__timeval.c new file mode 100644 index 0000000..f7aa788 --- /dev/null +++ b/ares__timeval.c @@ -0,0 +1,111 @@ + +/* Copyright (C) 2008 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares.h" +#include "ares_private.h" + +#if defined(WIN32) && !defined(MSDOS) + +struct timeval ares__tvnow(void) +{ + /* + ** GetTickCount() is available on _all_ Windows versions from W95 up + ** to nowadays. Returns milliseconds elapsed since last system boot, + ** increases monotonically and wraps once 49.7 days have elapsed. + */ + struct timeval now; + DWORD milliseconds = GetTickCount(); + now.tv_sec = milliseconds / 1000; + now.tv_usec = (milliseconds % 1000) * 1000; + return now; +} + +#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) + +struct timeval ares__tvnow(void) +{ + /* + ** clock_gettime() is granted to be increased monotonically when the + ** monotonic clock is queried. Time starting point is unspecified, it + ** could be the system start-up time, the Epoch, or something else, + ** in any case the time starting point does not change once that the + ** system has started up. + */ + struct timeval now; + struct timespec tsnow; + if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) { + now.tv_sec = tsnow.tv_sec; + now.tv_usec = tsnow.tv_nsec / 1000; + } + /* + ** Even when the configure process has truly detected monotonic clock + ** availability, it might happen that it is not actually available at + ** run-time. When this occurs simply fallback to other time source. + */ +#ifdef HAVE_GETTIMEOFDAY + else + (void)gettimeofday(&now, NULL); +#else + else { + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + } +#endif + return now; +} + +#elif defined(HAVE_GETTIMEOFDAY) + +struct timeval ares__tvnow(void) +{ + /* + ** gettimeofday() is not granted to be increased monotonically, due to + ** clock drifting and external source time synchronization it can jump + ** forward or backward in time. + */ + struct timeval now; + (void)gettimeofday(&now, NULL); + return now; +} + +#else + +struct timeval ares__tvnow(void) +{ + /* + ** time() returns the value of time in seconds since the Epoch. + */ + struct timeval now; + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + return now; +} + +#endif + +#if 0 /* Not used */ +/* + * Make sure that the first argument is the more recent time, as otherwise + * we'll get a weird negative time-diff back... + * + * Returns: the time difference in number of milliseconds. + */ +long ares__tvdiff(struct timeval newer, struct timeval older) +{ + return (newer.tv_sec-older.tv_sec)*1000+ + (newer.tv_usec-older.tv_usec)/1000; +} +#endif + diff --git a/ares_build.h b/ares_build.h new file mode 100644 index 0000000..2736cff --- /dev/null +++ b/ares_build.h @@ -0,0 +1,252 @@ +#ifndef __CARES_BUILD_H +#define __CARES_BUILD_H + + +/* Copyright (C) 2009 - 2010 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. + */ + +/* ================================================================ */ +/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */ +/* ================================================================ */ + +/* + * NOTE 1: + * ------- + * + * See file ares_build.h.in, run configure, and forget that this file + * exists it is only used for non-configure systems. + * But you can keep reading if you want ;-) + * + */ + +/* ================================================================ */ +/* NOTES FOR NON-CONFIGURE SYSTEMS */ +/* ================================================================ */ + +/* + * NOTE 1: + * ------- + * + * Nothing in this file is intended to be modified or adjusted by the + * c-ares library user nor by the c-ares library builder. + * + * If you think that something actually needs to be changed, adjusted + * or fixed in this file, then, report it on the c-ares development + * mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/ + * + * Try to keep one section per platform, compiler and architecture, + * otherwise, if an existing section is reused for a different one and + * later on the original is adjusted, probably the piggybacking one can + * be adversely changed. + * + * In order to differentiate between platforms/compilers/architectures + * use only compiler built in predefined preprocessor symbols. + * + * This header file shall only export symbols which are 'cares' or 'CARES' + * prefixed, otherwise public name space would be polluted. + * + * NOTE 2: + * ------- + * + * Right now you might be staring at file ares_build.h.dist or ares_build.h, + * this is due to the following reason: file ares_build.h.dist is renamed + * to ares_build.h when the c-ares source code distribution archive file is + * created. + * + * File ares_build.h.dist is not included in the distribution archive. + * File ares_build.h is not present in the git tree. + * + * The distributed ares_build.h file is only intended to be used on systems + * which can not run the also distributed configure script. + * + * On systems capable of running the configure script, the configure process + * will overwrite the distributed ares_build.h file with one that is suitable + * and specific to the library being configured and built, which is generated + * from the ares_build.h.in template file. + * + * If you check out from git on a non-configure platform, you must run the + * appropriate buildconf* script to set up ares_build.h and other local files. + * + */ + +/* ================================================================ */ +/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */ +/* ================================================================ */ + +#ifdef CARES_SIZEOF_LONG +# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined +#endif + +#ifdef CARES_TYPEOF_ARES_SOCKLEN_T +# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined +#endif + +#ifdef CARES_SIZEOF_ARES_SOCKLEN_T +# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined +#endif + +/* ================================================================ */ +/* EXTERNAL INTERFACE SETTINGS FOR NON-CONFIGURE SYSTEMS ONLY */ +/* ================================================================ */ + +#if defined(__DJGPP__) || defined(__GO32__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__SALFORDC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__BORLANDC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__TURBOC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__WATCOMC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__POCC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__LCC__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__SYMBIAN32__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__MWERKS__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(_WIN32_WCE) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__MINGW32__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__VMS) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +#elif defined(__OS400__) +# if defined(__ILEC400__) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 +# define CARES_PULL_SYS_TYPES_H 1 +# define CARES_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(__MVS__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# define CARES_SIZEOF_LONG 4 +# elif defined(_LP64) +# define CARES_SIZEOF_LONG 8 +# endif +# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 +# define CARES_PULL_SYS_TYPES_H 1 +# define CARES_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# define CARES_SIZEOF_LONG 4 +# elif defined(_LP64) +# define CARES_SIZEOF_LONG 8 +# endif +# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 +# define CARES_PULL_SYS_TYPES_H 1 +# define CARES_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CARES_SIZEOF_LONG 8 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# define CARES_SIZEOF_LONG 4 +# define CARES_TYPEOF_ARES_SOCKLEN_T int +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) +# if defined(__i386__) || defined(__ppc__) +# define CARES_SIZEOF_LONG 4 +# elif defined(__x86_64__) || defined(__ppc64__) +# define CARES_SIZEOF_LONG 8 +# endif +# define CARES_TYPEOF_ARES_SOCKLEN_T socklen_t +# define CARES_SIZEOF_ARES_SOCKLEN_T 4 +# define CARES_PULL_SYS_TYPES_H 1 +# define CARES_PULL_SYS_SOCKET_H 1 + +#else +# error "Unknown non-configure build target!" + Error Compilation_aborted_Unknown_non_configure_build_target +#endif + +/* CARES_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CARES_PULL_SYS_TYPES_H +# include +#endif + +/* CARES_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CARES_PULL_SYS_SOCKET_H +# include +#endif + +/* Data type definition of ares_socklen_t. */ + +#ifdef CARES_TYPEOF_ARES_SOCKLEN_T + typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t; +#endif + +#endif /* __CARES_BUILD_H */ diff --git a/ares_build.h.in b/ares_build.h.in new file mode 100644 index 0000000..227782c --- /dev/null +++ b/ares_build.h.in @@ -0,0 +1,110 @@ +#ifndef __CARES_BUILD_H +#define __CARES_BUILD_H + + +/* Copyright (C) 2009 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. + */ + +/* ================================================================ */ +/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */ +/* ================================================================ */ + +/* + * NOTE 1: + * ------- + * + * Nothing in this file is intended to be modified or adjusted by the + * c-ares library user nor by the c-ares library builder. + * + * If you think that something actually needs to be changed, adjusted + * or fixed in this file, then, report it on the c-ares development + * mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/ + * + * This header file shall only export symbols which are 'cares' or 'CARES' + * prefixed, otherwise public name space would be polluted. + * + * NOTE 2: + * ------- + * + * Right now you might be staring at file ares_build.h.in or ares_build.h, + * this is due to the following reason: + * + * On systems capable of running the configure script, the configure process + * will overwrite the distributed ares_build.h file with one that is suitable + * and specific to the library being configured and built, which is generated + * from the ares_build.h.in template file. + * + */ + +/* ================================================================ */ +/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */ +/* ================================================================ */ + +#ifdef CARES_SIZEOF_LONG +# error "CARES_SIZEOF_LONG shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_SIZEOF_LONG_already_defined +#endif + +#ifdef CARES_TYPEOF_ARES_SOCKLEN_T +# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined +#endif + +#ifdef CARES_SIZEOF_ARES_SOCKLEN_T +# error "CARES_SIZEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_SIZEOF_ARES_SOCKLEN_T_already_defined +#endif + +/* ================================================================ */ +/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */ +/* ================================================================ */ + +/* Configure process defines this to 1 when it finds out that system */ +/* header file ws2tcpip.h must be included by the external interface. */ +#undef CARES_PULL_WS2TCPIP_H +#ifdef CARES_PULL_WS2TCPIP_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +# include +#endif + +/* Configure process defines this to 1 when it finds out that system */ +/* header file sys/types.h must be included by the external interface. */ +#undef CARES_PULL_SYS_TYPES_H +#ifdef CARES_PULL_SYS_TYPES_H +# include +#endif + +/* Configure process defines this to 1 when it finds out that system */ +/* header file sys/socket.h must be included by the external interface. */ +#undef CARES_PULL_SYS_SOCKET_H +#ifdef CARES_PULL_SYS_SOCKET_H +# include +#endif + +/* The size of `long', as computed by sizeof. */ +#undef CARES_SIZEOF_LONG + +/* Integral data type used for ares_socklen_t. */ +#undef CARES_TYPEOF_ARES_SOCKLEN_T + +/* The size of `ares_socklen_t', as computed by sizeof. */ +#undef CARES_SIZEOF_ARES_SOCKLEN_T + +/* Data type definition of ares_socklen_t. */ +typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t; + +#endif /* __CARES_BUILD_H */ diff --git a/ares_cancel.3 b/ares_cancel.3 new file mode 100644 index 0000000..ef10ec5 --- /dev/null +++ b/ares_cancel.3 @@ -0,0 +1,43 @@ +.\" +.\" 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. +.\" +.TH ARES_CANCEL 3 "31 March 2004" +.SH NAME +ares_cancel \- Cancel a resolve +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_cancel(ares_channel \fIchannel\fP) +.fi +.SH DESCRIPTION +The \fBares_cancel\fP function cancels all lookups/requests made on the the +name service channel identified by \fIchannel\fP. \fBares_cancel\fP invokes +the callbacks for each pending query on the channel, passing a status of +.BR ARES_ECANCELLED . +These calls give the callbacks a chance to clean up any state which +might have been stored in their arguments. +.SH SEE ALSO +.BR ares_init (3) +.BR ares_destroy (3) +.SH NOTES +This function was added in c-ares 1.2.0 + +c-ares 1.6.0 and earlier pass a status of +.BR ARES_ETIMEOUT +instead of +.BR ARES_ECANCELLED . +.SH AUTHOR +Dirk Manske diff --git a/ares_cancel.c b/ares_cancel.c new file mode 100644 index 0000000..eb790ae --- /dev/null +++ b/ares_cancel.c @@ -0,0 +1,63 @@ + +/* Copyright (C) 2004 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include +#include +#include "ares.h" +#include "ares_private.h" + +/* + * ares_cancel() cancels all ongoing requests/resolves that might be going on + * on the given channel. It does NOT kill the channel, use ares_destroy() for + * that. + */ +void ares_cancel(ares_channel channel) +{ + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + int i; + + list_head = &(channel->all_queries); + for (list_node = list_head->next; list_node != list_head; ) + { + query = list_node->data; + list_node = list_node->next; /* since we're deleting the query */ + query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0); + ares__free_query(query); + } +#ifndef NDEBUG + /* Freeing the query should remove it from all the lists in which it sits, + * so all query lists should be empty now. + */ + assert(ares__is_list_empty(&(channel->all_queries))); + for (i = 0; i < ARES_QID_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); + } + for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); + } +#endif + if (!(channel->flags & ARES_FLAG_STAYOPEN)) + { + if (channel->servers) + { + for (i = 0; i < channel->nservers; i++) + ares__close_sockets(channel, &channel->servers[i]); + } + } +} diff --git a/ares_cancel.pdf b/ares_cancel.pdf new file mode 100644 index 0000000..61ce6a3 Binary files /dev/null and b/ares_cancel.pdf differ diff --git a/ares_config.h.in b/ares_config.h.in new file mode 100644 index 0000000..c6c527f --- /dev/null +++ b/ares_config.h.in @@ -0,0 +1,515 @@ +/* ares_config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* define this if ares is built for a big endian system */ +#undef ARES_BIG_ENDIAN + +/* when building as static part of libcurl */ +#undef BUILDING_LIBCURL + +/* when building c-ares library */ +#undef CARES_BUILDING_LIBRARY + +/* when not building a shared library */ +#undef CARES_STATICLIB + +/* Define to 1 to enable hiding of library internal symbols. */ +#undef CARES_SYMBOL_HIDING + +/* Definition to make a library symbol externally visible. */ +#undef CARES_SYMBOL_SCOPE_EXTERN + +/* if a /etc/inet dir is being used */ +#undef ETC_INET + +/* Define to the type qualifier of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_QUAL_ARG1 + +/* Define to the type of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG1 + +/* Define to the type of arg 2 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG2 + +/* Define to the type of args 4 and 6 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG46 + +/* Define to the type of arg 7 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG7 + +/* Specifies the number of arguments to getservbyport_r */ +#undef GETSERVBYPORT_R_ARGS + +/* Specifies the size of the buffer to pass to getservbyport_r */ +#undef GETSERVBYPORT_R_BUFSIZE + +/* Define to 1 if you have AF_INET6. */ +#undef HAVE_AF_INET6 + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_NAMESER_COMPAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_NAMESER_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the `bitncmp' function. */ +#undef HAVE_BITNCMP + +/* Define to 1 if bool is an available type. */ +#undef HAVE_BOOL_T + +/* Define to 1 if you have the clock_gettime function and monotonic timer. */ +#undef HAVE_CLOCK_GETTIME_MONOTONIC + +/* Define to 1 if you have the closesocket function. */ +#undef HAVE_CLOSESOCKET + +/* Define to 1 if you have the CloseSocket camel case function. */ +#undef HAVE_CLOSESOCKET_CAMEL + +/* Define to 1 if you have the connect function. */ +#undef HAVE_CONNECT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the fcntl function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ +#undef HAVE_FCNTL_O_NONBLOCK + +/* Define to 1 if you have the freeaddrinfo function. */ +#undef HAVE_FREEADDRINFO + +/* Define to 1 if you have a working getaddrinfo function. */ +#undef HAVE_GETADDRINFO + +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#undef HAVE_GETADDRINFO_THREADSAFE + +/* Define to 1 if you have the getenv function. */ +#undef HAVE_GETENV + +/* Define to 1 if you have the gethostbyaddr function. */ +#undef HAVE_GETHOSTBYADDR + +/* Define to 1 if you have the gethostbyname function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define to 1 if you have the getnameinfo function. */ +#undef HAVE_GETNAMEINFO + +/* Define to 1 if you have the getservbyport_r function. */ +#undef HAVE_GETSERVBYPORT_R + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the `if_indextoname' function. */ +#undef HAVE_IF_INDEXTONAME + +/* Define to 1 if you have a IPv6 capable working inet_net_pton function. */ +#undef HAVE_INET_NET_PTON + +/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ +#undef HAVE_INET_NTOP + +/* Define to 1 if you have a IPv6 capable working inet_pton function. */ +#undef HAVE_INET_PTON + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the ioctl function. */ +#undef HAVE_IOCTL + +/* Define to 1 if you have the ioctlsocket function. */ +#undef HAVE_IOCTLSOCKET + +/* Define to 1 if you have the IoctlSocket camel case function. */ +#undef HAVE_IOCTLSOCKET_CAMEL + +/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. + */ +#undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO + +/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ +#undef HAVE_IOCTLSOCKET_FIONBIO + +/* Define to 1 if you have a working ioctl FIONBIO function. */ +#undef HAVE_IOCTL_FIONBIO + +/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ +#undef HAVE_IOCTL_SIOCGIFADDR + +/* Define to 1 if you have the `resolve' library (-lresolve). */ +#undef HAVE_LIBRESOLVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* if your compiler supports LL */ +#undef HAVE_LL + +/* Define to 1 if the compiler supports the 'long long' data type. */ +#undef HAVE_LONGLONG + +/* Define to 1 if you have the malloc.h header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the memory.h header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the MSG_NOSIGNAL flag. */ +#undef HAVE_MSG_NOSIGNAL + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_TCP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define to 1 if you have PF_INET6. */ +#undef HAVE_PF_INET6 + +/* Define to 1 if you have the recv function. */ +#undef HAVE_RECV + +/* Define to 1 if you have the recvfrom function. */ +#undef HAVE_RECVFROM + +/* Define to 1 if you have the send function. */ +#undef HAVE_SEND + +/* Define to 1 if you have the setsockopt function. */ +#undef HAVE_SETSOCKOPT + +/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ +#undef HAVE_SETSOCKOPT_SO_NONBLOCK + +/* Define to 1 if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if sig_atomic_t is an available typedef. */ +#undef HAVE_SIG_ATOMIC_T + +/* Define to 1 if sig_atomic_t is already defined as volatile. */ +#undef HAVE_SIG_ATOMIC_T_VOLATILE + +/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */ +#undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + +/* Define to 1 if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define to 1 if you have the header file. */ +#undef HAVE_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the strcmpi function. */ +#undef HAVE_STRCMPI + +/* Define to 1 if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the stricmp function. */ +#undef HAVE_STRICMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the strncasecmp function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the strncmpi function. */ +#undef HAVE_STRNCMPI + +/* Define to 1 if you have the strnicmp function. */ +#undef HAVE_STRNICMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + +/* Define to 1 if you have struct addrinfo. */ +#undef HAVE_STRUCT_ADDRINFO + +/* Define to 1 if you have struct in6_addr. */ +#undef HAVE_STRUCT_IN6_ADDR + +/* Define to 1 if you have struct sockaddr_in6. */ +#undef HAVE_STRUCT_SOCKADDR_IN6 + +/* if struct sockaddr_storage is defined */ +#undef HAVE_STRUCT_SOCKADDR_STORAGE + +/* Define to 1 if you have the timeval struct. */ +#undef HAVE_STRUCT_TIMEVAL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the windows.h header file. */ +#undef HAVE_WINDOWS_H + +/* Define to 1 if you have the winsock2.h header file. */ +#undef HAVE_WINSOCK2_H + +/* Define to 1 if you have the winsock.h header file. */ +#undef HAVE_WINSOCK_H + +/* Define to 1 if you have the writev function. */ +#undef HAVE_WRITEV + +/* Define to 1 if you have the ws2tcpip.h header file. */ +#undef HAVE_WS2TCPIP_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if you are building a native Windows target. */ +#undef NATIVE_WINDOWS + +/* Define to 1 if you need the malloc.h header file even with stdlib.h */ +#undef NEED_MALLOC_H + +/* Define to 1 if you need the memory.h header file even with stdlib.h */ +#undef NEED_MEMORY_H + +/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ +#undef NEED_REENTRANT + +/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ +#undef NEED_THREAD_SAFE + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* cpu-machine-OS */ +#undef OS + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* a suitable file/device to read random data from */ +#undef RANDOM_FILE + +/* Define to the type qualifier pointed by arg 5 for recvfrom. */ +#undef RECVFROM_QUAL_ARG5 + +/* Define to the type of arg 1 for recvfrom. */ +#undef RECVFROM_TYPE_ARG1 + +/* Define to the type pointed by arg 2 for recvfrom. */ +#undef RECVFROM_TYPE_ARG2 + +/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG2_IS_VOID + +/* Define to the type of arg 3 for recvfrom. */ +#undef RECVFROM_TYPE_ARG3 + +/* Define to the type of arg 4 for recvfrom. */ +#undef RECVFROM_TYPE_ARG4 + +/* Define to the type pointed by arg 5 for recvfrom. */ +#undef RECVFROM_TYPE_ARG5 + +/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG5_IS_VOID + +/* Define to the type pointed by arg 6 for recvfrom. */ +#undef RECVFROM_TYPE_ARG6 + +/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG6_IS_VOID + +/* Define to the function return type for recvfrom. */ +#undef RECVFROM_TYPE_RETV + +/* Define to the type of arg 1 for recv. */ +#undef RECV_TYPE_ARG1 + +/* Define to the type of arg 2 for recv. */ +#undef RECV_TYPE_ARG2 + +/* Define to the type of arg 3 for recv. */ +#undef RECV_TYPE_ARG3 + +/* Define to the type of arg 4 for recv. */ +#undef RECV_TYPE_ARG4 + +/* Define to the function return type for recv. */ +#undef RECV_TYPE_RETV + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to the type qualifier of arg 2 for send. */ +#undef SEND_QUAL_ARG2 + +/* Define to the type of arg 1 for send. */ +#undef SEND_TYPE_ARG1 + +/* Define to the type of arg 2 for send. */ +#undef SEND_TYPE_ARG2 + +/* Define to the type of arg 3 for send. */ +#undef SEND_TYPE_ARG3 + +/* Define to the type of arg 4 for send. */ +#undef SEND_TYPE_ARG4 + +/* Define to the function return type for send. */ +#undef SEND_TYPE_RETV + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `size_t', as computed by sizeof. */ +#undef SIZEOF_SIZE_T + +/* The size of `struct in6_addr', as computed by sizeof. */ +#undef SIZEOF_STRUCT_IN6_ADDR + +/* The size of `struct in_addr', as computed by sizeof. */ +#undef SIZEOF_STRUCT_IN_ADDR + +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* Define to disable non-blocking sockets. */ +#undef USE_BLOCKING_SOCKETS + +/* Version number of package */ +#undef VERSION + +/* Define to avoid automatic inclusion of winsock.h */ +#undef WIN32_LEAN_AND_MEAN + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Type to use in place of in_addr_t when system does not provide it. */ +#undef in_addr_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* the signed version of size_t */ +#undef ssize_t diff --git a/ares_data.c b/ares_data.c new file mode 100644 index 0000000..a2477be --- /dev/null +++ b/ares_data.c @@ -0,0 +1,190 @@ + +/* Copyright (C) 2009-2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#include + +#include "ares.h" +#include "ares_data.h" +#include "ares_private.h" + + +/* +** ares_free_data() - c-ares external API function. +** +** This function must be used by the application to free data memory that +** has been internally allocated by some c-ares function and for which a +** pointer has already been returned to the calling application. The list +** of c-ares functions returning pointers that must be free'ed using this +** function is: +** +** ares_get_servers() +** ares_parse_srv_reply() +** ares_parse_txt_reply() +*/ + +void ares_free_data(void *dataptr) +{ + struct ares_data *ptr; + + if (!dataptr) + return; + +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:1684) + /* 1684: conversion from pointer to same-sized integral type */ +#endif + + ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif + + if (ptr->mark != ARES_DATATYPE_MARK) + return; + + switch (ptr->type) + { + case ARES_DATATYPE_MX_REPLY: + + if (ptr->data.mx_reply.next) + ares_free_data(ptr->data.mx_reply.next); + if (ptr->data.mx_reply.host) + free(ptr->data.mx_reply.host); + break; + + case ARES_DATATYPE_SRV_REPLY: + + if (ptr->data.srv_reply.next) + ares_free_data(ptr->data.srv_reply.next); + if (ptr->data.srv_reply.host) + free(ptr->data.srv_reply.host); + break; + + case ARES_DATATYPE_TXT_REPLY: + + if (ptr->data.txt_reply.next) + ares_free_data(ptr->data.txt_reply.next); + if (ptr->data.txt_reply.txt) + free(ptr->data.txt_reply.txt); + break; + + case ARES_DATATYPE_ADDR_NODE: + + if (ptr->data.addr_node.next) + ares_free_data(ptr->data.addr_node.next); + break; + + default: + return; + } + + free(ptr); +} + + +/* +** ares_malloc_data() - c-ares internal helper function. +** +** This function allocates memory for a c-ares private ares_data struct +** for the specified ares_datatype, initializes c-ares private fields +** and zero initializes those which later might be used from the public +** API. It returns an interior pointer which can be passed by c-ares +** functions to the calling application, and that must be free'ed using +** c-ares external API function ares_free_data(). +*/ + +void *ares_malloc_data(ares_datatype type) +{ + struct ares_data *ptr; + + ptr = malloc(sizeof(struct ares_data)); + if (!ptr) + return NULL; + + switch (type) + { + case ARES_DATATYPE_MX_REPLY: + ptr->data.mx_reply.next = NULL; + ptr->data.mx_reply.host = NULL; + ptr->data.mx_reply.priority = 0; + break; + + case ARES_DATATYPE_SRV_REPLY: + ptr->data.srv_reply.next = NULL; + ptr->data.srv_reply.host = NULL; + ptr->data.srv_reply.priority = 0; + ptr->data.srv_reply.weight = 0; + ptr->data.srv_reply.port = 0; + break; + + case ARES_DATATYPE_TXT_REPLY: + ptr->data.txt_reply.next = NULL; + ptr->data.txt_reply.txt = NULL; + ptr->data.txt_reply.length = 0; + break; + + case ARES_DATATYPE_ADDR_NODE: + ptr->data.addr_node.next = NULL; + ptr->data.addr_node.family = 0; + memset(&ptr->data.addr_node.addrV6, 0, + sizeof(ptr->data.addr_node.addrV6)); + break; + + default: + free(ptr); + return NULL; + } + + ptr->mark = ARES_DATATYPE_MARK; + ptr->type = type; + + return &ptr->data; +} + + +/* +** ares_get_datatype() - c-ares internal helper function. +** +** This function returns the ares_datatype of the data stored in a +** private ares_data struct when given the public API pointer. +*/ + +ares_datatype ares_get_datatype(void * dataptr) +{ + struct ares_data *ptr; + +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:1684) + /* 1684: conversion from pointer to same-sized integral type */ +#endif + + ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif + + if (ptr->mark == ARES_DATATYPE_MARK) + return ptr->type; + + return ARES_DATATYPE_UNKNOWN; +} diff --git a/ares_data.h b/ares_data.h new file mode 100644 index 0000000..de1608b --- /dev/null +++ b/ares_data.h @@ -0,0 +1,65 @@ + +/* Copyright (C) 2009-2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +typedef enum { + ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ + ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ + ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ + ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ + ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ +#if 0 + ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ + ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ + ARES_DATATYPE_HOSTENT, /* struct hostent */ + ARES_DATATYPE_OPTIONS, /* struct ares_options */ +#endif + ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ +} ares_datatype; + +#define ARES_DATATYPE_MARK 0xbead + +/* + * ares_data struct definition is internal to c-ares and shall not + * be exposed by the public API in order to allow future changes + * and extensions to it without breaking ABI. This will be used + * internally by c-ares as the container of multiple types of data + * dynamically allocated for which a reference will be returned + * to the calling application. + * + * c-ares API functions returning a pointer to c-ares internally + * allocated data will actually be returning an interior pointer + * into this ares_data struct. + * + * All this is 'invisible' to the calling application, the only + * requirement is that this kind of data must be free'ed by the + * calling application using ares_free_data() with the pointer + * it has received from a previous c-ares function call. + */ + +struct ares_data { + ares_datatype type; /* Actual data type identifier. */ + unsigned int mark; /* Private ares_data signature. */ + union { + struct ares_txt_reply txt_reply; + struct ares_srv_reply srv_reply; + struct ares_addr_node addr_node; + struct ares_mx_reply mx_reply; + } data; +}; + +void *ares_malloc_data(ares_datatype type); + +ares_datatype ares_get_datatype(void * dataptr); diff --git a/ares_destroy.3 b/ares_destroy.3 new file mode 100644 index 0000000..79171ec --- /dev/null +++ b/ares_destroy.3 @@ -0,0 +1,43 @@ +.\" +.\" 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. +.\" +.TH ARES_DESTROY 3 "7 December 2004" +.SH NAME +ares_destroy \- Destroy a resolver channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_destroy(ares_channel \fIchannel\fP) +.fi +.SH DESCRIPTION +The +.B ares_destroy +function destroys the name service channel identified by +.IR channel , +freeing all memory and closing all sockets used by the channel. +.B ares_destroy +invokes the callbacks for each pending query on the channel, passing a +status of +.BR ARES_EDESTRUCTION . +These calls give the callbacks a chance to clean up any state which +might have been stored in their arguments. +.SH SEE ALSO +.BR ares_init (3), +.BR ares_cancel (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_destroy.c b/ares_destroy.c new file mode 100644 index 0000000..5e274da --- /dev/null +++ b/ares_destroy.c @@ -0,0 +1,105 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include +#include +#include "ares.h" +#include "ares_private.h" + +void ares_destroy_options(struct ares_options *options) +{ + int i; + + if(options->servers) + free(options->servers); + for (i = 0; i < options->ndomains; i++) + free(options->domains[i]); + free(options->domains); + if(options->sortlist) + free(options->sortlist); + free(options->lookups); +} + +void ares_destroy(ares_channel channel) +{ + int i; + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + + if (!channel) + return; + + list_head = &(channel->all_queries); + for (list_node = list_head->next; list_node != list_head; ) + { + query = list_node->data; + list_node = list_node->next; /* since we're deleting the query */ + query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0); + ares__free_query(query); + } +#ifndef NDEBUG + /* Freeing the query should remove it from all the lists in which it sits, + * so all query lists should be empty now. + */ + assert(ares__is_list_empty(&(channel->all_queries))); + for (i = 0; i < ARES_QID_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); + } + for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); + } +#endif + + ares__destroy_servers_state(channel); + + if (channel->domains) { + for (i = 0; i < channel->ndomains; i++) + free(channel->domains[i]); + free(channel->domains); + } + + if(channel->sortlist) + free(channel->sortlist); + + if (channel->lookups) + free(channel->lookups); + + free(channel); +} + +void ares__destroy_servers_state(ares_channel channel) +{ + struct server_state *server; + int i; + + if (channel->servers) + { + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + ares__close_sockets(channel, server); + assert(ares__is_list_empty(&server->queries_to_server)); + } + free(channel->servers); + channel->servers = NULL; + } + channel->nservers = -1; +} diff --git a/ares_destroy.pdf b/ares_destroy.pdf new file mode 100644 index 0000000..f9092d5 Binary files /dev/null and b/ares_destroy.pdf differ diff --git a/ares_destroy_options.3 b/ares_destroy_options.3 new file mode 100644 index 0000000..3e564b2 --- /dev/null +++ b/ares_destroy_options.3 @@ -0,0 +1,38 @@ +.\" +.\" 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. +.\" +.TH ARES_DESTROY_OPTIONS 3 "1 June 2007" +.SH NAME +ares_destroy_options \- Destroy options initialized with ares_save_options +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_destroy_options(struct ares_options *\fIoptions\fP) +.fi +.SH DESCRIPTION +The +.B ares_destroy_options +function destroys the options struct identified by +.IR options , +freeing all memory allocated by ares_save_options. + +.SH SEE ALSO +.BR ares_save_options (3), +.BR ares_init_options (3) +.SH AUTHOR +Brad House +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_destroy_options.pdf b/ares_destroy_options.pdf new file mode 100644 index 0000000..b86f1cc Binary files /dev/null and b/ares_destroy_options.pdf differ diff --git a/ares_dns.h b/ares_dns.h new file mode 100644 index 0000000..6893c02 --- /dev/null +++ b/ares_dns.h @@ -0,0 +1,90 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef ARES__DNS_H +#define ARES__DNS_H + +#define DNS__16BIT(p) (((p)[0] << 8) | (p)[1]) +#define DNS__32BIT(p) (((p)[0] << 24) | ((p)[1] << 16) | \ + ((p)[2] << 8) | (p)[3]) + +#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \ + ((p)[1] = (unsigned char)((v) & 0xff))) +#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \ + ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \ + ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \ + ((p)[3] = (unsigned char)((v) & 0xff))) + +#if 0 +/* we cannot use this approach on systems where we can't access 16/32 bit + data on un-aligned addresses */ +#define DNS__16BIT(p) ntohs(*(unsigned short*)(p)) +#define DNS__32BIT(p) ntohl(*(unsigned long*)(p)) +#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v) +#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v) +#endif + +/* Macros for parsing a DNS header */ +#define DNS_HEADER_QID(h) DNS__16BIT(h) +#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1) +#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf) +#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1) +#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1) +#define DNS_HEADER_RD(h) ((h)[2] & 0x1) +#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1) +#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7) +#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf) +#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4) +#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6) +#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8) +#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10) + +/* Macros for constructing a DNS header */ +#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v) +#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7)) +#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3)) +#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2)) +#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1)) +#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1)) +#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7)) +#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4)) +#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf)) +#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v) +#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v) +#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v) +#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v) + +/* Macros for parsing the fixed part of a DNS question */ +#define DNS_QUESTION_TYPE(q) DNS__16BIT(q) +#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2) + +/* Macros for constructing the fixed part of a DNS question */ +#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v) +#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v) + +/* Macros for parsing the fixed part of a DNS resource record */ +#define DNS_RR_TYPE(r) DNS__16BIT(r) +#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2) +#define DNS_RR_TTL(r) DNS__32BIT((r) + 4) +#define DNS_RR_LEN(r) DNS__16BIT((r) + 8) + +/* Macros for constructing the fixed part of a DNS resource record */ +#define DNS_RR_SET_TYPE(r) DNS__SET16BIT(r, v) +#define DNS_RR_SET_CLASS(r) DNS__SET16BIT((r) + 2, v) +#define DNS_RR_SET_TTL(r) DNS__SET32BIT((r) + 4, v) +#define DNS_RR_SET_LEN(r) DNS__SET16BIT((r) + 8, v) + +#endif /* ARES__DNS_H */ diff --git a/ares_dup.3 b/ares_dup.3 new file mode 100644 index 0000000..935c5d9 --- /dev/null +++ b/ares_dup.3 @@ -0,0 +1,43 @@ +.\" +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_DUP 3 "26 May 2009" +.SH NAME +ares_dup \- Duplicate a resolver channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_dup(ares_channel *\fIdest\fP, ares_channel \fIsource\fP) +.fi +.SH DESCRIPTION +The \fBares_dup(3)\fP function duplicates an existing communications channel +for name service lookups. If it returns successfully, \fBares_dup(3)\fP will +set the variable pointed to by \fIdest\fP to a handle used to identify the +name service channel. The caller should invoke \fIares_destroy(3)\fP on the +handle when the channel is no longer needed. + +The \fBares_dup_options\fP function also initializes a name service channel, +with additional options set exactly as the \fIsource\fP channel has them +configured. +.SH SEE ALSO +.BR ares_destroy(3), +.BR ares_init(3), +.BR ares_library_init(3) +.SH AVAILABILITY +ares_dup(3) was added in c-ares 1.6.0 +.SH AUTHOR +Daniel Stenberg + diff --git a/ares_dup.pdf b/ares_dup.pdf new file mode 100644 index 0000000..f03eee3 Binary files /dev/null and b/ares_dup.pdf differ diff --git a/ares_expand_name.3 b/ares_expand_name.3 new file mode 100644 index 0000000..1761a9a --- /dev/null +++ b/ares_expand_name.3 @@ -0,0 +1,63 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_EXPAND_NAME 3 "20 Nov 2009" +.SH NAME +ares_expand_name \- Expand a DNS-encoded domain name +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_expand_name(const unsigned char *\fIencoded\fP, +.B const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP, +.B long *\fIenclen\fP) +.fi +.SH DESCRIPTION +The +.B ares_expand_name +function converts a DNS-encoded domain name to a dot-separated C +string. The argument +.I encoded +gives the beginning of the encoded domain name, and the arguments +.I abuf +and +.I alen +give the containing message buffer (necessary for the processing of +indirection pointers within the encoded domain name). The result is +placed in a NUL-terminated allocated buffer, a pointer to which is +stored in the variable pointed to by +.IR s . +The length of the encoded name is stored in the variable pointed to by +.I enclen +so that the caller can advance past the encoded domain name to read +further data in the message. +.SH RETURN VALUES +.B ares_expand_name +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Expansion of the encoded name succeeded. +.TP 15 +.B ARES_EBADNAME +The encoded domain name was malformed and could not be expanded. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_mkquery (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_expand_name.c b/ares_expand_name.c new file mode 100644 index 0000000..e3eccd2 --- /dev/null +++ b/ares_expand_name.c @@ -0,0 +1,200 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include "ares.h" +#include "ares_private.h" /* for the memdebug */ + +static int name_length(const unsigned char *encoded, const unsigned char *abuf, + int alen); + +/* Expand an RFC1035-encoded domain name given by encoded. The + * containing message is given by abuf and alen. The result given by + * *s, which is set to a NUL-terminated allocated buffer. *enclen is + * set to the length of the encoded name (not the length of the + * expanded name; the goal is to tell the caller how many bytes to + * move forward to get past the encoded name). + * + * In the simple case, an encoded name is a series of labels, each + * composed of a one-byte length (limited to values between 0 and 63 + * inclusive) followed by the label contents. The name is terminated + * by a zero-length label. + * + * In the more complicated case, a label may be terminated by an + * indirection pointer, specified by two bytes with the high bits of + * the first byte (corresponding to INDIR_MASK) set to 11. With the + * two high bits of the first byte stripped off, the indirection + * pointer gives an offset from the beginning of the containing + * message with more labels to decode. Indirection can happen an + * arbitrary number of times, so we have to detect loops. + * + * Since the expanded name uses '.' as a label separator, we use + * backslashes to escape periods or backslashes in the expanded name. + */ + +int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, + int alen, char **s, long *enclen) +{ + int len, indir = 0; + char *q; + const unsigned char *p; + union { + ssize_t sig; + size_t uns; + } nlen; + + nlen.sig = name_length(encoded, abuf, alen); + if (nlen.sig < 0) + return ARES_EBADNAME; + + *s = malloc(nlen.uns + 1); + if (!*s) + return ARES_ENOMEM; + q = *s; + + if (nlen.uns == 0) { + /* RFC2181 says this should be ".": the root of the DNS tree. + * Since this function strips trailing dots though, it becomes "" + */ + q[0] = '\0'; + + /* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but + valid) */ + if ((*encoded & INDIR_MASK) == INDIR_MASK) + *enclen = 2; + else + *enclen = 1; /* the caller should move one byte to get past this */ + + return ARES_SUCCESS; + } + + /* No error-checking necessary; it was all done by name_length(). */ + p = encoded; + while (*p) + { + if ((*p & INDIR_MASK) == INDIR_MASK) + { + if (!indir) + { + *enclen = p + 2 - encoded; + indir = 1; + } + p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1)); + } + else + { + len = *p; + p++; + while (len--) + { + if (*p == '.' || *p == '\\') + *q++ = '\\'; + *q++ = *p; + p++; + } + *q++ = '.'; + } + } + if (!indir) + *enclen = p + 1 - encoded; + + /* Nuke the trailing period if we wrote one. */ + if (q > *s) + *(q - 1) = 0; + else + *q = 0; /* zero terminate */ + + return ARES_SUCCESS; +} + +/* Return the length of the expansion of an encoded domain name, or + * -1 if the encoding is invalid. + */ +static int name_length(const unsigned char *encoded, const unsigned char *abuf, + int alen) +{ + int n = 0, offset, indir = 0; + + /* Allow the caller to pass us abuf + alen and have us check for it. */ + if (encoded == abuf + alen) + return -1; + + while (*encoded) + { + if ((*encoded & INDIR_MASK) == INDIR_MASK) + { + /* Check the offset and go there. */ + if (encoded + 1 >= abuf + alen) + return -1; + offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1); + if (offset >= alen) + return -1; + encoded = abuf + offset; + + /* If we've seen more indirects than the message length, + * then there's a loop. + */ + if (++indir > alen) + return -1; + } + else + { + offset = *encoded; + if (encoded + offset + 1 >= abuf + alen) + return -1; + encoded++; + while (offset--) + { + n += (*encoded == '.' || *encoded == '\\') ? 2 : 1; + encoded++; + } + n++; + } + } + + /* If there were any labels at all, then the number of dots is one + * less than the number of labels, so subtract one. + */ + return (n) ? n - 1 : n; +} + +/* Like ares_expand_name but returns EBADRESP in case of invalid input. */ +int ares__expand_name_for_response(const unsigned char *encoded, + const unsigned char *abuf, int alen, + char **s, long *enclen) +{ + int status = ares_expand_name(encoded, abuf, alen, s, enclen); + if (status == ARES_EBADNAME) + status = ARES_EBADRESP; + return status; +} diff --git a/ares_expand_name.pdf b/ares_expand_name.pdf new file mode 100644 index 0000000..a32c101 Binary files /dev/null and b/ares_expand_name.pdf differ diff --git a/ares_expand_string.3 b/ares_expand_string.3 new file mode 100644 index 0000000..33dd7bd --- /dev/null +++ b/ares_expand_string.3 @@ -0,0 +1,61 @@ +.\" +.\" 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. +.\" +.TH ARES_EXPAND_NAME 3 "20 Nov 2009" +.SH NAME +ares_expand_string \- Expand a length encoded string +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_expand_string(const unsigned char *\fIencoded\fP, +.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP, +.B long *\fIenclen\fP) +.fi +.SH DESCRIPTION +The +.B ares_expand_string +function converts a length encoded string to a NUL-terminated C +string. The argument +.I encoded +gives the beginning of the encoded string, and the arguments +.I abuf +and +.I alen +give the containing message buffer (necessary for the processing of +indirection pointers within the encoded domain name). The result is +placed in a NUL-terminated allocated buffer, a pointer to which is +stored in the variable pointed to by +.IR s . +The length of the encoded string is stored in the variable pointed to by +.I enclen +so that the caller can advance past the encoded string to read +further data in the message. +.SH RETURN VALUES +.B ares_expand_string +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Expansion of the encoded string succeeded. +.TP 15 +.B ARES_EBADSTR +The encoded string was malformed and could not be expanded. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_free_string (3) +.SH AUTHOR +Dominick Meglio diff --git a/ares_expand_string.c b/ares_expand_string.c new file mode 100644 index 0000000..f24cccf --- /dev/null +++ b/ares_expand_string.c @@ -0,0 +1,75 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif + +#include +#include +#include "ares.h" +#include "ares_private.h" /* for the memdebug */ + +/* Simply decodes a length-encoded character string. The first byte of the + * input is the length of the string to be returned and the bytes thereafter + * are the characters of the string. The returned result will be NULL + * terminated. + */ +int ares_expand_string(const unsigned char *encoded, + const unsigned char *abuf, + int alen, + unsigned char **s, + long *enclen) +{ + unsigned char *q; + union { + ssize_t sig; + size_t uns; + } elen; + + if (encoded == abuf+alen) + return ARES_EBADSTR; + + elen.uns = *encoded; + if (encoded+elen.sig+1 > abuf+alen) + return ARES_EBADSTR; + + encoded++; + + *s = malloc(elen.uns+1); + if (*s == NULL) + return ARES_ENOMEM; + q = *s; + strncpy((char *)q, (char *)encoded, elen.uns); + q[elen.uns] = '\0'; + + *s = q; + + *enclen = (long)(elen.sig+1); + + return ARES_SUCCESS; +} + diff --git a/ares_expand_string.pdf b/ares_expand_string.pdf new file mode 100644 index 0000000..37f5f20 Binary files /dev/null and b/ares_expand_string.pdf differ diff --git a/ares_fds.3 b/ares_fds.3 new file mode 100644 index 0000000..743e45e --- /dev/null +++ b/ares_fds.3 @@ -0,0 +1,61 @@ +.\" +.\" 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. +.\" +.TH ARES_FDS 3 "23 July 1998" +.SH NAME +ares_fds \- Get file descriptors to select on for name service +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_fds(ares_channel \fIchannel\fP, fd_set *\fIread_fds\fP, +.B fd_set *\fIwrite_fds\fP) +.fi +.SH DESCRIPTION +The +.B ares_fds +function retrieves the set of file descriptors which the calling +application should select on for reading and writing for the +processing of name service queries pending on the name service channel +identified by +.IR channel . +File descriptors will be set in the file descriptor sets pointed to by +.I read_fds +and +.I write_fds +as appropriate. File descriptors already set in +.I read_fds +and +.I write_fds +will remain set; initialization of the file descriptor sets +(using +.BR FD_ZERO ) +is the responsibility of the caller. +.SH RETURN VALUES +.B ares_fds +returns one greater than the number of the highest socket set in either +.I read_fds +or +.IR write_fds . +If no queries are active, +.B ares_fds +will return 0. +.SH SEE ALSO +.BR ares_timeout (3), +.BR ares_process (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_fds.c b/ares_fds.c new file mode 100644 index 0000000..ac5eedb --- /dev/null +++ b/ares_fds.c @@ -0,0 +1,63 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#include "ares.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds) +{ + struct server_state *server; + ares_socket_t nfds; + int i; + + /* Are there any active queries? */ + int active_queries = !ares__is_list_empty(&(channel->all_queries)); + + nfds = 0; + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + /* We only need to register interest in UDP sockets if we have + * outstanding queries. + */ + if (active_queries && server->udp_socket != ARES_SOCKET_BAD) + { + FD_SET(server->udp_socket, read_fds); + if (server->udp_socket >= nfds) + nfds = server->udp_socket + 1; + } + /* We always register for TCP events, because we want to know + * when the other side closes the connection, so we don't waste + * time trying to use a broken connection. + */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + FD_SET(server->tcp_socket, read_fds); + if (server->qhead) + FD_SET(server->tcp_socket, write_fds); + if (server->tcp_socket >= nfds) + nfds = server->tcp_socket + 1; + } + } + return (int)nfds; +} diff --git a/ares_fds.pdf b/ares_fds.pdf new file mode 100644 index 0000000..a3e6af0 Binary files /dev/null and b/ares_fds.pdf differ diff --git a/ares_free_data.3 b/ares_free_data.3 new file mode 100644 index 0000000..c6cadd5 --- /dev/null +++ b/ares_free_data.3 @@ -0,0 +1,72 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREE_DATA 3 "5 March 2010" +.SH NAME +ares_free_data \- Free data allocated by several c-ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_data(void *\fIdataptr\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +The +.B ares_free_data(3) +function frees one or more data structures allocated and returned +by several c-ares functions. Specifically the data returned by the +following list of functions must be deallocated using this function. +.TP 5 +.B ares_get_servers(3) +When used to free the data returned by ares_get_servers(3) this +will free the whole linked list of ares_addr_node structures returned +by ares_get_servers(3). +.TP +.B ares_parse_srv_reply(3) +When used to free the data returned by ares_parse_srv_reply(3) this +will free the whole linked list of ares_srv_reply structures returned +by ares_parse_srv_reply(3), along with any additional storage +associated with those structures. +.TP +.B ares_parse_mx_reply(3) +When used to free the data returned by ares_parse_mx_reply(3) this +will free the whole linked list of ares_mx_reply structures returned +by ares_parse_mx_reply(3), along with any additional storage +associated with those structures. +.TP +.B ares_parse_txt_reply(3) +When used to free the data returned by ares_parse_txt_reply(3) this +will free the whole linked list of ares_txt_reply structures returned +by ares_parse_txt_reply(3), along with any additional storage +associated with those structures. +.SH RETURN VALUE +The ares_free_data() function does not return a value. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_get_servers(3), +.BR ares_parse_srv_reply(3), +.BR ares_parse_mx_reply(3), +.BR ares_parse_txt_reply(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2010 by Daniel Stenberg. diff --git a/ares_free_data.pdf b/ares_free_data.pdf new file mode 100644 index 0000000..8a3f3d8 Binary files /dev/null and b/ares_free_data.pdf differ diff --git a/ares_free_hostent.3 b/ares_free_hostent.3 new file mode 100644 index 0000000..d692801 --- /dev/null +++ b/ares_free_hostent.3 @@ -0,0 +1,45 @@ +.\" +.\" 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. +.\" +.TH ARES_FREE_HOSTENT 3 "23 July 1998" +.SH NAME +ares_free_hostent \- Free host structure allocated by ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_hostent(struct hostent *\fIhost\fP) +.fi +.SH DESCRIPTION +The +.I ares_free_hostent +function frees a +.B struct hostent +allocated by one of the functions \fIares_parse_a_reply(3)\fP, +\fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP. +.SH NOTES +It is not necessary (and is not correct) to free the host structure passed to +the callback functions for \fIares_gethostbyname(3)\fP or +\fIares_gethostbyaddr(3)\fP. c-ares will automatically free such host +structures when the callback returns. +.SH SEE ALSO +.BR ares_parse_a_reply (3), +.BR ares_parse_aaaa_reply (3), +.BR ares_parse_ptr_reply (3), +.BR ares_parse_ns_reply (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_free_hostent.c b/ares_free_hostent.c new file mode 100644 index 0000000..349d379 --- /dev/null +++ b/ares_free_hostent.c @@ -0,0 +1,42 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include + +#ifdef HAVE_NETDB_H +#include +#endif + +#include "ares.h" +#include "ares_private.h" /* for memdebug */ + +void ares_free_hostent(struct hostent *host) +{ + char **p; + + if (!host) + return; + + free((char *)(host->h_name)); + for (p = host->h_aliases; *p; p++) + free(*p); + free(host->h_aliases); + free(host->h_addr_list[0]); /* no matter if there is one or many entries, + there is only one malloc for all of them */ + free(host->h_addr_list); + free(host); +} diff --git a/ares_free_hostent.pdf b/ares_free_hostent.pdf new file mode 100644 index 0000000..824c3ca --- /dev/null +++ b/ares_free_hostent.pdf @@ -0,0 +1,111 @@ +%PDF-1.4 +%쏢 +5 0 obj +<> +stream +xUnF}W Їk.PpS%V`K>v!J]5G;ˋ(rZ  ˙3s`;;og!//7@7EErsBAw) hx?wy}mcjdĨ%<1K6trFeϓxn#x$?ltw\*))= 4Dߔq֔)J @րKS娩{Og\ߵzV͠;.u8qmk3d~Ѱו<%},wlnb #;#jtsj5GSΎx2Miଉ|fS/~,.|> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +11 0 obj +<> +endobj +12 0 obj +<> +endobj +10 0 obj +<> +endobj +9 0 obj +<> +endobj +8 0 obj +<> +endobj +13 0 obj +<> +endobj +14 0 obj +<>stream + + + + + +2011-08-16T22:43:20+02:00 +2011-08-16T22:43:20+02:00 +groff version 1.21 + +Untitled + + + + + +endstream +endobj +2 0 obj +<>endobj +xref +0 15 +0000000000 65535 f +0000001330 00000 n +0000003186 00000 n +0000001271 00000 n +0000001111 00000 n +0000000015 00000 n +0000001091 00000 n +0000001395 00000 n +0000001649 00000 n +0000001584 00000 n +0000001516 00000 n +0000001436 00000 n +0000001466 00000 n +0000001731 00000 n +0000001790 00000 n +trailer +<< /Size 15 /Root 1 0 R /Info 2 0 R +/ID [<2E59662AAA0A44D57AEDCBA2B5CB7F86><2E59662AAA0A44D57AEDCBA2B5CB7F86>] +>> +startxref +3338 +%%EOF diff --git a/ares_free_string.3 b/ares_free_string.3 new file mode 100644 index 0000000..55af7d2 --- /dev/null +++ b/ares_free_string.3 @@ -0,0 +1,35 @@ +.\" +.\" Copyright 2000 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREE_STRING 3 "4 February 2004" +.SH NAME +ares_free_string \- Free strings allocated by ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_string(void *\fIstr\fP) +.fi +.SH DESCRIPTION +The +.I ares_free_string +function frees a string allocated by an ares function. +.SH SEE ALSO +.BR ares_mkquery (3) +.BR ares_expand_string (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 2000 by the Massachusetts Institute of Technology. diff --git a/ares_free_string.c b/ares_free_string.c new file mode 100644 index 0000000..e0545c1 --- /dev/null +++ b/ares_free_string.c @@ -0,0 +1,25 @@ + +/* Copyright 2000 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include +#include "ares.h" +#include "ares_private.h" + +void ares_free_string(void *str) +{ + free(str); +} diff --git a/ares_free_string.pdf b/ares_free_string.pdf new file mode 100644 index 0000000..807039b Binary files /dev/null and b/ares_free_string.pdf differ diff --git a/ares_get_servers.3 b/ares_get_servers.3 new file mode 100644 index 0000000..feea3a0 --- /dev/null +++ b/ares_get_servers.3 @@ -0,0 +1,78 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2008-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GET_SERVERS 3 "5 March 2010" +.SH NAME +ares_get_servers \- Retrieve name servers from an initialized ares_channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_get_servers(ares_channel \fIchannel\fP, struct ares_addr_node **\fIservers\fP) +.fi +.SH DESCRIPTION +The \fBares_get_servers(3)\fP function retrieves name servers configuration +from the +channel data identified by +.IR channel , +as a linked list of ares_addr_node structs storing a pointer to the first +node at the address specified by +.IR servers . + +Function caller may traverse the returned name server linked list, or may use +it directly as suitable input for the \fBares_set_servers(3)\fP function, but +shall not shrink or extend the list on its own. + +Each node of the name server linked list is stored in memory dynamically +allocated and managed by c-ares. It is the caller's responsibility to free +the resulting linked list, using \fBares_free_data(3)\fP , once the caller +does not need it any longer. + +This function is capable of handling IPv4 and IPv6 name server +addresses simultaneously, rendering \fBares_save_options(3)\fP with +optmask \fBARES_OPT_SERVERS\fP functionally obsolete except for +IPv4-only name server usage. + +.SH RETURN VALUES +.B ares_get_servers(3) +may return any of the following values: +.TP 15 +.B ARES_SUCCESS +The name servers configuration was successfuly retrieved +.TP 15 +.B ARES_ENOMEM +The memory was exhausted +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +was invalid. +.SH SEE ALSO +.BR ares_set_servers (3), +.BR ares_init_options (3), +.BR ares_save_options(3) +.SH AVAILABILITY +ares_get_servers(3) was added in c-ares 1.7.1 +.SH AUTHOR +Implementation of this function and associated library internals are based +on code, comments and feedback provided in November and December of 2008 by +Daniel Stenberg, Gregor Jasny, Phil Blundell and Yang Tse, December 2009 +by Cedric Bail, February 2010 by Jakub Hrozek. On March 2010 Yang Tse +shuffled all the bits and this function popped out. +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2008-2010 by Daniel Stenberg diff --git a/ares_get_servers.pdf b/ares_get_servers.pdf new file mode 100644 index 0000000..20253f7 Binary files /dev/null and b/ares_get_servers.pdf differ diff --git a/ares_getenv.c b/ares_getenv.c new file mode 100644 index 0000000..1b2e85d --- /dev/null +++ b/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/ares_getenv.h b/ares_getenv.h new file mode 100644 index 0000000..6da6cc5 --- /dev/null +++ b/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/ares_gethostbyaddr.3 b/ares_gethostbyaddr.3 new file mode 100644 index 0000000..f589868 --- /dev/null +++ b/ares_gethostbyaddr.3 @@ -0,0 +1,101 @@ +.\" +.\" 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. +.\" +.TH ARES_GETHOSTBYADDR 3 "24 July 1998" +.SH NAME +ares_gethostbyaddr \- Initiate a host query by address +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, struct hostent *\fIhostent\fP) +.PP +.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP, +.B int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyaddr +function initiates a host query by address on the name service channel +identified by +.IR channel . +The parameters +.I addr +and +.I addrlen +give the address as a series of bytes, and +.I family +gives the type of address. When the query is complete or has failed, the ares +library will invoke \fIcallback\fP. Completion or failure of the query may +happen immediately, or may happen during a later call to +\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_gethostbyaddr +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to look up addresses of type +.IR family . +.TP 19 +.B ARES_ENOTFOUND +The address +.I addr +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I hostent +points to a +.B struct hostent +containing the name of the host returned by the query. The callback +need not and should not attempt to free the memory pointed to by +.IR hostent ; +the ares library will free it when the callback returns. If the query +did not complete successfully, +.I hostent +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.BR ares_gethostbyname (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_gethostbyaddr.c b/ares_gethostbyaddr.c new file mode 100644 index 0000000..4b4c8a7 --- /dev/null +++ b/ares_gethostbyaddr.c @@ -0,0 +1,301 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include + +#include "ares.h" +#include "inet_net_pton.h" +#include "ares_platform.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 +#endif + +struct addr_query { + /* Arguments passed to ares_gethostbyaddr() */ + ares_channel channel; + struct ares_addr addr; + ares_host_callback callback; + void *arg; + + const char *remaining_lookups; + int timeouts; +}; + +static void next_lookup(struct addr_query *aquery); +static void addr_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static void end_aquery(struct addr_query *aquery, int status, + struct hostent *host); +static int file_lookup(struct ares_addr *addr, struct hostent **host); +static void ptr_rr_name(char *name, const struct ares_addr *addr); + +void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, + int family, ares_host_callback callback, void *arg) +{ + struct addr_query *aquery; + + if (family != AF_INET && family != AF_INET6) + { + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) || + (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6))) + { + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + aquery = malloc(sizeof(struct addr_query)); + if (!aquery) + { + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + aquery->channel = channel; + if (family == AF_INET) + memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4)); + else + memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6)); + aquery->addr.family = family; + aquery->callback = callback; + aquery->arg = arg; + aquery->remaining_lookups = channel->lookups; + aquery->timeouts = 0; + + next_lookup(aquery); +} + +static void next_lookup(struct addr_query *aquery) +{ + const char *p; + char name[128]; + int status; + struct hostent *host; + + for (p = aquery->remaining_lookups; *p; p++) + { + switch (*p) + { + case 'b': + ptr_rr_name(name, &aquery->addr); + aquery->remaining_lookups = p + 1; + ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, + aquery); + return; + case 'f': + status = file_lookup(&aquery->addr, &host); + + /* this status check below previously checked for !ARES_ENOTFOUND, + but we should not assume that this single error code is the one + that can occur, as that is in fact no longer the case */ + if (status == ARES_SUCCESS) + { + end_aquery(aquery, status, host); + return; + } + break; + } + } + end_aquery(aquery, ARES_ENOTFOUND, NULL); +} + +static void addr_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + struct addr_query *aquery = (struct addr_query *) arg; + struct hostent *host; + size_t addrlen; + + aquery->timeouts += timeouts; + if (status == ARES_SUCCESS) + { + if (aquery->addr.family == AF_INET) + { + addrlen = sizeof(aquery->addr.addrV4); + status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4, + (int)addrlen, AF_INET, &host); + } + else + { + addrlen = sizeof(aquery->addr.addrV6); + status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6, + (int)addrlen, AF_INET6, &host); + } + end_aquery(aquery, status, host); + } + else if (status == ARES_EDESTRUCTION) + end_aquery(aquery, status, NULL); + else + next_lookup(aquery); +} + +static void end_aquery(struct addr_query *aquery, int status, + struct hostent *host) +{ + aquery->callback(aquery->arg, status, aquery->timeouts, host); + if (host) + ares_free_hostent(host); + free(aquery); +} + +static int file_lookup(struct ares_addr *addr, struct hostent **host) +{ + FILE *fp; + int status; + int error; + +#ifdef WIN32 + char PATH_HOSTS[MAX_PATH]; + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hkeyHosts) == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, + &dwLength); + ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else if (platform == WIN_9X) + GetWindowsDirectory(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); + +#elif defined(WATT32) + extern const char *_w32_GetHostsFile (void); + const char *PATH_HOSTS = _w32_GetHostsFile(); + + if (!PATH_HOSTS) + return ARES_ENOTFOUND; +#endif + + fp = fopen(PATH_HOSTS, "r"); + if (!fp) + { + error = ERRNO; + switch(error) + { + case ENOENT: + case ESRCH: + return ARES_ENOTFOUND; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + PATH_HOSTS)); + *host = NULL; + return ARES_EFILE; + } + } + while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS) + { + if (addr->family != (*host)->h_addrtype) + { + ares_free_hostent(*host); + continue; + } + if (addr->family == AF_INET) + { + if (memcmp((*host)->h_addr, &addr->addrV4, + sizeof(addr->addrV4)) == 0) + break; + } + else if (addr->family == AF_INET6) + { + if (memcmp((*host)->h_addr, &addr->addrV6, + sizeof(addr->addrV6)) == 0) + break; + } + ares_free_hostent(*host); + } + fclose(fp); + if (status == ARES_EOF) + status = ARES_ENOTFOUND; + if (status != ARES_SUCCESS) + *host = NULL; + return status; +} + +static void ptr_rr_name(char *name, const struct ares_addr *addr) +{ + if (addr->family == AF_INET) + { + unsigned long laddr = ntohl(addr->addrV4.s_addr); + unsigned long a1 = (laddr >> 24UL) & 0xFFUL; + unsigned long a2 = (laddr >> 16UL) & 0xFFUL; + unsigned long a3 = (laddr >> 8UL) & 0xFFUL; + unsigned long a4 = laddr & 0xFFUL; + sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1); + } + else + { + unsigned char *bytes = (unsigned char *)&addr->addrV6; + /* There are too many arguments to do this in one line using + * minimally C89-compliant compilers */ + sprintf(name, + "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.", + bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4, + bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4, + bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4, + bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4); + sprintf(name+strlen(name), + "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa", + bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4, + bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4, + bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4, + bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4); + } +} diff --git a/ares_gethostbyaddr.pdf b/ares_gethostbyaddr.pdf new file mode 100644 index 0000000..3c8e60b Binary files /dev/null and b/ares_gethostbyaddr.pdf differ diff --git a/ares_gethostbyname.3 b/ares_gethostbyname.3 new file mode 100644 index 0000000..a578a53 --- /dev/null +++ b/ares_gethostbyname.3 @@ -0,0 +1,105 @@ +.\" +.\" 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. +.\" +.TH ARES_GETHOSTBYNAME 3 "25 July 1998" +.SH NAME +ares_gethostbyname \- Initiate a host query by name +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, struct hostent *\fIhostent\fP) +.PP +.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyname +function initiates a host query by name on the name service channel +identified by +.IR channel . +The parameter +.I name +gives the hostname as a NUL-terminated C string, and +.I family +gives the desired type of address for the resulting host entry. When the +query is complete or has failed, the ares library will invoke \fIcallback\fP. +Completion or failure of the query may happen immediately, or may happen +during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or +\fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_gethostbyname +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to find addresses of type +.IR family . +.TP 19 +.B ARES_EBADNAME +The hostname +.B name +is composed entirely of numbers and periods, but is not a valid +representation of an Internet address. +.TP 19 +.B ARES_ENOTFOUND +The address +.I addr +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I hostent +points to a +.B struct hostent +containing the name of the host returned by the query. The callback +need not and should not attempt to free the memory pointed to by +.IR hostent ; +the ares library will free it when the callback returns. If the query +did not complete successfully, +.I hostent +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.BR ares_gethostbyaddr (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_gethostbyname.c b/ares_gethostbyname.c new file mode 100644 index 0000000..ad89dc2 --- /dev/null +++ b/ares_gethostbyname.c @@ -0,0 +1,523 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include +#include +#ifdef HAVE_STRINGS_H +#include +#endif + +#include "ares.h" +#include "inet_net_pton.h" +#include "bitncmp.h" +#include "ares_platform.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 +#endif + +struct host_query { + /* Arguments passed to ares_gethostbyname() */ + ares_channel channel; + char *name; + ares_host_callback callback; + void *arg; + int sent_family; /* this family is what was is being used */ + int want_family; /* this family is what is asked for in the API */ + const char *remaining_lookups; + int timeouts; +}; + +static void next_lookup(struct host_query *hquery, int status_code); +static void host_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static void end_hquery(struct host_query *hquery, int status, + struct hostent *host); +static int fake_hostent(const char *name, int family, + ares_host_callback callback, void *arg); +static int file_lookup(const char *name, int family, struct hostent **host); +static void sort_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort); +static void sort6_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort); +static int get_address_index(const struct in_addr *addr, + const struct apattern *sortlist, int nsort); +static int get6_address_index(const struct ares_in6_addr *addr, + const struct apattern *sortlist, int nsort); + +void ares_gethostbyname(ares_channel channel, const char *name, int family, + ares_host_callback callback, void *arg) +{ + struct host_query *hquery; + + /* Right now we only know how to look up Internet addresses - and unspec + means try both basically. */ + switch (family) { + case AF_INET: + case AF_INET6: + case AF_UNSPEC: + break; + default: + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + if (fake_hostent(name, family, callback, arg)) + return; + + /* Allocate and fill in the host query structure. */ + hquery = malloc(sizeof(struct host_query)); + if (!hquery) + { + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + hquery->channel = channel; + hquery->name = strdup(name); + hquery->want_family = family; + hquery->sent_family = -1; /* nothing is sent yet */ + if (!hquery->name) { + free(hquery); + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + hquery->callback = callback; + hquery->arg = arg; + hquery->remaining_lookups = channel->lookups; + hquery->timeouts = 0; + + /* Start performing lookups according to channel->lookups. */ + next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */); +} + +static void next_lookup(struct host_query *hquery, int status_code) +{ + const char *p; + struct hostent *host; + int status = status_code; + + for (p = hquery->remaining_lookups; *p; p++) + { + switch (*p) + { + case 'b': + /* DNS lookup */ + hquery->remaining_lookups = p + 1; + if ((hquery->want_family == AF_INET6) || + (hquery->want_family == AF_UNSPEC)) { + /* if inet6 or unspec, start out with AAAA */ + hquery->sent_family = AF_INET6; + ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, + host_callback, hquery); + } + else { + hquery->sent_family = AF_INET; + ares_search(hquery->channel, hquery->name, C_IN, T_A, + host_callback, hquery); + } + return; + + case 'f': + /* Host file lookup */ + status = file_lookup(hquery->name, hquery->want_family, &host); + + /* this status check below previously checked for !ARES_ENOTFOUND, + but we should not assume that this single error code is the one + that can occur, as that is in fact no longer the case */ + if (status == ARES_SUCCESS) + { + end_hquery(hquery, status, host); + return; + } + status = status_code; /* Use original status code */ + break; + } + } + end_hquery(hquery, status, NULL); +} + +static void host_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + struct host_query *hquery = (struct host_query *) arg; + ares_channel channel = hquery->channel; + struct hostent *host = NULL; + + hquery->timeouts += timeouts; + if (status == ARES_SUCCESS) + { + if (hquery->sent_family == AF_INET) + { + status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL); + if (host && channel->nsort) + sort_addresses(host, channel->sortlist, channel->nsort); + } + else if (hquery->sent_family == AF_INET6) + { + status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL); + if ((status == ARES_ENODATA || status == ARES_EBADRESP) && + hquery->want_family == AF_UNSPEC) { + /* The query returned something but either there were no AAAA + records (e.g. just CNAME) or the response was malformed. Try + looking up A instead. */ + hquery->sent_family = AF_INET; + ares_search(hquery->channel, hquery->name, C_IN, T_A, + host_callback, hquery); + return; + } + if (host && channel->nsort) + sort6_addresses(host, channel->sortlist, channel->nsort); + } + end_hquery(hquery, status, host); + } + else if ((status == ARES_ENODATA || status == ARES_EBADRESP || + status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 && + hquery->want_family == AF_UNSPEC)) + { + /* The AAAA query yielded no useful result. Now look up an A instead. */ + hquery->sent_family = AF_INET; + ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, + hquery); + } + else if (status == ARES_EDESTRUCTION) + end_hquery(hquery, status, NULL); + else + next_lookup(hquery, status); +} + +static void end_hquery(struct host_query *hquery, int status, + struct hostent *host) +{ + hquery->callback(hquery->arg, status, hquery->timeouts, host); + if (host) + ares_free_hostent(host); + free(hquery->name); + free(hquery); +} + +/* If the name looks like an IP address, fake up a host entry, end the + * query immediately, and return true. Otherwise return false. + */ +static int fake_hostent(const char *name, int family, + ares_host_callback callback, void *arg) +{ + struct hostent hostent; + char *aliases[1] = { NULL }; + char *addrs[2]; + int result = 0; + struct in_addr in; + struct ares_in6_addr in6; + + if (family == AF_INET || family == AF_INET6) + { + /* It only looks like an IP address if it's all numbers and dots. */ + int numdots = 0, valid = 1; + const char *p; + for (p = name; *p; p++) + { + if (!ISDIGIT(*p) && *p != '.') { + valid = 0; + break; + } else if (*p == '.') { + numdots++; + } + } + + /* if we don't have 3 dots, it is illegal + * (although inet_addr doesn't think so). + */ + if (numdots != 3 || !valid) + result = 0; + else + result = ((in.s_addr = inet_addr(name)) == INADDR_NONE ? 0 : 1); + + if (result) + family = AF_INET; + } + if (family == AF_INET6) + result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1); + + if (!result) + return 0; + + if (family == AF_INET) + { + hostent.h_length = (int)sizeof(struct in_addr); + addrs[0] = (char *)∈ + } + else if (family == AF_INET6) + { + hostent.h_length = (int)sizeof(struct ares_in6_addr); + addrs[0] = (char *)&in6; + } + /* Duplicate the name, to avoid a constness violation. */ + hostent.h_name = strdup(name); + if (!hostent.h_name) + { + callback(arg, ARES_ENOMEM, 0, NULL); + return 1; + } + + /* Fill in the rest of the host structure and terminate the query. */ + addrs[1] = NULL; + hostent.h_aliases = aliases; + hostent.h_addrtype = family; + hostent.h_addr_list = addrs; + callback(arg, ARES_SUCCESS, 0, &hostent); + + free((char *)(hostent.h_name)); + return 1; +} + +/* This is an API method */ +int ares_gethostbyname_file(ares_channel channel, const char *name, + int family, struct hostent **host) +{ + int result; + + /* We only take the channel to ensure that ares_init() been called. */ + if(channel == NULL) + { + /* Anything will do, really. This seems fine, and is consistent with + other error cases. */ + *host = NULL; + return ARES_ENOTFOUND; + } + + /* Just chain to the internal implementation we use here; it's exactly + * what we want. + */ + result = file_lookup(name, family, host); + if(result != ARES_SUCCESS) + { + /* We guarantee a NULL hostent on failure. */ + *host = NULL; + } + return result; +} + +static int file_lookup(const char *name, int family, struct hostent **host) +{ + FILE *fp; + char **alias; + int status; + int error; + +#ifdef WIN32 + char PATH_HOSTS[MAX_PATH]; + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hkeyHosts) == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, + &dwLength); + ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else if (platform == WIN_9X) + GetWindowsDirectory(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); + +#elif defined(WATT32) + extern const char *_w32_GetHostsFile (void); + const char *PATH_HOSTS = _w32_GetHostsFile(); + + if (!PATH_HOSTS) + return ARES_ENOTFOUND; +#endif + + fp = fopen(PATH_HOSTS, "r"); + if (!fp) + { + error = ERRNO; + switch(error) + { + case ENOENT: + case ESRCH: + return ARES_ENOTFOUND; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + PATH_HOSTS)); + *host = NULL; + return ARES_EFILE; + } + } + while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) + { + if (strcasecmp((*host)->h_name, name) == 0) + break; + for (alias = (*host)->h_aliases; *alias; alias++) + { + if (strcasecmp(*alias, name) == 0) + break; + } + if (*alias) + break; + ares_free_hostent(*host); + } + fclose(fp); + if (status == ARES_EOF) + status = ARES_ENOTFOUND; + if (status != ARES_SUCCESS) + *host = NULL; + return status; +} + +static void sort_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort) +{ + struct in_addr a1, a2; + int i1, i2, ind1, ind2; + + /* This is a simple insertion sort, not optimized at all. i1 walks + * through the address list, with the loop invariant that everything + * to the left of i1 is sorted. In the loop body, the value at i1 is moved + * back through the list (via i2) until it is in sorted order. + */ + for (i1 = 0; host->h_addr_list[i1]; i1++) + { + memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr)); + ind1 = get_address_index(&a1, sortlist, nsort); + for (i2 = i1 - 1; i2 >= 0; i2--) + { + memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr)); + ind2 = get_address_index(&a2, sortlist, nsort); + if (ind2 <= ind1) + break; + memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr)); + } + memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr)); + } +} + +/* Find the first entry in sortlist which matches addr. Return nsort + * if none of them match. + */ +static int get_address_index(const struct in_addr *addr, + const struct apattern *sortlist, + int nsort) +{ + int i; + + for (i = 0; i < nsort; i++) + { + if (sortlist[i].family != AF_INET) + continue; + if (sortlist[i].type == PATTERN_MASK) + { + if ((addr->s_addr & sortlist[i].mask.addr4.s_addr) + == sortlist[i].addrV4.s_addr) + break; + } + else + { + if (!ares_bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr, + sortlist[i].mask.bits)) + break; + } + } + return i; +} + +static void sort6_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort) +{ + struct ares_in6_addr a1, a2; + int i1, i2, ind1, ind2; + + /* This is a simple insertion sort, not optimized at all. i1 walks + * through the address list, with the loop invariant that everything + * to the left of i1 is sorted. In the loop body, the value at i1 is moved + * back through the list (via i2) until it is in sorted order. + */ + for (i1 = 0; host->h_addr_list[i1]; i1++) + { + memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr)); + ind1 = get6_address_index(&a1, sortlist, nsort); + for (i2 = i1 - 1; i2 >= 0; i2--) + { + memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr)); + ind2 = get6_address_index(&a2, sortlist, nsort); + if (ind2 <= ind1) + break; + memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr)); + } + memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr)); + } +} + +/* Find the first entry in sortlist which matches addr. Return nsort + * if none of them match. + */ +static int get6_address_index(const struct ares_in6_addr *addr, + const struct apattern *sortlist, + int nsort) +{ + int i; + + for (i = 0; i < nsort; i++) + { + if (sortlist[i].family != AF_INET6) + continue; + if (!ares_bitncmp(addr, + &sortlist[i].addrV6, + sortlist[i].mask.bits)) + break; + } + return i; +} diff --git a/ares_gethostbyname.pdf b/ares_gethostbyname.pdf new file mode 100644 index 0000000..1172e2f Binary files /dev/null and b/ares_gethostbyname.pdf differ diff --git a/ares_gethostbyname_file.3 b/ares_gethostbyname_file.3 new file mode 100644 index 0000000..8f59b41 --- /dev/null +++ b/ares_gethostbyname_file.3 @@ -0,0 +1,83 @@ +.\" +.\" 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. +.\" +.TH ARES_GETHOSTBYNAME 3 "25 July 1998" +.SH NAME +ares_gethostbyname_file \- Lookup a name in the system's hosts file +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIfamily\fP, struct hostent **host) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyname_file +function performs a host lookup by name against the system's hosts file (or equivalent local hostname database). +The +.IR channel +parameter is required, but no asynchronous queries are performed. Instead, the +lookup is done via the same mechanism used to perform 'f' lookups +(see the +.I lookups +options field in \fIares_init_options(3)\fP). +The parameter +.I name +gives the hostname as a NUL-terminated C string, and +.I family +gives the desired type of address for the resulting host entry. +.PP +The return value indicates whether the query succeeded and, if not, how it +failed. It may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully and +.I host +now points to the result (and must be freed with \fIares_free_hostent(3)\fP). +.TP 19 +.B ARES_ENOTFOUND +The hostname +.I name +was not found. +.TP 19 +.B ARES_EFILE +There was a file I/O error while performing the lookup. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.PP +On successful completion of the query, the pointer pointed to by +.I host +points to a +.B struct hostent +containing the address of the host returned by the lookup. The user must +free the memory pointed to by +.IR host +when finished with it by calling \fIares_free_hostent(3)\fP. If the lookup did +not complete successfully, +.I host +will be +.BR NULL . +.SH AVAILABILITY +Added in c-ares 1.5.4 +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3), +.BR ares_init_options (3) +.SH AUTHOR +Brad Spencer +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_gethostbyname_file.pdf b/ares_gethostbyname_file.pdf new file mode 100644 index 0000000..b8f15aa Binary files /dev/null and b/ares_gethostbyname_file.pdf differ diff --git a/ares_getnameinfo.3 b/ares_getnameinfo.3 new file mode 100644 index 0000000..7e4990c --- /dev/null +++ b/ares_getnameinfo.3 @@ -0,0 +1,149 @@ +.\" +.\" Copyright 2005 by Dominick Meglio. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETNAMEINFO 3 "1 May 2009" +.SH NAME +ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP) +.PP +.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP, +.B ares_socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_getnameinfo +function is defined for protocol-independent address translation. The function +is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will +translate the address either by executing a host query on the name service channel +identified by +.IR channel +or it will attempt to resolve it locally if possible. +The parameters +.I sa +and +.I len +give the address as a sockaddr structure, and +.I flags +gives the options that the function will use. Valid flags are listed below: +.TP 19 +.B ARES_NI_NOFQDN +Only the nodename portion of the FQDN is returned for local hosts. +.TP 19 +.B ARES_NI_NUMERICHOST +The numeric form of the hostname is returned rather than the name. +.TP 19 +.B ARES_NI_NAMEREQD +An error is returned if the hostname cannot be found in the DNS. +.TP 19 +.B ARES_NI_NUMERICSERV +The numeric form of the service is returned rather than the name. +.TP 19 +.B ARES_NI_TCP +The service name is to be looked up for the TCP protocol. +.TP 19 +.B ARES_NI_UDP +The service name is to be looked up for the UDP protocol. +.TP 19 +.B ARES_NI_SCTP +The service name is to be looked up for the SCTP protocol. +.TP 19 +.B ARES_NI_DCCP +The service name is to be looked up for the DCCP protocol. +.TP 19 +.B ARES_NI_NUMERICSCOPE +The numeric form of the scope ID is returned rather than the name. +.TP 19 +.B ARES_NI_LOOKUPHOST +A hostname lookup is being requested. +.TP 19 +.B ARES_NI_LOOKUPSERVICE +A service name lookup is being requested. +.PP +When the query +is complete or has +failed, the ares library will invoke \fIcallback\fP. Completion or failure of +the query may happen immediately, or may happen during a later call to +\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_getnameinfo +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to look up addresses of type +.IR family . +.TP 19 +.B ARES_ENOTFOUND +The address +.I addr +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.TP 19 +.B ARES_EBADFLAGS +The +.I flags +parameter contains an illegal value. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I node +contains a string representing the hostname (assuming +.B ARES_NI_LOOKUPHOST +was specified). Additionally, +.I service +contains a string representing the service name (assuming +.B ARES_NI_LOOKUPSERVICE +was specified). +If the query did not complete successfully, or one of the values +was not requested, +.I node +or +.I service +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.BR ares_getaddrinfo (3) +.SH AUTHOR +Dominick Meglio +.br +Copyright 2005 by Dominick Meglio. diff --git a/ares_getnameinfo.c b/ares_getnameinfo.c new file mode 100644 index 0000000..82e261d --- /dev/null +++ b/ares_getnameinfo.c @@ -0,0 +1,427 @@ + +/* Copyright 2005 by Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ +#include "ares_setup.h" + +#ifdef HAVE_GETSERVBYPORT_R +# if !defined(GETSERVBYPORT_R_ARGS) || \ + (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6) +# error "you MUST specifiy a valid number of arguments for getservbyport_r" +# endif +#endif + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_NET_IF_H +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#include +#include + +#include "ares.h" +#include "ares_ipv6.h" +#include "inet_ntop.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +struct nameinfo_query { + ares_nameinfo_callback callback; + void *arg; + union { + struct sockaddr_in addr4; + struct sockaddr_in6 addr6; + } addr; + int family; + int flags; + int timeouts; +}; + +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +#define IPBUFSIZ \ + (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE) +#else +#define IPBUFSIZ \ + (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) +#endif + +static void nameinfo_callback(void *arg, int status, int timeouts, + struct hostent *host); +static char *lookup_service(unsigned short port, int flags, + char *buf, size_t buflen); +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, + char *buf, size_t buflen); +#endif +static char *ares_striendstr(const char *s1, const char *s2); + +void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, + ares_socklen_t salen, + int flags, ares_nameinfo_callback callback, void *arg) +{ + struct sockaddr_in *addr = NULL; + struct sockaddr_in6 *addr6 = NULL; + struct nameinfo_query *niquery; + unsigned int port = 0; + + /* Validate socket address family and length */ + if ((sa->sa_family == AF_INET) && + (salen == sizeof(struct sockaddr_in))) + { + addr = (struct sockaddr_in *)sa; + port = addr->sin_port; + } + else if ((sa->sa_family == AF_INET6) && + (salen == sizeof(struct sockaddr_in6))) + { + addr6 = (struct sockaddr_in6 *)sa; + port = addr6->sin6_port; + } + else + { + callback(arg, ARES_ENOTIMP, 0, NULL, NULL); + return; + } + + /* If neither, assume they want a host */ + if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) + flags |= ARES_NI_LOOKUPHOST; + + /* All they want is a service, no need for DNS */ + if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) + { + char buf[33], *service; + + service = lookup_service((unsigned short)(port & 0xffff), + flags, buf, sizeof(buf)); + callback(arg, ARES_SUCCESS, 0, NULL, service); + return; + } + + /* They want a host lookup */ + if ((flags & ARES_NI_LOOKUPHOST)) + { + /* A numeric host can be handled without DNS */ + if ((flags & ARES_NI_NUMERICHOST)) + { + char ipbuf[IPBUFSIZ]; + char srvbuf[33]; + char *service = NULL; + ipbuf[0] = 0; + + /* Specifying not to lookup a host, but then saying a host + * is required has to be illegal. + */ + if (flags & ARES_NI_NAMEREQD) + { + callback(arg, ARES_EBADFLAGS, 0, NULL, NULL); + return; + } + if (salen == sizeof(struct sockaddr_in6)) + { + ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ); + /* If the system supports scope IDs, use it */ +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf)); +#endif + } + else + { + ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ); + } + /* They also want a service */ + if (flags & ARES_NI_LOOKUPSERVICE) + service = lookup_service((unsigned short)(port & 0xffff), + flags, srvbuf, sizeof(srvbuf)); + callback(arg, ARES_SUCCESS, 0, ipbuf, service); + return; + } + /* This is where a DNS lookup becomes necessary */ + else + { + niquery = malloc(sizeof(struct nameinfo_query)); + if (!niquery) + { + callback(arg, ARES_ENOMEM, 0, NULL, NULL); + return; + } + niquery->callback = callback; + niquery->arg = arg; + niquery->flags = flags; + niquery->timeouts = 0; + if (sa->sa_family == AF_INET) + { + niquery->family = AF_INET; + memcpy(&niquery->addr.addr4, addr, sizeof(struct in_addr)); + ares_gethostbyaddr(channel, &addr->sin_addr, + sizeof(struct in_addr), AF_INET, + nameinfo_callback, niquery); + } + else + { + niquery->family = AF_INET6; + memcpy(&niquery->addr.addr6, addr6, sizeof(struct ares_in6_addr)); + ares_gethostbyaddr(channel, &addr6->sin6_addr, + sizeof(struct ares_in6_addr), AF_INET6, + nameinfo_callback, niquery); + } + } + } +} + +static void nameinfo_callback(void *arg, int status, int timeouts, + struct hostent *host) +{ + struct nameinfo_query *niquery = (struct nameinfo_query *) arg; + char srvbuf[33]; + char *service = NULL; + + niquery->timeouts += timeouts; + if (status == ARES_SUCCESS) + { + /* They want a service too */ + if (niquery->flags & ARES_NI_LOOKUPSERVICE) + { + if (niquery->family == AF_INET) + service = lookup_service(niquery->addr.addr4.sin_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + else + service = lookup_service(niquery->addr.addr6.sin6_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + } + /* NOFQDN means we have to strip off the domain name portion. We do + this by determining our own domain name, then searching the string + for this domain name and removing it. + */ +#ifdef HAVE_GETHOSTNAME + if (niquery->flags & ARES_NI_NOFQDN) + { + char buf[255]; + char *domain; + gethostname(buf, 255); + if ((domain = strchr(buf, '.')) != NULL) + { + char *end = ares_striendstr(host->h_name, domain); + if (end) + *end = 0; + } + } +#endif + niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, + (char *)(host->h_name), + service); + free(niquery); + return; + } + /* We couldn't find the host, but it's OK, we can use the IP */ + else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) + { + char ipbuf[IPBUFSIZ]; + if (niquery->family == AF_INET) + ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, + IPBUFSIZ); + else + { + ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, + IPBUFSIZ); +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, + sizeof(ipbuf)); +#endif + } + /* They want a service too */ + if (niquery->flags & ARES_NI_LOOKUPSERVICE) + { + if (niquery->family == AF_INET) + service = lookup_service(niquery->addr.addr4.sin_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + else + service = lookup_service(niquery->addr.addr6.sin6_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + } + niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf, + service); + free(niquery); + return; + } + niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL); + free(niquery); +} + +static char *lookup_service(unsigned short port, int flags, + char *buf, size_t buflen) +{ + const char *proto; + struct servent *sep; +#ifdef HAVE_GETSERVBYPORT_R + struct servent se; +#endif + char tmpbuf[4096]; + + if (port) + { + if (flags & ARES_NI_NUMERICSERV) + sep = NULL; + else + { + if (flags & ARES_NI_UDP) + proto = "udp"; + else if (flags & ARES_NI_SCTP) + proto = "sctp"; + else if (flags & ARES_NI_DCCP) + proto = "dccp"; + else + proto = "tcp"; +#ifdef HAVE_GETSERVBYPORT_R + sep = &se; + memset(tmpbuf, 0, sizeof(tmpbuf)); +#if GETSERVBYPORT_R_ARGS == 6 + if (getservbyport_r(port, proto, &se, (void *)tmpbuf, + sizeof(tmpbuf), &sep) != 0) + sep = NULL; +#elif GETSERVBYPORT_R_ARGS == 5 + sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, + sizeof(tmpbuf)); +#elif GETSERVBYPORT_R_ARGS == 4 + if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) + sep = NULL; +#else + /* Lets just hope the OS uses TLS! */ + sep = getservbyport(port, proto); +#endif +#else + /* Lets just hope the OS uses TLS! */ +#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) + sep = getservbyport(port, (char*)proto); +#else + sep = getservbyport(port, proto); +#endif +#endif + } + if (sep && sep->s_name) + /* get service name */ + strcpy(tmpbuf, sep->s_name); + else + /* get port as a string */ + sprintf(tmpbuf, "%u", (unsigned int)ntohs(port)); + if (strlen(tmpbuf) < buflen) + /* return it if buffer big enough */ + strcpy(buf, tmpbuf); + else + /* avoid reusing previous one */ + buf[0] = '\0'; + return buf; + } + buf[0] = '\0'; + return NULL; +} + +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, + char *buf, size_t buflen) +{ +#ifdef HAVE_IF_INDEXTONAME + int is_ll, is_mcll; +#endif + static const char fmt_u[] = "%u"; + static const char fmt_lu[] = "%lu"; + char tmpbuf[IF_NAMESIZE + 2]; + size_t bufl; + const char *fmt = (sizeof(addr6->sin6_scope_id) > sizeof(unsigned int))? + fmt_lu:fmt_u; + + tmpbuf[0] = '%'; + +#ifdef HAVE_IF_INDEXTONAME + is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr); + is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr); + if ((flags & ARES_NI_NUMERICSCOPE) || + (!is_ll && !is_mcll)) + { + sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); + } + else + { + if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) + sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); + } +#else + sprintf(&tmpbuf[1], fmt, addr6->sin6_scope_id); + (void) flags; +#endif + tmpbuf[IF_NAMESIZE + 1] = '\0'; + bufl = strlen(buf); + + if(bufl + strlen(tmpbuf) < buflen) + /* only append the scopeid string if it fits in the target buffer */ + strcpy(&buf[bufl], tmpbuf); +} +#endif + +/* Determines if s1 ends with the string in s2 (case-insensitive) */ +static char *ares_striendstr(const char *s1, const char *s2) +{ + const char *c1, *c2, *c1_begin; + int lo1, lo2; + size_t s1_len = strlen(s1), s2_len = strlen(s2); + + /* If the substr is longer than the full str, it can't match */ + if (s2_len > s1_len) + return NULL; + + /* Jump to the end of s1 minus the length of s2 */ + c1_begin = s1+s1_len-s2_len; + c1 = (const char *)c1_begin; + c2 = s2; + while (c2 < s2+s2_len) + { + lo1 = TOLOWER(*c1); + lo2 = TOLOWER(*c2); + if (lo1 != lo2) + return NULL; + else + { + c1++; + c2++; + } + } + if (c2 == c1 && c2 == NULL) + return (char *)c1_begin; + return NULL; +} diff --git a/ares_getnameinfo.pdf b/ares_getnameinfo.pdf new file mode 100644 index 0000000..1633a21 Binary files /dev/null and b/ares_getnameinfo.pdf differ diff --git a/ares_getopt.c b/ares_getopt.c new file mode 100644 index 0000000..1e02d08 --- /dev/null +++ b/ares_getopt.c @@ -0,0 +1,122 @@ +/* + * Original file name getopt.c Initial import into the c-ares source tree + * on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with + * the modified BSD license, BSD license without the advertising clause. + * + */ + +/* + * getopt.c -- + * + * Standard UNIX getopt function. Code is from BSD. + * + * Copyright (c) 1987-2001 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * A. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * B. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * C. Neither the names of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS + * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* #if !defined(lint) + * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94"; + * #endif + */ + +#include +#include +#include +#include "ares_getopt.h" + +int opterr = 1, /* if error message should be printed */ + optind = 1; /* index into parent argv vector */ +int optopt = 0; /* character checked for validity */ +static int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG (char *)"" + +/* + * ares_getopt -- + * Parse argc/argv argument vector. + */ +int +ares_getopt(int nargc, char * const nargv[], const char *ostr) +{ + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (EOF); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (EOF); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + (oli = strchr(ostr, optopt)) == NULL) { + /* + * if the user didn't specify '-' as an option, + * assume it means EOF. + */ + if (optopt == (int)'-') + return (EOF); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __FILE__, optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __FILE__, optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} diff --git a/ares_getopt.h b/ares_getopt.h new file mode 100644 index 0000000..63acb3b --- /dev/null +++ b/ares_getopt.h @@ -0,0 +1,53 @@ +#ifndef ARES_GETOPT_H +#define ARES_GETOPT_H + +/* + * Copyright (c) 1987-2001 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * A. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * B. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * C. Neither the names of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS + * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + + +int ares_getopt(int nargc, char * const nargv[], const char *ostr); + +#undef optarg +#undef optind +#undef opterr +#undef optopt +#undef optreset + +#define optarg ares_optarg +#define optind ares_optind +#define opterr ares_opterr +#define optopt ares_optopt +#define optreset ares_optreset + +extern char *optarg; +extern int optind; +extern int opterr; +extern int optopt; + +#endif /* ARES_GETOPT_H */ diff --git a/ares_getsock.3 b/ares_getsock.3 new file mode 100644 index 0000000..1373291 --- /dev/null +++ b/ares_getsock.3 @@ -0,0 +1,57 @@ +.\" +.\" Copyright 1998 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETSOCK 3 "11 March 2010" +.SH NAME +ares_getsock \- get socket descriptors to wait on +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_getsock(ares_channel \fIchannel\fP, ares_socket_t *\fIsocks\fP, +.B int \fInumsocks\fP); +.fi +.SH DESCRIPTION +The +.B ares_getsock +function retrieves the set of socket descriptors which the calling +application should wait on for reading and/or writing for the +processing of name service queries pending on the name service channel +identified by +.IR channel . +Socket descriptors will be set in the socket descriptor array pointed to by +\fIsocks\fP. +\fInumsocks\fP is the size of the given array in number of ints. + +This function can only return information about up to 16 sockets. If more are +in use (however unlikely that is), they are simply not reported back. +.SH RETURN VALUES +\fBares_getsock\fP returns a bitmask for what actions to wait for on the +different sockets. The ares.h header file provides these convenience macros to +extract the information appropriately: + +.nf +#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about + this many sockets */ +#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) +#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ + ARES_GETSOCK_MAXNUM))) +.fi +.SH NOTES +This function was added in c-ares 1.3.1 +.SH SEE ALSO +.BR ares_timeout (3), +.BR ares_fds (3), +.BR ares_process (3) diff --git a/ares_getsock.c b/ares_getsock.c new file mode 100644 index 0000000..72e467f --- /dev/null +++ b/ares_getsock.c @@ -0,0 +1,72 @@ + +/* Copyright (C) 2005 - 2010, Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#include "ares.h" +#include "ares_private.h" + +int ares_getsock(ares_channel channel, + ares_socket_t *socks, + int numsocks) /* size of the 'socks' array */ +{ + struct server_state *server; + int i; + int sockindex=0; + int bitmap = 0; + unsigned int setbits = 0xffffffff; + + /* Are there any active queries? */ + int active_queries = !ares__is_list_empty(&(channel->all_queries)); + + for (i = 0; + (i < channel->nservers) && (sockindex < ARES_GETSOCK_MAXNUM); + i++) + { + server = &channel->servers[i]; + /* We only need to register interest in UDP sockets if we have + * outstanding queries. + */ + if (active_queries && server->udp_socket != ARES_SOCKET_BAD) + { + if(sockindex >= numsocks) + break; + socks[sockindex] = server->udp_socket; + bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); + sockindex++; + } + /* We always register for TCP events, because we want to know + * when the other side closes the connection, so we don't waste + * time trying to use a broken connection. + */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + if(sockindex >= numsocks) + break; + socks[sockindex] = server->tcp_socket; + bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); + + if (server->qhead && active_queries) + /* then the tcp socket is also writable! */ + bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex); + + sockindex++; + } + } + return bitmap; +} diff --git a/ares_getsock.pdf b/ares_getsock.pdf new file mode 100644 index 0000000..2154246 Binary files /dev/null and b/ares_getsock.pdf differ diff --git a/ares_init.3 b/ares_init.3 new file mode 100644 index 0000000..fb25306 --- /dev/null +++ b/ares_init.3 @@ -0,0 +1,223 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_INIT 3 "5 March 2010" +.SH NAME +ares_init, ares_init_options \- Initialize a resolver channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_init(ares_channel *\fIchannelptr\fP) +.B int ares_init_options(ares_channel *\fIchannelptr\fP, +.B struct ares_options *\fIoptions\fP, int \fIoptmask\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +The \fBares_init\fP function initializes a communications channel for name +service lookups. If it returns successfully, \fBares_init\fP will set the +variable pointed to by \fIchannelptr\fP to a handle used to identify the name +service channel. The caller should invoke +.BR ares_destroy (3) +on the handle when the channel is no longer needed. +.PP +The \fBares_init_options\fP function also initializes a name service channel, +with additional options useful for applications requiring more control over +name service configuration. The \fIoptmask\fP parameter specifies which fields +in the structure pointed to by \fIoptions\fP are set, as follows: +.TP 18 +.B ARES_OPT_FLAGS +.B int \fIflags\fP; +.br +Flags controlling the behavior of the resolver. See below for a +description of possible flag values. +.TP 18 +.B ARES_OPT_TIMEOUT +.B int \fItimeout\fP; +.br +The number of seconds each name server is given to respond to a query on the +first try. (After the first try, the timeout algorithm becomes more +complicated, but scales linearly with the value of \fItimeout\fP.) The +default is five seconds. This option is being deprecated by +\fIARES_OPT_TIMEOUTMS\fP starting in c-ares 1.5.2. +.TP 18 +.B ARES_OPT_TIMEOUTMS +.B int \fItimeout\fP; +.br +The number of milliseconds each name server is given to respond to a query on +the first try. (After the first try, the timeout algorithm becomes more +complicated, but scales linearly with the value of \fItimeout\fP.) The +default is five seconds. Note that this option is specified with the same +struct field as the former \fIARES_OPT_TIMEOUT\fP, it is but the option bits +that tell c-ares how to interpret the number. This option was added in c-ares +1.5.2. +.TP 18 +.B ARES_OPT_TRIES +.B int \fItries\fP; +.br +The number of tries the resolver will try contacting each name server +before giving up. The default is four tries. +.TP 18 +.B ARES_OPT_NDOTS +.B int \fIndots\fP; +.br +The number of dots which must be present in a domain name for it to be +queried for "as is" prior to querying for it with the default domain +extensions appended. The default value is 1 unless set otherwise by +resolv.conf or the RES_OPTIONS environment variable. +.TP 18 +.B ARES_OPT_PORT +.B unsigned short \fIport\fP; +.br +The port to use for queries (both TCP and UDP), in network byte order. +The default value is 53 (in network byte order), the standard name +service port. +.TP 18 +.B ARES_OPT_SERVERS +.B struct in_addr *\fIservers\fP; +.br +.B int \fInservers\fP; +.br +The list of IPv4 servers to contact, instead of the servers specified in +resolv.conf or the local named. In order to allow specification of either +IPv4 or IPv6 name servers, the +.BR ares_set_servers(3) +function must be used instead. +.TP 18 +.B ARES_OPT_DOMAINS +.B char **\fIdomains\fP; +.br +.B int \fIndomains\fP; +.br +The domains to search, instead of the domains specified in resolv.conf +or the domain derived from the kernel hostname variable. +.TP 18 +.B ARES_OPT_LOOKUPS +.B char *\fIlookups\fP; +.br +The lookups to perform for host queries. +.I lookups +should be set to a string of the characters "b" or "f", where "b" +indicates a DNS lookup and "f" indicates a lookup in the hosts file. +.TP 18 +.B ARES_OPT_SOCK_STATE_CB +.B void (*\fIsock_state_cb\fP)(void *data, int s, int read, int write); +.br +.B void *\fIsock_state_cb_data\fP; +.br +A callback function to be invoked when a socket changes state. +.I s +will be passed the socket whose state has changed; +.I read +will be set to true if the socket should listen for read events, and +.I write +will be set to true if the socket should listen for write events. +The value of +.I sock_state_cb_data +will be passed as the +.I data +argument. +.PP +The +.I flags +field should be the bitwise or of some subset of the following values: +.TP 23 +.B ARES_FLAG_USEVC +Always use TCP queries (the "virtual circuit") instead of UDP +queries. Normally, TCP is only used if a UDP query yields a truncated +result. +.TP 23 +.B ARES_FLAG_PRIMARY +Only query the first server in the list of servers to query. +.TP 23 +.B ARES_FLAG_IGNTC +If a truncated response to a UDP query is received, do not fall back +to TCP; simply continue on with the truncated response. +.TP 23 +.B ARES_FLAG_NORECURSE +Do not set the "recursion desired" bit on outgoing queries, so that the name +server being contacted will not try to fetch the answer from other servers if +it doesn't know the answer locally. Be aware that ares will not do the +recursion for you. Recursion must be handled by the application calling ares +if \fIARES_FLAG_NORECURSE\fP is set. +.TP 23 +.B ARES_FLAG_STAYOPEN +Do not close communications sockets when the number of active queries +drops to zero. +.TP 23 +.B ARES_FLAG_NOSEARCH +Do not use the default search domains; only query hostnames as-is or +as aliases. +.TP 23 +.B ARES_FLAG_NOALIASES +Do not honor the HOSTALIASES environment variable, which normally +specifies a file of hostname translations. +.TP 23 +.B ARES_FLAG_NOCHECKRESP +Do not discard responses with the SERVFAIL, NOTIMP, or REFUSED +response code or responses whose questions don't match the questions +in the request. Primarily useful for writing clients which might be +used to test or debug name servers. +.SH RETURN VALUES +.I ares_init +or +.I ares_init_options +can return any of the following values: +.TP 14 +.B ARES_SUCCESS +Initialization succeeded. +.TP 14 +.B ARES_EFILE +A configuration file could not be read. +.TP 14 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 14 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.SH NOTES +When initializing from +.B /etc/resolv.conf, +.BR ares_init (3) +reads the +.I domain +and +.I search +directives to allow lookups of short names relative to the domains +specified. The +.I domain +and +.I search +directives override one another. If more that one instance of either +.I domain +or +.I search +directives is specified, the last occurence wins. For more information, +please see the +.BR resolv.conf (5) +manual page. +.SH SEE ALSO +.BR ares_destroy(3), +.BR ares_dup(3), +.BR ares_library_init(3), +.BR ares_set_servers(3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2010 by Daniel Stenberg. diff --git a/ares_init.c b/ares_init.c new file mode 100644 index 0000000..44d4cf9 --- /dev/null +++ b/ares_init.c @@ -0,0 +1,1806 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2007-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_SYS_TIME_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETDB_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef ANDROID +#include +#endif + +#include "ares.h" +#include "inet_net_pton.h" +#include "ares_library_init.h" +#include "ares_nowarn.h" +#include "ares_platform.h" +#include "inet_ntop.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 /* Redefined in MingW/MSVC headers */ +#endif + +static int init_by_options(ares_channel channel, const struct ares_options *options, + int optmask); +static int init_by_environment(ares_channel channel); +static int init_by_resolv_conf(ares_channel channel); +static int init_by_defaults(ares_channel channel); + +#ifndef WATT32 +static int config_nameserver(struct server_state **servers, int *nservers, + char *str); +#endif +static int set_search(ares_channel channel, const char *str); +static int set_options(ares_channel channel, const char *str); +static const char *try_option(const char *p, const char *q, const char *opt); +static int init_id_key(rc4_key* key,int key_data_len); + +#if !defined(WIN32) && !defined(WATT32) +static int sortlist_alloc(struct apattern **sortlist, int *nsort, struct apattern *pat); +static int ip_addr(const char *s, ssize_t len, struct in_addr *addr); +static void natural_mask(struct apattern *pat); +static int config_domain(ares_channel channel, char *str); +static int config_lookup(ares_channel channel, const char *str, + const char *bindch, const char *filech); +static int config_sortlist(struct apattern **sortlist, int *nsort, + const char *str); +static char *try_config(char *s, const char *opt, char scc); +#endif + +#define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \ + x->nservers > -1 && \ + x->ndomains > -1 && \ + x->ndots > -1 && x->timeout > -1 && \ + x->tries > -1) + +int ares_init(ares_channel *channelptr) +{ + return ares_init_options(channelptr, NULL, 0); +} + +int ares_init_options(ares_channel *channelptr, struct ares_options *options, + int optmask) +{ + ares_channel channel; + int i; + int status = ARES_SUCCESS; + struct timeval now; + +#ifdef CURLDEBUG + const char *env = getenv("CARES_MEMDEBUG"); + + if (env) + curl_memdebug(env); + env = getenv("CARES_MEMLIMIT"); + if (env) { + char *endptr; + long num = strtol(env, &endptr, 10); + if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) + curl_memlimit(num); + } +#endif + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; + + channel = malloc(sizeof(struct ares_channeldata)); + if (!channel) { + *channelptr = NULL; + return ARES_ENOMEM; + } + + now = ares__tvnow(); + + /* Set everything to distinguished values so we know they haven't + * been set yet. + */ + channel->flags = -1; + channel->timeout = -1; + channel->tries = -1; + channel->ndots = -1; + channel->rotate = -1; + channel->udp_port = -1; + channel->tcp_port = -1; + channel->socket_send_buffer_size = -1; + channel->socket_receive_buffer_size = -1; + channel->nservers = -1; + channel->ndomains = -1; + channel->nsort = -1; + channel->tcp_connection_generation = 0; + channel->lookups = NULL; + channel->domains = NULL; + channel->sortlist = NULL; + channel->servers = NULL; + channel->sock_state_cb = NULL; + channel->sock_state_cb_data = NULL; + channel->sock_create_cb = NULL; + channel->sock_create_cb_data = NULL; + + channel->last_server = 0; + channel->last_timeout_processed = (time_t)now.tv_sec; + + memset(&channel->local_dev_name, 0, sizeof(channel->local_dev_name)); + channel->local_ip4 = 0; + memset(&channel->local_ip6, 0, sizeof(channel->local_ip6)); + + /* Initialize our lists of queries */ + ares__init_list_head(&(channel->all_queries)); + for (i = 0; i < ARES_QID_TABLE_SIZE; i++) + { + ares__init_list_head(&(channel->queries_by_qid[i])); + } + for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) + { + ares__init_list_head(&(channel->queries_by_timeout[i])); + } + + /* Initialize configuration by each of the four sources, from highest + * precedence to lowest. + */ + + if (status == ARES_SUCCESS) { + status = init_by_options(channel, options, optmask); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n", + ares_strerror(status))); + } + if (status == ARES_SUCCESS) { + status = init_by_environment(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n", + ares_strerror(status))); + } + if (status == ARES_SUCCESS) { + status = init_by_resolv_conf(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n", + ares_strerror(status))); + } + + /* + * No matter what failed or succeeded, seed defaults to provide + * useful behavior for things that we missed. + */ + status = init_by_defaults(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n", + ares_strerror(status))); + + /* Generate random key */ + + if (status == ARES_SUCCESS) { + status = init_id_key(&channel->id_key, ARES_ID_KEY_LEN); + if (status == ARES_SUCCESS) + channel->next_id = ares__generate_new_id(&channel->id_key); + else + DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n", + ares_strerror(status))); + } + + if (status != ARES_SUCCESS) + { + /* Something failed; clean up memory we may have allocated. */ + if (channel->servers) + free(channel->servers); + if (channel->domains) + { + for (i = 0; i < channel->ndomains; i++) + free(channel->domains[i]); + free(channel->domains); + } + if (channel->sortlist) + free(channel->sortlist); + if(channel->lookups) + free(channel->lookups); + free(channel); + return status; + } + + /* Trim to one server if ARES_FLAG_PRIMARY is set. */ + if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1) + channel->nservers = 1; + + ares__init_servers_state(channel); + + *channelptr = channel; + return ARES_SUCCESS; +} + +/* ares_dup() duplicates a channel handle with all its options and returns a + new channel handle */ +int ares_dup(ares_channel *dest, ares_channel src) +{ + struct ares_options opts; + struct ares_addr_node *servers; + int ipv6_nservers = 0; + int i, rc; + int optmask; + + *dest = NULL; /* in case of failure return NULL explicitly */ + + /* First get the options supported by the old ares_save_options() function, + which is most of them */ + rc = ares_save_options(src, &opts, &optmask); + if(rc) + return rc; + + /* Then create the new channel with those options */ + rc = ares_init_options(dest, &opts, optmask); + + /* destroy the options copy to not leak any memory */ + ares_destroy_options(&opts); + + if(rc) + return rc; + + /* Now clone the options that ares_save_options() doesn't support. */ + (*dest)->sock_create_cb = src->sock_create_cb; + (*dest)->sock_create_cb_data = src->sock_create_cb_data; + + strncpy((*dest)->local_dev_name, src->local_dev_name, sizeof(src->local_dev_name)); + (*dest)->local_ip4 = src->local_ip4; + memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6)); + + /* Full name server cloning required when not all are IPv4 */ + for (i = 0; i < src->nservers; i++) + { + if (src->servers[i].addr.family != AF_INET) { + ipv6_nservers++; + break; + } + } + if (ipv6_nservers) { + rc = ares_get_servers(src, &servers); + if (rc != ARES_SUCCESS) + return rc; + rc = ares_set_servers(*dest, servers); + ares_free_data(servers); + if (rc != ARES_SUCCESS) + return rc; + } + + return ARES_SUCCESS; /* everything went fine */ +} + +/* Save options from initialized channel */ +int ares_save_options(ares_channel channel, struct ares_options *options, + int *optmask) +{ + int i, j; + int ipv4_nservers = 0; + + /* Zero everything out */ + memset(options, 0, sizeof(struct ares_options)); + + if (!ARES_CONFIG_CHECK(channel)) + return ARES_ENODATA; + + /* Traditionally the optmask wasn't saved in the channel struct so it was + recreated here. ROTATE is the first option that has no struct field of + its own in the public config struct */ + (*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS| + ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB| + ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS| + ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS) | + (channel->optmask & ARES_OPT_ROTATE); + + /* Copy easy stuff */ + options->flags = channel->flags; + + /* We return full millisecond resolution but that's only because we don't + set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */ + options->timeout = channel->timeout; + options->tries = channel->tries; + options->ndots = channel->ndots; + options->udp_port = (unsigned short)channel->udp_port; + options->tcp_port = (unsigned short)channel->tcp_port; + options->sock_state_cb = channel->sock_state_cb; + options->sock_state_cb_data = channel->sock_state_cb_data; + + /* Copy IPv4 servers */ + if (channel->nservers) { + for (i = 0; i < channel->nservers; i++) + { + if (channel->servers[i].addr.family == AF_INET) + ipv4_nservers++; + } + if (ipv4_nservers) { + options->servers = malloc(ipv4_nservers * sizeof(struct in_addr)); + if (!options->servers) + return ARES_ENOMEM; + for (i = j = 0; i < channel->nservers; i++) + { + if (channel->servers[i].addr.family == AF_INET) + memcpy(&options->servers[j++], + &channel->servers[i].addr.addrV4, + sizeof(channel->servers[i].addr.addrV4)); + } + } + } + options->nservers = ipv4_nservers; + + /* copy domains */ + if (channel->ndomains) { + options->domains = malloc(channel->ndomains * sizeof(char *)); + if (!options->domains) + return ARES_ENOMEM; + + for (i = 0; i < channel->ndomains; i++) + { + options->ndomains = i; + options->domains[i] = strdup(channel->domains[i]); + if (!options->domains[i]) + return ARES_ENOMEM; + } + } + options->ndomains = channel->ndomains; + + /* copy lookups */ + if (channel->lookups) { + options->lookups = strdup(channel->lookups); + if (!options->lookups && channel->lookups) + return ARES_ENOMEM; + } + + /* copy sortlist */ + if (channel->nsort) { + options->sortlist = malloc(channel->nsort * sizeof(struct apattern)); + if (!options->sortlist) + return ARES_ENOMEM; + for (i = 0; i < channel->nsort; i++) + options->sortlist[i] = channel->sortlist[i]; + } + options->nsort = channel->nsort; + + return ARES_SUCCESS; +} + +static int init_by_options(ares_channel channel, + const struct ares_options *options, + int optmask) +{ + int i; + + /* Easy stuff. */ + if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1) + channel->flags = options->flags; + if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1) + channel->timeout = options->timeout; + else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1) + channel->timeout = options->timeout * 1000; + if ((optmask & ARES_OPT_TRIES) && channel->tries == -1) + channel->tries = options->tries; + if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1) + channel->ndots = options->ndots; + if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1) + channel->rotate = 1; + if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1) + channel->udp_port = options->udp_port; + if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1) + channel->tcp_port = options->tcp_port; + if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL) + { + channel->sock_state_cb = options->sock_state_cb; + channel->sock_state_cb_data = options->sock_state_cb_data; + } + if ((optmask & ARES_OPT_SOCK_SNDBUF) + && channel->socket_send_buffer_size == -1) + channel->socket_send_buffer_size = options->socket_send_buffer_size; + if ((optmask & ARES_OPT_SOCK_RCVBUF) + && channel->socket_receive_buffer_size == -1) + channel->socket_receive_buffer_size = options->socket_receive_buffer_size; + + /* Copy the IPv4 servers, if given. */ + if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1) + { + /* Avoid zero size allocations at any cost */ + if (options->nservers > 0) + { + channel->servers = + malloc(options->nservers * sizeof(struct server_state)); + if (!channel->servers) + return ARES_ENOMEM; + for (i = 0; i < options->nservers; i++) + { + channel->servers[i].addr.family = AF_INET; + memcpy(&channel->servers[i].addr.addrV4, + &options->servers[i], + sizeof(channel->servers[i].addr.addrV4)); + } + } + channel->nservers = options->nservers; + } + + /* Copy the domains, if given. Keep channel->ndomains consistent so + * we can clean up in case of error. + */ + if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1) + { + /* Avoid zero size allocations at any cost */ + if (options->ndomains > 0) + { + channel->domains = malloc(options->ndomains * sizeof(char *)); + if (!channel->domains) + return ARES_ENOMEM; + for (i = 0; i < options->ndomains; i++) + { + channel->ndomains = i; + channel->domains[i] = strdup(options->domains[i]); + if (!channel->domains[i]) + return ARES_ENOMEM; + } + } + channel->ndomains = options->ndomains; + } + + /* Set lookups, if given. */ + if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups) + { + channel->lookups = strdup(options->lookups); + if (!channel->lookups) + return ARES_ENOMEM; + } + + /* copy sortlist */ + if ((optmask & ARES_OPT_SORTLIST) && (channel->nsort == -1) && + (options->nsort>0)) { + channel->sortlist = malloc(options->nsort * sizeof(struct apattern)); + if (!channel->sortlist) + return ARES_ENOMEM; + for (i = 0; i < options->nsort; i++) + channel->sortlist[i] = options->sortlist[i]; + channel->nsort = options->nsort; + } + + channel->optmask = optmask; + + return ARES_SUCCESS; +} + +static int init_by_environment(ares_channel channel) +{ + const char *localdomain, *res_options; + int status; + + localdomain = getenv("LOCALDOMAIN"); + if (localdomain && channel->ndomains == -1) + { + status = set_search(channel, localdomain); + if (status != ARES_SUCCESS) + return status; + } + + res_options = getenv("RES_OPTIONS"); + if (res_options) + { + status = set_options(channel, res_options); + if (status != ARES_SUCCESS) + return status; + } + + return ARES_SUCCESS; +} + +#ifdef WIN32 +/* + * Warning: returns a dynamically allocated buffer, the user MUST + * use free() if the function returns 1 + */ +static int get_res_nt(HKEY hKey, const char *subkey, char **obuf) +{ + /* Test for the size we need */ + DWORD size = 0; + int result; + + result = RegQueryValueEx(hKey, subkey, 0, NULL, NULL, &size); + if ((result != ERROR_SUCCESS && result != ERROR_MORE_DATA) || !size) + return 0; + *obuf = malloc(size+1); + if (!*obuf) + return 0; + + if (RegQueryValueEx(hKey, subkey, 0, NULL, + (LPBYTE)*obuf, &size) != ERROR_SUCCESS) + { + free(*obuf); + return 0; + } + if (size == 1) + { + free(*obuf); + return 0; + } + return 1; +} + +static int get_res_interfaces_nt(HKEY hKey, const char *subkey, char **obuf) +{ + char enumbuf[39]; /* GUIDs are 38 chars + 1 for NULL */ + DWORD enum_size = 39; + int idx = 0; + HKEY hVal; + + while (RegEnumKeyEx(hKey, idx++, enumbuf, &enum_size, 0, + NULL, NULL, NULL) != ERROR_NO_MORE_ITEMS) + { + int rc; + + enum_size = 39; + if (RegOpenKeyEx(hKey, enumbuf, 0, KEY_QUERY_VALUE, &hVal) != + ERROR_SUCCESS) + continue; + rc = get_res_nt(hVal, subkey, obuf); + RegCloseKey(hVal); + if (rc) + return 1; + } + return 0; +} + +/** + * The desired output for this method is that we set "ret_buf" to + * something like: + * + * 192.168.0.1,dns01.my.domain,fe80::200:f8ff:fe21:67cf + * + * The only ordering requirement is that primary servers are listed + * before secondary. There is no requirement that IPv4 addresses should + * necessarily be before IPv6. + * + * Note that ret_size should ideally be big enough to hold around + * 2-3 IPv4 and 2-3 IPv6 addresses. + * + * Finally, we need to return the total number of DNS servers located. + */ +static int get_iphlpapi_dns_info (char *ret_buf, size_t ret_size) +{ + const size_t ipv4_size = INET_ADDRSTRLEN + 1; /* +1 for ',' at end */ + const size_t ipv6_size = INET6_ADDRSTRLEN + 12; /* +12 for "%0123456789," at end */ + size_t left = ret_size; + char *ret = ret_buf; + int count = 0; + + /* Use the GetAdaptersAddresses method if it's available, otherwise + fall back to GetNetworkParams. */ + if (ares_fpGetAdaptersAddresses != ZERO_NULL) + { + const ULONG working_buf_size = 15000; + IP_ADAPTER_ADDRESSES *pFirstEntry = NULL; + IP_ADAPTER_ADDRESSES *pEntry = NULL; + ULONG bufSize = 0; + ULONG result = 0; + + /* According to MSDN, the recommended way to do this is to use a temporary + buffer of 15K, to "dramatically reduce the chance that the GetAdaptersAddresses + method returns ERROR_BUFFER_OVERFLOW" */ + pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) malloc( working_buf_size ); + bufSize = working_buf_size; + if( !pFirstEntry ) + return 0; + + /* Call the method one time */ + result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); + if( result == ERROR_BUFFER_OVERFLOW ) + { + /* Reallocate, bufSize should now be set to the required size */ + pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) realloc( pFirstEntry, bufSize ); + if( !pFirstEntry ) + return 0; + + /* Call the method a second time */ + result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); + if( result == ERROR_BUFFER_OVERFLOW ) + { + /* Reallocate, bufSize should now be set to the required size */ + pFirstEntry = ( IP_ADAPTER_ADDRESSES * ) realloc( pFirstEntry, bufSize ); + if( !pFirstEntry ) + return 0; + + /* Call the method a third time. The maximum number of times we're going to do + this is 3. Three shall be the number thou shalt count, and the number of the + counting shall be three. Five is right out. */ + result = ( *ares_fpGetAdaptersAddresses )( AF_UNSPEC, 0, 0, pFirstEntry, &bufSize ); + } + } + + /* Check the current result for failure */ + if( result != ERROR_SUCCESS ) + { + free( pFirstEntry ); + return 0; + } + + /* process the results */ + for( pEntry = pFirstEntry ; pEntry != NULL ; pEntry = pEntry->Next ) + { + IP_ADAPTER_DNS_SERVER_ADDRESS* pDNSAddr = pEntry->FirstDnsServerAddress; + for( ; pDNSAddr != NULL ; pDNSAddr = pDNSAddr->Next ) + { + struct sockaddr *pGenericAddr = pDNSAddr->Address.lpSockaddr; + size_t stringlen = 0; + + if( pGenericAddr->sa_family == AF_INET && left > ipv4_size ) + { + /* Handle the v4 case */ + struct sockaddr_in *pIPv4Addr = ( struct sockaddr_in * ) pGenericAddr; + ares_inet_ntop( AF_INET, &pIPv4Addr->sin_addr, ret, ipv4_size - 1 ); /* -1 for comma */ + + /* Append a comma to the end, THEN NULL. Should be OK because we + already tested the size at the top of the if statement. */ + stringlen = strlen( ret ); + ret[ stringlen ] = ','; + ret[ stringlen + 1 ] = '\0'; + ret += stringlen + 1; + left -= ret - ret_buf; + ++count; + } + else if( pGenericAddr->sa_family == AF_INET6 && left > ipv6_size ) + { + /* Handle the v6 case */ + struct sockaddr_in6 *pIPv6Addr = ( struct sockaddr_in6 * ) pGenericAddr; + ares_inet_ntop( AF_INET6, &pIPv6Addr->sin6_addr, ret, ipv6_size - 1 ); /* -1 for comma */ + + /* 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; + + /* NB on Windows this also returns stuff in the fec0::/10 range, + seems to be hard-coded somehow. Do we need to ignore them? */ + } + } + } + + if( pFirstEntry ) + free( pFirstEntry ); + if (ret > ret_buf) + ret[-1] = '\0'; + return count; + } + else + { + FIXED_INFO *fi, *newfi; + DWORD size = sizeof (*fi); + IP_ADDR_STRING *ipAddr; + int i; + int debug = 0; + HRESULT res; + + fi = malloc(size); + if (!fi) + return 0; + + res = (*ares_fpGetNetworkParams) (fi, &size); + if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) + goto quit; + + newfi = realloc(fi, size); + if (!newfi) + goto quit; + + fi = newfi; + res = (*ares_fpGetNetworkParams) (fi, &size); + if (res != ERROR_SUCCESS) + goto quit; + + if (debug) + { + printf ("Host Name: %s\n", fi->HostName); + printf ("Domain Name: %s\n", fi->DomainName); + printf ("DNS Servers:\n" + " %s (primary)\n", fi->DnsServerList.IpAddress.String); + } + if (strlen(fi->DnsServerList.IpAddress.String) > 0 && + inet_addr(fi->DnsServerList.IpAddress.String) != INADDR_NONE && + left > ipv4_size) + { + ret += sprintf (ret, "%s,", fi->DnsServerList.IpAddress.String); + left -= ret - ret_buf; + ++count; + } + + for (i = 0, ipAddr = fi->DnsServerList.Next; ipAddr && left > ipv4_size; + ipAddr = ipAddr->Next, i++) + { + if (inet_addr(ipAddr->IpAddress.String) != INADDR_NONE) + { + ret += sprintf (ret, "%s,", ipAddr->IpAddress.String); + left -= ret - ret_buf; + ++count; + } + if (debug) + printf (" %s (secondary %d)\n", ipAddr->IpAddress.String, i+1); + } + +quit: + if (fi) + free(fi); + + if (debug && left <= ipv4_size) + printf ("Too many nameservers. Truncating to %d addressess", count); + if (ret > ret_buf) + ret[-1] = '\0'; + return count; + } +} +#endif + +static int init_by_resolv_conf(ares_channel channel) +{ +#ifndef WATT32 + char *line = NULL; +#endif + int status = -1, nservers = 0, nsort = 0; + struct server_state *servers = NULL; + struct apattern *sortlist = NULL; + +#ifdef WIN32 + + /* + NameServer info via IPHLPAPI (IP helper API): + GetNetworkParams() should be the trusted source for this. + Available in Win-98/2000 and later. If that fail, fall-back to + registry information. + + NameServer Registry: + + On Windows 9X, the DNS server can be found in: +HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\MSTCP\NameServer + + On Windows NT/2000/XP/2003: +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\NameServer + or +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DhcpNameServer + or +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\ +NameServer + or +HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\{AdapterID}\ +DhcpNameServer + */ + + HKEY mykey; + HKEY subkey; + DWORD data_type; + DWORD bytes; + DWORD result; + char buf[512]; + win_platform platform; + + if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */ + return ARES_SUCCESS; + + if (get_iphlpapi_dns_info(buf,sizeof(buf)) > 0) + { + status = config_nameserver(&servers, &nservers, buf); + if (status == ARES_SUCCESS) + goto okay; + } + + platform = ares__getplatform(); + + if (platform == WIN_NT) + { + if (RegOpenKeyEx( + HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, + KEY_READ, &mykey + ) == ERROR_SUCCESS) + { + RegOpenKeyEx(mykey, "Interfaces", 0, + KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &subkey); + if (get_res_nt(mykey, NAMESERVER, &line)) + { + status = config_nameserver(&servers, &nservers, line); + free(line); + } + else if (get_res_nt(mykey, DHCPNAMESERVER, &line)) + { + status = config_nameserver(&servers, &nservers, line); + free(line); + } + /* Try the interfaces */ + else if (get_res_interfaces_nt(subkey, NAMESERVER, &line)) + { + status = config_nameserver(&servers, &nservers, line); + free(line); + } + else if (get_res_interfaces_nt(subkey, DHCPNAMESERVER, &line)) + { + status = config_nameserver(&servers, &nservers, line); + free(line); + } + RegCloseKey(subkey); + RegCloseKey(mykey); + } + } + else if (platform == WIN_9X) + { + if (RegOpenKeyEx( + HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, + KEY_READ, &mykey + ) == ERROR_SUCCESS) + { + if ((result = RegQueryValueEx( + mykey, NAMESERVER, NULL, &data_type, + NULL, &bytes + ) + ) == ERROR_SUCCESS || + result == ERROR_MORE_DATA) + { + if (bytes) + { + line = malloc(bytes+1); + if (RegQueryValueEx(mykey, NAMESERVER, NULL, &data_type, + (unsigned char *)line, &bytes) == + ERROR_SUCCESS) + { + status = config_nameserver(&servers, &nservers, line); + } + free(line); + } + } + } + RegCloseKey(mykey); + } + + if (status == ARES_SUCCESS) + status = ARES_EOF; + else + /* Catch the case when all the above checks fail (which happens when there + is no network card or the cable is unplugged) */ + status = ARES_EFILE; + +#elif defined(__riscos__) + + /* Under RISC OS, name servers are listed in the + system variable Inet$Resolvers, space separated. */ + + line = getenv("Inet$Resolvers"); + status = ARES_EOF; + if (line) { + char *resolvers = strdup(line), *pos, *space; + + if (!resolvers) + return ARES_ENOMEM; + + pos = resolvers; + do { + space = strchr(pos, ' '); + if (space) + *space = '\0'; + status = config_nameserver(&servers, &nservers, pos); + if (status != ARES_SUCCESS) + break; + pos = space + 1; + } while (space); + + if (status == ARES_SUCCESS) + status = ARES_EOF; + + free(resolvers); + } + +#elif defined(WATT32) + int i; + + sock_init(); + for (i = 0; def_nameservers[i]; i++) + ; + if (i == 0) + return ARES_SUCCESS; /* use localhost DNS server */ + + nservers = i; + servers = calloc(i, sizeof(struct server_state)); + if (!servers) + return ARES_ENOMEM; + + for (i = 0; def_nameservers[i]; i++) + { + servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); + servers[i].addr.family = AF_INET; + } + status = ARES_EOF; + +#elif defined(ANDROID) + char value[PROP_VALUE_MAX]=""; + __system_property_get("net.dns1", value); + status = config_nameserver(&servers, &nservers, value); + if (status == ARES_SUCCESS) + status = ARES_EOF; +#else + { + char *p; + FILE *fp; + size_t linesize; + int error; + + /* Don't read resolv.conf and friends if we don't have to */ + if (ARES_CONFIG_CHECK(channel)) + return ARES_SUCCESS; + + fp = fopen(PATH_RESOLV_CONF, "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + if ((p = try_config(line, "domain", ';'))) + status = config_domain(channel, p); + else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) + status = config_lookup(channel, p, "bind", "file"); + else if ((p = try_config(line, "search", ';'))) + status = set_search(channel, p); + else if ((p = try_config(line, "nameserver", ';')) && + channel->nservers == -1) + status = config_nameserver(&servers, &nservers, p); + else if ((p = try_config(line, "sortlist", ';')) && + channel->nsort == -1) + status = config_sortlist(&sortlist, &nsort, p); + else if ((p = try_config(line, "options", ';'))) + status = set_options(channel, p); + else + status = ARES_SUCCESS; + if (status != ARES_SUCCESS) + break; + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + status = ARES_EOF; + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF)); + status = ARES_EFILE; + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */ + fp = fopen("/etc/nsswitch.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "dns", "files"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + status = ARES_EOF; + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/nsswitch.conf")); + status = ARES_EFILE; + } + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Linux / GNU libc 2.x and possibly others have host.conf */ + fp = fopen("/etc/host.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + if ((p = try_config(line, "order", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", "hosts"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + status = ARES_EOF; + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/host.conf")); + status = ARES_EFILE; + } + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Tru64 uses /etc/svc.conf */ + fp = fopen("/etc/svc.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", "local"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + status = ARES_EOF; + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf")); + status = ARES_EFILE; + } + } + } + + if(line) + free(line); + } + +#endif + + /* Handle errors. */ + if (status != ARES_EOF) + { + if (servers != NULL) + free(servers); + if (sortlist != NULL) + free(sortlist); + return status; + } + + /* If we got any name server entries, fill them in. */ +#ifdef WIN32 +okay: +#endif + if (servers) + { + channel->servers = servers; + channel->nservers = nservers; + } + + /* If we got any sortlist entries, fill them in. */ + if (sortlist) + { + channel->sortlist = sortlist; + channel->nsort = nsort; + } + + return ARES_SUCCESS; +} + +static int init_by_defaults(ares_channel channel) +{ + char *hostname = NULL; + int rc = ARES_SUCCESS; +#ifdef HAVE_GETHOSTNAME + char *dot; +#endif + + if (channel->flags == -1) + channel->flags = 0; + if (channel->timeout == -1) + channel->timeout = DEFAULT_TIMEOUT; + if (channel->tries == -1) + channel->tries = DEFAULT_TRIES; + if (channel->ndots == -1) + channel->ndots = 1; + if (channel->rotate == -1) + channel->rotate = 0; + if (channel->udp_port == -1) + channel->udp_port = htons(NAMESERVER_PORT); + if (channel->tcp_port == -1) + channel->tcp_port = htons(NAMESERVER_PORT); + + if (channel->nservers == -1) { + /* If nobody specified servers, try a local named. */ + channel->servers = malloc(sizeof(struct server_state)); + if (!channel->servers) { + rc = ARES_ENOMEM; + goto error; + } + channel->servers[0].addr.family = AF_INET; + channel->servers[0].addr.addrV4.s_addr = htonl(INADDR_LOOPBACK); + channel->nservers = 1; + } + +#if defined(USE_WINSOCK) +#define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT) +#elif defined(ENAMETOOLONG) +#define toolong(x) (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || \ + (SOCKERRNO == EINVAL)) +#else +#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) +#endif + + if (channel->ndomains == -1) { + /* Derive a default domain search list from the kernel hostname, + * or set it to empty if the hostname isn't helpful. + */ + size_t len = 64; + int res; + channel->ndomains = 0; /* default to none */ + +#ifdef HAVE_GETHOSTNAME + hostname = malloc(len); + if(!hostname) { + rc = ARES_ENOMEM; + goto error; + } + + do { + res = gethostname(hostname, len); + + if(toolong(res)) { + char *p; + len *= 2; + p = realloc(hostname, len); + if(!p) { + rc = ARES_ENOMEM; + goto error; + } + hostname = p; + continue; + } + else if(res) { + rc = ARES_EBADNAME; + goto error; + } + + } while(0); + + dot = strchr(hostname, '.'); + if (dot) { + /* a dot was found */ + channel->domains = malloc(sizeof(char *)); + if (!channel->domains) { + rc = ARES_ENOMEM; + goto error; + } + channel->domains[0] = strdup(dot + 1); + if (!channel->domains[0]) { + rc = ARES_ENOMEM; + goto error; + } + channel->ndomains = 1; + } +#endif + } + + if (channel->nsort == -1) { + channel->sortlist = NULL; + channel->nsort = 0; + } + + if (!channel->lookups) { + channel->lookups = strdup("fb"); + if (!channel->lookups) + rc = ARES_ENOMEM; + } + + error: + if(rc) { + if(channel->servers) + free(channel->servers); + + if(channel->domains && channel->domains[0]) + free(channel->domains[0]); + if(channel->domains) + free(channel->domains); + if(channel->lookups) + free(channel->lookups); + } + + if(hostname) + free(hostname); + + return rc; +} + +#if !defined(WIN32) && !defined(WATT32) +static int config_domain(ares_channel channel, char *str) +{ + char *q; + + /* Set a single search domain. */ + q = str; + while (*q && !ISSPACE(*q)) + q++; + *q = '\0'; + return set_search(channel, str); +} + +#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \ + defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__) + /* workaround icc 9.1 optimizer issue */ +# define vqualifier volatile +#else +# define vqualifier +#endif + +static int config_lookup(ares_channel channel, const char *str, + const char *bindch, const char *filech) +{ + char lookups[3], *l; + const char *vqualifier p; + + /* Set the lookup order. Only the first letter of each work + * is relevant, and it has to be "b" for DNS or "f" for the + * host file. Ignore everything else. + */ + l = lookups; + p = str; + while (*p) + { + if ((*p == *bindch || *p == *filech) && l < lookups + 2) { + if (*p == *bindch) *l++ = 'b'; + else *l++ = 'f'; + } + while (*p && !ISSPACE(*p) && (*p != ',')) + p++; + while (*p && (ISSPACE(*p) || (*p == ','))) + p++; + } + *l = '\0'; + channel->lookups = strdup(lookups); + return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM; +} +#endif /* !WIN32 & !WATT32 */ + +#ifndef WATT32 +static int config_nameserver(struct server_state **servers, int *nservers, + char *str) +{ + struct ares_addr host; + struct server_state *newserv; + char *p, *txtaddr; + /* On Windows, there may be more than one nameserver specified in the same + * registry key, so we parse input as a space or comma seperated list. + */ + for (p = str; p;) + { + /* Skip whitespace and commas. */ + while (*p && (ISSPACE(*p) || (*p == ','))) + p++; + if (!*p) + /* No more input, done. */ + break; + + /* Pointer to start of IPv4 or IPv6 address part. */ + txtaddr = p; + + /* Advance past this address. */ + while (*p && !ISSPACE(*p) && (*p != ',')) + p++; + if (*p) + /* Null terminate this address. */ + *p++ = '\0'; + else + /* Reached end of input, done when this address is processed. */ + p = NULL; + + /* Convert textual address to binary format. */ + if (ares_inet_pton(AF_INET, txtaddr, &host.addrV4) == 1) + host.family = AF_INET; + else if (ares_inet_pton(AF_INET6, txtaddr, &host.addrV6) == 1) + host.family = AF_INET6; + else + continue; + + /* Resize servers state array. */ + newserv = realloc(*servers, (*nservers + 1) * + sizeof(struct server_state)); + if (!newserv) + return ARES_ENOMEM; + + /* Store address data. */ + newserv[*nservers].addr.family = host.family; + if (host.family == AF_INET) + memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4, + sizeof(host.addrV4)); + else + memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6, + sizeof(host.addrV6)); + + /* Update arguments. */ + *servers = newserv; + *nservers += 1; + } + + return ARES_SUCCESS; +} + +#ifndef WIN32 +static int config_sortlist(struct apattern **sortlist, int *nsort, + const char *str) +{ + struct apattern pat; + const char *q; + + /* Add sortlist entries. */ + while (*str && *str != ';') + { + int bits; + char ipbuf[16], ipbufpfx[32]; + /* Find just the IP */ + q = str; + while (*q && *q != '/' && *q != ';' && !ISSPACE(*q)) + q++; + memcpy(ipbuf, str, q-str); + ipbuf[q-str] = '\0'; + /* Find the prefix */ + if (*q == '/') + { + const char *str2 = q+1; + while (*q && *q != ';' && !ISSPACE(*q)) + q++; + memcpy(ipbufpfx, str, q-str); + ipbufpfx[q-str] = '\0'; + str = str2; + } + else + ipbufpfx[0] = '\0'; + /* Lets see if it is CIDR */ + /* First we'll try IPv6 */ + if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf, + &pat.addrV6, + sizeof(pat.addrV6))) > 0) + { + pat.type = PATTERN_CIDR; + pat.mask.bits = (unsigned short)bits; + pat.family = AF_INET6; + if (!sortlist_alloc(sortlist, nsort, &pat)) + return ARES_ENOMEM; + } + else if (ipbufpfx[0] && + (bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4, + sizeof(pat.addrV4))) > 0) + { + pat.type = PATTERN_CIDR; + pat.mask.bits = (unsigned short)bits; + pat.family = AF_INET; + if (!sortlist_alloc(sortlist, nsort, &pat)) + return ARES_ENOMEM; + } + /* See if it is just a regular IP */ + else if (ip_addr(ipbuf, q-str, &pat.addrV4) == 0) + { + if (ipbufpfx[0]) + { + memcpy(ipbuf, str, q-str); + ipbuf[q-str] = '\0'; + if (ip_addr(ipbuf, q-str, &pat.mask.addr4) != 0) + natural_mask(&pat); + } + else + natural_mask(&pat); + pat.family = AF_INET; + pat.type = PATTERN_MASK; + if (!sortlist_alloc(sortlist, nsort, &pat)) + return ARES_ENOMEM; + } + else + { + while (*q && *q != ';' && !ISSPACE(*q)) + q++; + } + str = q; + while (ISSPACE(*str)) + str++; + } + + return ARES_SUCCESS; +} +#endif /* !WIN32 */ +#endif /* !WATT32 */ + +static int set_search(ares_channel channel, const char *str) +{ + int n; + const char *p, *q; + + if(channel->ndomains != -1) { + /* if we already have some domains present, free them first */ + for(n=0; n < channel->ndomains; n++) + free(channel->domains[n]); + free(channel->domains); + channel->domains = NULL; + channel->ndomains = -1; + } + + /* Count the domains given. */ + n = 0; + p = str; + while (*p) + { + while (*p && !ISSPACE(*p)) + p++; + while (ISSPACE(*p)) + p++; + n++; + } + + if (!n) + { + channel->ndomains = 0; + return ARES_SUCCESS; + } + + channel->domains = malloc(n * sizeof(char *)); + if (!channel->domains) + return ARES_ENOMEM; + + /* Now copy the domains. */ + n = 0; + p = str; + while (*p) + { + channel->ndomains = n; + q = p; + while (*q && !ISSPACE(*q)) + q++; + channel->domains[n] = malloc(q - p + 1); + if (!channel->domains[n]) + return ARES_ENOMEM; + memcpy(channel->domains[n], p, q - p); + channel->domains[n][q - p] = 0; + p = q; + while (ISSPACE(*p)) + p++; + n++; + } + channel->ndomains = n; + + return ARES_SUCCESS; +} + +static int set_options(ares_channel channel, const char *str) +{ + const char *p, *q, *val; + + p = str; + while (*p) + { + q = p; + while (*q && !ISSPACE(*q)) + q++; + val = try_option(p, q, "ndots:"); + if (val && channel->ndots == -1) + channel->ndots = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "retrans:"); + if (val && channel->timeout == -1) + channel->timeout = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "retry:"); + if (val && channel->tries == -1) + channel->tries = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "rotate"); + if (val && channel->rotate == -1) + channel->rotate = 1; + p = q; + while (ISSPACE(*p)) + p++; + } + + return ARES_SUCCESS; +} + +static const char *try_option(const char *p, const char *q, const char *opt) +{ + size_t len = strlen(opt); + return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL; +} + +#if !defined(WIN32) && !defined(WATT32) +static char *try_config(char *s, const char *opt, char scc) +{ + size_t len; + char *p; + char *q; + + if (!s || !opt) + /* no line or no option */ + return NULL; + + /* Hash '#' character is always used as primary comment char, additionally + a not-NUL secondary comment char will be considered when specified. */ + + /* trim line comment */ + p = s; + if(scc) + while (*p && (*p != '#') && (*p != scc)) + p++; + else + while (*p && (*p != '#')) + p++; + *p = '\0'; + + /* trim trailing whitespace */ + q = p - 1; + while ((q >= s) && ISSPACE(*q)) + q--; + *++q = '\0'; + + /* skip leading whitespace */ + p = s; + while (*p && ISSPACE(*p)) + p++; + + if (!*p) + /* empty line */ + return NULL; + + if ((len = strlen(opt)) == 0) + /* empty option */ + return NULL; + + if (strncmp(p, opt, len) != 0) + /* line and option do not match */ + return NULL; + + /* skip over given option name */ + p += len; + + if (!*p) + /* no option value */ + return NULL; + + if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p)) + /* whitespace between option name and value is mandatory + for given option names which do not end with ':' or '=' */ + return NULL; + + /* skip over whitespace */ + while (*p && ISSPACE(*p)) + p++; + + if (!*p) + /* no option value */ + return NULL; + + /* return pointer to option value */ + return p; +} + +static int sortlist_alloc(struct apattern **sortlist, int *nsort, + struct apattern *pat) +{ + struct apattern *newsort; + newsort = realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); + if (!newsort) + return 0; + newsort[*nsort] = *pat; + *sortlist = newsort; + (*nsort)++; + return 1; +} + +static int ip_addr(const char *ipbuf, ssize_t len, struct in_addr *addr) +{ + + /* Four octets and three periods yields at most 15 characters. */ + if (len > 15) + return -1; + + addr->s_addr = inet_addr(ipbuf); + if (addr->s_addr == INADDR_NONE && strcmp(ipbuf, "255.255.255.255") != 0) + return -1; + return 0; +} + +static void natural_mask(struct apattern *pat) +{ + struct in_addr addr; + + /* Store a host-byte-order copy of pat in a struct in_addr. Icky, + * but portable. + */ + addr.s_addr = ntohl(pat->addrV4.s_addr); + + /* This is out of date in the CIDR world, but some people might + * still rely on it. + */ + if (IN_CLASSA(addr.s_addr)) + pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET); + else if (IN_CLASSB(addr.s_addr)) + pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET); + else + pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET); +} +#endif /* !WIN32 && !WATT32 */ + +/* initialize an rc4 key. If possible a cryptographically secure random key + is generated using a suitable function (for example win32's RtlGenRandom as + described in + http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx + otherwise the code defaults to cross-platform albeit less secure mechanism + using rand +*/ +static void randomize_key(unsigned char* key,int key_data_len) +{ + int randomized = 0; + int counter=0; +#ifdef WIN32 + BOOLEAN res; + if (ares_fpSystemFunction036) + { + res = (*ares_fpSystemFunction036) (key, key_data_len); + if (res) + randomized = 1; + } +#else /* !WIN32 */ +#ifdef RANDOM_FILE + FILE *f = fopen(RANDOM_FILE, "rb"); + if(f) { + counter = aresx_uztosi(fread(key, 1, key_data_len, f)); + fclose(f); + } +#endif +#endif /* WIN32 */ + + if ( !randomized ) { + for (;counterstate[0]; + for(counter = 0; counter < 256; counter++) + /* unnecessary AND but it keeps some compilers happier */ + state[counter] = (unsigned char)(counter & 0xff); + randomize_key(key->state,key_data_len); + key->x = 0; + key->y = 0; + index1 = 0; + index2 = 0; + for(counter = 0; counter < 256; counter++) + { + index2 = (unsigned char)((key_data_ptr[index1] + state[counter] + + index2) % 256); + ARES_SWAP_BYTE(&state[counter], &state[index2]); + + index1 = (unsigned char)((index1 + 1) % key_data_len); + } + free(key_data_ptr); + return ARES_SUCCESS; +} + +unsigned short ares__generate_new_id(rc4_key* key) +{ + unsigned short r=0; + ares__rc4(key, (unsigned char *)&r, sizeof(r)); + return r; +} + +void ares_set_local_ip4(ares_channel channel, unsigned int local_ip) +{ + channel->local_ip4 = local_ip; +} + +/* local_ip6 should be 16 bytes in length */ +void ares_set_local_ip6(ares_channel channel, + const unsigned char* local_ip6) +{ + memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6)); +} + +/* local_dev_name should be null terminated. */ +void ares_set_local_dev(ares_channel channel, + const char* local_dev_name) +{ + strncpy(channel->local_dev_name, local_dev_name, + sizeof(channel->local_dev_name)); + channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0; +} + + +void ares_set_socket_callback(ares_channel channel, + ares_sock_create_callback cb, + void *data) +{ + channel->sock_create_cb = cb; + channel->sock_create_cb_data = data; +} + +void ares__init_servers_state(ares_channel channel) +{ + struct server_state *server; + int i; + + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + server->udp_socket = ARES_SOCKET_BAD; + server->tcp_socket = ARES_SOCKET_BAD; + server->tcp_connection_generation = ++channel->tcp_connection_generation; + server->tcp_lenbuf_pos = 0; + server->tcp_buffer_pos = 0; + server->tcp_buffer = NULL; + server->tcp_length = 0; + server->qhead = NULL; + server->qtail = NULL; + ares__init_list_head(&server->queries_to_server); + server->channel = channel; + server->is_broken = 0; + } +} diff --git a/ares_init.pdf b/ares_init.pdf new file mode 100644 index 0000000..3759e59 Binary files /dev/null and b/ares_init.pdf differ diff --git a/ares_init_options.3 b/ares_init_options.3 new file mode 100644 index 0000000..27b149b --- /dev/null +++ b/ares_init_options.3 @@ -0,0 +1 @@ +.so man3/ares_init.3 diff --git a/ares_init_options.pdf b/ares_init_options.pdf new file mode 100644 index 0000000..4090757 Binary files /dev/null and b/ares_init_options.pdf differ diff --git a/ares_iphlpapi.h b/ares_iphlpapi.h new file mode 100644 index 0000000..343aee3 --- /dev/null +++ b/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/ares_ipv6.h b/ares_ipv6.h new file mode 100644 index 0000000..6f1022a --- /dev/null +++ b/ares_ipv6.h @@ -0,0 +1,78 @@ + +/* Copyright (C) 2005 by Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef ARES_IPV6_H +#define ARES_IPV6_H + +#ifndef HAVE_PF_INET6 +#define PF_INET6 AF_INET6 +#endif + +#ifndef HAVE_STRUCT_SOCKADDR_IN6 +struct sockaddr_in6 +{ + unsigned short sin6_family; + unsigned short sin6_port; + unsigned long sin6_flowinfo; + struct ares_in6_addr sin6_addr; + unsigned int sin6_scope_id; +}; +#endif + +#ifndef HAVE_STRUCT_ADDRINFO +struct addrinfo +{ + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +}; +#endif + +#ifndef NS_IN6ADDRSZ +#if SIZEOF_STRUCT_IN6_ADDR == 0 +/* We cannot have it set to zero, so we pick a fixed value here */ +#define NS_IN6ADDRSZ 16 +#else +#define NS_IN6ADDRSZ SIZEOF_STRUCT_IN6_ADDR +#endif +#endif + +#ifndef NS_INADDRSZ +#define NS_INADDRSZ SIZEOF_STRUCT_IN_ADDR +#endif + +#ifndef NS_INT16SZ +#define NS_INT16SZ 2 +#endif + +#ifndef IF_NAMESIZE +#ifdef IFNAMSIZ +#define IF_NAMESIZE IFNAMSIZ +#else +#define IF_NAMESIZE 256 +#endif +#endif + +/* Defined in ares_net_pton.c for no particular reason. */ +extern const struct ares_in6_addr ares_in6addr_any; /* :: */ + + +#endif /* ARES_IPV6_H */ diff --git a/ares_library_cleanup.3 b/ares_library_cleanup.3 new file mode 100644 index 0000000..9fcf896 --- /dev/null +++ b/ares_library_cleanup.3 @@ -0,0 +1,73 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_CLEANUP 3 "19 May 2009" +.SH NAME +ares_library_cleanup \- c-ares library deinitialization +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_library_cleanup(void) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +The +.B ares_library_cleanup +function uninitializes the c-ares library, freeing all resources +previously acquired by \fIares_library_init(3)\fP when the library +was initialized. +.PP +This function must be called when the program using c-ares will +no longer need any c-ares function. Once the program has called +\fIares_library_cleanup(3)\fP it shall not make any further call to any +c-ares function. +.PP +This function does not cancel any pending c-ares lookups or requests +previously done. Program must use \fIares_cancel(3)\fP for this purpose. +.PP +.B This function is not thread safe. +You have to call it once the program is about to terminate, but this call must +be done once the program has terminated every single thread that it could have +initiated. This is required to avoid potential race conditions in library +deinitialization, and also due to the fact that \fIares_library_cleanup(3)\fP +might call functions from other libraries that are thread unsafe, and could +conflict with any other thread that is already using these other libraries. +.PP +Win32/64 application DLLs shall not call \fIares_library_cleanup(3)\fP from +the DllMain function. Doing so will produce deadlocks and other problems. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0 along with the +definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_CLEANUP\fP as an +indication of the availability of this function. +.PP +Since the introduction of this function, it is absolutely mandatory to call it +for any Win32/64 program using c-ares. +.PP +Non-Win32/64 systems can still use c-ares version 1.7.0 without calling +\fIares_library_cleanup(3)\fP due to the fact that \fIcurrently\fP it is nearly +a do-nothing function on non-Win32/64 platforms. +.SH SEE ALSO +.BR ares_library_init(3), +.BR ares_cancel(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2009 by Daniel Stenberg. diff --git a/ares_library_cleanup.pdf b/ares_library_cleanup.pdf new file mode 100644 index 0000000..ccd4ecc Binary files /dev/null and b/ares_library_cleanup.pdf differ diff --git a/ares_library_init.3 b/ares_library_init.3 new file mode 100644 index 0000000..b3efc18 --- /dev/null +++ b/ares_library_init.3 @@ -0,0 +1,96 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_INIT 3 "19 May 2009" +.SH NAME +ares_library_init \- c-ares library initialization +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_library_init(int \fIflags\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +The +.B ares_library_init +function performs initializations internally required by the c-ares +library that must take place before any other function provided by +c-ares can be used in a program. +.PP +This function must be called one time within the life of a program, +before the program actually executes any other c-ares library function. +Initializations done by this function remain effective until a +call to \fIares_library_cleanup(3)\fP is performed. +.PP +Successive calls to this function do nothing, only the first call done +when c-ares is in an uninitialized state is actually effective. +.PP +The +.I flags +parameter is a bit pattern that tells c-ares exactly which features +should be initialized, as described below. Set the desired bits by +ORing the values together. In normal operation you should specify +\fIARES_LIB_INIT_ALL\fP. Don't use any other value unless you are +familiar with it and trying to control some internal c-ares feature. +.PP +.B This function is not thread safe. +You have to call it once the program has started, but this call must be done +before the program starts any other thread. This is required to avoid +potential race conditions in library initialization, and also due to the fact +that \fIares_library_init(3)\fP might call functions from other libraries that +are thread unsafe, and could conflict with any other thread that is already +using these other libraries. +.PP +Win32/64 application DLLs shall not call \fIares_library_init(3)\fP from the +DllMain function. Doing so will produce deadlocks and other problems. +.SH FLAGS +.TP 5 +.B ARES_LIB_INIT_ALL +Initialize everything possible. This sets all known bits. +.TP +.B ARES_LIB_INIT_WIN32 +Initialize Win32/64 specific libraries. +.TP +.B ARES_LIB_INIT_NONE +Initialize nothing extra. This sets no bit. +.SH RETURN VALUE +Upon successful completion, ares_library_init() will return 0. Otherwise, a +non-zero error number will be returned to indicate the error. Except for +\fIares_strerror(3)\fP, you shall not call any other c-ares function upon +\fIares_library_init(3)\fP failure. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0 along with the +definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_INIT\fP as an +indication of the availability of this function. +.PP +Since the introduction of this function it is absolutely mandatory to +call it for any Win32/64 program using c-ares. +.PP +Non-Win32/64 systems can still use c-ares version 1.7.0 without calling +\fIares_library_init(3)\fP due to the fact that \fIcurrently\fP it is nearly +a do-nothing function on non-Win32/64 platforms at this point. +.SH SEE ALSO +.BR ares_library_cleanup(3), +.BR ares_strerror(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2009 by Daniel Stenberg. diff --git a/ares_library_init.c b/ares_library_init.c new file mode 100644 index 0000000..f0137a1 --- /dev/null +++ b/ares_library_init.c @@ -0,0 +1,142 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2009 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_library_init.h" +#include "ares_private.h" + +/* library-private global and unique instance vars */ + +#ifdef USE_WINSOCK +fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL; +fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL; +fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL; +#endif + +/* library-private global vars with source visibility restricted to this file */ + +static unsigned int ares_initialized; +static int ares_init_flags; + +#ifdef USE_WINSOCK +static HMODULE hnd_iphlpapi; +static HMODULE hnd_advapi32; +#endif + + +static int ares_win32_init(void) +{ +#ifdef USE_WINSOCK + + hnd_iphlpapi = 0; + hnd_iphlpapi = LoadLibrary("iphlpapi.dll"); + if (!hnd_iphlpapi) + return ARES_ELOADIPHLPAPI; + + ares_fpGetNetworkParams = (fpGetNetworkParams_t) + GetProcAddress(hnd_iphlpapi, "GetNetworkParams"); + if (!ares_fpGetNetworkParams) + { + FreeLibrary(hnd_iphlpapi); + return ARES_EADDRGETNETWORKPARAMS; + } + + ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t) + GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses"); + if (!ares_fpGetAdaptersAddresses) + { + /* This can happen on clients before WinXP, I don't + think it should be an error, unless we don't want to + support Windows 2000 anymore */ + } + + /* + * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036, + * also known as RtlGenRandom, which is the case for Windows versions prior + * to WinXP then c-ares uses portable rand() function. Then don't error here. + */ + + hnd_advapi32 = 0; + hnd_advapi32 = LoadLibrary("advapi32.dll"); + if (hnd_advapi32) + { + ares_fpSystemFunction036 = (fpSystemFunction036_t) + GetProcAddress(hnd_advapi32, "SystemFunction036"); + } + +#endif + return ARES_SUCCESS; +} + + +static void ares_win32_cleanup(void) +{ +#ifdef USE_WINSOCK + if (hnd_advapi32) + FreeLibrary(hnd_advapi32); + if (hnd_iphlpapi) + FreeLibrary(hnd_iphlpapi); +#endif +} + + +int ares_library_init(int flags) +{ + int res; + + if (ares_initialized) + return ARES_SUCCESS; + ares_initialized++; + + if (flags & ARES_LIB_INIT_WIN32) + { + res = ares_win32_init(); + if (res != ARES_SUCCESS) + return res; + } + + ares_init_flags = flags; + + return ARES_SUCCESS; +} + + +void ares_library_cleanup(void) +{ + if (!ares_initialized) + return; + ares_initialized--; + + if (ares_init_flags & ARES_LIB_INIT_WIN32) + ares_win32_cleanup(); + + ares_init_flags = ARES_LIB_INIT_NONE; +} + + +int ares_library_initialized(void) +{ +#ifdef USE_WINSOCK + if (!ares_initialized) + return ARES_ENOTINITIALIZED; +#endif + return ARES_SUCCESS; +} + + diff --git a/ares_library_init.h b/ares_library_init.h new file mode 100644 index 0000000..59e5cc5 --- /dev/null +++ b/ares_library_init.h @@ -0,0 +1,42 @@ +#ifndef HEADER_CARES_LIBRARY_INIT_H +#define HEADER_CARES_LIBRARY_INIT_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef USE_WINSOCK + +#include +#include + +typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*); +typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG); +typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* ); + +/* Forward-declaration of variables defined in ares_library_init.c */ +/* that are global and unique instances for whole c-ares library. */ + +extern fpGetNetworkParams_t ares_fpGetNetworkParams; +extern fpSystemFunction036_t ares_fpSystemFunction036; +extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses; + +#endif /* USE_WINSOCK */ + +#endif /* HEADER_CARES_LIBRARY_INIT_H */ + diff --git a/ares_library_init.pdf b/ares_library_init.pdf new file mode 100644 index 0000000..5cbc451 Binary files /dev/null and b/ares_library_init.pdf differ diff --git a/ares_llist.c b/ares_llist.c new file mode 100644 index 0000000..c0acd90 --- /dev/null +++ b/ares_llist.c @@ -0,0 +1,86 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_private.h" + +/* Routines for managing doubly-linked circular linked lists with a + * dummy head. + */ + +/* Initialize a new head node */ +void ares__init_list_head(struct list_node* head) { + head->prev = head; + head->next = head; + head->data = NULL; +} + +/* Initialize a list node */ +void ares__init_list_node(struct list_node* node, void* d) { + node->prev = NULL; + node->next = NULL; + node->data = d; +} + +/* Returns true iff the given list is empty */ +int ares__is_list_empty(struct list_node* head) { + return ((head->next == head) && (head->prev == head)); +} + +/* Inserts new_node before old_node */ +void ares__insert_in_list(struct list_node* new_node, + struct list_node* old_node) { + new_node->next = old_node; + new_node->prev = old_node->prev; + old_node->prev->next = new_node; + old_node->prev = new_node; +} + +/* Removes the node from the list it's in, if any */ +void ares__remove_from_list(struct list_node* node) { + if (node->next != NULL) { + node->prev->next = node->next; + node->next->prev = node->prev; + node->prev = NULL; + node->next = NULL; + } +} + +/* Swap the contents of two lists */ +void ares__swap_lists(struct list_node* head_a, + struct list_node* head_b) { + int is_a_empty = ares__is_list_empty(head_a); + int is_b_empty = ares__is_list_empty(head_b); + struct list_node old_a = *head_a; + struct list_node old_b = *head_b; + + if (is_a_empty) { + ares__init_list_head(head_b); + } else { + *head_b = old_a; + old_a.next->prev = head_b; + old_a.prev->next = head_b; + } + if (is_b_empty) { + ares__init_list_head(head_a); + } else { + *head_a = old_b; + old_b.next->prev = head_a; + old_b.prev->next = head_a; + } +} diff --git a/ares_llist.h b/ares_llist.h new file mode 100644 index 0000000..b09f0de --- /dev/null +++ b/ares_llist.h @@ -0,0 +1,42 @@ +#ifndef __ARES_LLIST_H +#define __ARES_LLIST_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +/* Node definition for circular, doubly-linked list */ +struct list_node { + struct list_node *prev; + struct list_node *next; + void* data; +}; + +void ares__init_list_head(struct list_node* head); + +void ares__init_list_node(struct list_node* node, void* d); + +int ares__is_list_empty(struct list_node* head); + +void ares__insert_in_list(struct list_node* new_node, + struct list_node* old_node); + +void ares__remove_from_list(struct list_node* node); + +void ares__swap_lists(struct list_node* head_a, + struct list_node* head_b); + +#endif /* __ARES_LLIST_H */ diff --git a/ares_mkquery.3 b/ares_mkquery.3 new file mode 100644 index 0000000..f7c5413 --- /dev/null +++ b/ares_mkquery.3 @@ -0,0 +1,75 @@ +.\" +.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_MKQUERY 3 "20 Nov 2009" +.SH NAME +ares_mkquery \- Compose a single-question DNS query buffer +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP, +.B unsigned short \fIid\fP, int \fIrd\fP, unsigned char **\fIbuf\fP, +.B int *\fIbuflen\fP) +.fi +.SH DESCRIPTION +The +.B ares_mkquery +function composes a DNS query with a single question. +The parameter +.I name +gives the query name as a NUL-terminated C string of period-separated +labels optionally ending with a period; periods and backslashes within +a label must be escaped with a backlash. The parameters +.I dnsclass +and +.I type +give the class and type of the query using the values defined in +.BR . +The parameter +.I id +gives a 16-bit identifier for the query. The parameter +.I rd +should be nonzero if recursion is desired, zero if not. The query +will be placed in an allocated buffer, a pointer to which will be +stored in the variable pointed to by +.IR buf , +and the length of which will be stored in the variable pointed to by +.IR buflen . +It is the caller's responsibility to free this buffer using +\fIares_free_string(3)\fP when it is no longer needed. +.SH RETURN VALUES +.B ares_mkquery +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Construction of the DNS query succeeded. +.TP 15 +.B ARES_EBADNAME +The query name +.I name +could not be encoded as a domain name, either because it contained a +zero-length label or because it contained a label of more than 63 +characters. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_expand_name (3), +.BR ares_free_string (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998, 2000 by the Massachusetts Institute of Technology. diff --git a/ares_mkquery.c b/ares_mkquery.c new file mode 100644 index 0000000..e33f13f --- /dev/null +++ b/ares_mkquery.c @@ -0,0 +1,195 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +/* Header format, from RFC 1035: + * 1 1 1 1 1 1 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ID | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * |QR| Opcode |AA|TC|RD|RA| Z | RCODE | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QDCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ANCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | NSCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ARCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * + * AA, TC, RA, and RCODE are only set in responses. Brief description + * of the remaining fields: + * ID Identifier to match responses with queries + * QR Query (0) or response (1) + * Opcode For our purposes, always QUERY + * RD Recursion desired + * Z Reserved (zero) + * QDCOUNT Number of queries + * ANCOUNT Number of answers + * NSCOUNT Number of name server records + * ARCOUNT Number of additional records + * + * Question format, from RFC 1035: + * 1 1 1 1 1 1 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | | + * / QNAME / + * / / + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QTYPE | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QCLASS | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * + * The query name is encoded as a series of labels, each represented + * as a one-byte length (maximum 63) followed by the text of the + * label. The list is terminated by a label of length zero (which can + * be thought of as the root domain). + */ + +int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id, + int rd, unsigned char **buf, int *buflen) +{ + int len; + unsigned char *q; + const char *p; + + /* Set our results early, in case we bail out early with an error. */ + *buflen = 0; + *buf = NULL; + + /* Compute the length of the encoded name so we can check buflen. + * Start counting at 1 for the zero-length label at the end. */ + len = 1; + for (p = name; *p; p++) + { + if (*p == '\\' && *(p + 1) != 0) + p++; + len++; + } + /* If there are n periods in the name, there are n + 1 labels, and + * thus n + 1 length fields, unless the name is empty or ends with a + * period. So add 1 unless name is empty or ends with a period. + */ + if (*name && *(p - 1) != '.') + len++; + + /* Immediately reject names that are longer than the maximum of 255 + * bytes that's specified in RFC 1035 ("To simplify implementations, + * the total length of a domain name (i.e., label octets and label + * length octets) is restricted to 255 octets or less."). We aren't + * doing this just to be a stickler about RFCs. For names that are + * too long, 'dnscache' closes its TCP connection to us immediately + * (when using TCP) and ignores the request when using UDP, and + * BIND's named returns ServFail (TCP or UDP). Sending a request + * that we know will cause 'dnscache' to close the TCP connection is + * painful, since that makes any other outstanding requests on that + * connection fail. And sending a UDP request that we know + * 'dnscache' will ignore is bad because resources will be tied up + * until we time-out the request. + */ + if (len > MAXCDNAME) + return ARES_EBADNAME; + + *buflen = len + HFIXEDSZ + QFIXEDSZ; + *buf = malloc(*buflen); + if (!*buf) + return ARES_ENOMEM; + + /* Set up the header. */ + q = *buf; + memset(q, 0, HFIXEDSZ); + DNS_HEADER_SET_QID(q, id); + DNS_HEADER_SET_OPCODE(q, QUERY); + if (rd) { + DNS_HEADER_SET_RD(q, 1); + } + else { + DNS_HEADER_SET_RD(q, 0); + } + DNS_HEADER_SET_QDCOUNT(q, 1); + + /* A name of "." is a screw case for the loop below, so adjust it. */ + if (strcmp(name, ".") == 0) + name++; + + /* Start writing out the name after the header. */ + q += HFIXEDSZ; + while (*name) + { + if (*name == '.') + return ARES_EBADNAME; + + /* Count the number of bytes in this label. */ + len = 0; + for (p = name; *p && *p != '.'; p++) + { + if (*p == '\\' && *(p + 1) != 0) + p++; + len++; + } + if (len > MAXLABEL) + return ARES_EBADNAME; + + /* Encode the length and copy the data. */ + *q++ = (unsigned char)len; + for (p = name; *p && *p != '.'; p++) + { + if (*p == '\\' && *(p + 1) != 0) + p++; + *q++ = *p; + } + + /* Go to the next label and repeat, unless we hit the end. */ + if (!*p) + break; + name = p + 1; + } + + /* Add the zero-length label at the end. */ + *q++ = 0; + + /* Finish off the question with the type and class. */ + DNS_QUESTION_SET_TYPE(q, type); + DNS_QUESTION_SET_CLASS(q, dnsclass); + + return ARES_SUCCESS; +} diff --git a/ares_mkquery.pdf b/ares_mkquery.pdf new file mode 100644 index 0000000..04f225c Binary files /dev/null and b/ares_mkquery.pdf differ diff --git a/ares_nowarn.c b/ares_nowarn.c new file mode 100644 index 0000000..701add5 --- /dev/null +++ b/ares_nowarn.c @@ -0,0 +1,181 @@ + +/* Copyright (C) 2010-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#ifdef HAVE_ASSERT_H +# include +#endif + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#endif /* __INTEL_COMPILER && __unix__ */ + +#define BUILDING_ARES_NOWARN_C 1 + +#include "ares_nowarn.h" + +#if (SIZEOF_INT == 2) +# define CARES_MASK_SINT 0x7FFF +# define CARES_MASK_UINT 0xFFFF +#elif (SIZEOF_INT == 4) +# define CARES_MASK_SINT 0x7FFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFF +#elif (SIZEOF_INT == 8) +# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF +#elif (SIZEOF_INT == 16) +# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +#endif + +/* +** unsigned size_t to signed int +*/ + +int aresx_uztosi(size_t uznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + return (int)(uznum & (size_t) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed long to signed int +*/ + +int aresx_sltosi(long slnum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(slnum >= 0); + return (int)(slnum & (long) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed ssize_t to signed int +*/ + +int aresx_sztosi(ssize_t sznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sznum >= 0); + return (int)(sznum & (ssize_t) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed ssize_t to unsigned int +*/ + +unsigned int aresx_sztoui(ssize_t sznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sznum >= 0); + return (unsigned int)(sznum & (ssize_t) CARES_MASK_UINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +int aresx_FD_ISSET(int fd, fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:1469) /* clobber ignored */ + return FD_ISSET(fd, fdset); + #pragma warning(pop) +} + +void aresx_FD_SET(int fd, fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:1469) /* clobber ignored */ + FD_SET(fd, fdset); + #pragma warning(pop) +} + +void aresx_FD_ZERO(fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:593) /* variable was set but never used */ + FD_ZERO(fdset); + #pragma warning(pop) +} + +unsigned short aresx_htons(unsigned short usnum) +{ +#if (__INTEL_COMPILER == 910) && defined(__i386__) + return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); +#else + #pragma warning(push) + #pragma warning(disable:810) /* conversion may lose significant bits */ + return htons(usnum); + #pragma warning(pop) +#endif +} + +unsigned short aresx_ntohs(unsigned short usnum) +{ +#if (__INTEL_COMPILER == 910) && defined(__i386__) + return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); +#else + #pragma warning(push) + #pragma warning(disable:810) /* conversion may lose significant bits */ + return ntohs(usnum); + #pragma warning(pop) +#endif +} + +#endif /* __INTEL_COMPILER && __unix__ */ diff --git a/ares_nowarn.h b/ares_nowarn.h new file mode 100644 index 0000000..bcaa227 --- /dev/null +++ b/ares_nowarn.h @@ -0,0 +1,55 @@ +#ifndef HEADER_CARES_NOWARN_H +#define HEADER_CARES_NOWARN_H + + +/* Copyright (C) 2010-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +int aresx_uztosi(size_t uznum); + +int aresx_sltosi(long slnum); + +int aresx_sztosi(ssize_t sznum); + +unsigned int aresx_sztoui(ssize_t sznum); + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +int aresx_FD_ISSET(int fd, fd_set *fdset); + +void aresx_FD_SET(int fd, fd_set *fdset); + +void aresx_FD_ZERO(fd_set *fdset); + +unsigned short aresx_htons(unsigned short usnum); + +unsigned short aresx_ntohs(unsigned short usnum); + +#ifndef BUILDING_ARES_NOWARN_C +# undef FD_ISSET +# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b)) +# undef FD_SET +# define FD_SET(a,b) aresx_FD_SET((a),(b)) +# undef FD_ZERO +# define FD_ZERO(a) aresx_FD_ZERO((a)) +# undef htons +# define htons(a) aresx_htons((a)) +# undef ntohs +# define ntohs(a) aresx_ntohs((a)) +#endif + +#endif /* __INTEL_COMPILER && __unix__ */ + +#endif /* HEADER_CARES_NOWARN_H */ diff --git a/ares_options.c b/ares_options.c new file mode 100644 index 0000000..5174ef2 --- /dev/null +++ b/ares_options.c @@ -0,0 +1,248 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2008-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares.h" +#include "ares_data.h" +#include "inet_net_pton.h" +#include "ares_private.h" + + +int ares_get_servers(ares_channel channel, + struct ares_addr_node **servers) +{ + struct ares_addr_node *srvr_head = NULL; + struct ares_addr_node *srvr_last = NULL; + struct ares_addr_node *srvr_curr; + int status = ARES_SUCCESS; + int i; + + if (!channel) + return ARES_ENODATA; + + for (i = 0; i < channel->nservers; i++) + { + /* Allocate storage for this server node appending it to the list */ + srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE); + if (!srvr_curr) + { + status = ARES_ENOMEM; + break; + } + if (srvr_last) + { + srvr_last->next = srvr_curr; + } + else + { + srvr_head = srvr_curr; + } + srvr_last = srvr_curr; + + /* Fill this server node data */ + srvr_curr->family = channel->servers[i].addr.family; + if (srvr_curr->family == AF_INET) + memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, + sizeof(srvr_curr->addrV4)); + else + memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, + sizeof(srvr_curr->addrV6)); + } + + if (status != ARES_SUCCESS) + { + if (srvr_head) + { + ares_free_data(srvr_head); + srvr_head = NULL; + } + } + + *servers = srvr_head; + + return status; +} + + +int ares_set_servers(ares_channel channel, + struct ares_addr_node *servers) +{ + struct ares_addr_node *srvr; + int num_srvrs = 0; + int i; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; + + if (!channel) + return ARES_ENODATA; + + ares__destroy_servers_state(channel); + + for (srvr = servers; srvr; srvr = srvr->next) + { + num_srvrs++; + } + + if (num_srvrs > 0) + { + /* Allocate storage for servers state */ + channel->servers = malloc(num_srvrs * sizeof(struct server_state)); + if (!channel->servers) + { + return ARES_ENOMEM; + } + channel->nservers = num_srvrs; + /* Fill servers state address data */ + for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) + { + channel->servers[i].addr.family = srvr->family; + if (srvr->family == AF_INET) + memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, + sizeof(srvr->addrV4)); + else + memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, + sizeof(srvr->addrV6)); + } + /* Initialize servers state remaining data */ + ares__init_servers_state(channel); + } + + return ARES_SUCCESS; +} + +/* Incomming string format: host[:port][,host[:port]]... */ +int ares_set_servers_csv(ares_channel channel, + const char* _csv) +{ + size_t i; + char* csv = NULL; + char* ptr; + char* start_host; + int rv = ARES_SUCCESS; + struct ares_addr_node *servers = NULL; + struct ares_addr_node *last = NULL; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; + + if (!channel) + return ARES_ENODATA; + + ares__destroy_servers_state(channel); + + i = strlen(_csv); + if (i == 0) + return ARES_SUCCESS; /* blank all servers */ + + csv = malloc(i + 2); + strcpy(csv, _csv); + if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */ + csv[i] = ','; + csv[i+1] = 0; + } + + start_host = csv; + for (ptr = csv; *ptr; ptr++) { + if (*ptr == ',') { + char* pp = ptr - 1; + struct in_addr in4; + struct ares_in6_addr in6; + struct ares_addr_node *s = NULL; + + *ptr = 0; /* null terminate host:port string */ + /* Got an entry..see if port was specified. */ + while (pp > start_host) { + if (*pp == ':') + break; /* yes */ + if (!ISDIGIT(*pp)) { + /* Found end of digits before we found :, so wasn't a port */ + pp = ptr; + break; + } + pp--; + } + if ((pp != start_host) && ((pp + 1) < ptr)) { + /* Found it. Parse over the port number */ + (void)strtol(pp + 1, NULL, 10); + *pp = 0; /* null terminate host */ + } + /* resolve host, try ipv4 first, rslt is in network byte order */ + rv = ares_inet_pton(AF_INET, start_host, &in4); + if (!rv) { + /* Ok, try IPv6 then */ + rv = ares_inet_pton(AF_INET6, start_host, &in6); + if (!rv) { + rv = ARES_EBADSTR; + goto out; + } + /* was ipv6, add new server */ + s = malloc(sizeof(*s)); + if (!s) { + rv = ARES_ENOMEM; + goto out; + } + s->family = AF_INET6; + memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr)); + } + else { + /* was ipv4, add new server */ + s = malloc(sizeof(*s)); + if (!s) { + rv = ARES_ENOMEM; + goto out; + } + s->family = AF_INET; + memcpy(&s->addr, &in4, sizeof(struct in_addr)); + } + if (s) { + /* TODO: Add port to ares_addr_node and assign it here. */ + + s->next = NULL; + if (last) { + last->next = s; + } + else { + servers = s; + last = s; + } + } + + /* Set up for next one */ + start_host = ptr + 1; + } + } + + rv = ares_set_servers(channel, servers); + + out: + if (csv) + free(csv); + while (servers) { + struct ares_addr_node *s = servers; + servers = servers->next; + free(s); + } + + return rv; +} diff --git a/ares_parse_a_reply.3 b/ares_parse_a_reply.3 new file mode 100644 index 0000000..7fd06f9 --- /dev/null +++ b/ares_parse_a_reply.3 @@ -0,0 +1,78 @@ +.\" +.\" 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. +.\" +.TH ARES_PARSE_A_REPLY 3 "25 July 1998" +.SH NAME +ares_parse_a_reply \- Parse a reply to a DNS query of type A +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP, +.B struct ares_addrttl *\fIaddrttls\fB, int *\fInaddrttls\fB); +.fi +.SH DESCRIPTION +The +.B ares_parse_a_reply +function parses the response to a query of type A into a +.BR "struct hostent" +and/or an array of +.BR "struct ares_addrttls" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host , +if host is nonnull. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.PP +If +.IR addrttls +and +.IR naddrttls +are both nonnull, +then up to *naddrttls +.BR "struct ares_addrttl" +records are stored in the array pointed to by addrttls, +and then *naddrttls is set to the number of records so stored. +Note that the memory for these records is supplied by the caller. +.SH RETURN VALUES +.B ares_parse_a_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_parse_a_reply.c b/ares_parse_a_reply.c new file mode 100644 index 0000000..4bd0845 --- /dev/null +++ b/ares_parse_a_reply.c @@ -0,0 +1,263 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares_parse_a_reply(const unsigned char *abuf, int alen, + struct hostent **host, + struct ares_addrttl *addrttls, int *naddrttls) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs; + int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */ + int naliases; + long len; + const unsigned char *aptr; + char *hostname, *rr_name, *rr_data, **aliases; + struct in_addr *addrs; + struct hostent *hostent; + const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0; + + /* Set *host to NULL for all failure cases. */ + if (host) + *host = NULL; + /* Same with *naddrttls. */ + if (naddrttls) + *naddrttls = 0; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + if (qdcount != 1) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free(hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + if (host) + { + /* Allocate addresses and aliases; ancount gives an upper bound for + both. */ + addrs = malloc(ancount * sizeof(struct in_addr)); + if (!addrs) + { + free(hostname); + return ARES_ENOMEM; + } + aliases = malloc((ancount + 1) * sizeof(char *)); + if (!aliases) + { + free(hostname); + free(addrs); + return ARES_ENOMEM; + } + } + else + { + addrs = NULL; + aliases = NULL; + } + + naddrs = 0; + naliases = 0; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < (int)ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + break; + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE(aptr); + rr_class = DNS_RR_CLASS(aptr); + rr_len = DNS_RR_LEN(aptr); + rr_ttl = DNS_RR_TTL(aptr); + aptr += RRFIXEDSZ; + + if (rr_class == C_IN && rr_type == T_A + && rr_len == sizeof(struct in_addr) + && strcasecmp(rr_name, hostname) == 0) + { + if (addrs) + { + if (aptr + sizeof(struct in_addr) > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + memcpy(&addrs[naddrs], aptr, sizeof(struct in_addr)); + } + if (naddrs < max_addr_ttls) + { + struct ares_addrttl * const at = &addrttls[naddrs]; + if (aptr + sizeof(struct in_addr) > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + memcpy(&at->ipaddr, aptr, sizeof(struct in_addr)); + at->ttl = rr_ttl; + } + naddrs++; + status = ARES_SUCCESS; + } + + if (rr_class == C_IN && rr_type == T_CNAME) + { + /* Record the RR name as an alias. */ + if (aliases) + aliases[naliases] = rr_name; + else + free(rr_name); + naliases++; + + /* Decode the RR data and replace the hostname with it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len); + if (status != ARES_SUCCESS) + break; + free(hostname); + hostname = rr_data; + + /* Take the min of the TTLs we see in the CNAME chain. */ + if (cname_ttl > rr_ttl) + cname_ttl = rr_ttl; + } + else + free(rr_name); + + aptr += rr_len; + if (aptr > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + } + + if (status == ARES_SUCCESS && naddrs == 0 && naliases == 0) + /* the check for naliases to be zero is to make sure CNAME responses + don't get caught here */ + status = ARES_ENODATA; + if (status == ARES_SUCCESS) + { + /* We got our answer. */ + if (naddrttls) + { + const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls; + for (i = 0; i < n; i++) + { + /* Ensure that each A TTL is no larger than the CNAME TTL. */ + if (addrttls[i].ttl > cname_ttl) + addrttls[i].ttl = cname_ttl; + } + *naddrttls = n; + } + if (aliases) + aliases[naliases] = NULL; + if (host) + { + /* Allocate memory to build the host entry. */ + hostent = malloc(sizeof(struct hostent)); + if (hostent) + { + hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *)); + if (hostent->h_addr_list) + { + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + hostent->h_aliases = aliases; + hostent->h_addrtype = AF_INET; + hostent->h_length = sizeof(struct in_addr); + for (i = 0; i < naddrs; i++) + hostent->h_addr_list[i] = (char *) &addrs[i]; + hostent->h_addr_list[naddrs] = NULL; + if (!naddrs && addrs) + free(addrs); + *host = hostent; + return ARES_SUCCESS; + } + free(hostent); + } + status = ARES_ENOMEM; + } + } + if (aliases) + { + for (i = 0; i < naliases; i++) + free(aliases[i]); + free(aliases); + } + free(addrs); + free(hostname); + return status; +} diff --git a/ares_parse_a_reply.pdf b/ares_parse_a_reply.pdf new file mode 100644 index 0000000..565ff0f Binary files /dev/null and b/ares_parse_a_reply.pdf differ diff --git a/ares_parse_aaaa_reply.3 b/ares_parse_aaaa_reply.3 new file mode 100644 index 0000000..7fdaa68 --- /dev/null +++ b/ares_parse_aaaa_reply.3 @@ -0,0 +1,78 @@ +.\" +.\" Copyright 2005 by Dominick Meglio. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_AAAA_REPLY 3 "20 Nov 2009" +.SH NAME +ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP, +.B struct ares_addr6ttl *\fIaddrttls\fB, int *\fInaddrttls\fB); +.fi +.SH DESCRIPTION +The +.B ares_parse_aaaa_reply +function parses the response to a query of type AAAA into a +.BR "struct hostent" +and/or an array of +.BR "struct ares_addr6ttl" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host , +if host is nonnull. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.PP +If +.IR addrttls +and +.IR naddrttls +are both nonnull, +then up to *naddrttls +.BR "struct ares_addr6ttl" +records are stored in the array pointed to by addrttls, +and then *naddrttls is set to the number of records so stored. +Note that the memory for these records is supplied by the caller. +.SH RETURN VALUES +.B ares_parse_aaaa_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Dominick Meglio +.br +Copyright 2005 by Dominick Meglio. diff --git a/ares_parse_aaaa_reply.c b/ares_parse_aaaa_reply.c new file mode 100644 index 0000000..1fbe838 --- /dev/null +++ b/ares_parse_aaaa_reply.c @@ -0,0 +1,259 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright 2005 Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "inet_net_pton.h" +#include "ares_private.h" + +int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, + struct hostent **host, struct ares_addr6ttl *addrttls, + int *naddrttls) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len, rr_ttl, naddrs; + int cname_ttl = INT_MAX; /* the TTL imposed by the CNAME chain */ + int naliases; + long len; + const unsigned char *aptr; + char *hostname, *rr_name, *rr_data, **aliases; + struct ares_in6_addr *addrs; + struct hostent *hostent; + const int max_addr_ttls = (addrttls && naddrttls) ? *naddrttls : 0; + + /* Set *host to NULL for all failure cases. */ + if (host) + *host = NULL; + /* Same with *naddrttls. */ + if (naddrttls) + *naddrttls = 0; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + if (qdcount != 1) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response(aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free(hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Allocate addresses and aliases; ancount gives an upper bound for both. */ + if (host) + { + addrs = malloc(ancount * sizeof(struct ares_in6_addr)); + if (!addrs) + { + free(hostname); + return ARES_ENOMEM; + } + aliases = malloc((ancount + 1) * sizeof(char *)); + if (!aliases) + { + free(hostname); + free(addrs); + return ARES_ENOMEM; + } + } + else + { + addrs = NULL; + aliases = NULL; + } + naddrs = 0; + naliases = 0; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < (int)ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + break; + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE(aptr); + rr_class = DNS_RR_CLASS(aptr); + rr_len = DNS_RR_LEN(aptr); + rr_ttl = DNS_RR_TTL(aptr); + aptr += RRFIXEDSZ; + + if (rr_class == C_IN && rr_type == T_AAAA + && rr_len == sizeof(struct ares_in6_addr) + && strcasecmp(rr_name, hostname) == 0) + { + if (addrs) + { + if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + memcpy(&addrs[naddrs], aptr, sizeof(struct ares_in6_addr)); + } + if (naddrs < max_addr_ttls) + { + struct ares_addr6ttl * const at = &addrttls[naddrs]; + if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + memcpy(&at->ip6addr, aptr, sizeof(struct ares_in6_addr)); + at->ttl = rr_ttl; + } + naddrs++; + status = ARES_SUCCESS; + } + + if (rr_class == C_IN && rr_type == T_CNAME) + { + /* Record the RR name as an alias. */ + if (aliases) + aliases[naliases] = rr_name; + else + free(rr_name); + naliases++; + + /* Decode the RR data and replace the hostname with it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len); + if (status != ARES_SUCCESS) + break; + free(hostname); + hostname = rr_data; + + /* Take the min of the TTLs we see in the CNAME chain. */ + if (cname_ttl > rr_ttl) + cname_ttl = rr_ttl; + } + else + free(rr_name); + + aptr += rr_len; + if (aptr > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + } + + if (status == ARES_SUCCESS && naddrs == 0) + status = ARES_ENODATA; + if (status == ARES_SUCCESS) + { + /* We got our answer. */ + if (naddrttls) + { + const int n = naddrs < max_addr_ttls ? naddrs : max_addr_ttls; + for (i = 0; i < n; i++) + { + /* Ensure that each A TTL is no larger than the CNAME TTL. */ + if (addrttls[i].ttl > cname_ttl) + addrttls[i].ttl = cname_ttl; + } + *naddrttls = n; + } + if (aliases) + aliases[naliases] = NULL; + if (host) + { + /* Allocate memory to build the host entry. */ + hostent = malloc(sizeof(struct hostent)); + if (hostent) + { + hostent->h_addr_list = malloc((naddrs + 1) * sizeof(char *)); + if (hostent->h_addr_list) + { + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + hostent->h_aliases = aliases; + hostent->h_addrtype = AF_INET6; + hostent->h_length = sizeof(struct ares_in6_addr); + for (i = 0; i < naddrs; i++) + hostent->h_addr_list[i] = (char *) &addrs[i]; + hostent->h_addr_list[naddrs] = NULL; + *host = hostent; + return ARES_SUCCESS; + } + free(hostent); + } + status = ARES_ENOMEM; + } + } + if (aliases) + { + for (i = 0; i < naliases; i++) + free(aliases[i]); + free(aliases); + } + free(addrs); + free(hostname); + return status; +} diff --git a/ares_parse_aaaa_reply.pdf b/ares_parse_aaaa_reply.pdf new file mode 100644 index 0000000..3c6b6e1 Binary files /dev/null and b/ares_parse_aaaa_reply.pdf differ diff --git a/ares_parse_mx_reply.3 b/ares_parse_mx_reply.3 new file mode 100644 index 0000000..87df459 --- /dev/null +++ b/ares_parse_mx_reply.3 @@ -0,0 +1,79 @@ +.\" +.\" 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. +.\" +.TH ARES_PARSE_MX_REPLY 3 "4 August 2009" +.SH NAME +ares_parse_mx_reply \- Parse a reply to a DNS query of type MX +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_mx_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_mx_reply** \fImx_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_mx_reply +function parses the response to a query of type MX into a +linked list of +.I struct ares_mx_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR mx_out . +It is the caller's responsibility to free the resulting +.IR mx_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_mx_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_mx_reply { + struct ares_mx_reply *next; + char *host; + unsigned short priority; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_mx_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.2. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jeremy Lal diff --git a/ares_parse_mx_reply.c b/ares_parse_mx_reply.c new file mode 100644 index 0000000..2180054 --- /dev/null +++ b/ares_parse_mx_reply.c @@ -0,0 +1,170 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2010 Jeremy Lal + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_mx_reply (const unsigned char *abuf, int alen, + struct ares_mx_reply **mx_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_mx_reply *mx_head = NULL; + struct ares_mx_reply *mx_last = NULL; + struct ares_mx_reply *mx_curr; + + /* Set *mx_out to NULL for all failure cases. */ + *mx_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + + /* Check if we are really looking at a MX record */ + if (rr_class == C_IN && rr_type == T_MX) + { + /* parse the MX record itself */ + if (rr_len < 2) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this MX answer appending it to the list */ + mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY); + if (!mx_curr) + { + status = ARES_ENOMEM; + break; + } + if (mx_last) + { + mx_last->next = mx_curr; + } + else + { + mx_head = mx_curr; + } + mx_last = mx_curr; + + vptr = aptr; + mx_curr->priority = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + + status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len); + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + free (hostname); + if (rr_name) + free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (mx_head) + ares_free_data (mx_head); + return status; + } + + /* everything looks fine, return the data */ + *mx_out = mx_head; + + return ARES_SUCCESS; +} diff --git a/ares_parse_mx_reply.pdf b/ares_parse_mx_reply.pdf new file mode 100644 index 0000000..c8c1482 Binary files /dev/null and b/ares_parse_mx_reply.pdf differ diff --git a/ares_parse_ns_reply.3 b/ares_parse_ns_reply.3 new file mode 100644 index 0000000..b6340ac --- /dev/null +++ b/ares_parse_ns_reply.3 @@ -0,0 +1,66 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_NS_REPLY 3 "10 February 2007" +.SH NAME +ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_ns_reply +function parses the response to a query of type NS into a +.BR "struct hostent" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host . +The nameservers are stored into the +.BR aliases +field of the +.IR host +structure. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.SH RETURN VALUES +.B ares_parse_ns_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_query (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Written by Vlad Dinulescu , on behalf of AVIRA Gmbh http://www.avira.com diff --git a/ares_parse_ns_reply.c b/ares_parse_ns_reply.c new file mode 100644 index 0000000..5e9af71 --- /dev/null +++ b/ares_parse_ns_reply.c @@ -0,0 +1,182 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* + * ares_parse_ns_reply created by Vlad Dinulescu + * on behalf of AVIRA Gmbh - http://www.avira.com + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares_parse_ns_reply( const unsigned char* abuf, int alen, + struct hostent** host ) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len; + int nameservers_num; + long len; + const unsigned char *aptr; + char* hostname, *rr_name, *rr_data, **nameservers; + struct hostent *hostent; + + /* Set *host to NULL for all failure cases. */ + *host = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if ( alen < HFIXEDSZ ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT( abuf ); + ancount = DNS_HEADER_ANCOUNT( abuf ); + if ( qdcount != 1 ) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len); + if ( status != ARES_SUCCESS ) + return status; + if ( aptr + len + QFIXEDSZ > abuf + alen ) + { + free( hostname ); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Allocate nameservers array; ancount gives an upper bound */ + nameservers = malloc( ( ancount + 1 ) * sizeof( char * ) ); + if ( !nameservers ) + { + free( hostname ); + return ARES_ENOMEM; + } + nameservers_num = 0; + + /* Examine each answer resource record (RR) in turn. */ + for ( i = 0; i < ( int ) ancount; i++ ) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len ); + if ( status != ARES_SUCCESS ) + break; + aptr += len; + if ( aptr + RRFIXEDSZ > abuf + alen ) + { + status = ARES_EBADRESP; + free(rr_name); + break; + } + rr_type = DNS_RR_TYPE( aptr ); + rr_class = DNS_RR_CLASS( aptr ); + rr_len = DNS_RR_LEN( aptr ); + aptr += RRFIXEDSZ; + + if ( rr_class == C_IN && rr_type == T_NS ) + { + /* Decode the RR data and add it to the nameservers list */ + status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data, + &len); + if ( status != ARES_SUCCESS ) + { + free(rr_name); + break; + } + + nameservers[nameservers_num] = malloc(strlen(rr_data)+1); + + if (nameservers[nameservers_num]==NULL) + { + free(rr_name); + free(rr_data); + status=ARES_ENOMEM; + break; + } + strcpy(nameservers[nameservers_num],rr_data); + free(rr_data); + + nameservers_num++; + } + + free( rr_name ); + + aptr += rr_len; + if ( aptr > abuf + alen ) + { + status = ARES_EBADRESP; + break; + } + } + + if ( status == ARES_SUCCESS && nameservers_num == 0 ) + { + status = ARES_ENODATA; + } + if ( status == ARES_SUCCESS ) + { + /* We got our answer. Allocate memory to build the host entry. */ + nameservers[nameservers_num] = NULL; + hostent = malloc( sizeof( struct hostent ) ); + if ( hostent ) + { + hostent->h_addr_list = malloc( 1 * sizeof( char * ) ); + if ( hostent->h_addr_list ) + { + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + hostent->h_aliases = nameservers; + hostent->h_addrtype = AF_INET; + hostent->h_length = sizeof( struct in_addr ); + hostent->h_addr_list[0] = NULL; + *host = hostent; + return ARES_SUCCESS; + } + free( hostent ); + } + status = ARES_ENOMEM; + } + for ( i = 0; i < nameservers_num; i++ ) + free( nameservers[i] ); + free( nameservers ); + free( hostname ); + return status; +} diff --git a/ares_parse_ns_reply.pdf b/ares_parse_ns_reply.pdf new file mode 100644 index 0000000..afed8a8 Binary files /dev/null and b/ares_parse_ns_reply.pdf differ diff --git a/ares_parse_ptr_reply.3 b/ares_parse_ptr_reply.3 new file mode 100644 index 0000000..1016a68 --- /dev/null +++ b/ares_parse_ptr_reply.3 @@ -0,0 +1,74 @@ +.\" +.\" 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. +.\" +.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998" +.SH NAME +ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP, +.B struct hostent **\fIhost\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_ptr_reply +function parses the response to a query of type PTR into a +.BR "struct hostent" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The parameters +.IR addr , +.IR addrlen , +and +.I family +specify which address was queried for; they are not used to verify the +response, merely used to fill in the address of the +.BR "struct hostent" . +The resulting +.B struct hostent +is stored in allocated memory and a pointer to it stored into the +variable pointed to by +.IR host . +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.SH RETURN VALUES +.B ares_parse_ptr_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyaddr (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff --git a/ares_parse_ptr_reply.c b/ares_parse_ptr_reply.c new file mode 100644 index 0000000..3b6dbc3 --- /dev/null +++ b/ares_parse_ptr_reply.c @@ -0,0 +1,217 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, + int addrlen, int family, struct hostent **host) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len; + long len; + const unsigned char *aptr; + char *ptrname, *hostname, *rr_name, *rr_data; + struct hostent *hostent; + int aliascnt = 0; + int alias_alloc = 8; + char ** aliases; + + /* Set *host to NULL for all failure cases. */ + *host = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + if (qdcount != 1) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len); + if (status != ARES_SUCCESS) + return status; + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free(ptrname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + hostname = NULL; + aliases = malloc(alias_alloc * sizeof(char *)); + if (!aliases) + { + free(ptrname); + return ARES_ENOMEM; + } + for (i = 0; i < (int)ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + break; + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + free(rr_name); + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE(aptr); + rr_class = DNS_RR_CLASS(aptr); + rr_len = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + + if (rr_class == C_IN && rr_type == T_PTR + && strcasecmp(rr_name, ptrname) == 0) + { + /* Decode the RR data and set hostname to it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len); + if (status != ARES_SUCCESS) + { + free(rr_name); + break; + } + if (hostname) + free(hostname); + hostname = rr_data; + aliases[aliascnt] = malloc((strlen(rr_data)+1) * sizeof(char)); + if (!aliases[aliascnt]) + { + free(rr_name); + status = ARES_ENOMEM; + break; + } + strncpy(aliases[aliascnt], rr_data, strlen(rr_data)+1); + aliascnt++; + if (aliascnt >= alias_alloc) { + char **ptr; + alias_alloc *= 2; + ptr = realloc(aliases, alias_alloc * sizeof(char *)); + if(!ptr) { + free(rr_name); + status = ARES_ENOMEM; + break; + } + aliases = ptr; + } + } + + if (rr_class == C_IN && rr_type == T_CNAME) + { + /* Decode the RR data and replace ptrname with it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len); + if (status != ARES_SUCCESS) + { + free(rr_name); + break; + } + free(ptrname); + ptrname = rr_data; + } + + free(rr_name); + aptr += rr_len; + if (aptr > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + } + + if (status == ARES_SUCCESS && !hostname) + status = ARES_ENODATA; + if (status == ARES_SUCCESS) + { + /* We got our answer. Allocate memory to build the host entry. */ + hostent = malloc(sizeof(struct hostent)); + if (hostent) + { + hostent->h_addr_list = malloc(2 * sizeof(char *)); + if (hostent->h_addr_list) + { + hostent->h_addr_list[0] = malloc(addrlen); + if (hostent->h_addr_list[0]) + { + hostent->h_aliases = malloc((aliascnt+1) * sizeof (char *)); + if (hostent->h_aliases) + { + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + for (i=0 ; ih_aliases[i] = aliases[i]; + hostent->h_aliases[aliascnt] = NULL; + hostent->h_addrtype = family; + hostent->h_length = addrlen; + memcpy(hostent->h_addr_list[0], addr, addrlen); + hostent->h_addr_list[1] = NULL; + *host = hostent; + free(aliases); + free(ptrname); + return ARES_SUCCESS; + } + free(hostent->h_addr_list[0]); + } + free(hostent->h_addr_list); + } + free(hostent); + } + status = ARES_ENOMEM; + } + for (i=0 ; i +.PP +.B int ares_parse_srv_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_srv_reply** \fIsrv_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_srv_reply +function parses the response to a query of type SRV into a +linked list of +.I struct ares_srv_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR srv_out . +It is the caller's responsibility to free the resulting +.IR srv_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_srv_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_srv_reply { + struct ares_srv_reply *next; + unsigned short weight; + unsigned short priority; + unsigned short port; + char *host; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_srv_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jakub Hrozek , on behalf of Red Hat, Inc http://www.redhat.com diff --git a/ares_parse_srv_reply.c b/ares_parse_srv_reply.c new file mode 100644 index 0000000..9c7eb6e --- /dev/null +++ b/ares_parse_srv_reply.c @@ -0,0 +1,179 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#include +#include +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +/* AIX portability check */ +#ifndef T_SRV +# define T_SRV 33 /* server selection */ +#endif + +int +ares_parse_srv_reply (const unsigned char *abuf, int alen, + struct ares_srv_reply **srv_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_srv_reply *srv_head = NULL; + struct ares_srv_reply *srv_last = NULL; + struct ares_srv_reply *srv_curr; + + /* Set *srv_out to NULL for all failure cases. */ + *srv_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + + /* Check if we are really looking at a SRV record */ + if (rr_class == C_IN && rr_type == T_SRV) + { + /* parse the SRV record itself */ + if (rr_len < 6) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this SRV answer appending it to the list */ + srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY); + if (!srv_curr) + { + status = ARES_ENOMEM; + break; + } + if (srv_last) + { + srv_last->next = srv_curr; + } + else + { + srv_head = srv_curr; + } + srv_last = srv_curr; + + vptr = aptr; + srv_curr->priority = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + srv_curr->weight = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + srv_curr->port = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + + status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + free (hostname); + if (rr_name) + free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (srv_head) + ares_free_data (srv_head); + return status; + } + + /* everything looks fine, return the data */ + *srv_out = srv_head; + + return ARES_SUCCESS; +} diff --git a/ares_parse_srv_reply.pdf b/ares_parse_srv_reply.pdf new file mode 100644 index 0000000..81b35e9 Binary files /dev/null and b/ares_parse_srv_reply.pdf differ diff --git a/ares_parse_txt_reply.3 b/ares_parse_txt_reply.3 new file mode 100644 index 0000000..c9926bc --- /dev/null +++ b/ares_parse_txt_reply.3 @@ -0,0 +1,80 @@ +.\" +.\" 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. +.\" +.TH ARES_PARSE_TXT_REPLY 3 "27 October 2009" +.SH NAME +ares_parse_txt_reply \- Parse a reply to a DNS query of type TXT +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_txt_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_txt_reply **\fItxt_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_txt_reply +function parses the response to a query of type TXT into a +linked list of +.I struct ares_txt_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR txt_out . +It is the caller's responsibility to free the resulting +.IR txt_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_txt_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_txt_reply { + struct ares_txt_reply *next; + unsigned int length; + unsigned char *txt; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_txt_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jakub Hrozek , on behalf of Red Hat, Inc http://www.redhat.com + diff --git a/ares_parse_txt_reply.c b/ares_parse_txt_reply.c new file mode 100644 index 0000000..5165332 --- /dev/null +++ b/ares_parse_txt_reply.c @@ -0,0 +1,201 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include +#else +# include "nameser.h" +#endif +#ifdef HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_txt_reply (const unsigned char *abuf, int alen, + struct ares_txt_reply **txt_out) +{ + size_t substr_len, str_len; + unsigned int qdcount, ancount, i; + const unsigned char *aptr; + const unsigned char *strptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_txt_reply *txt_head = NULL; + struct ares_txt_reply *txt_last = NULL; + struct ares_txt_reply *txt_curr; + + /* Set *txt_out to NULL for all failure cases. */ + *txt_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + + /* Check if we are really looking at a TXT record */ + if (rr_class == C_IN && rr_type == T_TXT) + { + /* Allocate storage for this TXT answer appending it to the list */ + txt_curr = ares_malloc_data(ARES_DATATYPE_TXT_REPLY); + if (!txt_curr) + { + status = ARES_ENOMEM; + break; + } + if (txt_last) + { + txt_last->next = txt_curr; + } + else + { + txt_head = txt_curr; + } + txt_last = txt_curr; + + /* + * There may be multiple substrings in a single TXT record. Each + * substring may be up to 255 characters in length, with a + * "length byte" indicating the size of the substring payload. + * RDATA contains both the length-bytes and payloads of all + * substrings contained therein. + */ + + /* Compute total length to allow a single memory allocation */ + strptr = aptr; + while (strptr < (aptr + rr_len)) + { + substr_len = (unsigned char)*strptr; + txt_curr->length += substr_len; + strptr += substr_len + 1; + } + + /* Including null byte */ + txt_curr->txt = malloc (txt_curr->length + 1); + if (txt_curr->txt == NULL) + { + status = ARES_ENOMEM; + break; + } + + /* Step through the list of substrings, concatenating them */ + str_len = 0; + strptr = aptr; + while (strptr < (aptr + rr_len)) + { + substr_len = (unsigned char)*strptr; + strptr++; + memcpy ((char *) txt_curr->txt + str_len, strptr, substr_len); + str_len += substr_len; + strptr += substr_len; + } + /* Make sure we NULL-terminate */ + *((char *) txt_curr->txt + txt_curr->length) = '\0'; + } + + /* Don't lose memory in the next iteration */ + free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + free (hostname); + if (rr_name) + free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (txt_head) + ares_free_data (txt_head); + return status; + } + + /* everything looks fine, return the data */ + *txt_out = txt_head; + + return ARES_SUCCESS; +} diff --git a/ares_parse_txt_reply.pdf b/ares_parse_txt_reply.pdf new file mode 100644 index 0000000..ef3e2b9 Binary files /dev/null and b/ares_parse_txt_reply.pdf differ diff --git a/ares_platform.c b/ares_platform.c new file mode 100644 index 0000000..c200615 --- /dev/null +++ b/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"}, +{"mup