From: Tom Rini Date: Mon, 25 Nov 2024 23:23:49 +0000 (-0600) Subject: Merge tag 'v2025.01-rc3' into next X-Git-Tag: v2025.04-rc1~60^2~13 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48380f9b2a12e3fc6339d6af5a154bded769d911;p=pandora-u-boot.git Merge tag 'v2025.01-rc3' into next Prepare v2025.01-rc3 --- 48380f9b2a12e3fc6339d6af5a154bded769d911 diff --cc net/lwip/wget.c index 53c3b169e01,062aa7c44f0..46858cb5dd3 --- a/net/lwip/wget.c +++ b/net/lwip/wget.c @@@ -34,19 -36,32 +38,44 @@@ struct wget_ctx enum done_state done; }; +static void wget_lwip_fill_info(struct pbuf *hdr, u16_t hdr_len, u32_t hdr_cont_len) +{ + if (wget_info->headers && hdr_len < MAX_HTTP_HEADERS_SIZE) + pbuf_copy_partial(hdr, (void *)wget_info->headers, hdr_len, 0); + wget_info->hdr_cont_len = (u32)hdr_cont_len; +} + +static void wget_lwip_set_file_size(u32_t rx_content_len) +{ + wget_info->file_size = (ulong)rx_content_len; +} + - static int parse_url(char *url, char *host, u16 *port, char **path) + bool wget_validate_uri(char *uri); + + int mbedtls_hardware_poll(void *data, unsigned char *output, size_t len, + size_t *olen) + { + struct udevice *dev; + int ret; + + *olen = 0; + + ret = uclass_get_device(UCLASS_RNG, 0, &dev); + if (ret) { + log_err("Failed to get an rng: %d\n", ret); + return ret; + } + ret = dm_rng_read(dev, output, len); + if (ret) + return ret; + + *olen = len; + + return 0; + } + + static int parse_url(char *url, char *host, u16 *port, char **path, + bool *is_https) { char *p, *pp; long lport; @@@ -231,19 -246,12 +270,23 @@@ static void httpc_result_cb(void *arg, ctx->done = SUCCESS; } +static err_t httpc_headers_done_cb(httpc_state_t *connection, void *arg, struct pbuf *hdr, + u16_t hdr_len, u32_t content_len) +{ + wget_lwip_fill_info(hdr, hdr_len, content_len); + + if (wget_info->check_buffer_size && (ulong)content_len > wget_info->buffer_size) + return ERR_BUF; + + return ERR_OK; +} + static int wget_loop(struct udevice *udev, ulong dst_addr, char *uri) { + char server_name[SERVER_NAME_SIZE]; + #if defined CONFIG_WGET_HTTPS + altcp_allocator_t tls_allocator; + #endif httpc_connection_t conn; httpc_state_t *state; struct netif *netif; @@@ -265,10 -275,25 +310,26 @@@ return -1; memset(&conn, 0, sizeof(conn)); + #if defined CONFIG_WGET_HTTPS + if (is_https) { + tls_allocator.alloc = &altcp_tls_alloc; + tls_allocator.arg = + altcp_tls_create_config_client(NULL, 0, server_name); + + if (!tls_allocator.arg) { + log_err("error: Cannot create a TLS connection\n"); + net_lwip_remove_netif(netif); + return -1; + } + + conn.altcp_allocator = &tls_allocator; + } + #endif + conn.result_fn = httpc_result_cb; + conn.headers_done_fn = httpc_headers_done_cb; ctx.path = path; - if (httpc_get_file_dns(server_name, port, path, &conn, httpc_recv_cb, + if (httpc_get_file_dns(ctx.server_name, ctx.port, path, &conn, httpc_recv_cb, &ctx, &state)) { net_lwip_remove_netif(netif); return CMD_RET_FAILURE; @@@ -320,9 -342,8 +381,9 @@@ int do_wget(struct cmd_tbl *cmdtp, int } if (parse_legacy_arg(url, nurl, sizeof(nurl))) - return CMD_RET_FAILURE; + return CMD_RET_FAILURE; + wget_info = &default_wget_info; if (wget_with_dns(dst_addr, nurl)) return CMD_RET_FAILURE;