You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Frank Delporte (JIRA)" <ji...@apache.org> on 2016/12/08 12:29:58 UTC
[jira] [Updated] (NET-604) TFTP send & receive don't have progress
indication
[ https://issues.apache.org/jira/browse/NET-604?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Frank Delporte updated NET-604:
-------------------------------
Description:
Now there is no way to know if TFTP is progressing, so I think with a quick fix and two extra public variables this can be solved.
Attached my patch for this.
A more extended functionality with events might be better but will require more rework
Index: TFTPClient.java
===================================================================
--- TFTPClient.java (revision 1773211)
+++ TFTPClient.java (working copy)
@@ -64,6 +64,12 @@
/*** The maximum number of timeouts allowed before failing. ***/
private int __maxTimeouts;
+
+ /*** The number of bytes received in the ongoing download. ***/
+ public int totalBytesReceived = 0;
+
+ /*** The number of bytes sent in the ongoing upload. ***/
+ public int totalBytesSent = 0;
/***
* Creates a TFTPClient instance with a default timeout of DEFAULT_TIMEOUT,
@@ -134,7 +140,7 @@
beginBufferedOps();
- dataLength = lastBlock = hostPort = bytesRead = 0;
+ dataLength = lastBlock = hostPort = bytesRead = totalBytesReceived = 0;
block = 1;
if (mode == TFTP.ASCII_MODE) {
@@ -277,6 +283,8 @@
ack.setBlockNumber(lastBlock);
sent = ack;
bytesRead += dataLength;
+
+ totalBytesReceived += dataLength;
} // First data packet less than 512 bytes signals end of stream.
while (dataLength == TFTPPacket.SEGMENT_SIZE);
@@ -385,7 +393,7 @@
beginBufferedOps();
- dataLength = lastBlock = hostPort = bytesRead = totalThisPacket = 0;
+ dataLength = lastBlock = hostPort = bytesRead = totalThisPacket = totalBytesSent = 0;
block = 0;
boolean lastAckWait = false;
@@ -538,15 +546,18 @@
/* this will be our last packet -- send, wait for ack, stop */
lastAckWait = true;
}
+
data.setBlockNumber(block);
data.setData(_sendBuffer, 4, totalThisPacket);
sent = data;
+
+ totalBytesSent += totalThisPacket;
}
while ( totalThisPacket > 0 || lastAckWait );
// Note: this was looping while dataLength == 0 || lastAckWait,
// which was discarding the last packet if it was not full size
// Should send the packet.
-
+
endBufferedOps();
}
was:
Now there is no way to know if TFTP is progressing, so I think with a quick fix and two extra public variables this can be solved.
Attached my patch for this.
A more extended functionality with events might be better but will require more rework
> TFTP send & receive don't have progress indication
> --------------------------------------------------
>
> Key: NET-604
> URL: https://issues.apache.org/jira/browse/NET-604
> Project: Commons Net
> Issue Type: Improvement
> Components: TFTP
> Affects Versions: 3.5
> Reporter: Frank Delporte
> Labels: newbie, patch
> Fix For: 3.6
>
>
> Now there is no way to know if TFTP is progressing, so I think with a quick fix and two extra public variables this can be solved.
> Attached my patch for this.
> A more extended functionality with events might be better but will require more rework
> Index: TFTPClient.java
> ===================================================================
> --- TFTPClient.java (revision 1773211)
> +++ TFTPClient.java (working copy)
> @@ -64,6 +64,12 @@
>
> /*** The maximum number of timeouts allowed before failing. ***/
> private int __maxTimeouts;
> +
> + /*** The number of bytes received in the ongoing download. ***/
> + public int totalBytesReceived = 0;
> +
> + /*** The number of bytes sent in the ongoing upload. ***/
> + public int totalBytesSent = 0;
>
> /***
> * Creates a TFTPClient instance with a default timeout of DEFAULT_TIMEOUT,
> @@ -134,7 +140,7 @@
>
> beginBufferedOps();
>
> - dataLength = lastBlock = hostPort = bytesRead = 0;
> + dataLength = lastBlock = hostPort = bytesRead = totalBytesReceived = 0;
> block = 1;
>
> if (mode == TFTP.ASCII_MODE) {
> @@ -277,6 +283,8 @@
> ack.setBlockNumber(lastBlock);
> sent = ack;
> bytesRead += dataLength;
> +
> + totalBytesReceived += dataLength;
> } // First data packet less than 512 bytes signals end of stream.
>
> while (dataLength == TFTPPacket.SEGMENT_SIZE);
> @@ -385,7 +393,7 @@
>
> beginBufferedOps();
>
> - dataLength = lastBlock = hostPort = bytesRead = totalThisPacket = 0;
> + dataLength = lastBlock = hostPort = bytesRead = totalThisPacket = totalBytesSent = 0;
> block = 0;
> boolean lastAckWait = false;
>
> @@ -538,15 +546,18 @@
> /* this will be our last packet -- send, wait for ack, stop */
> lastAckWait = true;
> }
> +
> data.setBlockNumber(block);
> data.setData(_sendBuffer, 4, totalThisPacket);
> sent = data;
> +
> + totalBytesSent += totalThisPacket;
> }
> while ( totalThisPacket > 0 || lastAckWait );
> // Note: this was looping while dataLength == 0 || lastAckWait,
> // which was discarding the last packet if it was not full size
> // Should send the packet.
> -
> +
> endBufferedOps();
> }
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)