Commit 2297eca1 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Added CURLOPT_IPRESOLVE support

parent 09ccfcdc
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -8,6 +8,11 @@


Daniel (19 September)
- Added the CURLOPT_IPRESOLVE option, that allows an application to select
  what kind of IP addresses he wants to use when resolving host names. This
  is only interesting when using host names that resolve addresses using more
  than one version of IP.

- Applied Markus Moeller's patch that introduces SPNEGO support if libcurl
  is built with the FBopenssl libraries. curl_version_info() now returns
  info on SPNEGO availability. The patch also made the GSSAPI stuff work fine
+14 −1
Original line number Diff line number Diff line
@@ -678,15 +678,28 @@ typedef enum {
     Note that setting multiple bits may cause extra network round-trips. */
  CINIT(PROXYAUTH, LONG, 111),

  /* FPT Option that changes the timeout, in seconds, associated with 
  /* FTP option that changes the timeout, in seconds, associated with 
     getting a response.  This is different from transfer timeout time and
     essentially places a demand on the FTP server to acknowledge commands
     in a timely manner. */
  CINIT(FTP_RESPONSE_TIMEOUT, LONG , 112),

  /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
     tell libcurl to resolve names to those IP versions only. This only has
     affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
  CINIT(IPRESOLVE, LONG, 113),

  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

  /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
     name resolves addresses using more than one IP protocol version, this
     option might be handy to force libcurl to use a specific IP version. */
#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
                                     versions that your system allows */
#define CURL_IPRESOLVE_V4       1 /* resolve to ipv4 addresses */
#define CURL_IPRESOLVE_V6       2 /* resolve to ipv6 addresses */

  /* two convenient "aliases" that follow the name scheme better */
#define CURLOPT_WRITEDATA CURLOPT_FILE
#define CURLOPT_READDATA  CURLOPT_INFILE 
+18 −2
Original line number Diff line number Diff line
@@ -653,7 +653,7 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn,
  struct addrinfo hints, *res;
  int error;
  char sbuf[NI_MAXSERV];
  int s, pf = PF_UNSPEC;
  int s, pf;
  struct SessionHandle *data = conn->data;

  *waitp=0; /* don't wait, we have the response now */
@@ -665,12 +665,28 @@ static Curl_addrinfo *my_getaddrinfo(struct connectdata *conn,
     * when PF_UNSPEC is used, so thus we switch to a mere PF_INET lookup if
     * the stack seems to be a non-ipv6 one. */
    pf = PF_INET;
  else
  else {
    /* This seems to be an IPv6-capable stack, use PF_UNSPEC for the widest
     * possible checks. And close the socket again.
     */
    sclose(s);

    /*
     * Check if a more limited name resolve has been requested.
     */
    switch(data->set.ip_version) {
    case CURL_IPRESOLVE_V4:
      pf = PF_INET;
      break;
    case CURL_IPRESOLVE_V6:
      pf = PF_INET6;
      break;
    default:
      pf = PF_UNSPEC;
      break;
    }
  }
 
  memset(&hints, 0, sizeof(hints));
  hints.ai_family = pf;
  hints.ai_socktype = SOCK_STREAM;
+2 −0
Original line number Diff line number Diff line
@@ -827,6 +827,8 @@ struct UserDefined {

  struct curl_slist *http200aliases; /* linked list of aliases for http200 */

  int ip_version; 
  
/* Here follows boolean settings that define how to behave during
   this session. They are STATIC, set by libcurl users or at least initially
   and they don't change during operations. */