9
0
Fork 0

tftp: use generic progression bar

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2010-06-14 22:42:11 +02:00
parent b99e2c4ac6
commit c59d7ae527
1 changed files with 13 additions and 21 deletions

View File

@ -13,13 +13,11 @@
#include <errno.h>
#include <libgen.h>
#include <fcntl.h>
#include <progress.h>
#include <linux/err.h>
#define TFTP_PORT 69 /* Well known TFTP port # */
#define TIMEOUT 5 /* Seconds to timeout for a lost pkt */
# define TIMEOUT_COUNT 10 /* # of timeouts before giving up */
/* (for checking the image size) */
#define HASHES_PER_LINE 65 /* Number of "loading" hashes per line */
/*
* TFTP operations.
@ -50,6 +48,7 @@ static int tftp_err;
static char *tftp_filename;
static struct net_connection *tftp_con;
static int net_store_fd;
static int tftp_size;
static int tftp_send(void)
{
@ -84,6 +83,8 @@ static int tftp_send(void)
break;
}
tftp_timer_start = get_time_ns();
show_progress(tftp_size);
ret = net_udp_send(tftp_con, len);
return ret;
@ -127,20 +128,6 @@ static void tftp_handler(char *packet, unsigned len)
len -= 2;
tftp_block = ntohs(*(uint16_t *)pkt);
/*
* RFC1350 specifies that the first data packet will
* have sequence number 1. If we receive a sequence
* number of 0 this means that there was a wrap
* around of the (16 bit) counter.
*/
if (tftp_block) {
if (((tftp_block - 1) % 10) == 0) {
putchar('#');
} else if ((tftp_block % (10 * HASHES_PER_LINE)) == 0) {
puts("\n\t ");
}
}
if (tftp_state == STATE_RRQ)
debug("Server did not acknowledge timeout option!\n");
@ -165,7 +152,9 @@ static void tftp_handler(char *packet, unsigned len)
break;
tftp_last_block = tftp_block;
tftp_timer_start = get_time_ns();
if (!(tftp_block % 10))
tftp_size++;
ret = write(net_store_fd, pkt + 2, len);
if (ret < 0) {
@ -205,6 +194,8 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
char *remotefile;
char ip1[16];
tftp_size = 0;
if (argc < 2)
return COMMAND_ERROR_USAGE;
@ -229,10 +220,12 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
tftp_filename = remotefile;
printf("TFTP from server %s; Filename: '%s'\nLoading: ",
printf("TFTP from server %s; Filename: '%s'\n",
ip_to_string(net_get_serverip(), ip1),
tftp_filename);
init_progression_bar(0);
tftp_timer_start = get_time_ns();
tftp_state = STATE_RRQ;
tftp_block = 0;
@ -248,8 +241,7 @@ static int do_tftpb(struct command *cmdtp, int argc, char *argv[])
}
net_poll();
if (is_timeout(tftp_timer_start, SECOND)) {
tftp_timer_start = get_time_ns();
printf("T ");
show_progress(-1);
tftp_send();
}
}