diff options
author | Marcin Adamski <mass85@tlen.pl> | 2011-10-13 19:45:36 +0200 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2011-10-13 19:45:36 +0200 |
commit | 03adff1eba561c433a2667046c52d609322e684a (patch) | |
tree | 854a237b0cf48d6c343c738fa37a837888bc2bf9 | |
parent | 34770b8ab0f2881b7437ef73ca757957335997a0 (diff) |
tftp.c: TFTP timeout and unexpected block adjustments
Set ACK timeout to 5 seconds.
If we are waiting for block X and receive block Y that is the expected one, we
should send ACK and increase X (which is already implemented). Otherwise drop
the packet and don't increase retry counter.
-rw-r--r-- | lib/tftp.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/tftp.c b/lib/tftp.c index ae1d5ebfe..8a85a1cdd 100644 --- a/lib/tftp.c +++ b/lib/tftp.c @@ -248,11 +248,11 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state) state->max_time = state->start_time+maxtime; - /* Set per-block timeout to 10% of total */ - timeout = maxtime/10 ; + /* Set per-block timeout to total */ + timeout = maxtime; - /* Average reposting an ACK after 15 seconds */ - state->retry_max = (int)timeout/15; + /* Average reposting an ACK after 5 seconds */ + state->retry_max = (int)timeout/5; } /* But bound the total number */ if(state->retry_max<3) @@ -591,15 +591,10 @@ static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event) /* Is this the block we expect? */ rblock = getrpacketblock(&state->rpacket); if(NEXT_BLOCKNUM(state->block) != rblock) { - /* No, log it, up the retry count and fail if over the limit */ + /* No, log it */ infof(data, - "Received unexpected DATA packet block %d\n", rblock); - state->retries++; - if(state->retries > state->retry_max) { - failf(data, "tftp_rx: giving up waiting for block %d", - NEXT_BLOCKNUM(state->block)); - return CURLE_TFTP_ILLEGAL; - } + "Received unexpected DATA packet block %d, expecting block %d\n", + rblock, NEXT_BLOCKNUM(state->block)); break; } /* This is the expected block. Reset counters and ACK it. */ |