diff --git a/mk/cmake/Modules/FindMiniupnpc.cmake b/mk/cmake/Modules/FindMiniupnpc.cmake index a2d0ec53..f2d21f1d 100644 --- a/mk/cmake/Modules/FindMiniupnpc.cmake +++ b/mk/cmake/Modules/FindMiniupnpc.cmake @@ -58,20 +58,40 @@ if (MINIUPNP_FOUND) #include 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; - int upnp_error = 0; - devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, &upnp_error); + static struct UPNPUrls urls; + static struct IGDdatas data; + + GetUPNPUrls (&urls, &data, \"myurl\",0); return 0; }" - MINIUPNPC_VERSION_1_6_OR_HIGHER) - - IF (NOT MINIUPNPC_VERSION_1_6_OR_HIGHER) + MINIUPNPC_VERSION_1_7_OR_HIGHER) + + IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + 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; + int upnp_error = 0; + devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, &upnp_error); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_7) + ENDIF() + + IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) check_cxx_source_runs(" @@ -96,25 +116,27 @@ if (MINIUPNP_FOUND) ENDIF() - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - static struct UPNPUrls urls; - static struct IGDdatas data; - int main() - { - char externalIP[16] = ""; - UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIP); + IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + static struct UPNPUrls urls; + static struct IGDdatas data; + int main() + { + char externalIP[16] = ""; + UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIP); - return 0; - }" - MINIUPNPC_VERSION_1_5_OR_HIGHER) + return 0; + }" + MINIUPNPC_VERSION_1_5_OR_HIGHER) + ENDIF() - IF (NOT MINIUPNPC_VERSION_1_5_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) set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) check_cxx_source_runs(" @@ -141,8 +163,12 @@ if (MINIUPNP_FOUND) IF(MINIUPNPC_VERSION_PRE1_6) message(STATUS "Found miniupnpc version is pre v1.6") ENDIF() - IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6) - message(STATUS "Found miniupnpc version is v1.6 or higher") + 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) + message(STATUS "Found miniupnpc version is v1.7 or higher") ENDIF() else () diff --git a/source/shared_lib/CMakeLists.txt b/source/shared_lib/CMakeLists.txt index 15510e3a..748702e9 100644 --- a/source/shared_lib/CMakeLists.txt +++ b/source/shared_lib/CMakeLists.txt @@ -297,7 +297,12 @@ IF(BUILD_MEGAGLEST_MODEL_VIEWER OR BUILD_MEGAGLEST_MAP_EDITOR OR BUILD_MEGAGLEST ADD_DEFINITIONS(-DMINIUPNPC_VERSION_PRE1_6) message(STATUS "Adding macro for miniupnpc version: pre v1.6") ENDIF() - IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6) + IF(MINIUPNPC_VERSION_PRE1_7) + ADD_DEFINITIONS(-DMINIUPNPC_VERSION_PRE1_7) + message(STATUS "Adding macro for miniupnpc version: pre v1.7") + ENDIF() + + IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7) message(STATUS "**No macros required for miniupnpc version") ENDIF() diff --git a/source/shared_lib/sources/platform/posix/socket.cpp b/source/shared_lib/sources/platform/posix/socket.cpp index 23bcb26a..ffc7bb2c 100644 --- a/source/shared_lib/sources/platform/posix/socket.cpp +++ b/source/shared_lib/sources/platform/posix/socket.cpp @@ -2478,13 +2478,22 @@ int UPNP_Tools::upnp_init(void *param) { if(SystemFlags::VERBOSE_MODE_ENABLED) printf("UPnP device found: %s %s\n", dev->descURL, dev->st); //printf("UPnP device found: [%s] [%s] lanaddr [%s]\n", dev->descURL, dev->st,lanaddr); +#ifndef MINIUPNPC_VERSION_PRE1_7 + descXML = (char *)miniwget_getaddr(dev->descURL, &descXMLsize, lanaddr, (sizeof(lanaddr) / sizeof(lanaddr[0])),0); +#else descXML = (char *)miniwget_getaddr(dev->descURL, &descXMLsize, lanaddr, (sizeof(lanaddr) / sizeof(lanaddr[0]))); +#endif if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"LAN address: %s\n", lanaddr); if (descXML) { parserootdesc (descXML, descXMLsize, &data); free (descXML); descXML = 0; + +#ifndef MINIUPNPC_VERSION_PRE1_7 + GetUPNPUrls (&urls, &data, dev->descURL,0); +#else GetUPNPUrls (&urls, &data, dev->descURL); +#endif } snprintf(buf, 255,"UPnP device found: %s %s LAN address %s", dev->descURL, dev->st, lanaddr);