grub_efi_status_t status;
grub_efi_boot_services_t *b = grub_efi_system_table->boot_services;
char *url = NULL;
-
- request_headers[0].field_name = (grub_efi_char8_t *) "Host";
- request_headers[0].field_value = (grub_efi_char8_t *) server;
- request_headers[1].field_name = (grub_efi_char8_t *) "Accept";
- request_headers[1].field_value = (grub_efi_char8_t *) "*/*";
- request_headers[2].field_name = (grub_efi_char8_t *) "User-Agent";
- request_headers[2].field_value = (grub_efi_char8_t *) "UefiHttpBoot/1.0";
+ char *hostname = NULL;
{
grub_efi_ipv6_address_t address;
const char *protocol = (use_https == 1) ? "https" : "http";
if (grub_efi_string_to_ip6_address (server, &address, &rest) && *rest == 0)
- url = grub_xasprintf ("%s://[%s]%s", protocol, server, name);
+ {
+ hostname = grub_xasprintf ("[%s]", server);
+ if (!hostname)
+ return GRUB_ERR_OUT_OF_MEMORY;
+
+ server = hostname;
+
+ url = grub_xasprintf ("%s://%s%s", protocol, server, name);
+ if (!url)
+ {
+ grub_free (hostname);
+ return GRUB_ERR_OUT_OF_MEMORY;
+ }
+ }
else
- url = grub_xasprintf ("%s://%s%s", protocol, server, name);
+ {
+ url = grub_xasprintf ("%s://%s%s", protocol, server, name);
+ }
if (!url)
{
request_data.url = ucs2_url;
}
+ request_headers[0].field_name = (grub_efi_char8_t *) "Host";
+ request_headers[0].field_value = (grub_efi_char8_t *) server;
+ request_headers[1].field_name = (grub_efi_char8_t *) "Accept";
+ request_headers[1].field_value = (grub_efi_char8_t *) "*/*";
+ request_headers[2].field_name = (grub_efi_char8_t *) "User-Agent";
+ request_headers[2].field_value = (grub_efi_char8_t *) "UefiHttpBoot/1.0";
+
request_data.method = (headeronly > 0) ? GRUB_EFI_HTTPMETHODHEAD : GRUB_EFI_HTTPMETHODGET;
request_message.data.request = &request_data;
status = http->request (http, &request_token);
+ if (hostname)
+ grub_free (hostname);
+
if (status != GRUB_EFI_SUCCESS)
{
b->close_event (request_token.event);