mirror of
https://github.com/curl/curl.git
synced 2026-08-24 10:03:30 +03:00
ftp: remove 2 Curl_resolv_blocking() calls
They are no longer needed with the new peers and dns filter. Connection setup will take care of the resoling and connecting. Closes #21512
This commit is contained in:
parent
3e9817cd1b
commit
71a5725563
6 changed files with 16 additions and 91 deletions
23
lib/cf-dns.c
23
lib/cf-dns.c
|
|
@ -53,8 +53,7 @@ static struct cf_dns_ctx *cf_dns_ctx_create(struct Curl_easy *data,
|
|||
uint8_t dns_queries,
|
||||
uint8_t transport,
|
||||
bool for_proxy,
|
||||
bool complete_resolve,
|
||||
struct Curl_dns_entry *dns)
|
||||
bool complete_resolve)
|
||||
{
|
||||
struct cf_dns_ctx *ctx;
|
||||
|
||||
|
|
@ -67,8 +66,6 @@ static struct cf_dns_ctx *cf_dns_ctx_create(struct Curl_easy *data,
|
|||
ctx->transport = transport;
|
||||
ctx->for_proxy = for_proxy;
|
||||
ctx->complete_resolve = complete_resolve;
|
||||
ctx->dns = Curl_dns_entry_link(data, dns);
|
||||
ctx->started = !!ctx->dns;
|
||||
|
||||
CURL_TRC_DNS(data, "created DNS filter for %s:%u, transport=%x, queries=%x",
|
||||
peer->hostname, peer->port, ctx->transport, ctx->dns_queries);
|
||||
|
|
@ -383,8 +380,7 @@ static CURLcode cf_dns_create(struct Curl_cfilter **pcf,
|
|||
uint8_t dns_queries,
|
||||
uint8_t transport,
|
||||
bool for_proxy,
|
||||
bool complete_resolve,
|
||||
struct Curl_dns_entry *dns)
|
||||
bool complete_resolve)
|
||||
{
|
||||
struct Curl_cfilter *cf = NULL;
|
||||
struct cf_dns_ctx *ctx;
|
||||
|
|
@ -392,7 +388,7 @@ static CURLcode cf_dns_create(struct Curl_cfilter **pcf,
|
|||
|
||||
(void)data;
|
||||
ctx = cf_dns_ctx_create(data, peer, dns_queries, transport,
|
||||
for_proxy, complete_resolve, dns);
|
||||
for_proxy, complete_resolve);
|
||||
if(!ctx) {
|
||||
result = CURLE_OUT_OF_MEMORY;
|
||||
goto out;
|
||||
|
|
@ -408,18 +404,13 @@ out:
|
|||
}
|
||||
|
||||
/* Adds a "resolv" filter at the top of the connection's filter chain.
|
||||
* For FIRSTSOCKET, the `dns` parameter may be NULL. The filter will
|
||||
* figure out hostname and port to connect to and start the DNS resolve
|
||||
* on the first connect attempt.
|
||||
* For SECONDARYSOCKET, the `dns` parameter must be given.
|
||||
*/
|
||||
* The filter will resolve the peer on the first connect attempt. */
|
||||
CURLcode Curl_cf_dns_add(struct Curl_easy *data,
|
||||
struct connectdata *conn,
|
||||
int sockindex,
|
||||
struct Curl_peer *peer,
|
||||
uint8_t dns_queries,
|
||||
uint8_t transport,
|
||||
struct Curl_dns_entry *dns)
|
||||
uint8_t transport)
|
||||
{
|
||||
struct Curl_cfilter *cf = NULL;
|
||||
bool for_proxy = FALSE;
|
||||
|
|
@ -433,7 +424,7 @@ CURLcode Curl_cf_dns_add(struct Curl_easy *data,
|
|||
#endif
|
||||
|
||||
result = cf_dns_create(&cf, data, peer, dns_queries, transport,
|
||||
for_proxy, FALSE, dns);
|
||||
for_proxy, FALSE);
|
||||
if(result)
|
||||
goto out;
|
||||
Curl_conn_cf_add(data, conn, sockindex, cf);
|
||||
|
|
@ -458,7 +449,7 @@ CURLcode Curl_cf_dns_insert_after(struct Curl_cfilter *cf_at,
|
|||
CURLcode result;
|
||||
|
||||
result = cf_dns_create(&cf, data, peer, dns_queries, transport,
|
||||
FALSE, complete_resolve, NULL);
|
||||
FALSE, complete_resolve);
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,7 @@ CURLcode Curl_cf_dns_add(struct Curl_easy *data,
|
|||
int sockindex,
|
||||
struct Curl_peer *peer,
|
||||
uint8_t dns_queries,
|
||||
uint8_t transport,
|
||||
struct Curl_dns_entry *dns);
|
||||
uint8_t transport);
|
||||
|
||||
CURLcode Curl_cf_dns_insert_after(struct Curl_cfilter *cf_at,
|
||||
struct Curl_easy *data,
|
||||
|
|
|
|||
|
|
@ -576,7 +576,6 @@ out:
|
|||
CURLcode Curl_conn_setup(struct Curl_easy *data,
|
||||
struct connectdata *conn,
|
||||
int sockindex,
|
||||
struct Curl_dns_entry *dns,
|
||||
int ssl_mode)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
|
|
@ -614,7 +613,7 @@ CURLcode Curl_conn_setup(struct Curl_easy *data,
|
|||
dns_queries |= CURL_DNSQ_HTTPS;
|
||||
#endif
|
||||
result = Curl_cf_dns_add(data, conn, sockindex, peer, dns_queries,
|
||||
conn->transport_wanted, dns);
|
||||
conn->transport_wanted);
|
||||
DEBUGASSERT(conn->cfilter[sockindex]);
|
||||
out:
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -116,12 +116,11 @@ CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at,
|
|||
/**
|
||||
* Setup the cfilters at `sockindex` in connection `conn`.
|
||||
* If no filter chain is installed yet, inspects the configuration
|
||||
* in `data` and `conn? to install a suitable filter chain.
|
||||
* in `data` and `conn` to install a suitable filter chain.
|
||||
*/
|
||||
CURLcode Curl_conn_setup(struct Curl_easy *data,
|
||||
struct connectdata *conn,
|
||||
int sockindex,
|
||||
struct Curl_dns_entry *dns,
|
||||
int ssl_mode);
|
||||
|
||||
/* Set conn to allow multiplexing. */
|
||||
|
|
|
|||
72
lib/ftp.c
72
lib/ftp.c
|
|
@ -2059,7 +2059,6 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
|
|||
{
|
||||
struct connectdata *conn = data->conn;
|
||||
CURLcode result;
|
||||
struct Curl_dns_entry *dns = NULL;
|
||||
const struct pingpong *pp = &ftpc->pp;
|
||||
char *newhost = NULL;
|
||||
unsigned short newport = 0;
|
||||
|
|
@ -2146,63 +2145,6 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
|
|||
return CURLE_FTP_WEIRD_PASV_REPLY;
|
||||
}
|
||||
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
if(conn->bits.proxy) {
|
||||
/* This connection uses a proxy and we need to connect to the proxy again
|
||||
* here. We do not want to rely on a former host lookup that might have
|
||||
* expired now, instead we remake the lookup here and now! */
|
||||
struct ip_quadruple ipquad;
|
||||
bool is_ipv6;
|
||||
const struct Curl_peer *dest = conn->bits.socksproxy ?
|
||||
conn->socks_proxy.peer : conn->http_proxy.peer;
|
||||
|
||||
if(!dest) {
|
||||
result = CURLE_FAILED_INIT;
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = Curl_conn_get_ip_info(data, data->conn, FIRSTSOCKET,
|
||||
&is_ipv6, &ipquad);
|
||||
if(result)
|
||||
goto error;
|
||||
|
||||
(void)Curl_resolv_blocking(
|
||||
data, is_ipv6 ? CURL_DNSQ_AAAA : CURL_DNSQ_A,
|
||||
dest->hostname, dest->port, Curl_conn_get_transport(data, conn),
|
||||
&dns);
|
||||
|
||||
if(!dns) {
|
||||
failf(data, "cannot resolve proxy host %s:%hu",
|
||||
dest->hostname, dest->port);
|
||||
result = CURLE_COULDNT_RESOLVE_PROXY;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
/* normal, direct, ftp connection */
|
||||
DEBUGASSERT(newhost);
|
||||
|
||||
/* postponed address resolution in case of tcp fastopen */
|
||||
if(conn->bits.tcp_fastopen && !conn->bits.reuse && !newhost[0]) {
|
||||
curlx_free(newhost);
|
||||
result = ftp_control_addr_dup(data, &newhost);
|
||||
if(result)
|
||||
goto error;
|
||||
}
|
||||
|
||||
(void)Curl_resolv_blocking(
|
||||
data, Curl_resolv_dns_queries(data, conn->ip_version),
|
||||
newhost, newport, Curl_conn_get_transport(data, conn), &dns);
|
||||
|
||||
if(!dns) {
|
||||
failf(data, "cannot resolve new host %s:%hu", newhost, newport);
|
||||
result = CURLE_FTP_CANT_GET_HOST;
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
DEBUGASSERT(newhost);
|
||||
Curl_peer_unlink(&conn->origin2);
|
||||
result = Curl_peer_create(data, conn->scheme, newhost, newport,
|
||||
|
|
@ -2221,7 +2163,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
|
|||
goto error;
|
||||
}
|
||||
|
||||
result = Curl_conn_setup(data, conn, SECONDARYSOCKET, dns,
|
||||
result = Curl_conn_setup(data, conn, SECONDARYSOCKET,
|
||||
conn->bits.ftp_use_data_ssl ?
|
||||
CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
|
||||
|
||||
|
|
@ -2241,13 +2183,10 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
|
|||
|
||||
#ifdef CURLVERBOSE
|
||||
if(data->set.verbose) {
|
||||
/* Dump information about this second connection when we have issued a PASV
|
||||
* command before and thus we have connected to a possibly new IP address.
|
||||
*/
|
||||
char buf[256];
|
||||
Curl_printable_address(dns->addr, buf, sizeof(buf));
|
||||
infof(data, "Connecting to %s (%s) port %d",
|
||||
conn->origin2->hostname, buf, conn->origin2->port);
|
||||
/* Dump information about this second connection when we have issued
|
||||
* a PASV command. */
|
||||
infof(data, "Connecting to %s port %d",
|
||||
conn->origin2->hostname, conn->origin2->port);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -2255,7 +2194,6 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
|
|||
ftp_state(data, ftpc, FTP_STOP); /* this phase is completed */
|
||||
|
||||
error:
|
||||
Curl_dns_entry_unlink(data, &dns);
|
||||
curlx_free(newhost);
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3002,8 +3002,7 @@ CURLcode Curl_connect(struct Curl_easy *data, bool *pconnected)
|
|||
*pconnected = TRUE;
|
||||
}
|
||||
else {
|
||||
result = Curl_conn_setup(data, conn, FIRSTSOCKET, NULL,
|
||||
CURL_CF_SSL_DEFAULT);
|
||||
result = Curl_conn_setup(data, conn, FIRSTSOCKET, CURL_CF_SSL_DEFAULT);
|
||||
if(!result)
|
||||
result = Curl_headers_init(data);
|
||||
CURL_TRC_M(data, "Curl_conn_setup() -> %d", result);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue