[PATCH v2] net/tftp: make tftpput working with servers that do not use OACK

Option Acknowledgment (OACK) is an extension of TFTP protocol (see rfc2347). Not all tftp servers implements it. U-Boot supports two tftp specific commands: * tftpboot works with both types of servers, * tftpput waits for OACK from the server, so the data transfer does not start if the servers does not support OACK extension.
This patch fix an issue, so tftpput works fine with both types of servers.
Signed-off-by: Mikhail Kshevetskiy mikhail.kshevetskiy@iopsys.eu --- Changes v2: * update patch description --- net/tftp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/net/tftp.c b/net/tftp.c index 2e335413492..2534dec1c9f 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -494,8 +494,15 @@ static void tftp_handler(uchar *pkt, unsigned dest, struct in_addr sip, tftp_prev_block = tftp_cur_block; tftp_cur_block = (unsigned short)(block + 1); update_block_number(); - if (ack_ok) + if (ack_ok) { + if (block == 0 && + tftp_state == STATE_SEND_WRQ){ + /* connection's first ACK */ + tftp_state = STATE_DATA; + tftp_remote_port = src; + } tftp_send(); /* Send next data block */ + } } } #endif
participants (1)
-
Mikhail Kshevetskiy