Annotation of embedaddon/curl/lib/hostasyn.c, revision 1.1
1.1 ! misho 1: /***************************************************************************
! 2: * _ _ ____ _
! 3: * Project ___| | | | _ \| |
! 4: * / __| | | | |_) | |
! 5: * | (__| |_| | _ <| |___
! 6: * \___|\___/|_| \_\_____|
! 7: *
! 8: * Copyright (C) 1998 - 2019, 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:
! 23: #include "curl_setup.h"
! 24:
! 25: /***********************************************************************
! 26: * Only for builds using asynchronous name resolves
! 27: **********************************************************************/
! 28: #ifdef CURLRES_ASYNCH
! 29:
! 30: #ifdef HAVE_NETINET_IN_H
! 31: #include <netinet/in.h>
! 32: #endif
! 33: #ifdef HAVE_NETDB_H
! 34: #include <netdb.h>
! 35: #endif
! 36: #ifdef HAVE_ARPA_INET_H
! 37: #include <arpa/inet.h>
! 38: #endif
! 39: #ifdef __VMS
! 40: #include <in.h>
! 41: #include <inet.h>
! 42: #endif
! 43:
! 44: #ifdef HAVE_PROCESS_H
! 45: #include <process.h>
! 46: #endif
! 47:
! 48: #include "urldata.h"
! 49: #include "sendf.h"
! 50: #include "hostip.h"
! 51: #include "hash.h"
! 52: #include "share.h"
! 53: #include "strerror.h"
! 54: #include "url.h"
! 55: #include "curl_memory.h"
! 56: /* The last #include file should be: */
! 57: #include "memdebug.h"
! 58:
! 59: /*
! 60: * Curl_addrinfo_callback() gets called by ares, gethostbyname_thread()
! 61: * or getaddrinfo_thread() when we got the name resolved (or not!).
! 62: *
! 63: * If the status argument is CURL_ASYNC_SUCCESS, this function takes
! 64: * ownership of the Curl_addrinfo passed, storing the resolved data
! 65: * in the DNS cache.
! 66: *
! 67: * The storage operation locks and unlocks the DNS cache.
! 68: */
! 69: CURLcode Curl_addrinfo_callback(struct connectdata *conn,
! 70: int status,
! 71: struct Curl_addrinfo *ai)
! 72: {
! 73: struct Curl_dns_entry *dns = NULL;
! 74: CURLcode result = CURLE_OK;
! 75:
! 76: conn->async.status = status;
! 77:
! 78: if(CURL_ASYNC_SUCCESS == status) {
! 79: if(ai) {
! 80: struct Curl_easy *data = conn->data;
! 81:
! 82: if(data->share)
! 83: Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
! 84:
! 85: dns = Curl_cache_addr(data, ai,
! 86: conn->async.hostname,
! 87: conn->async.port);
! 88: if(data->share)
! 89: Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
! 90:
! 91: if(!dns) {
! 92: /* failed to store, cleanup and return error */
! 93: Curl_freeaddrinfo(ai);
! 94: result = CURLE_OUT_OF_MEMORY;
! 95: }
! 96: }
! 97: else {
! 98: result = CURLE_OUT_OF_MEMORY;
! 99: }
! 100: }
! 101:
! 102: conn->async.dns = dns;
! 103:
! 104: /* Set async.done TRUE last in this function since it may be used multi-
! 105: threaded and once this is TRUE the other thread may read fields from the
! 106: async struct */
! 107: conn->async.done = TRUE;
! 108:
! 109: /* IPv4: The input hostent struct will be freed by ares when we return from
! 110: this function */
! 111: return result;
! 112: }
! 113:
! 114: /*
! 115: * Curl_getaddrinfo() is the generic low-level name resolve API within this
! 116: * source file. There are several versions of this function - for different
! 117: * name resolve layers (selected at build-time). They all take this same set
! 118: * of arguments
! 119: */
! 120: Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
! 121: const char *hostname,
! 122: int port,
! 123: int *waitp)
! 124: {
! 125: return Curl_resolver_getaddrinfo(conn, hostname, port, waitp);
! 126: }
! 127:
! 128: #endif /* CURLRES_ASYNCH */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>