Alexander Krasnostavsky made it possible to make FTP 3rd party transfers with

both source and destination being the same host. It can be useful if you want
to move a file on a server or similar.
This commit is contained in:
Daniel Stenberg 2004-10-19 18:26:35 +00:00
parent 2f069ad3e2
commit 38b1d96750
2 changed files with 15 additions and 0 deletions

View File

@ -7,6 +7,10 @@
Changelog
Daniel (19 October 2004)
- Alexander Krasnostavsky made it possible to make FTP 3rd party transfers
with both source and destination being the same host. It can be useful if
you want to move a file on a server or similar.
- Guillaume Arluison added CURLINFO_NUM_CONNECTS to allow an app to figure
out how many new connects a previous transfer required.

View File

@ -2189,6 +2189,7 @@ CURLcode Curl_pretransfersec(struct connectdata *conn)
CURLcode status = CURLE_OK;
struct SessionHandle *data = conn->data;
struct connectdata *sec_conn = NULL; /* secondary connection */
bool reuse_fresh_tmp = data->set.reuse_fresh;
/* update data with source host options */
char *url = aprintf( "%s://%s/", conn->protostr, data->set.source_host);
@ -2204,12 +2205,22 @@ CURLcode Curl_pretransfersec(struct connectdata *conn)
data->set.ftpport = data->set.source_port;
data->set.userpwd = data->set.source_userpwd;
/* if both remote hosts are the same host - create new connection */
if (strequal(conn->host.dispname, data->set.source_host))
/* NOTE: this is restored back to the original value after the connect is
done */
data->set.reuse_fresh = TRUE;
/* secondary connection */
status = Curl_connect_host(data, &sec_conn);
if(CURLE_OK == status) {
sec_conn->sec_conn = NULL; /* important if re-using existing connection
to prevent loop */
sec_conn->data = data;
conn->sec_conn = sec_conn;
}
data->set.reuse_fresh = reuse_fresh_tmp;
return status;
}