From c831f635fe375b3466c3b0e810a5f7c6602be109 Mon Sep 17 00:00:00 2001 From: Fabio Alessandrelli Date: Thu, 28 Nov 2024 20:40:13 +0100 Subject: [PATCH] [Web] Implement dummy IPWeb instead of IPUnix Note: This commit ties the IPUnix to the UNIX_SOCKET_UNAVAILABLE define, disabling it when set. It is maybe not semantically correct (getifaddrs) is not part of the "socket" API, but it's reasonable to expect that a platform not supporting Unix-style sockets, would also not support other Unix network functions. --- drivers/unix/ip_unix.cpp | 2 +- drivers/unix/ip_unix.h | 2 +- drivers/unix/os_unix.cpp | 2 +- platform/web/SCsub | 1 + platform/web/ip_web.cpp | 48 +++++++++++++++++++++++++++++++++++++ platform/web/ip_web.h | 51 ++++++++++++++++++++++++++++++++++++++++ platform/web/os_web.cpp | 2 ++ 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 platform/web/ip_web.cpp create mode 100644 platform/web/ip_web.h diff --git a/drivers/unix/ip_unix.cpp b/drivers/unix/ip_unix.cpp index 5a1a26e8745..d58dbced03b 100644 --- a/drivers/unix/ip_unix.cpp +++ b/drivers/unix/ip_unix.cpp @@ -28,7 +28,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /**************************************************************************/ -#if defined(UNIX_ENABLED) +#if defined(UNIX_ENABLED) && !defined(UNIX_SOCKET_UNAVAILABLE) #include "ip_unix.h" diff --git a/drivers/unix/ip_unix.h b/drivers/unix/ip_unix.h index 7e496629ef4..0d404e276cb 100644 --- a/drivers/unix/ip_unix.h +++ b/drivers/unix/ip_unix.h @@ -31,7 +31,7 @@ #ifndef IP_UNIX_H #define IP_UNIX_H -#if defined(UNIX_ENABLED) +#if defined(UNIX_ENABLED) && !defined(UNIX_SOCKET_UNAVAILABLE) #include "core/io/ip.h" diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 299ac6536f8..bbfebdcb3bc 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -169,8 +169,8 @@ void OS_Unix::initialize_core() { #ifndef UNIX_SOCKET_UNAVAILABLE NetSocketUnix::make_default(); -#endif IPUnix::make_default(); +#endif process_map = memnew((HashMap)); _setup_clock(); diff --git a/platform/web/SCsub b/platform/web/SCsub index 9a2eea9e07b..b58f717df3f 100644 --- a/platform/web/SCsub +++ b/platform/web/SCsub @@ -26,6 +26,7 @@ web_files = [ "http_client_web.cpp", "javascript_bridge_singleton.cpp", "web_main.cpp", + "ip_web.cpp", "os_web.cpp", ] diff --git a/platform/web/ip_web.cpp b/platform/web/ip_web.cpp new file mode 100644 index 00000000000..3d1fc5618fc --- /dev/null +++ b/platform/web/ip_web.cpp @@ -0,0 +1,48 @@ +/**************************************************************************/ +/* ip_web.cpp */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#include "ip_web.h" + +void IPWeb::_resolve_hostname(List &r_addresses, const String &p_hostname, Type p_type) const { +} + +void IPWeb::get_local_interfaces(HashMap *r_interfaces) const { +} + +void IPWeb::make_default() { + _create = _create_web; +} + +IP *IPWeb::_create_web() { + return memnew(IPWeb); +} + +IPWeb::IPWeb() { +} diff --git a/platform/web/ip_web.h b/platform/web/ip_web.h new file mode 100644 index 00000000000..2f231cc6cc3 --- /dev/null +++ b/platform/web/ip_web.h @@ -0,0 +1,51 @@ +/**************************************************************************/ +/* ip_web.h */ +/**************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/**************************************************************************/ +/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */ +/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/**************************************************************************/ + +#ifndef IP_WEB_H +#define IP_WEB_H + +#include "core/io/ip.h" + +class IPWeb : public IP { + GDCLASS(IPWeb, IP); + + virtual void _resolve_hostname(List &r_addresses, const String &p_hostname, Type p_type = TYPE_ANY) const override; + +private: + static IP *_create_web(); + +public: + virtual void get_local_interfaces(HashMap *r_interfaces) const override; + + static void make_default(); + IPWeb(); +}; + +#endif // IP_WEB_H diff --git a/platform/web/os_web.cpp b/platform/web/os_web.cpp index 51facbaa845..d3f99c2f8ff 100644 --- a/platform/web/os_web.cpp +++ b/platform/web/os_web.cpp @@ -33,6 +33,7 @@ #include "api/javascript_bridge_singleton.h" #include "display_server_web.h" #include "godot_js.h" +#include "ip_web.h" #include "core/config/project_settings.h" #include "core/debugger/engine_debugger.h" @@ -53,6 +54,7 @@ void OS_Web::alert(const String &p_alert, const String &p_title) { // Lifecycle void OS_Web::initialize() { OS_Unix::initialize_core(); + IPWeb::make_default(); DisplayServerWeb::register_web_driver(); }