Hi Jerome

>       if (!label)
>               return CMD_RET_FAILURE;
>
> -     if (!wget_validate_uri(argv[3])) {
> -             printf("ERROR: invalid URI\n");
> -             return CMD_RET_FAILURE;
> +     if (IS_ENABLED(CONFIG_CMD_WGET)) {

efi_boot_add_uri() is only called if CONFIG_EFI_HTTP_BOOT which selectes
WGET

> +             if (!wget_validate_uri(argv[3])) {
> +                     printf("ERROR: invalid URI\n");
> +                     return CMD_RET_FAILURE;
> +             }
>       }
>
>       efi_create_indexed_name(var_name16, var_name16_size, "Boot", id);
> diff --git a/cmd/net-common.c b/cmd/net-common.c
> new file mode 100644
> index 00000000000..b5dfd2c8866
> --- /dev/null
> +++ b/cmd/net-common.c
> @@ -0,0 +1,112 @@

[...]

> +
> +static void httpc_result_cb(void *arg, httpc_result_t httpc_result,
> +                         u32_t rx_content_len, u32_t srv_res, err_t err)
> +{
> +     ulong elapsed;
> +
> +     if (httpc_result != HTTPC_RESULT_OK) {
> +             log_err("\nHTTP client error %d\n", httpc_result);
> +             done = FAILURE;
> +             return;
> +     }
> +
> +     elapsed = get_timer(start_time);
> +        log_info("\n%u bytes transferred in %lu ms (", rx_content_len,
> +                 get_timer(start_time));
> +        print_size(rx_content_len / elapsed * 1000, "/s)\n");
> +
> +     if (env_set_hex("filesize", rx_content_len) ||
> +         env_set_hex("fileaddr", saved_daddr)) {
> +             log_err("Could not set filesize or fileaddr\n");
> +             done = FAILURE;
> +             return;
> +     }
> +
> +     done = SUCCESS;
> +}
> +
> +int wget_with_dns(ulong dst_addr, char *uri)
> +{
> +     char server_name[SERVER_NAME_SIZE];
> +     httpc_connection_t conn;
> +     httpc_state_t *state;
> +     char *path;
> +     u16 port;
> +
> +     daddr = dst_addr;
> +     saved_daddr = dst_addr;
> +     done = NOT_DONE;
> +     size = 0;
> +     prevsize = 0;
> +
> +     if (parse_url(uri, server_name, &port, &path))
> +             return CMD_RET_USAGE;
> +
> +     memset(&conn, 0, sizeof(conn));
> +     conn.result_fn = httpc_result_cb;
> +     start_time = get_timer(0);
> +     if (httpc_get_file_dns(server_name, port, path, &conn, httpc_recv_cb,
> +                            NULL, &state))
> +             return CMD_RET_FAILURE;
> +
> +     while (!done) {
> +             eth_rx();
> +             sys_check_timeouts();
> +             if (ctrlc())
> +                     break;
> +     }

You probably don't need the 'done' enum here. There's a state->rx_status,
which if I am reading tlwip correctly should be filled in with the results
of httpc_result_t

> +
> +     if (done == SUCCESS)
> +             return 0;
> +
> +     return -1;
> +}
> +
> +int do_wget(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
> +{
> +     char *url;
> +     ulong dst_addr;
> +
> +     if (argc < 2 || argc > 3)
> +             return CMD_RET_USAGE;
> +
> +     dst_addr = image_load_addr;
> +
> +     if (!strncmp(argv[1], "0x", 2)) {
> +             if (argc < 3)
> +                     return CMD_RET_USAGE;
> +             dst_addr = hextoul(argv[1], NULL);
> +             url = argv[2];
> +     } else {
> +             url = argv[1];
> +     }
> +
> +     if (wget_with_dns(dst_addr, url))
> +             return CMD_RET_FAILURE;
> +
> +     return CMD_RET_SUCCESS;
> +}
> --
> 2.40.1
>

Cheers
/Ilias

Reply via email to