[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] net: Allow use of non-standard TCP/IP ports for HTTP protocol.
From: |
Stephen Balousek |
Subject: |
[PATCH] net: Allow use of non-standard TCP/IP ports for HTTP protocol. |
Date: |
Sun, 5 Sep 2021 15:57:42 -0700 |
Allow the use of HTTP servers listening on ports other 80. This is done
with an extension to the http notation of either:
(http[,server[,port]])
- or -
(http[,server[:port]])
Signed-off-by: Stephen Balousek <sbalousek@wickedloop.com>
---
grub-core/net/http.c | 43 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 39 insertions(+), 4 deletions(-)
diff --git a/grub-core/net/http.c b/grub-core/net/http.c
index b616cf40b..87e496e7f 100644
--- a/grub-core/net/http.c
+++ b/grub-core/net/http.c
@@ -312,6 +312,9 @@ http_establish (struct grub_file *file, grub_off_t offset,
int initial)
int i;
struct grub_net_buff *nb;
grub_err_t err;
+ char *server_name;
+ char *port_string;
+ long port_number;
nb = grub_netbuff_alloc (GRUB_NET_TCP_RESERVE_SIZE
+ sizeof ("GET ") - 1
@@ -390,10 +393,42 @@ http_establish (struct grub_file *file, grub_off_t
offset, int initial)
grub_netbuff_put (nb, 2);
grub_memcpy (ptr, "\r\n", 2);
- data->sock = grub_net_tcp_open (file->device->net->server,
- HTTP_PORT, http_receive,
- http_err, NULL,
- file);
+ port_string = grub_strrchr(file->device->net->server, ',');
+ if (!port_string)
+ {
+ port_string = grub_strrchr(file->device->net->server, ':');
+ if (grub_strchr(port_string + 1, ']'))
+ {
+ port_string = 0;
+ }
+ }
+ if (port_string)
+ {
+ port_number = grub_strtol(port_string + 1, 0, 10);
+ if (port_number <= 0 || port_number > 65535)
+ {
+ return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("invalid port number
`%s'"), port_string + 1);
+ }
+
+ server_name = grub_strdup(file->device->net->server);
+ server_name[port_string - file->device->net->server] = 0;
+ }
+ else
+ {
+ port_number = HTTP_PORT;
+ server_name = file->device->net->server;
+ }
+
+ data->sock = grub_net_tcp_open (server_name,
+ port_number, http_receive,
+ http_err, NULL,
+ file);
+
+ if (server_name != file->device->net->server)
+ {
+ grub_free(server_name);
+ }
+
if (!data->sock)
{
grub_netbuff_free (nb);
--
2.33.0
- [PATCH] net: Allow use of non-standard TCP/IP ports for HTTP protocol.,
Stephen Balousek <=