diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2010-06-14 22:42:11 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-06-28 10:43:55 +0200 |
commit | c59d7ae527c76fc5c1b524aee8af29343ac71dc7 (patch) | |
tree | e84fd846a956e64e147fb5934eee7a80405758ad /net | |
parent | b99e2c4ac6296b28b7ab0a62dd82d358855c4126 (diff) | |
download | barebox-c59d7ae527c76fc5c1b524aee8af29343ac71dc7.tar.gz barebox-c59d7ae527c76fc5c1b524aee8af29343ac71dc7.tar.xz |
tftp: use generic progression bar
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/tftp.c | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/net/tftp.c b/net/tftp.c index 338359b119..4b60cc8dd0 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -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(); } } |