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 <sbalou...@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 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel