summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/bind/core_bind.h6
-rw-r--r--core/class_db.cpp4
-rw-r--r--core/io/file_access_buffered.cpp4
-rw-r--r--core/io/ip.cpp36
-rw-r--r--core/io/ip.h11
-rw-r--r--core/io/ip_address.cpp3
-rw-r--r--core/io/marshalls.cpp5
-rw-r--r--core/io/net_socket.h2
-rw-r--r--core/io/packet_peer_udp.cpp23
-rw-r--r--core/io/packet_peer_udp.h2
-rw-r--r--core/io/resource_format_binary.cpp10
-rw-r--r--core/io/resource_importer.h3
-rw-r--r--core/io/resource_loader.h2
-rw-r--r--core/io/resource_saver.h2
-rw-r--r--core/io/xml_parser.cpp4
-rw-r--r--core/math/a_star.h2
-rw-r--r--core/math/expression.h3
-rw-r--r--core/os/file_access.cpp6
-rw-r--r--core/os/input_event.h30
-rw-r--r--core/os/os.h2
-rw-r--r--core/pool_allocator.cpp4
-rw-r--r--core/pool_vector.h6
22 files changed, 117 insertions, 53 deletions
diff --git a/core/bind/core_bind.h b/core/bind/core_bind.h
index 2751ff242c..7d0c158f51 100644
--- a/core/bind/core_bind.h
+++ b/core/bind/core_bind.h
@@ -694,7 +694,7 @@ VARIANT_ENUM_CAST(_Thread::Priority);
class _ClassDB : public Object {
- GDCLASS(_ClassDB, Object)
+ GDCLASS(_ClassDB, Object);
protected:
static void _bind_methods();
@@ -779,7 +779,7 @@ public:
class _JSON;
class JSONParseResult : public Reference {
- GDCLASS(JSONParseResult, Reference)
+ GDCLASS(JSONParseResult, Reference);
friend class _JSON;
@@ -807,7 +807,7 @@ public:
};
class _JSON : public Object {
- GDCLASS(_JSON, Object)
+ GDCLASS(_JSON, Object);
protected:
static void _bind_methods();
diff --git a/core/class_db.cpp b/core/class_db.cpp
index 0c844657a4..ec07ee98e2 100644
--- a/core/class_db.cpp
+++ b/core/class_db.cpp
@@ -666,10 +666,8 @@ void ClassDB::bind_integer_constant(const StringName &p_class, const StringName
OBJTYPE_WLOCK;
ClassInfo *type = classes.getptr(p_class);
- if (!type) {
- ERR_FAIL_COND(!type);
- }
+ ERR_FAIL_COND(!type);
if (type->constant_map.has(p_name)) {
diff --git a/core/io/file_access_buffered.cpp b/core/io/file_access_buffered.cpp
index 83ff532aa4..93eaeb08c5 100644
--- a/core/io/file_access_buffered.cpp
+++ b/core/io/file_access_buffered.cpp
@@ -141,9 +141,7 @@ int FileAccessBuffered::get_buffer(uint8_t *p_dest, int p_length) const {
int left = cache_data_left();
if (left == 0) {
- if (to_read > 0) {
- file.offset += to_read;
- };
+ file.offset += to_read;
return total_read;
};
if (left < 0) {
diff --git a/core/io/ip.cpp b/core/io/ip.cpp
index 420e48f839..3d87131b51 100644
--- a/core/io/ip.cpp
+++ b/core/io/ip.cpp
@@ -234,6 +234,41 @@ Array IP::_get_local_addresses() const {
return addresses;
}
+Array IP::_get_local_interfaces() const {
+
+ Array results;
+ Map<String, Interface_Info> interfaces;
+ get_local_interfaces(&interfaces);
+ for (Map<String, Interface_Info>::Element *E = interfaces.front(); E; E = E->next()) {
+ Interface_Info &c = E->get();
+ Dictionary rc;
+ rc["name"] = c.name;
+ rc["friendly"] = c.name_friendly;
+ rc["index"] = c.index;
+
+ Array ips;
+ for (const List<IP_Address>::Element *F = c.ip_addresses.front(); F; F = F->next()) {
+ ips.push_front(F->get());
+ }
+ rc["addresses"] = ips;
+
+ results.push_front(rc);
+ }
+
+ return results;
+}
+
+void IP::get_local_addresses(List<IP_Address> *r_addresses) const {
+
+ Map<String, Interface_Info> interfaces;
+ get_local_interfaces(&interfaces);
+ for (Map<String, Interface_Info>::Element *E = interfaces.front(); E; E = E->next()) {
+ for (const List<IP_Address>::Element *F = E->get().ip_addresses.front(); F; F = F->next()) {
+ r_addresses->push_front(F->get());
+ }
+ }
+}
+
void IP::_bind_methods() {
ClassDB::bind_method(D_METHOD("resolve_hostname", "host", "ip_type"), &IP::resolve_hostname, DEFVAL(IP::TYPE_ANY));
@@ -242,6 +277,7 @@ void IP::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_resolve_item_address", "id"), &IP::get_resolve_item_address);
ClassDB::bind_method(D_METHOD("erase_resolve_item", "id"), &IP::erase_resolve_item);
ClassDB::bind_method(D_METHOD("get_local_addresses"), &IP::_get_local_addresses);
+ ClassDB::bind_method(D_METHOD("get_local_interfaces"), &IP::_get_local_interfaces);
ClassDB::bind_method(D_METHOD("clear_cache", "hostname"), &IP::clear_cache, DEFVAL(""));
BIND_ENUM_CONSTANT(RESOLVER_STATUS_NONE);
diff --git a/core/io/ip.h b/core/io/ip.h
index ead71ebb54..59b18ef986 100644
--- a/core/io/ip.h
+++ b/core/io/ip.h
@@ -73,16 +73,25 @@ protected:
virtual IP_Address _resolve_hostname(const String &p_hostname, Type p_type = TYPE_ANY) = 0;
Array _get_local_addresses() const;
+ Array _get_local_interfaces() const;
static IP *(*_create)();
public:
+ struct Interface_Info {
+ String name;
+ String name_friendly;
+ String index;
+ List<IP_Address> ip_addresses;
+ };
+
IP_Address resolve_hostname(const String &p_hostname, Type p_type = TYPE_ANY);
// async resolver hostname
ResolverID resolve_hostname_queue_item(const String &p_hostname, Type p_type = TYPE_ANY);
ResolverStatus get_resolve_item_status(ResolverID p_id) const;
IP_Address get_resolve_item_address(ResolverID p_id) const;
- virtual void get_local_addresses(List<IP_Address> *r_addresses) const = 0;
+ virtual void get_local_addresses(List<IP_Address> *r_addresses) const;
+ virtual void get_local_interfaces(Map<String, Interface_Info> *r_interfaces) const = 0;
void erase_resolve_item(ResolverID p_id);
void clear_cache(const String &p_hostname = "");
diff --git a/core/io/ip_address.cpp b/core/io/ip_address.cpp
index 763a5fbb9a..9305afac5f 100644
--- a/core/io/ip_address.cpp
+++ b/core/io/ip_address.cpp
@@ -40,6 +40,9 @@ IP_Address::operator Variant() const {
IP_Address::operator String() const {
+ if (wildcard)
+ return "*";
+
if (!valid)
return "";
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp
index d1b6b82cf0..7494603462 100644
--- a/core/io/marshalls.cpp
+++ b/core/io/marshalls.cpp
@@ -103,10 +103,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int
const uint8_t *buf = p_buffer;
int len = p_len;
- if (len < 4) {
-
- ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
- }
+ ERR_FAIL_COND_V(len < 4, ERR_INVALID_DATA);
uint32_t type = decode_uint32(buf);
diff --git a/core/io/net_socket.h b/core/io/net_socket.h
index 94e7ef6f75..3bc1369487 100644
--- a/core/io/net_socket.h
+++ b/core/io/net_socket.h
@@ -74,6 +74,8 @@ public:
virtual void set_ipv6_only_enabled(bool p_enabled) = 0;
virtual void set_tcp_no_delay_enabled(bool p_enabled) = 0;
virtual void set_reuse_address_enabled(bool p_enabled) = 0;
+ virtual Error join_multicast_group(const IP_Address &p_multi_address, String p_if_name) = 0;
+ virtual Error leave_multicast_group(const IP_Address &p_multi_address, String p_if_name) = 0;
};
#endif // NET_SOCKET_H
diff --git a/core/io/packet_peer_udp.cpp b/core/io/packet_peer_udp.cpp
index 5912b8df94..7e9471c053 100644
--- a/core/io/packet_peer_udp.cpp
+++ b/core/io/packet_peer_udp.cpp
@@ -37,6 +37,27 @@ void PacketPeerUDP::set_blocking_mode(bool p_enable) {
blocking = p_enable;
}
+Error PacketPeerUDP::join_multicast_group(IP_Address p_multi_address, String p_if_name) {
+
+ ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
+ ERR_FAIL_COND_V(!p_multi_address.is_valid(), ERR_INVALID_PARAMETER);
+
+ if (!_sock->is_open()) {
+ IP::Type ip_type = p_multi_address.is_ipv4() ? IP::TYPE_IPV4 : IP::TYPE_IPV6;
+ Error err = _sock->open(NetSocket::TYPE_UDP, ip_type);
+ ERR_FAIL_COND_V(err != OK, err);
+ _sock->set_blocking_enabled(false);
+ }
+ return _sock->join_multicast_group(p_multi_address, p_if_name);
+}
+
+Error PacketPeerUDP::leave_multicast_group(IP_Address p_multi_address, String p_if_name) {
+
+ ERR_FAIL_COND_V(!_sock.is_valid(), ERR_UNAVAILABLE);
+ ERR_FAIL_COND_V(!_sock->is_open(), ERR_UNCONFIGURED);
+ return _sock->leave_multicast_group(p_multi_address, p_if_name);
+}
+
String PacketPeerUDP::_get_packet_ip() const {
return get_packet_address();
@@ -237,6 +258,8 @@ void PacketPeerUDP::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_packet_ip"), &PacketPeerUDP::_get_packet_ip);
ClassDB::bind_method(D_METHOD("get_packet_port"), &PacketPeerUDP::get_packet_port);
ClassDB::bind_method(D_METHOD("set_dest_address", "host", "port"), &PacketPeerUDP::_set_dest_address);
+ ClassDB::bind_method(D_METHOD("join_multicast_group", "multicast_address", "interface_name"), &PacketPeerUDP::join_multicast_group);
+ ClassDB::bind_method(D_METHOD("leave_multicast_group", "multicast_address", "interface_name"), &PacketPeerUDP::leave_multicast_group);
}
PacketPeerUDP::PacketPeerUDP() :
diff --git a/core/io/packet_peer_udp.h b/core/io/packet_peer_udp.h
index 0593137604..068bd5cd5a 100644
--- a/core/io/packet_peer_udp.h
+++ b/core/io/packet_peer_udp.h
@@ -77,6 +77,8 @@ public:
Error get_packet(const uint8_t **r_buffer, int &r_buffer_size);
int get_available_packet_count() const;
int get_max_packet_size() const;
+ Error join_multicast_group(IP_Address p_multi_address, String p_if_name);
+ Error leave_multicast_group(IP_Address p_multi_address, String p_if_name);
PacketPeerUDP();
~PacketPeerUDP();
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index f25abc4aab..aef2dcfff3 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -991,10 +991,7 @@ Ref<ResourceInteractiveLoader> ResourceFormatLoaderBinary::load_interactive(cons
Error err;
FileAccess *f = FileAccess::open(p_path, FileAccess::READ, &err);
- if (err != OK) {
-
- ERR_FAIL_COND_V(err != OK, Ref<ResourceInteractiveLoader>());
- }
+ ERR_FAIL_COND_V(err != OK, Ref<ResourceInteractiveLoader>());
Ref<ResourceInteractiveLoaderBinary> ria = memnew(ResourceInteractiveLoaderBinary);
String path = p_original_path != "" ? p_original_path : p_path;
@@ -1129,9 +1126,8 @@ Error ResourceFormatLoaderBinary::rename_dependencies(const String &p_path, cons
Error err;
f = FileAccess::open(p_path, FileAccess::READ, &err);
- if (err != OK) {
- ERR_FAIL_COND_V(err != OK, ERR_FILE_CANT_OPEN);
- }
+
+ ERR_FAIL_COND_V(err != OK, ERR_FILE_CANT_OPEN);
Ref<ResourceInteractiveLoaderBinary> ria = memnew(ResourceInteractiveLoaderBinary);
ria->local_path = ProjectSettings::get_singleton()->localize_path(p_path);
diff --git a/core/io/resource_importer.h b/core/io/resource_importer.h
index 317f301b5c..9cf298a7f5 100644
--- a/core/io/resource_importer.h
+++ b/core/io/resource_importer.h
@@ -94,7 +94,8 @@ public:
class ResourceImporter : public Reference {
- GDCLASS(ResourceImporter, Reference)
+ GDCLASS(ResourceImporter, Reference);
+
public:
virtual String get_importer_name() const = 0;
virtual String get_visible_name() const = 0;
diff --git a/core/io/resource_loader.h b/core/io/resource_loader.h
index 9e7020be7c..70e7bdc224 100644
--- a/core/io/resource_loader.h
+++ b/core/io/resource_loader.h
@@ -62,7 +62,7 @@ public:
class ResourceFormatLoader : public Reference {
- GDCLASS(ResourceFormatLoader, Reference)
+ GDCLASS(ResourceFormatLoader, Reference);
protected:
static void _bind_methods();
diff --git a/core/io/resource_saver.h b/core/io/resource_saver.h
index 7df3bfb1f8..0fba47a5e8 100644
--- a/core/io/resource_saver.h
+++ b/core/io/resource_saver.h
@@ -38,7 +38,7 @@
*/
class ResourceFormatSaver : public Reference {
- GDCLASS(ResourceFormatSaver, Reference)
+ GDCLASS(ResourceFormatSaver, Reference);
protected:
static void _bind_methods();
diff --git a/core/io/xml_parser.cpp b/core/io/xml_parser.cpp
index f55af5a96a..82527d3f38 100644
--- a/core/io/xml_parser.cpp
+++ b/core/io/xml_parser.cpp
@@ -486,9 +486,7 @@ Error XMLParser::open(const String &p_path) {
Error err;
FileAccess *file = FileAccess::open(p_path, FileAccess::READ, &err);
- if (err) {
- ERR_FAIL_COND_V(err != OK, err);
- }
+ ERR_FAIL_COND_V(err != OK, err);
length = file->get_len();
ERR_FAIL_COND_V(length < 1, ERR_FILE_CORRUPT);
diff --git a/core/math/a_star.h b/core/math/a_star.h
index e2a0356c7c..ec333efc1d 100644
--- a/core/math/a_star.h
+++ b/core/math/a_star.h
@@ -42,7 +42,7 @@
class AStar : public Reference {
- GDCLASS(AStar, Reference)
+ GDCLASS(AStar, Reference);
uint64_t pass;
diff --git a/core/math/expression.h b/core/math/expression.h
index 79f6f3989d..1113bb6587 100644
--- a/core/math/expression.h
+++ b/core/math/expression.h
@@ -34,7 +34,8 @@
#include "core/reference.h"
class Expression : public Reference {
- GDCLASS(Expression, Reference)
+ GDCLASS(Expression, Reference);
+
public:
enum BuiltinFunc {
MATH_SIN,
diff --git a/core/os/file_access.cpp b/core/os/file_access.cpp
index 079f51bada..913caf6584 100644
--- a/core/os/file_access.cpp
+++ b/core/os/file_access.cpp
@@ -600,9 +600,8 @@ Vector<uint8_t> FileAccess::get_file_as_array(const String &p_path, Error *r_err
if (!f) {
if (r_error) { // if error requested, do not throw error
return Vector<uint8_t>();
- } else {
- ERR_FAIL_COND_V(!f, Vector<uint8_t>());
}
+ ERR_FAIL_COND_V(!f, Vector<uint8_t>());
}
Vector<uint8_t> data;
data.resize(f->get_len());
@@ -621,9 +620,8 @@ String FileAccess::get_file_as_string(const String &p_path, Error *r_error) {
if (err != OK) {
if (r_error) {
return String();
- } else {
- ERR_FAIL_COND_V(err != OK, String());
}
+ ERR_FAIL_COND_V(err != OK, String());
}
String ret;
diff --git a/core/os/input_event.h b/core/os/input_event.h
index 2eb321f134..4f5762e756 100644
--- a/core/os/input_event.h
+++ b/core/os/input_event.h
@@ -173,7 +173,7 @@ enum MidiMessageList {
*/
class InputEvent : public Resource {
- GDCLASS(InputEvent, Resource)
+ GDCLASS(InputEvent, Resource);
int device;
@@ -210,7 +210,7 @@ public:
};
class InputEventWithModifiers : public InputEvent {
- GDCLASS(InputEventWithModifiers, InputEvent)
+ GDCLASS(InputEventWithModifiers, InputEvent);
bool shift;
bool alt;
@@ -256,7 +256,7 @@ public:
class InputEventKey : public InputEventWithModifiers {
- GDCLASS(InputEventKey, InputEventWithModifiers)
+ GDCLASS(InputEventKey, InputEventWithModifiers);
bool pressed; /// otherwise release
@@ -295,7 +295,7 @@ public:
class InputEventMouse : public InputEventWithModifiers {
- GDCLASS(InputEventMouse, InputEventWithModifiers)
+ GDCLASS(InputEventMouse, InputEventWithModifiers);
int button_mask;
@@ -320,7 +320,7 @@ public:
class InputEventMouseButton : public InputEventMouse {
- GDCLASS(InputEventMouseButton, InputEventMouse)
+ GDCLASS(InputEventMouseButton, InputEventMouse);
float factor;
int button_index;
@@ -354,7 +354,7 @@ public:
class InputEventMouseMotion : public InputEventMouse {
- GDCLASS(InputEventMouseMotion, InputEventMouse)
+ GDCLASS(InputEventMouseMotion, InputEventMouse);
Vector2 relative;
Vector2 speed;
@@ -378,7 +378,7 @@ public:
class InputEventJoypadMotion : public InputEvent {
- GDCLASS(InputEventJoypadMotion, InputEvent)
+ GDCLASS(InputEventJoypadMotion, InputEvent);
int axis; ///< Joypad axis
float axis_value; ///< -1 to 1
@@ -403,7 +403,7 @@ public:
};
class InputEventJoypadButton : public InputEvent {
- GDCLASS(InputEventJoypadButton, InputEvent)
+ GDCLASS(InputEventJoypadButton, InputEvent);
int button_index;
bool pressed;
@@ -431,7 +431,7 @@ public:
};
class InputEventScreenTouch : public InputEvent {
- GDCLASS(InputEventScreenTouch, InputEvent)
+ GDCLASS(InputEventScreenTouch, InputEvent);
int index;
Vector2 pos;
bool pressed;
@@ -457,7 +457,7 @@ public:
class InputEventScreenDrag : public InputEvent {
- GDCLASS(InputEventScreenDrag, InputEvent)
+ GDCLASS(InputEventScreenDrag, InputEvent);
int index;
Vector2 pos;
Vector2 relative;
@@ -487,7 +487,7 @@ public:
class InputEventAction : public InputEvent {
- GDCLASS(InputEventAction, InputEvent)
+ GDCLASS(InputEventAction, InputEvent);
StringName action;
bool pressed;
@@ -519,7 +519,7 @@ public:
class InputEventGesture : public InputEventWithModifiers {
- GDCLASS(InputEventGesture, InputEventWithModifiers)
+ GDCLASS(InputEventGesture, InputEventWithModifiers);
Vector2 pos;
@@ -533,7 +533,7 @@ public:
class InputEventMagnifyGesture : public InputEventGesture {
- GDCLASS(InputEventMagnifyGesture, InputEventGesture)
+ GDCLASS(InputEventMagnifyGesture, InputEventGesture);
real_t factor;
protected:
@@ -551,7 +551,7 @@ public:
class InputEventPanGesture : public InputEventGesture {
- GDCLASS(InputEventPanGesture, InputEventGesture)
+ GDCLASS(InputEventPanGesture, InputEventGesture);
Vector2 delta;
protected:
@@ -568,7 +568,7 @@ public:
};
class InputEventMIDI : public InputEvent {
- GDCLASS(InputEventMIDI, InputEvent)
+ GDCLASS(InputEventMIDI, InputEvent);
int channel;
int message;
diff --git a/core/os/os.h b/core/os/os.h
index 514e1e2ad3..1b19ddff26 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -222,6 +222,8 @@ public:
virtual bool is_window_maximized() const { return true; }
virtual void set_window_always_on_top(bool p_enabled) {}
virtual bool is_window_always_on_top() const { return false; }
+ virtual void set_console_visible(bool p_enabled) {}
+ virtual bool is_console_visible() const { return false; }
virtual void request_attention() {}
virtual void center_window();
diff --git a/core/pool_allocator.cpp b/core/pool_allocator.cpp
index a283d8db1d..11a3be89bd 100644
--- a/core/pool_allocator.cpp
+++ b/core/pool_allocator.cpp
@@ -500,9 +500,7 @@ void *PoolAllocator::get(ID p_mem) {
if (!needs_locking) {
Entry *e = get_entry(p_mem);
- if (!e) {
- ERR_FAIL_COND_V(!e, NULL);
- };
+ ERR_FAIL_COND_V(!e, NULL);
return &pool[e->pos];
}
diff --git a/core/pool_vector.h b/core/pool_vector.h
index 102a620f17..338de966f6 100644
--- a/core/pool_vector.h
+++ b/core/pool_vector.h
@@ -411,8 +411,8 @@ public:
p_to = size() + p_to;
}
- CRASH_BAD_INDEX(p_from, size());
- CRASH_BAD_INDEX(p_to, size());
+ ERR_FAIL_INDEX_V(p_from, size(), PoolVector<T>());
+ ERR_FAIL_INDEX_V(p_to, size(), PoolVector<T>());
PoolVector<T> slice;
int span = 1 + p_to - p_from;
@@ -511,6 +511,8 @@ const T PoolVector<T>::operator[](int p_index) const {
template <class T>
Error PoolVector<T>::resize(int p_size) {
+ ERR_FAIL_COND_V(p_size < 0, ERR_INVALID_PARAMETER);
+
if (alloc == NULL) {
if (p_size == 0)