Commit 02938a01 authored by Gisle Vanem's avatar Gisle Vanem
Browse files

Changes for combination ENABLE_IPV6 and USE_ARES.

parent e40641bf
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -293,4 +293,52 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
  return NULL; /* no struct yet */
}

#if !defined(CURLRES_IPV4)
/*
 * The rest of this file is copied from hostip4.c. (needed for the
 * combination USE_ARES and ENABLE_IPV6).
 */
struct namebuf {
  struct hostent hostentry;
  char *h_addr_list[2];
  struct in_addr addrentry;
  char h_name[16]; /* 123.123.123.123 = 15 letters is maximum */
};

/*
 * Curl_ip2addr() takes a 32bit ipv4 internet address as input parameter
 * together with a pointer to the string version of the address, and it
 * returns a Curl_addrinfo chain filled in correctly with information for this
 * address/host.
 *
 * The input parameters ARE NOT checked for validity but they are expected
 * to have been checked already when this is called.
 */
Curl_addrinfo *Curl_ip2addr(in_addr_t num, char *hostname, int port)
{
  Curl_addrinfo *ai;
  struct hostent *h;
  struct in_addr *addrentry;
  struct namebuf buffer;
  struct namebuf *buf = &buffer;

  h = &buf->hostentry;
  h->h_addr_list = &buf->h_addr_list[0];
  addrentry = &buf->addrentry;
  addrentry->s_addr = num;
  h->h_addr_list[0] = (char*)addrentry;
  h->h_addr_list[1] = NULL;
  h->h_addrtype = AF_INET;
  h->h_length = sizeof(*addrentry);
  h->h_name = &buf->h_name[0];
  h->h_aliases = NULL;

  /* Now store the dotted version of the address */
  snprintf((char *)h->h_name, 16, "%s", hostname);

  ai = Curl_he2ai(h, port);

  return ai;
}
#endif /* !CURLRES_IPV4 */
#endif /* CURLRES_ARES */
+7 −7
Original line number Diff line number Diff line
@@ -365,6 +365,7 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
}

#endif /* CURLRES_SYNCH */
#endif /* CURLRES_IPV4 */

/*
 * Curl_he2ai() translates from a hostent struct to a Curl_addrinfo struct.
@@ -451,4 +452,3 @@ Curl_addrinfo *Curl_he2ai(struct hostent *he, int port)
  return firstai;
}
#endif /* CURLRES_IPV4 */
+4 −3
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ bool Curl_ipvalid(struct SessionHandle *data)
  return TRUE;
}

#ifndef USE_THREADING_GETADDRINFO
#if !defined(USE_THREADING_GETADDRINFO) && !defined(USE_ARES)

#ifdef DEBUG_ADDRINFO
static void dump_addrinfo(struct connectdata *conn, const struct addrinfo *ai)
@@ -213,7 +213,8 @@ static void dump_addrinfo(struct connectdata *conn, const struct addrinfo *ai)
#endif

/*
 * Curl_getaddrinfo() when built ipv6-enabled (non-threading version).
 * Curl_getaddrinfo() when built ipv6-enabled (non-threading and
 * non-ares version).
 *
 * Returns name information about the given hostname and port number. If
 * successful, the 'addrinfo' is returned and the forth argument will point to
@@ -295,6 +296,6 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,

  return res;
}
#endif /* USE_THREADING_GETADDRINFO */
#endif /* !USE_THREADING_GETADDRINFO && !USE_ARES */
#endif /* ipv6 */
+4 −8
Original line number Diff line number Diff line
@@ -358,10 +358,6 @@ typedef int curl_socket_t;
#endif /* curl_socket_typedef */


#if defined(ENABLE_IPV6) && defined(USE_ARES)
#error "ares does not yet support IPv6. Disable IPv6 or ares and rebuild"
#endif

#if defined(WIN32) && !defined(__CYGWIN__) && !defined(USE_ARES) && \
    !defined(__LCC__)  /* lcc-win32 doesn't have _beginthreadex() */
#ifdef ENABLE_IPV6