Annotation of embedaddon/curl/tests/server/resolve.c, revision 1.1
1.1 ! misho 1: /***************************************************************************
! 2: * _ _ ____ _
! 3: * Project ___| | | | _ \| |
! 4: * / __| | | | |_) | |
! 5: * | (__| |_| | _ <| |___
! 6: * \___|\___/|_| \_\_____|
! 7: *
! 8: * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
! 9: *
! 10: * This software is licensed as described in the file COPYING, which
! 11: * you should have received as part of this distribution. The terms
! 12: * are also available at https://curl.haxx.se/docs/copyright.html.
! 13: *
! 14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
! 15: * copies of the Software, and permit persons to whom the Software is
! 16: * furnished to do so, under the terms of the COPYING file.
! 17: *
! 18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
! 19: * KIND, either express or implied.
! 20: *
! 21: ***************************************************************************/
! 22: #include "server_setup.h"
! 23:
! 24: /* Purpose
! 25: *
! 26: * Resolve the given name, using system name resolve functions (NOT any
! 27: * function provided by libcurl). Used to see if the name exists and thus if
! 28: * we can allow a test case to use it for testing.
! 29: *
! 30: * Like if 'localhost' actual exists etc.
! 31: *
! 32: */
! 33:
! 34: #ifdef HAVE_SIGNAL_H
! 35: #include <signal.h>
! 36: #endif
! 37: #ifdef HAVE_NETINET_IN_H
! 38: #include <netinet/in.h>
! 39: #endif
! 40: #ifdef _XOPEN_SOURCE_EXTENDED
! 41: /* This define is "almost" required to build on HPUX 11 */
! 42: #include <arpa/inet.h>
! 43: #endif
! 44: #ifdef HAVE_NETDB_H
! 45: #include <netdb.h>
! 46: #endif
! 47:
! 48: #define ENABLE_CURLX_PRINTF
! 49: /* make the curlx header define all printf() functions to use the curlx_*
! 50: versions instead */
! 51: #include "curlx.h" /* from the private lib dir */
! 52: #include "util.h"
! 53:
! 54: /* include memdebug.h last */
! 55: #include "memdebug.h"
! 56:
! 57: static bool use_ipv6 = FALSE;
! 58: static const char *ipv_inuse = "IPv4";
! 59:
! 60: const char *serverlogfile = ""; /* for a util.c function we don't use */
! 61:
! 62: int main(int argc, char *argv[])
! 63: {
! 64: int arg = 1;
! 65: const char *host = NULL;
! 66: int rc = 0;
! 67:
! 68: while(argc>arg) {
! 69: if(!strcmp("--version", argv[arg])) {
! 70: printf("resolve IPv4%s\n",
! 71: #if defined(CURLRES_IPV6)
! 72: "/IPv6"
! 73: #else
! 74: ""
! 75: #endif
! 76: );
! 77: return 0;
! 78: }
! 79: else if(!strcmp("--ipv6", argv[arg])) {
! 80: ipv_inuse = "IPv6";
! 81: use_ipv6 = TRUE;
! 82: arg++;
! 83: }
! 84: else if(!strcmp("--ipv4", argv[arg])) {
! 85: /* for completeness, we support this option as well */
! 86: ipv_inuse = "IPv4";
! 87: use_ipv6 = FALSE;
! 88: arg++;
! 89: }
! 90: else {
! 91: host = argv[arg++];
! 92: }
! 93: }
! 94: if(!host) {
! 95: puts("Usage: resolve [option] <host>\n"
! 96: " --version\n"
! 97: " --ipv4"
! 98: #if defined(CURLRES_IPV6)
! 99: "\n --ipv6"
! 100: #endif
! 101: );
! 102: return 1;
! 103: }
! 104:
! 105: #ifdef WIN32
! 106: win32_init();
! 107: atexit(win32_cleanup);
! 108: #endif
! 109:
! 110: #if defined(CURLRES_IPV6)
! 111: if(use_ipv6) {
! 112: /* Check that the system has IPv6 enabled before checking the resolver */
! 113: curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
! 114: if(s == CURL_SOCKET_BAD)
! 115: /* an IPv6 address was requested and we can't get/use one */
! 116: rc = -1;
! 117: else {
! 118: sclose(s);
! 119: }
! 120: }
! 121:
! 122: if(rc == 0) {
! 123: /* getaddrinfo() resolve */
! 124: struct addrinfo *ai;
! 125: struct addrinfo hints;
! 126:
! 127: memset(&hints, 0, sizeof(hints));
! 128: hints.ai_family = use_ipv6 ? PF_INET6 : PF_INET;
! 129: hints.ai_socktype = SOCK_STREAM;
! 130: hints.ai_flags = 0;
! 131: /* Use parenthesis around functions to stop them from being replaced by
! 132: the macro in memdebug.h */
! 133: rc = (getaddrinfo)(host, "80", &hints, &ai);
! 134: if(rc == 0)
! 135: (freeaddrinfo)(ai);
! 136: }
! 137: #else
! 138: if(use_ipv6) {
! 139: puts("IPv6 support has been disabled in this program");
! 140: return 1;
! 141: }
! 142: else {
! 143: /* gethostbyname() resolve */
! 144: struct hostent *he;
! 145:
! 146: he = gethostbyname(host);
! 147:
! 148: rc = !he;
! 149: }
! 150: #endif
! 151:
! 152: if(rc)
! 153: printf("Resolving %s '%s' didn't work\n", ipv_inuse, host);
! 154:
! 155: return !!rc;
! 156: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>