From 1225d36188e56a68b3f0cc6ed0c602c3c3e00615 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 13 Jan 2009 23:24:06 +0000 Subject: Grant Erickson fixed timeouts for TFTP --- CHANGES | 38 ++++++++++++++++++++++++++++++++++++++ RELEASE-NOTES | 4 +++- TODO-RELEASE | 4 ---- lib/tftp.c | 5 +++-- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/CHANGES b/CHANGES index b08f49030..0694b033e 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,44 @@ Changelog +Daniel Stenberg (14 Jan 2009) +- Grant Erickson fixed timeouts for TFTP such that specifying a + connect-timeout, a max-time or both options work correctly and as expected + by passing the correct boolean value to Curl_timeleft via the + 'duringconnect' parameter. + + With this small change, curl TFTP now behaves as expected (and likely as + originally-designed): + + 1) For non-existent or unreachable dotted IP addresses: + + a) With no options, follows the default curl 300s timeout... + b) With --connect-timeout only, follows that value... + c) With --max-time only, follows that value... + d) With both --connect-timeout and --max-time, follows the smaller value... + + and times out with a "curl: (7) Couldn't connect to server" error. + + 2) For transfers to/from a valid host: + + a) With no options, follows default curl 300s timeout for the + first XRQ/DATA/ACK transaction and the default TFTP 3600s + timeout for the remainder of the transfer... + + b) With --connect-time only, follows that value for the + first XRQ/DATA/ACK transaction and the default TFTP 3600s + timeout for the remainder of the transfer... + + c) With --max-time only, follows that value for the first + XRQ/DATA/ACK transaction and for the remainder of the + transfer... + + d) With both --connect-timeout and --max-time, follows the former + for the first XRQ/DATA/ACK transaction and the latter for the + remainder of the transfer... + + and times out with a "curl: (28) Timeout was reached" error as + appropriate. Daniel Stenberg (13 Jan 2009) - Michael Wallner fixed a NULL pointer deref when calling diff --git a/RELEASE-NOTES b/RELEASE-NOTES index e767d8197..2a1b48e2a 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -47,6 +47,7 @@ This release includes the following bugfixes: o the configure script can now detect gnutls with pkg-config o curlbuild.h was adjusted for SunPro compilers o CURLOPT_COOKIELIST set to "SESS" on an easy handle with no cookies data + o fixed timeouts for TFTP This release includes the following known bugs: @@ -59,6 +60,7 @@ advice from friends like these: Markus Koetter, Josef Wolf, Vlad Grachov, Pawel Kierski, Igor Novoseltsev, Fred Machado, Ken Hirsch, Keshav Krity, Patrick Monnerat, Mark Karpeles, Anthony Bryan, Peter Korsgaard, Phil Lisiecki, Bas Mevissen, Rob Crittenden, - Emil Romanus, Karl Moerder, Daniel Black, Stefan Teleman, Michael Wallner + Emil Romanus, Karl Moerder, Daniel Black, Stefan Teleman, Michael Wallner, + Grant Erickson Thanks! (and sorry if I forgot to mention someone) diff --git a/TODO-RELEASE b/TODO-RELEASE index 07b926fa5..9269e38f9 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -1,12 +1,8 @@ To be addressed in 7.19.3 (planned release: January 2009) ========================= -210 - [PATCH] TFTP: Fix Connect and Transfer Timeout Behavior - 211 - Building and using static libcurl on Windows with VS2008 -212 - Updated libcurl VS2008 Guide - 213 - bug #2501457 "Timeouts not working with curl_multi_socket_action()" - most probably subject for addition to docs/KNOWN_BUGS diff --git a/lib/tftp.c b/lib/tftp.c index c87ecce6f..4f53580fd 100644 --- a/lib/tftp.c +++ b/lib/tftp.c @@ -195,11 +195,12 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state) { time_t maxtime, timeout; long timeout_ms; + const bool start = (state->state == TFTP_STATE_START); time(&state->start_time); /* Compute drop-dead time */ - timeout_ms = Curl_timeleft(state->conn, NULL, TRUE); + timeout_ms = Curl_timeleft(state->conn, NULL, start); if(timeout_ms < 0) { /* time-out, bail out, go home */ @@ -207,7 +208,7 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state) return CURLE_OPERATION_TIMEDOUT; } - if(state->state == TFTP_STATE_START) { + if(start) { maxtime = (time_t)(timeout_ms + 500) / 1000; state->max_time = state->start_time+maxtime; -- cgit v1.2.3