]> granicus.if.org Git - curl/commitdiff
Changes for combination ENABLE_IPV6 and USE_ARES.
authorGisle Vanem <gvanem@broadpark.no>
Fri, 21 Jul 2006 04:22:44 +0000 (04:22 +0000)
committerGisle Vanem <gvanem@broadpark.no>
Fri, 21 Jul 2006 04:22:44 +0000 (04:22 +0000)
lib/hostares.c
lib/hostip4.c
lib/hostip6.c
lib/setup.h

index 646af5839ce557acc7c371d219ea42d27d8e27ac..f08ad585985902c2d102a12ad89ff48f143f726f 100644 (file)
@@ -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 */
index bba9fb1dc5c38721f465c4d33a3ffd78fdb46665..e55eb38d841724b4db5790758cb38b1403e93e66 100644 (file)
@@ -365,14 +365,15 @@ 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.
  * The Curl_addrinfo is meant to work like the addrinfo struct does for IPv6
  * stacks, but for all hosts and environments.
- *      
+ *
  *   Curl_addrinfo defined in "lib/hostip.h"
- *      
+ *
  *     struct Curl_addrinfo {
  *       int                   ai_flags;
  *       int                   ai_family;
@@ -383,9 +384,9 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
  *       struct sockaddr      *ai_addr;
  *       struct Curl_addrinfo *ai_next;
  *     };
- *      
+ *
  *   hostent defined in <netdb.h>
- *      
+ *
  *     struct hostent {
  *       char    *h_name;
  *       char    **h_aliases;
@@ -393,9 +394,9 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
  *       int     h_length;
  *       char    **h_addr_list;
  *     };
- *      
+ *
  *   for backward compatibility:
- *      
+ *
  *     #define h_addr  h_addr_list[0]
  */
 
@@ -451,4 +452,3 @@ Curl_addrinfo *Curl_he2ai(struct hostent *he, int port)
   return firstai;
 }
 
-#endif /* CURLRES_IPV4 */
index 55be255e7e2cfd632f1fd1f19664a8b0ba059aaf..b013ee9023ab7a79e64cc90be1801007e2e710ca 100644 (file)
@@ -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 */
 
index f89c82e5fbaed90892d1f90e31735463a8b59c78..6e221a13645bef5be752cf37e7faf2c548863588 100644 (file)
@@ -216,7 +216,7 @@ typedef unsigned char bool;
 
 /*
  * 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.
  *
  * 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 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.
  */
 
@@ -251,7 +251,7 @@ typedef unsigned char bool;
 #else /* HAVE_RECV */
 #ifdef DJGPP
 #define sread(x,y,z) (ssize_t)read_s((int)(x), (char *)(y), (int)(z))
-#endif 
+#endif
 #endif /* HAVE_RECV */
 
 #ifdef HAVE_SEND
@@ -270,7 +270,7 @@ typedef unsigned char bool;
 #else /* HAVE_SEND */
 #ifdef DJGPP
 #define swrite(x,y,z) (ssize_t)write_s((int)(x), (char *)(y), (int)(z))
-#endif 
+#endif
 #endif /* HAVE_SEND */
 
 
@@ -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