add upnp/natpmp support
Change-Id: I4945a7df3a30cb39d81a33fc7a32e9fea600bdff
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4a72860..b27b0f3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,6 +30,9 @@
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMSGPACK_NO_BOOST -DMSGPACK_DISABLE_LEGACY_NIL -DMSGPACK_DISABLE_LEGACY_CONVERT")
+option(DHTNET_PUPNP "Enable UPnP support" ON)
+option(DHTNET_NATPMP "Enable NAT-PMP support" ON)
+
# Sources
list (APPEND dhtnet_SOURCES
src/connectionmanager.cpp
@@ -48,8 +51,6 @@
src/upnp/upnp_context.cpp
src/upnp/upnp_control.cpp
src/upnp/protocol/mapping.cpp
- src/upnp/upnp_context.cpp
- src/upnp/upnp_control.cpp
src/upnp/protocol/igd.cpp
)
@@ -70,6 +71,37 @@
include/upnp/upnp_control.h
)
+if (DHTNET_PUPNP)
+ pkg_search_module (upnp IMPORTED_TARGET upnp libupnp)
+ if (NOT upnp_FOUND)
+ message("libupnp not found: disabling")
+ set(DHTNET_PUPNP Off)
+ else()
+ list (APPEND dhtnet_SOURCES
+ src/upnp/protocol/pupnp/pupnp.cpp
+ src/upnp/protocol/pupnp/upnp_igd.cpp
+ )
+ endif()
+endif()
+if (DHTNET_NATPMP)
+ pkg_search_module (natpmp IMPORTED_TARGET natpmp)
+ if (NOT natpmp_FOUND)
+ find_library(natpmp_LIBRARIES natpmp)
+ if (NOT natpmp_LIBRARIES)
+ message("NAT-PMP not found: disabling")
+ set(DHTNET_NATPMP Off)
+ else()
+ message("NAT-PMP found: ${natpmp_LIBRARIES}")
+ endif()
+ endif()
+ if (DHTNET_NATPMP)
+ list (APPEND dhtnet_SOURCES
+ src/upnp/protocol/natpmp/nat_pmp.cpp
+ src/upnp/protocol/natpmp/pmp_igd.cpp
+ )
+ endif()
+endif()
+
add_library(dhtnet ${dhtnet_SOURCES})
target_link_libraries(dhtnet PUBLIC PkgConfig::opendht PkgConfig::pjproject fmt::fmt ${MSGPACK_LIB})
if (APPLE)
@@ -80,6 +112,14 @@
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
+if (DHTNET_PUPNP)
+ target_compile_definitions(dhtnet PRIVATE HAVE_LIBUPNP)
+ target_link_libraries(dhtnet PRIVATE PkgConfig::upnp)
+endif()
+if (DHTNET_NATPMP)
+ target_compile_definitions(dhtnet PRIVATE HAVE_LIBNATPMP)
+ target_link_libraries(dhtnet PRIVATE ${natpmp_LIBRARIES})
+endif()
if (BUILD_TESTING)
target_compile_definitions(dhtnet PUBLIC DHTNET_TESTABLE)
endif()