Merge pull request #34843 from akien-mga/enet-1.3.14
enet: Sync with upstream 1.3.14
This commit is contained in:
commit
141da69c84
5 changed files with 137 additions and 10 deletions
8
thirdparty/README.md
vendored
8
thirdparty/README.md
vendored
|
@ -46,7 +46,7 @@ Files extracted from upstream source:
|
|||
## enet
|
||||
|
||||
- Upstream: http://enet.bespin.org
|
||||
- Version: 1.3.13
|
||||
- Version: 1.3.14 (0eaf48e, 2019)
|
||||
- License: MIT
|
||||
|
||||
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
|
||||
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
|
||||
enet socket implementation using Godot classes.
|
||||
|
||||
It is still possible to build against a system wide ENet but doing so
|
||||
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
|
||||
|
|
2
thirdparty/enet/LICENSE
vendored
2
thirdparty/enet/LICENSE
vendored
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2002-2016 Lee Salzman
|
||||
Copyright (c) 2002-2019 Lee Salzman
|
||||
|
||||
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:
|
||||
|
||||
|
|
13
thirdparty/enet/enet/enet.h
vendored
13
thirdparty/enet/enet/enet.h
vendored
|
@ -22,7 +22,7 @@ extern "C"
|
|||
|
||||
#define ENET_VERSION_MAJOR 1
|
||||
#define ENET_VERSION_MINOR 3
|
||||
#define ENET_VERSION_PATCH 13
|
||||
#define ENET_VERSION_PATCH 14
|
||||
#define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
|
||||
#define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF)
|
||||
#define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF)
|
||||
|
@ -507,6 +507,17 @@ ENET_API int enet_socketset_select (ENetSocket, ENetSocketSet *, ENetSock
|
|||
/** @defgroup Address ENet address functions
|
||||
@{
|
||||
*/
|
||||
|
||||
/** Attempts to parse the printable form of the IP address in the parameter hostName
|
||||
and sets the host field in the address parameter if successful.
|
||||
@param address destination to store the parsed IP address
|
||||
@param hostName IP address to parse
|
||||
@retval 0 on success
|
||||
@retval < 0 on failure
|
||||
@returns the address of the given hostName in address on success
|
||||
*/
|
||||
ENET_API int enet_address_set_host_ip (ENetAddress * address, const char * hostName);
|
||||
|
||||
/** Attempts to resolve the host named by the parameter hostName and sets
|
||||
the host field in the address parameter if successful.
|
||||
@param address destination to store resolved address
|
||||
|
|
105
thirdparty/enet/patches/ipv6_support.patch
vendored
Normal file
105
thirdparty/enet/patches/ipv6_support.patch
vendored
Normal file
|
@ -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;
|
||||
}
|
19
thirdparty/enet/protocol.c
vendored
19
thirdparty/enet/protocol.c
vendored
|
@ -9,7 +9,6 @@
|
|||
#include "enet/time.h"
|
||||
#include "enet/enet.h"
|
||||
|
||||
|
||||
static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] =
|
||||
{
|
||||
0,
|
||||
|
@ -164,7 +163,10 @@ enet_protocol_remove_sent_unreliable_commands (ENetPeer * peer)
|
|||
{
|
||||
ENetOutgoingCommand * outgoingCommand;
|
||||
|
||||
while (! enet_list_empty (& peer -> sentUnreliableCommands))
|
||||
if (enet_list_empty (& peer -> sentUnreliableCommands))
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
outgoingCommand = (ENetOutgoingCommand *) enet_list_front (& peer -> sentUnreliableCommands);
|
||||
|
||||
|
@ -183,7 +185,13 @@ enet_protocol_remove_sent_unreliable_commands (ENetPeer * peer)
|
|||
}
|
||||
|
||||
enet_free (outgoingCommand);
|
||||
}
|
||||
} while (! enet_list_empty (& peer -> sentUnreliableCommands));
|
||||
|
||||
if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER &&
|
||||
enet_list_empty (& peer -> outgoingReliableCommands) &&
|
||||
enet_list_empty (& peer -> outgoingUnreliableCommands) &&
|
||||
enet_list_empty (& peer -> sentReliableCommands))
|
||||
enet_peer_disconnect (peer, peer -> eventData);
|
||||
}
|
||||
|
||||
static ENetProtocolCommand
|
||||
|
@ -1406,7 +1414,8 @@ enet_protocol_send_unreliable_outgoing_commands (ENetHost * host, ENetPeer * pee
|
|||
if (peer -> state == ENET_PEER_STATE_DISCONNECT_LATER &&
|
||||
enet_list_empty (& peer -> outgoingReliableCommands) &&
|
||||
enet_list_empty (& peer -> outgoingUnreliableCommands) &&
|
||||
enet_list_empty (& peer -> sentReliableCommands))
|
||||
enet_list_empty (& peer -> sentReliableCommands) &&
|
||||
enet_list_empty (& peer -> sentUnreliableCommands))
|
||||
enet_peer_disconnect (peer, peer -> eventData);
|
||||
}
|
||||
|
||||
|
@ -1691,7 +1700,7 @@ enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int ch
|
|||
& host -> buffers [1], host -> bufferCount - 1,
|
||||
originalSize,
|
||||
host -> packetData [1],
|
||||
originalSize);
|
||||
originalSize);
|
||||
if (compressedSize > 0 && compressedSize < originalSize)
|
||||
{
|
||||
host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED;
|
||||
|
|
Loading…
Reference in a new issue