|
@@ -0,0 +1,105 @@
|
|
|
+diff --git a/thirdparty/enet/enet/enet.h b/thirdparty/enet/enet/enet.h
|
|
|
+index 650b199ee5..246cbb0a62 100644
|
|
|
+--- a/thirdparty/enet/enet/enet.h
|
|
|
++++ b/thirdparty/enet/enet/enet.h
|
|
|
+@@ -10,13 +10,10 @@ extern "C"
|
|
|
+ {
|
|
|
+ #endif
|
|
|
+
|
|
|
++#include <stdint.h>
|
|
|
+ #include <stdlib.h>
|
|
|
+
|
|
|
+-#ifdef _WIN32
|
|
|
+-#include "enet/win32.h"
|
|
|
+-#else
|
|
|
+-#include "enet/unix.h"
|
|
|
+-#endif
|
|
|
++#include "enet/godot.h"
|
|
|
+
|
|
|
+ #include "enet/types.h"
|
|
|
+ #include "enet/protocol.h"
|
|
|
+@@ -72,7 +69,6 @@ typedef enum _ENetSocketShutdown
|
|
|
+ ENET_SOCKET_SHUTDOWN_READ_WRITE = 2
|
|
|
+ } ENetSocketShutdown;
|
|
|
+
|
|
|
+-#define ENET_HOST_ANY 0
|
|
|
+ #define ENET_HOST_BROADCAST 0xFFFFFFFFU
|
|
|
+ #define ENET_PORT_ANY 0
|
|
|
+
|
|
|
+@@ -88,9 +84,11 @@ typedef enum _ENetSocketShutdown
|
|
|
+ */
|
|
|
+ typedef struct _ENetAddress
|
|
|
+ {
|
|
|
+- enet_uint32 host;
|
|
|
++ uint8_t host[16];
|
|
|
+ enet_uint16 port;
|
|
|
++ uint8_t wildcard;
|
|
|
+ } ENetAddress;
|
|
|
++#define enet_host_equal(host_a, host_b) (memcmp(&host_a, &host_b,16) == 0)
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Packet flag bit constants.
|
|
|
+@@ -519,6 +517,16 @@ ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSock
|
|
|
+ */
|
|
|
+ ENET_API int enet_address_set_host (ENetAddress * address, const char * hostName);
|
|
|
+
|
|
|
++/** Sets the host field in the address parameter from ip struct.
|
|
|
++ @param address destination to store resolved address
|
|
|
++ @param ip the ip struct to read from
|
|
|
++ @param size the size of the ip struct.
|
|
|
++ @retval 0 on success
|
|
|
++ @retval != 0 on failure
|
|
|
++ @returns the address of the given ip in address on success.
|
|
|
++*/
|
|
|
++ENET_API void enet_address_set_ip(ENetAddress * address, const uint8_t * ip, size_t size);
|
|
|
++
|
|
|
+ /** Gives the printable form of the IP address specified in the address parameter.
|
|
|
+ @param address address printed
|
|
|
+ @param hostName destination for name, must not be NULL
|
|
|
+diff --git a/thirdparty/enet/host.c b/thirdparty/enet/host.c
|
|
|
+index 3be6c0922c..fc4da4ca67 100644
|
|
|
+--- a/thirdparty/enet/host.c
|
|
|
++++ b/thirdparty/enet/host.c
|
|
|
+@@ -87,7 +87,7 @@ enet_host_create (const ENetAddress * address, size_t peerCount, size_t channelL
|
|
|
+ host -> commandCount = 0;
|
|
|
+ host -> bufferCount = 0;
|
|
|
+ host -> checksum = NULL;
|
|
|
+- host -> receivedAddress.host = ENET_HOST_ANY;
|
|
|
++ memset(host -> receivedAddress.host, 0, 16);
|
|
|
+ host -> receivedAddress.port = 0;
|
|
|
+ host -> receivedData = NULL;
|
|
|
+ host -> receivedDataLength = 0;
|
|
|
+diff --git a/thirdparty/enet/protocol.c b/thirdparty/enet/protocol.c
|
|
|
+index 29d648732d..ab26886de4 100644
|
|
|
+--- a/thirdparty/enet/protocol.c
|
|
|
++++ b/thirdparty/enet/protocol.c
|
|
|
+@@ -298,7 +298,7 @@ enet_protocol_handle_connect (ENetHost * host, ENetProtocolHeader * header, ENet
|
|
|
+ }
|
|
|
+ else
|
|
|
+ if (currentPeer -> state != ENET_PEER_STATE_CONNECTING &&
|
|
|
+- currentPeer -> address.host == host -> receivedAddress.host)
|
|
|
++ enet_host_equal(currentPeer -> address.host, host -> receivedAddress.host))
|
|
|
+ {
|
|
|
+ if (currentPeer -> address.port == host -> receivedAddress.port &&
|
|
|
+ currentPeer -> connectID == command -> connect.connectID)
|
|
|
+@@ -1010,9 +1010,8 @@ enet_protocol_handle_incoming_commands (ENetHost * host, ENetEvent * event)
|
|
|
+
|
|
|
+ if (peer -> state == ENET_PEER_STATE_DISCONNECTED ||
|
|
|
+ peer -> state == ENET_PEER_STATE_ZOMBIE ||
|
|
|
+- ((host -> receivedAddress.host != peer -> address.host ||
|
|
|
+- host -> receivedAddress.port != peer -> address.port) &&
|
|
|
+- peer -> address.host != ENET_HOST_BROADCAST) ||
|
|
|
++ (!enet_host_equal(host -> receivedAddress.host, peer -> address.host) ||
|
|
|
++ host -> receivedAddress.port != peer -> address.port) ||
|
|
|
+ (peer -> outgoingPeerID < ENET_PROTOCOL_MAXIMUM_PEER_ID &&
|
|
|
+ sessionID != peer -> incomingSessionID))
|
|
|
+ return 0;
|
|
|
+@@ -1054,7 +1053,7 @@ enet_protocol_handle_incoming_commands (ENetHost * host, ENetEvent * event)
|
|
|
+
|
|
|
+ if (peer != NULL)
|
|
|
+ {
|
|
|
+- peer -> address.host = host -> receivedAddress.host;
|
|
|
++ enet_address_set_ip(&(peer -> address), host -> receivedAddress.host, 16);
|
|
|
+ peer -> address.port = host -> receivedAddress.port;
|
|
|
+ peer -> incomingDataTotal += host -> receivedDataLength;
|
|
|
+ }
|