Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] enable UPnP #38

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ src/XPd

# XP-Qt
.qmake.stash
XP-Qt.dmg
Makefile
Makefile.debug
Makefile.release
Expand All @@ -60,3 +61,8 @@ release/
qrc_bitcoin.cpp
XP-qt
output/
*.obj
*.o
.idea
*.orig
src/build.h
198 changes: 155 additions & 43 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Root CMake file for simon and speck
# ----------------------------------------------------------------------------

cmake_minimum_required(VERSION 3.7)
cmake_minimum_required(VERSION 3.5)

project(XPd CXX C)

Expand All @@ -11,6 +11,7 @@ project(XPd CXX C)
# ----------------------------------------------------------------------------
option(USE_IPV6 "use IPV6" YES)
option(USE_LEVELDB "use leveldb" NO)
option(USE_UPNP "use UPNP" NO)
option(USE_ASM "use ASM" NO)
option(USE_SSE2 "use SSE2" NO)
if(MSVC)
Expand Down Expand Up @@ -97,6 +98,19 @@ else()
endif()
endif()

## upnp
if(USE_UPNP)
if (DEFINED $ENV{MINIUPNPC_INCLUDE_PATH})
include_directories($ENV{MINIUPNPC_INCLUDE_PATH})
else()
if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
include_directories(${DEPSDIR}/miniupnpc/include)
elseif(MSVC)
# TODO:
endif()
endif()
endif()

# library directories
## openssl
if (DEFINED $ENV{OPENSSL_LIB_PATH})
Expand All @@ -109,14 +123,29 @@ else()
endif()
endif()
link_directories(${OPENSSL_LIB_PATH})
if(MSVC AND ENABLE_STATIC)
if(CMAKE_BUILD_TYPE MATCHES Release)
set(OPENSSL_LIB_SUFFIX MT)
if(ENABLE_STATIC)
if(MSVC)
set(OPENSSL_SSL_LIB_NAME "ssleay32")
set(OPENSSL_CRYPTO_LIB_NAME "libeay32")

if(CMAKE_BUILD_TYPE MATCHES Release)
set(OPENSSL_LIB_SUFFIX MT)
else()
set(OPENSSL_LIB_SUFFIX MTd)
endif()
else()
set(OPENSSL_LIB_SUFFIX MTd)
set(OPENSSL_SSL_LIB_NAME "libssl")
set(OPENSSL_CRYPTO_LIB_NAME "libcrypto")

# TODO:
endif()
else()
# TODO:
if(MSVC)
# TODO:
else()
set(OPENSSL_SSL_LIB_NAME "ssl")
set(OPENSSL_CRYPTO_LIB_NAME "crypto")
endif()
endif()

## boost
Expand All @@ -125,7 +154,7 @@ if (DEFINED $ENV{BOOST_LIB_PATH})
else()
if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
set(BOOST_LIB_PATH ${DEPSDIR}/boost/lib)
else(MSVC)
elseif(MSVC)
# TODO: change msvc version
if(WIN32)
set(BOOST_LIB_PATH ${DEPSDIR}/boost_1_66_0/lib32-msvc-14.1)
Expand All @@ -135,18 +164,33 @@ else()
set(BOOST_LIB_PATH ${DEPSDIR}/boost_1_66_0/lib64-msvc-14.1)
set(BOOST_LIB_ARCH x64)
endif()
else()
# UNIX
# TODO:
endif()
endif()
link_directories(${BOOST_LIB_PATH})
if(MSVC AND ENABLE_STATIC)
# TODO: change msvc version
if(CMAKE_BUILD_TYPE MATCHES Release)
set(BOOST_LIB_SUFFIX vc141-mt-${BOOST_LIB_ARCH}-1_66)
if(ENABLE_STATIC)
if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
set(BOOST_LIB_SUFFIX -mt)
elseif(MSVC)
# TODO: change msvc version
if(CMAKE_BUILD_TYPE MATCHES Release)
set(BOOST_LIB_SUFFIX -vc141-mt-${BOOST_LIB_ARCH}-1_66)
else()
set(BOOST_LIB_SUFFIX -vc141-mt-gd-${BOOST_LIB_ARCH}-1_66)
endif()
else()
set(BOOST_LIB_SUFFIX vc141-mt-gd-${BOOST_LIB_ARCH}-1_66)
set(BOOST_LIB_SUFFIX "")
endif()
else()
# TODO:
if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
set(BOOST_LIB_SUFFIX -mt)
elseif(MSVC)
# TODO:
else()
set(BOOST_LIB_SUFFIX "")
endif()
endif()

## berkeley db
Expand All @@ -164,19 +208,57 @@ else()
set(BDB_LIB_PATH ${DEPSDIR}/db-4.8.30.NC/build_windows/Win32/Debug)
endif()
endif()
else()
# TODO:
endif()
endif()
link_directories(${BDB_LIB_PATH})
if(MSVC AND ENABLE_STATIC)
if(CMAKE_BUILD_TYPE MATCHES Release)
set(BDB_LIB_SUFFIX "")
if(ENABLE_STATIC)
if(MSVC)
set(BDB_LIB_NAME "libdb_stl48")
if(CMAKE_BUILD_TYPE MATCHES Release)
set(BDB_LIB_SUFFIX "")
else()
set(BDB_LIB_SUFFIX d)
endif()
else()
set(BDB_LIB_SUFFIX d)
set(BDB_LIB_NAME "libdb_cxx-4.8")
endif()
else()
# TODO:
if(MSVC)
set(BDB_LIB_NAME "db_stl-48")
else()
set(BDB_LIB_NAME "db_cxx-4.8")
endif()
endif()

## upnp
if(USE_UPNP)
if (DEFINED $ENV{MINIUPNPC_LIB_PATH})
set(OPENSSL_LIB_PATH $ENV{MINIUPNPC_LIB_PATH})
else()
if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
set(MINIUPNPC_LIB_PATH ${DEPSDIR}/miniupnpc/lib)
elseif(MSVC)
# TODO:
endif()
endif()
link_directories(${MINIUPNPC_LIB_PATH})

if(ENABLE_STATIC)
if(MSVC)
# TODO:
else()
set(MINIUPNPC_LIB_NAME "libminiupnpc")
endif()
else()
if(MSVC)
# TODO:
else()
set(MINIUPNPC_LIB_NAME "miniupnpc")
endif()
endif()
endif()

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 11)
Expand Down Expand Up @@ -241,7 +323,26 @@ else()
endif()
endif()

add_definitions(-DUSE_IPV6=${USE_IPV6})
if(USE_UPNP)
if(MSVC)
add_definitions(/DUSE_UPNP=1)
else()
add_definitions(-DUSE_UPNP=1)
endif()
endif()

if(USE_IPV6)
set(USE_IPV6VAL 1)
else()
set(USE_IPV6VAL 0)
endif()

if(MSVC)
add_definitions(/DUSE_IPV6=${USE_IPV6VAL})
else()
add_definitions(-DUSE_IPV6=${USE_IPV6VAL})
endif()

if(APPLE AND (${CMAKE_SYSTEM_NAME} MATCHES "Darwin"))
add_definitions(-DMAC_OSX)
add_definitions(-DMSG_NOSIGNAL=0)
Expand Down Expand Up @@ -297,39 +398,50 @@ if(ENABLE_STATIC)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
endif()

target_link_libraries(XPd
${BDB_LIB_PATH}/${BDB_LIB_NAME}${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_system${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_filesystem${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_program_options${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_thread${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/${OPENSSL_SSL_LIB_NAME}${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/${OPENSSL_CRYPTO_LIB_NAME}${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
)
if(MSVC)
target_link_libraries(XPd
${BDB_LIB_PATH}/libdb_stl48${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BDB_LIB_PATH}/libdb48${BDB_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_system-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_filesystem-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_program_options-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_thread-${BOOST_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/ssleay32${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/libeay32${OPENSSL_LIB_SUFFIX}${CMAKE_FIND_LIBRARY_SUFFIXES}
)
)
else()
target_link_libraries(XPd
${BDB_LIB_PATH}/libdb_cxx-4.8${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_system-mt${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_filesystem-mt${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_program_options-mt${CMAKE_FIND_LIBRARY_SUFFIXES}
${BOOST_LIB_PATH}/libboost_thread-mt${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/libssl${CMAKE_FIND_LIBRARY_SUFFIXES}
${OPENSSL_LIB_PATH}/libcrypto${CMAKE_FIND_LIBRARY_SUFFIXES}
z
)
z
)
endif()

if(USE_UPNP)
target_link_libraries(XPd
${MINIUPNPC_LIB_PATH}/${MINIUPNPC_LIB_NAME}${CMAKE_FIND_LIBRARY_SUFFIXES}
)
endif()
else()
target_link_libraries(XPd
db_cxx-4.8
boost_system-mt
boost_filesystem-mt
boost_program_options-mt
boost_thread-mt
ssl
crypto
${BDB_LIB_NAME}
boost_system${BOOST_LIB_SUFFIX}
boost_filesystem${BOOST_LIB_SUFFIX}
boost_program_options${BOOST_LIB_SUFFIX}
boost_thread${BOOST_LIB_SUFFIX}
${OPENSSL_SSL_LIB_NAME}
${OPENSSL_CRYPTO_LIB_NAME}
)
if(NOT MSVC)
target_link_libraries(XPd
z
pthread
)
endif()
if(USE_UPNP)
target_link_libraries(XPd
${MINIUPNPC_LIB_NAME}
)
endif()
endif()

13 changes: 12 additions & 1 deletion src/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,13 @@ std::string HelpMessage()
" -bantime=<n> " + _("Number of seconds to keep misbehaving peers from reconnecting (default: 86400)") + "\n" +
" -maxreceivebuffer=<n> " + _("Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000)") + "\n" +
" -maxsendbuffer=<n> " + _("Maximum per-connection send buffer, <n>*1000 bytes (default: 1000)") + "\n" +
#ifdef USE_UPNP
#if USE_UPNP
" -upnp " + _("Use UPnP to map the listening port (default: 1 when listening)") + "\n" +
#else
" -upnp " + _("Use UPnP to map the listening port (default: 0)") + "\n" +
#endif
#endif
" -detachdb " + _("Detach block and address databases. Increases shutdown time (default: 0)") + "\n" +

#ifdef DB_LOG_IN_MEMORY
Expand Down Expand Up @@ -421,6 +428,7 @@ bool AppInit2()

if (!GetBoolArg("-listen", true)) {
// do not map ports or try to retrieve public IP when not listening (pointless)
SoftSetBoolArg("-upnp", false);
SoftSetBoolArg("-discover", false);
}

Expand Down Expand Up @@ -667,10 +675,13 @@ bool AppInit2()
fNoListen = !GetBoolArg("-listen", true);
fDiscover = GetBoolArg("-discover", true);
fNameLookup = GetBoolArg("-dns", true);
#ifdef USE_UPNP
fUseUPnP = GetBoolArg("-upnp", USE_UPNP);
#endif
} else {
// Don't listen, discover addresses or search for nodes if IPv4 and IPv6 networking is disabled.
fNoListen = true;
fDiscover = fNameLookup = false;
fDiscover = fNameLookup = fUseUPnP = false;
SoftSetBoolArg("-irc", false);
SoftSetBoolArg("-dnsseed", false);
}
Expand Down
6 changes: 6 additions & 0 deletions src/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ static const unsigned int LOCKTIME_THRESHOLD = 500000000; // Tue Nov 5 00:53:20
// Maximum number of script-checking threads allowed
static const int MAX_SCRIPTCHECK_THREADS = 16;

#ifdef USE_UPNP
static const int fHaveUPnP = true;
#else
static const int fHaveUPnP = false;
#endif

static const uint256 hashGenesisBlock("0x0000065a10945931644cdda436d5ad0742d085e9dee3e7fdd51b822626727e78");
static const uint256 hashGenesisBlockTestNet("0x0000e097477b585e7289f4c23c4ff639a8775e8f4d2c715586f160fff8869278");

Expand Down
15 changes: 15 additions & 0 deletions src/makefile.osx
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ LIBPATHS= \
-L"$(MINIUPNPC_LIB_PATH)" \
-L"$(QRENCODE_LIB_PATH)"

ifeq ($(USE_UPNP),)
USE_UPNP:=0
endif
ifeq ($(USE_LEVELDB),)
USE_LEVELDB:=0
endif
Expand Down Expand Up @@ -144,6 +147,18 @@ OBJS= \
obj/kernelrecord.o \
obj/kernel_worker.o

ifndef USE_UPNP
override USE_UPNP = -
endif
ifneq (${USE_UPNP}, -)
DEFS += -DUSE_UPNP=$(USE_UPNP)
ifdef STATIC
LIBS += $(DEPSDIR)/lib/libminiupnpc.a
else
LIBS += -lminiupnpc
endif
endif

ifneq (${USE_IPV6}, -)
DEFS += -DUSE_IPV6=$(USE_IPV6)
endif
Expand Down
Loading