mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
- Phil Blundell added the CURLOPT_SCOPE option, as well as adjusted the URL
parser to allow numerical IPv6-addresses to be specified with the scope given, as per RFC4007 - with a percent letter that itself needs to be URL escaped. For example, for an address of fe80::1234%1 the HTTP URL is: "http://[fe80::1234%251]/"
This commit is contained in:
parent
011e5dd864
commit
5aed78e183
6
CHANGES
6
CHANGES
@ -7,6 +7,12 @@
|
|||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
Daniel Stenberg (30 Jul 2008)
|
Daniel Stenberg (30 Jul 2008)
|
||||||
|
- Phil Blundell added the CURLOPT_SCOPE option, as well as adjusted the URL
|
||||||
|
parser to allow numerical IPv6-addresses to be specified with the scope
|
||||||
|
given, as per RFC4007 - with a percent letter that itself needs to be URL
|
||||||
|
escaped. For example, for an address of fe80::1234%1 the HTTP URL is:
|
||||||
|
"http://[fe80::1234%251]/"
|
||||||
|
|
||||||
- PHP's bug report #43158 (http://bugs.php.net/bug.php?id=43158) identifies a
|
- PHP's bug report #43158 (http://bugs.php.net/bug.php?id=43158) identifies a
|
||||||
true bug in libcurl built with OpenSSL. It made curl_easy_getinfo() more or
|
true bug in libcurl built with OpenSSL. It made curl_easy_getinfo() more or
|
||||||
less always return 0 for CURLINFO_SSL_VERIFYRESULT because the function that
|
less always return 0 for CURLINFO_SSL_VERIFYRESULT because the function that
|
||||||
|
@ -19,6 +19,7 @@ This release includes the following changes:
|
|||||||
o Added CURLINFO_APPCONNECT_TIME
|
o Added CURLINFO_APPCONNECT_TIME
|
||||||
o Added test selection by key word in runtests.pl
|
o Added test selection by key word in runtests.pl
|
||||||
o the curl tool's -w option support the %{ssl_verify_result} variable
|
o the curl tool's -w option support the %{ssl_verify_result} variable
|
||||||
|
o Added CURLOPT_SCOPE and scope parsing of the URL according to RFC4007
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
.\" * $Id$
|
.\" * $Id$
|
||||||
.\" **************************************************************************
|
.\" **************************************************************************
|
||||||
.\"
|
.\"
|
||||||
.TH curl_easy_setopt 3 "5 Jan 2008" "libcurl 7.19.0" "libcurl Manual"
|
.TH curl_easy_setopt 3 "30 Jul 2008" "libcurl 7.19.0" "libcurl Manual"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
curl_easy_setopt \- set options for a curl easy handle
|
curl_easy_setopt \- set options for a curl easy handle
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -547,6 +547,9 @@ notably telnet or rlogin) small segments may need to be sent
|
|||||||
without delay. This is less efficient than sending larger amounts of
|
without delay. This is less efficient than sending larger amounts of
|
||||||
data at a time, and can contribute to congestion on the network if
|
data at a time, and can contribute to congestion on the network if
|
||||||
overdone.
|
overdone.
|
||||||
|
.IP CURLOPT_ADDRESS_SCOPE
|
||||||
|
Pass a long specifying the scope_id value to use when connecting to IPv6
|
||||||
|
link-local or site-local addresses.
|
||||||
.SH NAMES and PASSWORDS OPTIONS (Authentication)
|
.SH NAMES and PASSWORDS OPTIONS (Authentication)
|
||||||
.IP CURLOPT_NETRC
|
.IP CURLOPT_NETRC
|
||||||
This parameter controls the preference of libcurl between using user names and
|
This parameter controls the preference of libcurl between using user names and
|
||||||
|
@ -1211,6 +1211,9 @@ typedef enum {
|
|||||||
/* Issuer certificate */
|
/* Issuer certificate */
|
||||||
CINIT(ISSUERCERT, OBJECTPOINT, 170),
|
CINIT(ISSUERCERT, OBJECTPOINT, 170),
|
||||||
|
|
||||||
|
/* (IPv6) Address scope */
|
||||||
|
CINIT(ADDRESS_SCOPE, LONG, 171),
|
||||||
|
|
||||||
CURLOPT_LASTENTRY /* the last unused */
|
CURLOPT_LASTENTRY /* the last unused */
|
||||||
} CURLoption;
|
} CURLoption;
|
||||||
|
|
||||||
|
@ -773,6 +773,13 @@ singleipconnect(struct connectdata *conn,
|
|||||||
|
|
||||||
*connected = FALSE; /* default is not connected */
|
*connected = FALSE; /* default is not connected */
|
||||||
|
|
||||||
|
#ifdef CURLRES_IPV6
|
||||||
|
if (conn->scope && (addr->family == AF_INET6)) {
|
||||||
|
struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)&addr->addr;
|
||||||
|
in6->sin6_scope_id = conn->scope;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* FIXME: do we have Curl_printable_address-like with struct sockaddr* as
|
/* FIXME: do we have Curl_printable_address-like with struct sockaddr* as
|
||||||
argument? */
|
argument? */
|
||||||
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
|
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
|
||||||
|
27
lib/url.c
27
lib/url.c
@ -2091,6 +2091,15 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CURLOPT_ADDRESS_SCOPE:
|
||||||
|
/*
|
||||||
|
* We always get longs when passed plain numericals, but for this value we
|
||||||
|
* know that an unsigned int will always hold the value so we blindly
|
||||||
|
* typecast to this type
|
||||||
|
*/
|
||||||
|
data->set.scope = (unsigned int) va_arg(param, long);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* unknown tag and its companion, just ignore: */
|
/* unknown tag and its companion, just ignore: */
|
||||||
result = CURLE_FAILED_INIT; /* correct this */
|
result = CURLE_FAILED_INIT; /* correct this */
|
||||||
@ -3080,6 +3089,24 @@ static CURLcode ParseURLAndFillConnection(struct SessionHandle *data,
|
|||||||
path[0] = '/';
|
path[0] = '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (conn->host.name[0] == '[' && !data->state.this_is_a_follow) {
|
||||||
|
/* This looks like an IPv6 address literal. See if there is an address
|
||||||
|
scope. */
|
||||||
|
char *percent = strstr (conn->host.name, "%25");
|
||||||
|
if (percent) {
|
||||||
|
char *endp;
|
||||||
|
conn->scope = strtoul (percent + 3, &endp, 10);
|
||||||
|
if (*endp == ']') {
|
||||||
|
/* The address scope was well formed. Knock it out of the hostname. */
|
||||||
|
strcpy (percent, "]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->set.scope)
|
||||||
|
/* Override any scope that was set above. */
|
||||||
|
conn->scope = data->set.scope;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* So if the URL was A://B/C,
|
* So if the URL was A://B/C,
|
||||||
* conn->protostr is A
|
* conn->protostr is A
|
||||||
|
@ -903,6 +903,8 @@ struct connectdata {
|
|||||||
set. */
|
set. */
|
||||||
char *ip_addr_str;
|
char *ip_addr_str;
|
||||||
|
|
||||||
|
unsigned int scope; /* address scope for IPv6 */
|
||||||
|
|
||||||
char protostr[16]; /* store the protocol string in this buffer */
|
char protostr[16]; /* store the protocol string in this buffer */
|
||||||
int socktype; /* SOCK_STREAM or SOCK_DGRAM */
|
int socktype; /* SOCK_STREAM or SOCK_DGRAM */
|
||||||
|
|
||||||
@ -1478,6 +1480,7 @@ struct UserDefined {
|
|||||||
bool proxy_transfer_mode; /* set transfer mode (;type=<a|i>) when doing FTP
|
bool proxy_transfer_mode; /* set transfer mode (;type=<a|i>) when doing FTP
|
||||||
via an HTTP proxy */
|
via an HTTP proxy */
|
||||||
char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */
|
char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */
|
||||||
|
unsigned int scope; /* address scope for IPv6 */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Names {
|
struct Names {
|
||||||
|
Loading…
Reference in New Issue
Block a user