Changes for combination ENABLE_IPV6 and USE_ARES.
This commit is contained in:
Родитель
e40641bf7c
Коммит
02938a010d
|
@ -293,4 +293,52 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
|
||||||
return NULL; /* no struct yet */
|
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 */
|
#endif /* CURLRES_ARES */
|
||||||
|
|
|
@ -365,14 +365,15 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CURLRES_SYNCH */
|
#endif /* CURLRES_SYNCH */
|
||||||
|
#endif /* CURLRES_IPV4 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Curl_he2ai() translates from a hostent struct to a Curl_addrinfo struct.
|
* Curl_he2ai() translates from a hostent struct to a Curl_addrinfo struct.
|
||||||
* The Curl_addrinfo is meant to work like the addrinfo struct does for IPv6
|
* The Curl_addrinfo is meant to work like the addrinfo struct does for IPv6
|
||||||
* stacks, but for all hosts and environments.
|
* stacks, but for all hosts and environments.
|
||||||
*
|
*
|
||||||
* Curl_addrinfo defined in "lib/hostip.h"
|
* Curl_addrinfo defined in "lib/hostip.h"
|
||||||
*
|
*
|
||||||
* struct Curl_addrinfo {
|
* struct Curl_addrinfo {
|
||||||
* int ai_flags;
|
* int ai_flags;
|
||||||
* int ai_family;
|
* int ai_family;
|
||||||
|
@ -383,9 +384,9 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
|
||||||
* struct sockaddr *ai_addr;
|
* struct sockaddr *ai_addr;
|
||||||
* struct Curl_addrinfo *ai_next;
|
* struct Curl_addrinfo *ai_next;
|
||||||
* };
|
* };
|
||||||
*
|
*
|
||||||
* hostent defined in <netdb.h>
|
* hostent defined in <netdb.h>
|
||||||
*
|
*
|
||||||
* struct hostent {
|
* struct hostent {
|
||||||
* char *h_name;
|
* char *h_name;
|
||||||
* char **h_aliases;
|
* char **h_aliases;
|
||||||
|
@ -393,9 +394,9 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
|
||||||
* int h_length;
|
* int h_length;
|
||||||
* char **h_addr_list;
|
* char **h_addr_list;
|
||||||
* };
|
* };
|
||||||
*
|
*
|
||||||
* for backward compatibility:
|
* for backward compatibility:
|
||||||
*
|
*
|
||||||
* #define h_addr h_addr_list[0]
|
* #define h_addr h_addr_list[0]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -451,4 +452,3 @@ Curl_addrinfo *Curl_he2ai(struct hostent *he, int port)
|
||||||
return firstai;
|
return firstai;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CURLRES_IPV4 */
|
|
||||||
|
|
|
@ -191,7 +191,7 @@ bool Curl_ipvalid(struct SessionHandle *data)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef USE_THREADING_GETADDRINFO
|
#if !defined(USE_THREADING_GETADDRINFO) && !defined(USE_ARES)
|
||||||
|
|
||||||
#ifdef DEBUG_ADDRINFO
|
#ifdef DEBUG_ADDRINFO
|
||||||
static void dump_addrinfo(struct connectdata *conn, const struct addrinfo *ai)
|
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
|
#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
|
* Returns name information about the given hostname and port number. If
|
||||||
* successful, the 'addrinfo' is returned and the forth argument will point to
|
* 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;
|
return res;
|
||||||
}
|
}
|
||||||
#endif /* USE_THREADING_GETADDRINFO */
|
#endif /* !USE_THREADING_GETADDRINFO && !USE_ARES */
|
||||||
#endif /* ipv6 */
|
#endif /* ipv6 */
|
||||||
|
|
||||||
|
|
12
lib/setup.h
12
lib/setup.h
|
@ -216,7 +216,7 @@ typedef unsigned char bool;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The definitions for the return type and arguments types
|
* The definitions for the return type and arguments types
|
||||||
* of functions recv() and send() belong and come from the
|
* of functions recv() and send() belong and come from the
|
||||||
* configuration file. Do not define them in any other place.
|
* configuration file. Do not define them in any other place.
|
||||||
*
|
*
|
||||||
* HAVE_RECV is defined if you have a function named recv()
|
* HAVE_RECV is defined if you have a function named recv()
|
||||||
|
@ -232,7 +232,7 @@ typedef unsigned char bool;
|
||||||
* If yours has another name then don't define HAVE_SEND.
|
* If yours has another name then don't define HAVE_SEND.
|
||||||
*
|
*
|
||||||
* If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
|
* If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
|
||||||
* SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
|
* SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
|
||||||
* SEND_TYPE_RETV must also be defined.
|
* SEND_TYPE_RETV must also be defined.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -251,7 +251,7 @@ typedef unsigned char bool;
|
||||||
#else /* HAVE_RECV */
|
#else /* HAVE_RECV */
|
||||||
#ifdef DJGPP
|
#ifdef DJGPP
|
||||||
#define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
|
#define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
|
||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_RECV */
|
#endif /* HAVE_RECV */
|
||||||
|
|
||||||
#ifdef HAVE_SEND
|
#ifdef HAVE_SEND
|
||||||
|
@ -270,7 +270,7 @@ typedef unsigned char bool;
|
||||||
#else /* HAVE_SEND */
|
#else /* HAVE_SEND */
|
||||||
#ifdef DJGPP
|
#ifdef DJGPP
|
||||||
#define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
|
#define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
|
||||||
#endif
|
#endif
|
||||||
#endif /* HAVE_SEND */
|
#endif /* HAVE_SEND */
|
||||||
|
|
||||||
|
|
||||||
|
@ -358,10 +358,6 @@ typedef int curl_socket_t;
|
||||||
#endif /* curl_socket_typedef */
|
#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) && \
|
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(USE_ARES) && \
|
||||||
!defined(__LCC__) /* lcc-win32 doesn't have _beginthreadex() */
|
!defined(__LCC__) /* lcc-win32 doesn't have _beginthreadex() */
|
||||||
#ifdef ENABLE_IPV6
|
#ifdef ENABLE_IPV6
|
||||||
|
|
Загрузка…
Ссылка в новой задаче