From 3bb40669d5efea707a90171ad2430a81fd4f4726 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Mon, 26 Apr 2021 09:33:28 +0200 Subject: [Net] Implement String::parse_url for parsing URLs. Splits the URL into (scheme, host, port, path). Supports both literal IPv4 and IPv6. Strip credentials when present (e.g. http://user:pass@example.com/). Use that function in both HTTPRequest and WebSocketClient. --- modules/websocket/websocket_client.cpp | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) (limited to 'modules/websocket') diff --git a/modules/websocket/websocket_client.cpp b/modules/websocket/websocket_client.cpp index 425013f811..1e9183ebfa 100644 --- a/modules/websocket/websocket_client.cpp +++ b/modules/websocket/websocket_client.cpp @@ -43,34 +43,18 @@ Error WebSocketClient::connect_to_url(String p_url, const Vector p_proto String host = p_url; String path = "/"; - int p_len = -1; + String scheme = ""; int port = 80; - bool ssl = false; - if (host.begins_with("wss://")) { - ssl = true; // we should implement this - host = host.substr(6, host.length() - 6); - port = 443; - } else { - ssl = false; - if (host.begins_with("ws://")) { - host = host.substr(5, host.length() - 5); - } - } + Error err = p_url.parse_url(scheme, host, port, path); + ERR_FAIL_COND_V_MSG(err != OK, err, "Invalid URL: " + p_url); - // Path - p_len = host.find("/"); - if (p_len != -1) { - path = host.substr(p_len, host.length() - p_len); - host = host.substr(0, p_len); + bool ssl = false; + if (scheme == "wss://") { + ssl = true; } - - // Port - p_len = host.rfind(":"); - if (p_len != -1 && p_len == host.find(":")) { - port = host.substr(p_len, host.length() - p_len).to_int(); - host = host.substr(0, p_len); + if (port == 0) { + port = ssl ? 443 : 80; } - return connect_to_host(host, path, port, ssl, p_protocols, p_custom_headers); } -- cgit v1.2.3