diff options
author | Stefan Eissing <stefan@eissing.org> | 2023-03-03 17:54:44 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2023-03-06 20:16:43 +0100 |
commit | 257416023d179f84ab77a53406156871453e280f (patch) | |
tree | c1b6d86917538d3e45d7f689aa7e2bfa06456940 /lib/vtls | |
parent | 93eefa6ba134aceef4f6cd51fc602319b382e629 (diff) | |
download | curl-257416023d179f84ab77a53406156871453e280f.tar.gz |
connect: fix time_connect and time_appconnect timer statistics
- time_connect was not updated when the overall connection failed,
e.g. when SSL verification was unsuccessful, refs #10670
- rework gather those values to interrogate involved filters,
also from all eyeballing attempts, to report the maximum of
those values.
- added 3 test cases in test_06 to check reported values on
successful, partially failed and totally failed connections.
Reported-by: Master Inspire
Fixes #10670
Closes #10671
Diffstat (limited to 'lib/vtls')
-rw-r--r-- | lib/vtls/vtls.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c index 0fb3d43f4..108ac68d1 100644 --- a/lib/vtls/vtls.c +++ b/lib/vtls/vtls.c @@ -1604,16 +1604,11 @@ static CURLcode ssl_cf_cntrl(struct Curl_cfilter *cf, struct Curl_easy *data, int event, int arg1, void *arg2) { - struct ssl_connect_data *connssl = cf->ctx; struct cf_call_data save; (void)arg1; (void)arg2; switch(event) { - case CF_CTRL_CONN_REPORT_STATS: - if(cf->sockindex == FIRSTSOCKET && !Curl_ssl_cf_is_proxy(cf)) - Curl_pgrsTimeWas(data, TIMER_APPCONNECT, connssl->handshake_done); - break; case CF_CTRL_DATA_ATTACH: if(Curl_ssl->attach_data) { CF_DATA_SAVE(save, cf, data); @@ -1634,6 +1629,27 @@ static CURLcode ssl_cf_cntrl(struct Curl_cfilter *cf, return CURLE_OK; } +static CURLcode ssl_cf_query(struct Curl_cfilter *cf, + struct Curl_easy *data, + int query, int *pres1, void *pres2) +{ + struct ssl_connect_data *connssl = cf->ctx; + + switch(query) { + case CF_QUERY_TIMER_APPCONNECT: { + struct curltime *when = pres2; + if(cf->connected && !Curl_ssl_cf_is_proxy(cf)) + *when = connssl->handshake_done; + return CURLE_OK; + } + default: + break; + } + return cf->next? + cf->next->cft->query(cf->next, data, query, pres1, pres2) : + CURLE_UNKNOWN_OPTION; +} + static bool cf_ssl_is_alive(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_call_data save; @@ -1674,7 +1690,7 @@ struct Curl_cftype Curl_cft_ssl = { ssl_cf_cntrl, cf_ssl_is_alive, Curl_cf_def_conn_keep_alive, - Curl_cf_def_query, + ssl_cf_query, }; struct Curl_cftype Curl_cft_ssl_proxy = { |