From 78db6bcf3380c43e7290580d4044a6ae28531c84 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Thu, 7 Jan 2016 17:27:15 -0800 Subject: [PATCH] Allow non-default ports for HTTP requests Add support for passing ports in HTTP requests. This takes the form of: (http,serverip:portnum)/file --- grub-core/net/http.c | 8 ++++++-- grub-core/net/net.c | 10 +++++++++- include/grub/net.h | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/grub-core/net/http.c b/grub-core/net/http.c index 4684f8b33..0dbb49a5e 100644 --- a/grub-core/net/http.c +++ b/grub-core/net/http.c @@ -309,7 +309,7 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) { http_data_t data = file->data; grub_uint8_t *ptr; - int i; + int i, port; struct grub_net_buff *nb; grub_err_t err; @@ -391,8 +391,12 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) grub_netbuff_put (nb, 2); grub_memcpy (ptr, "\r\n", 2); + if (file->device->net->port) + port = file->device->net->port; + else + port = HTTP_PORT; data->sock = grub_net_tcp_open (file->device->net->server, - HTTP_PORT, http_receive, + port, http_receive, http_err, http_err, file); if (!data->sock) diff --git a/grub-core/net/net.c b/grub-core/net/net.c index a0472d5d4..ea1ff7d01 100644 --- a/grub-core/net/net.c +++ b/grub-core/net/net.c @@ -1273,7 +1273,7 @@ grub_net_open_real (const char *name) grub_net_app_level_t proto; const char *protname, *server; grub_size_t protnamelen; - int try; + int try, port = 0; if (grub_strncmp (name, "pxe:", sizeof ("pxe:") - 1) == 0) { @@ -1290,7 +1290,14 @@ grub_net_open_real (const char *name) else { const char *comma; + char *colon; comma = grub_strchr (name, ','); + colon = grub_strchr (name, ':'); + if (colon) + { + port = (int) grub_strtol(colon+1, NULL, 10); + *colon = '\0'; + } if (comma) { protnamelen = comma - name; @@ -1325,6 +1332,7 @@ grub_net_open_real (const char *name) if (server) { ret->server = grub_strdup (server); + ret->port = port; if (!ret->server) { grub_free (ret); diff --git a/include/grub/net.h b/include/grub/net.h index 538baa33e..bb5e9c7c9 100644 --- a/include/grub/net.h +++ b/include/grub/net.h @@ -264,6 +264,7 @@ typedef struct grub_net grub_fs_t fs; int eof; int stall; + int port; } *grub_net_t; extern grub_net_t (*EXPORT_VAR (grub_net_open)) (const char *name);