]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: wget: Support non-default HTTP port
authorMarek Vasut <marex@denx.de>
Wed, 13 Dec 2023 21:11:13 +0000 (22:11 +0100)
committerTom Rini <trini@konsulko.com>
Tue, 19 Dec 2023 13:01:59 +0000 (08:01 -0500)
Currently the wget command is hard wired to HTTP port 80. This is
inconvenient, as it is extremely easy to start trivial HTTP server
as an unprivileged user using e.g. python http module to serve the
files, but such a server has to run on one of the higher ports:
"
$ python3 -m http.server -d $(pwd) 8080
"

Make it possible to configure HTTP server port the same way it is
possible to configure TFTP server port, using environment variable
'httpdstp' (similar to 'tftpdstp'). Retain port 80 as the default
fallback port. This way, users can start their own trivial server
and conveniently download whatever files they need into U-Boot.

Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
doc/usage/cmd/wget.rst
doc/usage/environment.rst
include/net/wget.h
net/wget.c

index e1e7f8d81458ad811b8f9b57c03fe36400ee242c..8e7383b6c6078d68e9c8b23cf1e3d3c3ed480266 100644 (file)
@@ -16,7 +16,8 @@ Description
 The wget command is used to download a file from an HTTP server.
 
 wget command will use HTTP over TCP to download files from an HTTP server.
-Currently it can only download image from an HTTP server hosted on port 80.
+By default the destination port is 80 and the source port is pseudo-random.
+The environment variable *httpdstp* can be used to set the destination port.
 
 address
     memory address for the data downloaded
index c57b717caaf3f7a948b4ae0ff41b867547fda433..82b6ea7b6e78a14f78145d3b177c2e5b046a60af 100644 (file)
@@ -306,6 +306,10 @@ ethrotate
     anything other than "no", U-Boot does go through all
     available network interfaces.
 
+httpdstp
+    If this is set, the value is used for HTTP's TCP
+    destination port instead of the default port 80.
+
 netretry
     When set to "no" each network operation will
     either succeed or fail without retrying.
index da0920de1182b3684579b5ecdc73da7b56791255..6714f7ea573104b1217bf5348298253886497f95 100644 (file)
@@ -17,6 +17,5 @@ enum wget_state {
 };
 
 #define DEBUG_WGET             0       /* Set to 1 for debug messages */
-#define SERVER_PORT            80
 #define WGET_RETRY_COUNT       30
 #define WGET_TIMEOUT           2000UL
index 8bb4d72db1ae4a8a25855994ceb9be03cc72967c..e1e580c835121eb2b43ed715bbd2e428b7bcc792 100644 (file)
@@ -14,6 +14,9 @@
 #include <net/tcp.h>
 #include <net/wget.h>
 
+/* The default, change with environment variable 'httpdstp' */
+#define SERVER_PORT            80
+
 static const char bootfile1[] = "GET ";
 static const char bootfile3[] = " HTTP/1.0\r\n\r\n";
 static const char http_eom[] = "\r\n\r\n";
@@ -91,19 +94,22 @@ static void wget_send_stored(void)
        int len = retry_len;
        unsigned int tcp_ack_num = retry_tcp_seq_num + (len == 0 ? 1 : len);
        unsigned int tcp_seq_num = retry_tcp_ack_num;
+       unsigned int server_port;
        uchar *ptr, *offset;
 
+       server_port = env_get_ulong("httpdstp", 10, SERVER_PORT) & 0xffff;
+
        switch (current_wget_state) {
        case WGET_CLOSED:
                debug_cond(DEBUG_WGET, "wget: send SYN\n");
                current_wget_state = WGET_CONNECTING;
-               net_send_tcp_packet(0, SERVER_PORT, our_port, action,
+               net_send_tcp_packet(0, server_port, our_port, action,
                                    tcp_seq_num, tcp_ack_num);
                packets = 0;
                break;
        case WGET_CONNECTING:
                pkt_q_idx = 0;
-               net_send_tcp_packet(0, SERVER_PORT, our_port, action,
+               net_send_tcp_packet(0, server_port, our_port, action,
                                    tcp_seq_num, tcp_ack_num);
 
                ptr = net_tx_packet + net_eth_hdr_size() +
@@ -118,14 +124,14 @@ static void wget_send_stored(void)
 
                memcpy(offset, &bootfile3, strlen(bootfile3));
                offset += strlen(bootfile3);
-               net_send_tcp_packet((offset - ptr), SERVER_PORT, our_port,
+               net_send_tcp_packet((offset - ptr), server_port, our_port,
                                    TCP_PUSH, tcp_seq_num, tcp_ack_num);
                current_wget_state = WGET_CONNECTED;
                break;
        case WGET_CONNECTED:
        case WGET_TRANSFERRING:
        case WGET_TRANSFERRED:
-               net_send_tcp_packet(0, SERVER_PORT, our_port, action,
+               net_send_tcp_packet(0, server_port, our_port, action,
                                    tcp_seq_num, tcp_ack_num);
                break;
        }