DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=32859>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=32859

           Summary: TFTPClient's send file discards last ack
           Product: Commons
           Version: 1.3 Final
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Net
        AssignedTo: commons-dev@jakarta.apache.org
        ReportedBy: [EMAIL PROTECTED]


TFTPClient reads all acks just fine except the last-one when sending a file. I
figured this out when I tried to use the same TFTPClient-instance for something
else (reading a file) after sending a file. This ack was next in the buffer and
some exception was thrown (don't remember which anymore). 

I fixed this for myself using a flag (lastAckWait). Here is a the result of
diff-command:

diff -u TFTPClient.java.original TFTPClient.java.patched
--- TFTPClient.java.original    2004-12-28 15:02:37.235997984 +0200
+++ TFTPClient.java.patched     2004-12-28 15:09:14.516602152 +0200
@@ -372,6 +372,7 @@

         dataLength = lastBlock = hostPort = bytesRead = 0;
         block = 0;
+        boolean lastAckWait = false;

         if (mode == TFTP.ASCII_MODE)
             input = new ToNetASCIIInputStream(input);
@@ -455,7 +456,10 @@
                         if (lastBlock == block)
                         {
                             ++block;
-                            break _receivePacket;
+                            if (lastAckWait)
+                              break _sendPacket;
+                            else
+                              break _receivePacket;
                         }
                         else
                         {
@@ -501,9 +505,8 @@
             data.setData(_sendBuffer, 4, offset - 4);
             sent = data;
         }
-        while (dataLength == 0);
+        while (dataLength == 0 || lastAckWait);

-        bufferedSend(sent);
         endBufferedOps();
     }



By the way we have implemented a TFTP server also (heavily unit-tested). I could
try to contribute it back if it fits in commons net. There was some talk in the
web-pages of doing only client-side stuff for commons-net. 

-Perttu

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to