소스 검색

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
Rémi Verschelde 5 년 전
부모
커밋
571c713a5e
3개의 변경된 파일111개의 추가작업 그리고 5개의 파일을 삭제
  1. 5 3
      thirdparty/README.md
  2. 105 0
      thirdparty/enet/patches/ipv6_support.patch
  3. 1 2
      thirdparty/enet/protocol.c

+ 5 - 3
thirdparty/README.md

@@ -46,7 +46,7 @@ Files extracted from upstream source:
 ## enet
 
 - Upstream: http://enet.bespin.org
-- Version: 1.3.13
+- Version: 1.3.13 (f46fee0, 2016)
 - 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

+ 105 - 0
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;
+     }

+ 1 - 2
thirdparty/enet/protocol.c

@@ -9,7 +9,6 @@
 #include "enet/time.h"
 #include "enet/enet.h"
 
-
 static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] =
 {
     0,
@@ -1691,7 +1690,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;