summaryrefslogtreecommitdiff
path: root/lib/ftp.c
diff options
context:
space:
mode:
authorStefan Eissing <stefan@eissing.org>2022-11-22 09:55:41 +0100
committerDaniel Stenberg <daniel@haxx.se>2022-11-22 14:25:50 +0100
commitaf22c2a546ab862ab577c8d9d3609af0de178974 (patch)
treef1a0c2d3c57d45da66809894997a50db840ac9e6 /lib/ftp.c
parenta28a80d59e8f111fa5a23bfb76c8ff148333edb0 (diff)
downloadcurl-af22c2a546ab862ab577c8d9d3609af0de178974.tar.gz
vtls: localization of state data in filters
- almost all backend calls pass the Curl_cfilter intance instead of connectdata+sockindex - ssl_connect_data is remove from struct connectdata and made internal to vtls - ssl_connect_data is allocated in the added filter, kept at cf->ctx - added function to let a ssl filter access its ssl_primary_config and ssl_config_data this selects the propert subfields in conn and data, for filters added as plain or proxy - adjusted all backends to use the changed api - adjusted all backends to access config data via the exposed functions, no longer using conn or data directly cfilter renames for clear purpose: - methods `Curl_conn_*(data, conn, sockindex)` work on the complete filter chain at `sockindex` and connection `conn`. - methods `Curl_cf_*(cf, ...)` work on a specific Curl_cfilter instance. - methods `Curl_conn_cf()` work on/with filter instances at a connection. - rebased and resolved some naming conflicts - hostname validation (und session lookup) on SECONDARY use the same name as on FIRST (again). new debug macros and removing connectdata from function signatures where not needed. adapting schannel for new Curl_read_plain paramter. Closes #9919
Diffstat (limited to 'lib/ftp.c')
-rw-r--r--lib/ftp.c41
1 files changed, 19 insertions, 22 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index 00e906687..42df31252 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -219,8 +219,8 @@ const struct Curl_handler Curl_handler_ftps = {
static void close_secondarysocket(struct Curl_easy *data,
struct connectdata *conn)
{
- Curl_cfilter_close(data, conn, SECONDARYSOCKET);
- Curl_cfilter_destroy(data, conn, SECONDARYSOCKET);
+ Curl_conn_close(data, SECONDARYSOCKET);
+ Curl_conn_cf_discard_all(data, conn, SECONDARYSOCKET);
}
/*
@@ -291,7 +291,7 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data)
(void)curlx_nonblock(s, TRUE); /* enable non-blocking */
/* Replace any filter on SECONDARY with one listeing on this socket */
- result = Curl_cfilter_socket_accepted_set(data, conn, SECONDARYSOCKET, &s);
+ result = Curl_conn_socket_accepted_set(data, SECONDARYSOCKET, &s);
if(result)
return result;
@@ -440,8 +440,7 @@ static CURLcode InitiateTransfer(struct Curl_easy *data)
bool connected;
DEBUGF(infof(data, "ftp InitiateTransfer()"));
- result = Curl_cfilter_connect(data, conn, SECONDARYSOCKET,
- TRUE, &connected);
+ result = Curl_conn_connect(data, SECONDARYSOCKET, TRUE, &connected);
if(result || !connected)
return result;
@@ -820,8 +819,8 @@ static int ftp_domore_getsock(struct Curl_easy *data,
DEBUGF(infof(data, "ftp_domore_getsock()"));
if(conn->cfilter[SECONDARYSOCKET]
- && !Curl_cfilter_is_connected(data, conn, SECONDARYSOCKET))
- return Curl_cfilter_get_select_socks(data, conn, SECONDARYSOCKET, socks);
+ && !Curl_conn_is_connected(conn, SECONDARYSOCKET))
+ return Curl_conn_get_select_socks(data, SECONDARYSOCKET, socks);
if(FTP_STOP == ftpc->state) {
int bits = GETSOCK_READSOCK(0);
@@ -1273,8 +1272,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data,
ftpc->count1 = fcmd;
/* Replace any filter on SECONDARY with one listeing on this socket */
- result = Curl_cfilter_socket_accepted_set(data, conn, SECONDARYSOCKET,
- &portsock);
+ result = Curl_conn_socket_accepted_set(data, SECONDARYSOCKET, &portsock);
if(result)
goto out;
portsock = CURL_SOCKET_BAD; /* now held in filter */
@@ -1789,8 +1787,8 @@ static CURLcode ftp_epsv_disable(struct Curl_easy *data,
infof(data, "Failed EPSV attempt. Disabling EPSV");
/* disable it for next transfer */
conn->bits.ftp_use_epsv = FALSE;
- Curl_cfilter_close(data, conn, SECONDARYSOCKET);
- Curl_cfilter_destroy(data, conn, SECONDARYSOCKET);
+ Curl_conn_close(data, SECONDARYSOCKET);
+ Curl_conn_cf_discard_all(data, conn, SECONDARYSOCKET);
data->state.errorbuf = FALSE; /* allow error message to get
rewritten */
result = Curl_pp_sendf(data, &conn->proto.ftpc.pp, "%s", "PASV");
@@ -1980,9 +1978,9 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
}
}
- result = Curl_cfilter_setup(data, conn, SECONDARYSOCKET, addr,
- conn->bits.ftp_use_data_ssl?
- CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
+ result = Curl_conn_setup(data, SECONDARYSOCKET, addr,
+ conn->bits.ftp_use_data_ssl?
+ CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
if(result) {
Curl_resolv_unlock(data, addr); /* we're done using this address */
@@ -2747,14 +2745,14 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
if((ftpcode == 234) || (ftpcode == 334)) {
/* this was BLOCKING, keep it so for now */
bool done;
- if(!Curl_cfilter_ssl_added(data, conn, FIRSTSOCKET)) {
- result = Curl_cfilter_ssl_add(data, conn, FIRSTSOCKET);
+ if(!Curl_ssl_conn_is_ssl(data, FIRSTSOCKET)) {
+ result = Curl_ssl_cfilter_add(data, FIRSTSOCKET);
if(result) {
/* we failed and bail out */
return CURLE_USE_SSL_FAILED;
}
}
- result = Curl_cfilter_connect(data, conn, FIRSTSOCKET, TRUE, &done);
+ result = Curl_conn_connect(data, FIRSTSOCKET, TRUE, &done);
if(!result) {
conn->bits.ftp_use_data_ssl = FALSE; /* clear-text data */
conn->bits.ftp_use_control_ssl = TRUE; /* SSL on control */
@@ -2820,7 +2818,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data,
case FTP_CCC:
if(ftpcode < 500) {
/* First shut down the SSL layer (note: this call will block) */
- result = Curl_ssl_shutdown(data, conn, FIRSTSOCKET);
+ result = Curl_ssl_cfilter_remove(data, FIRSTSOCKET);
if(result)
failf(data, "Failed to clear the command channel (CCC)");
@@ -3164,7 +3162,7 @@ static CURLcode ftp_connect(struct Curl_easy *data,
if(conn->handler->flags & PROTOPT_SSL) {
/* BLOCKING */
- result = Curl_cfilter_connect(data, conn, FIRSTSOCKET, TRUE, done);
+ result = Curl_conn_connect(data, FIRSTSOCKET, TRUE, done);
if(result)
return result;
conn->bits.ftp_use_control_ssl = TRUE;
@@ -3567,8 +3565,7 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
* So, when using ftps: the SSL handshake will not start until we
* tell the remote server that we are there. */
if(conn->cfilter[SECONDARYSOCKET]) {
- result = Curl_cfilter_connect(data, conn, SECONDARYSOCKET,
- FALSE, &connected);
+ result = Curl_conn_connect(data, SECONDARYSOCKET, FALSE, &connected);
if(result || !Curl_conn_is_ip_connected(data, SECONDARYSOCKET)) {
if(result && (ftpc->count1 == 0)) {
*completep = -1; /* go back to DOING please */
@@ -3727,7 +3724,7 @@ CURLcode ftp_perform(struct Curl_easy *data,
/* run the state-machine */
result = ftp_multi_statemach(data, dophase_done);
- *connected = Curl_cfilter_is_connected(data, data->conn, SECONDARYSOCKET);
+ *connected = Curl_conn_is_connected(data->conn, SECONDARYSOCKET);
infof(data, "ftp_perform ends with SECONDARY: %d", *connected);