You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.4 KiB
138 lines
5.4 KiB
From 8c5744bca705a0895bd51c966a30171ee2bab43a Mon Sep 17 00:00:00 2001
|
|
From: Marisa Kirisame <marisa@sayachan.org>
|
|
Date: Tue, 29 Sep 2015 23:10:31 +0200
|
|
Subject: [PATCH] miniupnpc API version 14 changed the upnpDiscover functions,
|
|
adding an argument for TTL (should default to 2) this enables support for
|
|
that should the build system have that specific version installed, the
|
|
miniupnpc bundled in the project is unchanged
|
|
|
|
---
|
|
CMakeLists.txt | 5 ++++-
|
|
CMakeTests/FindMiniupnpc.cmake | 39 +++++++++++++++++++++++++++++++++-----
|
|
Source/Core/Core/NetPlayServer.cpp | 4 ++++
|
|
3 files changed, 42 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
index 291efee..7ac0679 100644
|
|
--- a/CMakeLists.txt
|
|
+++ b/CMakeLists.txt
|
|
@@ -690,9 +690,12 @@ if(USE_UPNP)
|
|
if(NOT APPLE AND NOT ANDROID)
|
|
include(FindMiniupnpc)
|
|
endif()
|
|
- if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ if(MINIUPNP_FOUND AND (MINIUPNPC_VERSION_1_7_OR_HIGHER OR MINIUPNPC_VERSION_API14_OR_HIGHER))
|
|
message("Using shared miniupnpc")
|
|
include_directories(${MINIUPNP_INCLUDE_DIR})
|
|
+ if (MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
+ add_definitions(-DUPNPDISCOVER_HAS_TTL)
|
|
+ endif()
|
|
else()
|
|
message("Using static miniupnpc from Externals")
|
|
add_subdirectory(Externals/miniupnpc)
|
|
diff --git a/CMakeTests/FindMiniupnpc.cmake b/CMakeTests/FindMiniupnpc.cmake
|
|
index bb1048c..5301d40 100644
|
|
--- a/CMakeTests/FindMiniupnpc.cmake
|
|
+++ b/CMakeTests/FindMiniupnpc.cmake
|
|
@@ -58,6 +58,30 @@ if (MINIUPNP_FOUND)
|
|
#include <stdio.h>
|
|
int main()
|
|
{
|
|
+ struct UPNPDev *devlist = NULL;
|
|
+ int upnp_delay = 5000;
|
|
+ const char *upnp_multicastif = NULL;
|
|
+ const char *upnp_minissdpdsock = NULL;
|
|
+ int upnp_sameport = 0;
|
|
+ int upnp_ipv6 = 0;
|
|
+ unsigned char upnp_ttl = 2;
|
|
+ int upnp_error = 0;
|
|
+ devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, upnp_ttl, &upnp_error);
|
|
+
|
|
+ return 0;
|
|
+ }"
|
|
+ MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
+
|
|
+IF (NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
+ set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR})
|
|
+ set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
+ check_cxx_source_runs("
|
|
+ #include <miniwget.h>
|
|
+ #include <miniupnpc.h>
|
|
+ #include <upnpcommands.h>
|
|
+ #include <stdio.h>
|
|
+ int main()
|
|
+ {
|
|
static struct UPNPUrls urls;
|
|
static struct IGDdatas data;
|
|
|
|
@@ -66,8 +90,9 @@ if (MINIUPNP_FOUND)
|
|
return 0;
|
|
}"
|
|
MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ ENDIF()
|
|
|
|
-IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER AND NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR})
|
|
set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
check_cxx_source_runs("
|
|
@@ -91,7 +116,7 @@ IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
MINIUPNPC_VERSION_PRE1_7)
|
|
ENDIF()
|
|
|
|
- IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER AND NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR})
|
|
set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
check_cxx_source_runs("
|
|
@@ -116,7 +141,7 @@ IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
|
|
ENDIF()
|
|
|
|
- IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER AND NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR})
|
|
set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
check_cxx_source_runs("
|
|
@@ -136,7 +161,7 @@ IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
MINIUPNPC_VERSION_1_5_OR_HIGHER)
|
|
ENDIF()
|
|
|
|
- IF (NOT MINIUPNPC_VERSION_1_5_OR_HIGHER AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ IF (NOT MINIUPNPC_VERSION_1_5_OR_HIGHER AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER AND NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR})
|
|
set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY})
|
|
check_cxx_source_runs("
|
|
@@ -167,10 +192,14 @@ IF(MINIUPNPC_VERSION_PRE1_7)
|
|
message(STATUS "Found miniupnpc version is pre v1.7")
|
|
ENDIF()
|
|
|
|
-IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7)
|
|
+IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_API14_OR_HIGHER)
|
|
message(STATUS "Found miniupnpc version is v1.7 or higher")
|
|
ENDIF()
|
|
|
|
+IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER)
|
|
+ message(STATUS "Found miniupnpc version is v1.9 API version 14 or higher")
|
|
+ENDIF()
|
|
+
|
|
else ()
|
|
message (STATUS "Could not find miniupnp")
|
|
endif ()
|
|
diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp
|
|
index 7ed283a..27b46c9 100644
|
|
--- a/Source/Core/Core/NetPlayServer.cpp
|
|
+++ b/Source/Core/Core/NetPlayServer.cpp
|
|
@@ -904,7 +904,11 @@ bool NetPlayServer::initUPnP()
|
|
memset(&m_upnp_data, 0, sizeof(IGDdatas));
|
|
|
|
// Find all UPnP devices
|
|
+#ifdef UPNPDISCOVER_HAS_TTL
|
|
+ UPNPDev *devlist = upnpDiscover(2000, nullptr, nullptr, 0, 0, 2, &upnperror);
|
|
+#else
|
|
UPNPDev *devlist = upnpDiscover(2000, nullptr, nullptr, 0, 0, &upnperror);
|
|
+#endif
|
|
if (!devlist)
|
|
{
|
|
WARN_LOG(NETPLAY, "An error occured trying to discover UPnP devices.");
|