From c59d7ae527c76fc5c1b524aee8af29343ac71dc7 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 14 Jun 2010 22:42:11 +0200 Subject: tftp: use generic progression bar Signed-off-by: Sascha Hauer --- net/tftp.c | 34 +++++++++++++--------------------- 1 file 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 #include #include +#include #include #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(); } } -- cgit v1.2.3