From bfcc1c6eb4d891d3671a65a6f05c0161c5542578 Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Fri, 24 Apr 2026 11:34:13 +0200 Subject: [PATCH] setup connection filter: mark as setup Add CF_TYPE_SETUP to the setup connection filter so that it is removed and destroyed after the connection has been established. Closes #21437 --- lib/cfilters.c | 34 ++++++++++++++++++++++++++++++++++ lib/connect.c | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/lib/cfilters.c b/lib/cfilters.c index 4655414131..6d7d8ef738 100644 --- a/lib/cfilters.c +++ b/lib/cfilters.c @@ -116,6 +116,37 @@ CURLcode Curl_cf_def_query(struct Curl_cfilter *cf, CURLE_UNKNOWN_OPTION; } +#ifdef CURLVERBOSE +static void conn_trc_filters(struct Curl_easy *data, + int sockindex, + const char *info) +{ + if(CURL_TRC_M_is_verbose(data) && data->conn) { + struct Curl_cfilter *cf = data->conn->cfilter[sockindex]; + + if(cf) { + struct dynbuf msg; + CURLcode result = CURLE_OK; + + curlx_dyn_init(&msg, 1024); + result = curlx_dyn_addf(&msg, "%s [%d]", info, sockindex); + for(; cf && !result; cf = cf->next) { + result = curlx_dyn_addf(&msg, "[%s%s]", + cf->connected ? "" : "!", cf->cft->name); + } + if(!result) + CURL_TRC_M(data, "%s", curlx_dyn_ptr(&msg)); + else + CURL_TRC_M(data, "%s [%d] error %d tracing chain", + info, sockindex, result); + curlx_dyn_free(&msg); + } + else + CURL_TRC_M(data, "%s [%d][-]", info, sockindex); + } +} +#endif /* CURLVERBOSE */ + void Curl_conn_cf_discard_chain(struct Curl_cfilter **pcf, struct Curl_easy *data) { @@ -560,11 +591,14 @@ CURLcode Curl_conn_connect(struct Curl_easy *data, conn_report_connect_stats(cf, data); data->conn->keepalive = *Curl_pgrs_now(data); VERBOSE(result = cf_verboseconnect(data, cf)); + VERBOSE(conn_trc_filters(data, sockindex, "connected")); conn_remove_setup_filters(data, sockindex); + VERBOSE(conn_trc_filters(data, sockindex, "reduced to")); goto out; } else if(result) { CURL_TRC_CF(data, cf, "Curl_conn_connect(), filter returned %d", result); + VERBOSE(conn_trc_filters(data, sockindex, "failed to connect")); conn_report_connect_stats(cf, data); goto out; } diff --git a/lib/connect.c b/lib/connect.c index b8d200b149..ae906f33c9 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -490,7 +490,7 @@ static void cf_setup_destroy(struct Curl_cfilter *cf, struct Curl_easy *data) struct Curl_cftype Curl_cft_setup = { "SETUP", - 0, + CF_TYPE_SETUP, CURL_LOG_LVL_NONE, cf_setup_destroy, cf_setup_connect,