Commit 571c713a by Rémi Verschelde

enet: Resync with upstream we forked at, add patch

Before rebasing on the newly released enet 1.3.14, let's resync with the actual commit we initially imported, which seems to be: https://github.com/lsalzman/enet/commit/f46fee0acc8e243b2b6910b09693f93c3aad775f
parent 61dd7748
...@@ -46,7 +46,7 @@ Files extracted from upstream source: ...@@ -46,7 +46,7 @@ Files extracted from upstream source:
## enet ## enet
- Upstream: http://enet.bespin.org - Upstream: http://enet.bespin.org
- Version: 1.3.13 - Version: 1.3.13 (f46fee0, 2016)
- License: MIT - License: MIT
Files extracted from upstream source: Files extracted from upstream source:
...@@ -57,12 +57,14 @@ Files extracted from upstream source: ...@@ -57,12 +57,14 @@ Files extracted from upstream source:
Important: enet.h, host.c, protocol.c have been slightly modified Important: enet.h, host.c, protocol.c have been slightly modified
to be usable by godot socket implementation and allow IPv6. to be usable by godot socket implementation and allow IPv6.
Apply the patch in the `patches/` folder when syncing on newer upstream
commits.
Two files (godot.cpp and enet/godot.h) have been added to provide Two files (godot.cpp and enet/godot.h) have been added to provide
enet socket implementation using Godot classes. enet socket implementation using Godot classes.
It is still possible to build against a system wide ENet but doing so It is still possible to build against a system wide ENet but doing so
will limit it's functionality to IPv4 only. will limit it's functionality to IPv4 only.
Check the diff of enet.h, protocol.c, and host.c with the 1.3.13
tarball before the next update.
## etc2comp ## etc2comp
......
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;
}
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
#include "enet/time.h" #include "enet/time.h"
#include "enet/enet.h" #include "enet/enet.h"
static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] = static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] =
{ {
0, 0,
...@@ -1691,7 +1690,7 @@ enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int ch ...@@ -1691,7 +1690,7 @@ enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int ch
& host -> buffers [1], host -> bufferCount - 1, & host -> buffers [1], host -> bufferCount - 1,
originalSize, originalSize,
host -> packetData [1], host -> packetData [1],
originalSize); originalSize);
if (compressedSize > 0 && compressedSize < originalSize) if (compressedSize > 0 && compressedSize < originalSize)
{ {
host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED; host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment