From 7c648782bc7c97be81c619acd8598c38b59c5832 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 3 Jul 2008 06:56:03 +0000 Subject: Introcuding a new timestamp for curl_easy_getinfo(): CURLINFO_APPCONNECT_TIME. This is set with the "application layer" handshake/connection is completed (typically SSL, TLS or SSH). By using this you can figure out the application layer's own connect time. You can extract the time stamp using curl's -w option and the new variable named 'time_appconnect'. This feature was sponsored by Lenny Rachitsky at NeuStar. --- lib/getinfo.c | 3 +++ lib/progress.c | 6 +++++- lib/progress.h | 3 ++- lib/ssh.c | 2 ++ lib/sslgen.c | 11 +++++++++-- lib/url.c | 1 + lib/urldata.h | 1 + 7 files changed, 23 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/getinfo.c b/lib/getinfo.c index bef2ebac4..2b7b08aee 100644 --- a/lib/getinfo.c +++ b/lib/getinfo.c @@ -137,6 +137,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...) case CURLINFO_CONNECT_TIME: *param_doublep = data->progress.t_connect; break; + case CURLINFO_APPCONNECT_TIME: + *param_doublep = data->progress.t_appconnect; + break; case CURLINFO_PRETRANSFER_TIME: *param_doublep = data->progress.t_pretransfer; break; diff --git a/lib/progress.c b/lib/progress.c index f473e8227..2956d1a99 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2007, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2008, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -172,6 +172,10 @@ void Curl_pgrsTime(struct SessionHandle *data, timerid timer) data->progress.t_connect = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; + case TIMER_APPCONNECT: + data->progress.t_appconnect = + Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); + break; case TIMER_PRETRANSFER: data->progress.t_pretransfer = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); diff --git a/lib/progress.h b/lib/progress.h index ad9d6623e..15a45cc24 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2008, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -30,6 +30,7 @@ typedef enum { TIMER_NONE, TIMER_NAMELOOKUP, TIMER_CONNECT, + TIMER_APPCONNECT, TIMER_PRETRANSFER, TIMER_STARTTRANSFER, TIMER_POSTRANSFER, diff --git a/lib/ssh.c b/lib/ssh.c index f54353c03..6f2392d6d 100644 --- a/lib/ssh.c +++ b/lib/ssh.c @@ -715,6 +715,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn) */ infof(data, "Authentication complete\n"); + Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSH is connected */ + conn->sockfd = sock; conn->writesockfd = CURL_SOCKET_BAD; diff --git a/lib/sslgen.c b/lib/sslgen.c index a6824090d..0001cd8d3 100644 --- a/lib/sslgen.c +++ b/lib/sslgen.c @@ -60,6 +60,7 @@ #include "strequal.h" #include "url.h" #include "memory.h" +#include "progress.h" /* The last #include file should be: */ #include "memdebug.h" @@ -178,11 +179,17 @@ void Curl_ssl_cleanup(void) CURLcode Curl_ssl_connect(struct connectdata *conn, int sockindex) { + CURLcode res; /* mark this is being ssl-enabled from here on. */ conn->ssl[sockindex].use = TRUE; conn->ssl[sockindex].state = ssl_connection_negotiating; - return curlssl_connect(conn, sockindex); + res = curlssl_connect(conn, sockindex); + + if(!res) + Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSL is connected */ + + return res; } CURLcode @@ -192,7 +199,7 @@ Curl_ssl_connect_nonblocking(struct connectdata *conn, int sockindex, #ifdef curlssl_connect_nonblocking /* mark this is being ssl requested from here on. */ conn->ssl[sockindex].use = TRUE; - return Curl_ossl_connect_nonblocking(conn, sockindex, done); + return curlssl_connect_nonblocking(conn, sockindex, done); #else *done = TRUE; /* fallback to BLOCKING */ conn->ssl[sockindex].use = TRUE; diff --git a/lib/url.c b/lib/url.c index f200e2b1e..4238256cb 100644 --- a/lib/url.c +++ b/lib/url.c @@ -4328,6 +4328,7 @@ static CURLcode setup_conn(struct connectdata *conn, } else { Curl_pgrsTime(data, TIMER_CONNECT); /* we're connected already */ + Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */ conn->bits.tcpconnect = TRUE; *protocol_done = TRUE; if(data->set.verbose) diff --git a/lib/urldata.h b/lib/urldata.h index 2e0f69204..6eb6539d5 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1067,6 +1067,7 @@ struct Progress { double t_nslookup; double t_connect; + double t_appconnect; double t_pretransfer; double t_starttransfer; double t_redirect; -- cgit v1.2.3