diff options
Diffstat (limited to 'thirdparty/enet/patches/ipv6_support.patch')
-rw-r--r-- | thirdparty/enet/patches/ipv6_support.patch | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/thirdparty/enet/patches/ipv6_support.patch b/thirdparty/enet/patches/ipv6_support.patch new file mode 100644 index 0000000000..1f79863645 --- /dev/null +++ b/thirdparty/enet/patches/ipv6_support.patch @@ -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; + } |