diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7b04616d0..ad8732db0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,9 +3,9 @@
cmake_minimum_required (VERSION 3.8)
if(${CMAKE_VERSION} VERSION_LESS 3.15)
- cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
+ cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
else()
- cmake_policy(VERSION 3.15)
+ cmake_policy(VERSION 3.15)
endif()
if(WIN32)
@@ -13,14 +13,17 @@ if(WIN32)
set(CMAKE_SYSTEM_VERSION "7" CACHE STRING INTERNAL FORCE)
endif(WIN32)
+#
# ZeroTier One Version Config
-
+#
set(ZEROTIER_ONE_VERSION_MAJOR 1 CACHE INTERNAL "")
set(ZEROTIER_ONE_VERSION_MINOR 9 CACHE INTERNAL "")
set(ZEROTIER_ONE_VERSION_REVISION 0 CACHE INTERNAL "")
set(ZEROTIER_ONE_VERSION_BUILD 0 CACHE INTERNAL "")
+#
# Set a default build type if none was specified
+#
set(default_build_type "Release")
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
set(default_build_type "Debug")
@@ -169,7 +172,6 @@ if(BUILD_CENTRAL_CONTROLLER)
set(libs ${libs} rabbitmq-static ${PostgreSQL_LIBRARIES})
endif(BUILD_CENTRAL_CONTROLLER)
-
add_executable(${PROJECT_NAME} ${src} ${headers})
target_link_libraries(${PROJECT_NAME} ${libs})
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_BINARY_DIR})
diff --git a/ext/libnatpmp/JavaTest.java b/ext/libnatpmp/JavaTest.java
deleted file mode 100644
index 0379c1821..000000000
--- a/ext/libnatpmp/JavaTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-
-import fr.free.miniupnp.libnatpmp.NatPmp;
-import fr.free.miniupnp.libnatpmp.NatPmpResponse;
-
-class JavaTest {
- public static void main(String[] args) {
- NatPmp natpmp = new NatPmp();
-
- natpmp.sendPublicAddressRequest();
- NatPmpResponse response = new NatPmpResponse();
-
- int result = -1;
- do{
- result = natpmp.readNatPmpResponseOrRetry(response);
- try {
- Thread.sleep(4000);
- } catch (InterruptedException e) {
- //fallthrough
- }
- } while (result != 0);
-
- byte[] bytes = intToByteArray(response.addr);
-
- try {
- InetAddress inetAddress = InetAddress.getByAddress(bytes);
- System.out.println("Public address is " + inetAddress);
- } catch (UnknownHostException e) {
- throw new RuntimeException(e);
- }
- }
-
- public static final byte[] intToByteArray(int value) {
- return new byte[] {
- (byte)value,
- (byte)(value >>> 8),
- (byte)(value >>> 16),
- (byte)(value >>> 24)};
- }
-}
diff --git a/ext/libnatpmp/Makefile b/ext/libnatpmp/Makefile
deleted file mode 100644
index b67b3e85c..000000000
--- a/ext/libnatpmp/Makefile
+++ /dev/null
@@ -1,177 +0,0 @@
-# $Id: Makefile,v 1.23 2013/11/26 16:38:15 nanard Exp $
-# This Makefile is designed for use with GNU make
-# libnatpmp
-# (c) 2007-2013 Thomas Bernard
-# http://miniupnp.free.fr/libnatpmp.html
-
-OS = $(shell uname -s)
-CC = gcc
-INSTALL = install -p
-ARCH = $(shell uname -m | sed -e s/i.86/i686/)
-VERSION = $(shell cat VERSION)
-
-ifeq ($(OS), Darwin)
-JARSUFFIX=mac
-endif
-ifeq ($(OS), Linux)
-JARSUFFIX=linux
-endif
-ifneq (,$(findstring WIN,$(OS)))
-JARSUFFIX=win32
-endif
-
-# APIVERSION is used in soname
-APIVERSION = 1
-#LDFLAGS = -Wl,--no-undefined
-CFLAGS ?= -Os
-#CFLAGS = -g -O0
-CFLAGS += -fPIC
-CFLAGS += -Wall
-#CFLAGS += -Wextra
-CFLAGS += -DENABLE_STRNATPMPERR
-#CFLAGS += -Wstrict-aliasing
-
-LIBOBJS = natpmp.o getgateway.o
-
-OBJS = $(LIBOBJS) testgetgateway.o natpmpc.o natpmp-jni.o
-
-STATICLIB = libnatpmp.a
-ifeq ($(OS), Darwin)
- SHAREDLIB = libnatpmp.dylib
- JNISHAREDLIB = libjninatpmp.dylib
- SONAME = $(basename $(SHAREDLIB)).$(APIVERSION).dylib
- CFLAGS := -DMACOSX -D_DARWIN_C_SOURCE $(CFLAGS)
- SONAMEFLAGS=-Wl,-install_name,$(JNISHAREDLIB) -dynamiclib -framework JavaVM
-else
-ifneq (,$(findstring WIN,$(OS)))
- SHAREDLIB = natpmp.dll
- JNISHAREDLIB = jninatpmp.dll
- CC = i686-w64-mingw32-gcc
- EXTRA_LD = -lws2_32 -lIphlpapi -Wl,--no-undefined -Wl,--enable-runtime-pseudo-reloc --Wl,kill-at
-else
- SHAREDLIB = libnatpmp.so
- JNISHAREDLIB = libjninatpmp.so
- SONAME = $(SHAREDLIB).$(APIVERSION)
- SONAMEFLAGS=-Wl,-soname,$(JNISHAREDLIB)
-endif
-endif
-
-HEADERS = natpmp.h
-
-EXECUTABLES = testgetgateway natpmpc-shared natpmpc-static
-
-INSTALLPREFIX ?= $(PREFIX)/usr
-INSTALLDIRINC = $(INSTALLPREFIX)/include
-INSTALLDIRLIB = $(INSTALLPREFIX)/lib
-INSTALLDIRBIN = $(INSTALLPREFIX)/bin
-
-JAVA ?= java
-JAVAC ?= javac
-JAVAH ?= javah
-JAVAPACKAGE = fr/free/miniupnp/libnatpmp
-JAVACLASSES = $(JAVAPACKAGE)/NatPmp.class $(JAVAPACKAGE)/NatPmpResponse.class $(JAVAPACKAGE)/LibraryExtractor.class $(JAVAPACKAGE)/URLUtils.class
-JNIHEADERS = fr_free_miniupnp_libnatpmp_NatPmp.h
-
-.PHONY: all clean depend install cleaninstall installpythonmodule
-
-all: $(STATICLIB) $(SHAREDLIB) $(EXECUTABLES)
-
-pythonmodule: $(STATICLIB) libnatpmpmodule.c setup.py
- python setup.py build
- touch $@
-
-installpythonmodule: pythonmodule
- python setup.py install
-
-clean:
- $(RM) $(OBJS) $(EXECUTABLES) $(STATICLIB) $(SHAREDLIB) $(JAVACLASSES) $(JNISHAREDLIB)
- $(RM) pythonmodule
- $(RM) -r build/ dist/ libraries/
-
-depend:
- makedepend -f$(MAKEFILE_LIST) -Y $(OBJS:.o=.c) 2>/dev/null
-
-install: $(HEADERS) $(STATICLIB) $(SHAREDLIB) natpmpc-shared
- $(INSTALL) -d $(INSTALLDIRINC)
- $(INSTALL) -m 644 $(HEADERS) $(INSTALLDIRINC)
- $(INSTALL) -d $(INSTALLDIRLIB)
- $(INSTALL) -m 644 $(STATICLIB) $(INSTALLDIRLIB)
- $(INSTALL) -m 644 $(SHAREDLIB) $(INSTALLDIRLIB)/$(SONAME)
- $(INSTALL) -d $(INSTALLDIRBIN)
- $(INSTALL) -m 755 natpmpc-shared $(INSTALLDIRBIN)/natpmpc
- ln -s -f $(SONAME) $(INSTALLDIRLIB)/$(SHAREDLIB)
-
-$(JNIHEADERS): fr/free/miniupnp/libnatpmp/NatPmp.class
- $(JAVAH) -jni fr.free.miniupnp.libnatpmp.NatPmp
-
-%.class: %.java
- $(JAVAC) -cp . $<
-
-$(JNISHAREDLIB): $(SHAREDLIB) $(JNIHEADERS) $(JAVACLASSES)
-ifeq (,$(JAVA_HOME))
- @echo "Check your JAVA_HOME environement variable" && false
-endif
-ifneq (,$(findstring WIN,$(OS)))
- $(CC) -m32 -D_JNI_Implementation_ -Wl,--kill-at \
- -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32" \
- natpmp-jni.c -shared \
- -o $(JNISHAREDLIB) -L. -lnatpmp -lws2_32 -lIphlpapi
-else
- $(CC) $(CFLAGS) -c -I"$(JAVA_HOME)/include" -I"$(JAVA_HOME)/include/win32" natpmp-jni.c
- $(CC) $(CFLAGS) -o $(JNISHAREDLIB) -shared $(SONAMEFLAGS) natpmp-jni.o -lc -L. -lnatpmp
-endif
-
-jar: $(JNISHAREDLIB)
- find fr -name '*.class' -print > classes.list
- $(eval JNISHAREDLIBPATH := $(shell java fr.free.miniupnp.libnatpmp.LibraryExtractor))
- mkdir -p libraries/$(JNISHAREDLIBPATH)
- mv $(JNISHAREDLIB) libraries/$(JNISHAREDLIBPATH)/$(JNISHAREDLIB)
- jar cf natpmp_$(JARSUFFIX).jar @classes.list libraries/$(JNISHAREDLIBPATH)/$(JNISHAREDLIB)
- $(RM) classes.list
-
-jnitest: $(JNISHAREDLIB) JavaTest.class
- $(RM) libjninatpmp.so
- $(JAVA) -Djna.nosys=true -cp . JavaTest
-
-mvn_install:
- mvn install:install-file -Dfile=java/natpmp_$(JARSUFFIX).jar \
- -DgroupId=com.github \
- -DartifactId=natpmp \
- -Dversion=$(VERSION) \
- -Dpackaging=jar \
- -Dclassifier=$(JARSUFFIX) \
- -DgeneratePom=true \
- -DcreateChecksum=true
-
-cleaninstall:
- $(RM) $(addprefix $(INSTALLDIRINC), $(HEADERS))
- $(RM) $(INSTALLDIRLIB)/$(SONAME)
- $(RM) $(INSTALLDIRLIB)/$(SHAREDLIB)
- $(RM) $(INSTALLDIRLIB)/$(STATICLIB)
-
-testgetgateway: testgetgateway.o getgateway.o
- $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
-
-natpmpc-static: natpmpc.o $(STATICLIB)
- $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
-
-natpmpc-shared: natpmpc.o $(SHAREDLIB)
- $(CC) $(LDFLAGS) -o $@ $^ $(EXTRA_LD)
-
-$(STATICLIB): $(LIBOBJS)
- $(AR) crs $@ $?
-
-$(SHAREDLIB): $(LIBOBJS)
-ifeq ($(OS), Darwin)
- $(CC) -dynamiclib -Wl,-install_name,$(SONAME) -o $@ $^
-else
- $(CC) -shared -Wl,-soname,$(SONAME) -o $@ $^ $(EXTRA_LD)
-endif
-
-
-# DO NOT DELETE
-
-natpmp.o: natpmp.h getgateway.h declspec.h
-getgateway.o: getgateway.h declspec.h
-testgetgateway.o: getgateway.h declspec.h
-natpmpc.o: natpmp.h
diff --git a/ext/libnatpmp/build.bat b/ext/libnatpmp/build.bat
deleted file mode 100644
index 2d2f27cd7..000000000
--- a/ext/libnatpmp/build.bat
+++ /dev/null
@@ -1,30 +0,0 @@
-@echo Compiling with MinGW
-@SET LIBS=-lws2_32 -liphlpapi
-
-@echo Compile getgateway
-gcc -c -Wall -Os -DWIN32 -DSTATICLIB -DENABLE_STRNATPMPERR getgateway.c
-gcc -c -Wall -Os -DWIN32 -DSTATICLIB -DENABLE_STRNATPMPERR testgetgateway.c
-gcc -o testgetgateway getgateway.o testgetgateway.o %LIBS%
-del testgetgateway.o
-
-@echo Compile natpmp-static:
-gcc -c -Wall -Os -DWIN32 -DSTATICLIB -DENABLE_STRNATPMPERR getgateway.c
-gcc -c -Wall -Os -DWIN32 -DSTATICLIB -DENABLE_STRNATPMPERR natpmp.c
-gcc -c -Wall -Os -DWIN32 wingettimeofday.c
-ar cr natpmp.a getgateway.o natpmp.o wingettimeofday.o
-del getgateway.o natpmp.o
-gcc -c -Wall -Os -DWIN32 -DSTATICLIB -DENABLE_STRNATPMPERR natpmpc.c
-gcc -o natpmpc-static natpmpc.o natpmp.a %LIBS%
-upx --best natpmpc-static.exe
-del natpmpc.o
-
-@echo Create natpmp.dll:
-gcc -c -Wall -Os -DWIN32 -DENABLE_STRNATPMPERR -DNATPMP_EXPORTS getgateway.c
-gcc -c -Wall -Os -DWIN32 -DENABLE_STRNATPMPERR -DNATPMP_EXPORTS natpmp.c
-dllwrap -k --driver-name gcc --def natpmp.def --output-def natpmp.dll.def --implib natpmp.lib -o natpmp.dll getgateway.o natpmp.o wingettimeofday.o %LIBS%
-
-@echo Compile natpmp-shared:
-gcc -c -Wall -Os -DWIN32 -DENABLE_STRNATPMPERR -DNATPMP_EXPORTS natpmpc.c
-gcc -o natpmpc-shared natpmpc.o natpmp.lib -lws2_32
-upx --best natpmpc-shared.exe
-del *.o
diff --git a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/LibraryExtractor.java b/ext/libnatpmp/fr/free/miniupnp/libnatpmp/LibraryExtractor.java
deleted file mode 100644
index 5491d9408..000000000
--- a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/LibraryExtractor.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package fr.free.miniupnp.libnatpmp;
-
-/** I (Leah X Schmidt) copied this code from jnaerator, because
-JNAerator's extractor requires you to buy into the whole JNA
-concept.
-
-JNAErator is
-Copyright (c) 2009 Olivier Chafik, All Rights Reserved
-
-JNAerator is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-JNAerator is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with JNAerator. If not, see .
-
-*/
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-
-public class LibraryExtractor {
-
- private static boolean libPathSet = false;
-
- public static String getLibraryPath(String libraryName, boolean extractAllLibraries, Class> cl) {
- try {
- String customPath = System.getProperty("library." + libraryName);
- if (customPath == null)
- customPath = System.getenv(libraryName.toUpperCase() + "_LIBRARY");
- if (customPath != null) {
- File f = new File(customPath);
- if (!f.exists())
- System.err.println("Library file '" + customPath + "' does not exist !");
- else
- return f.getAbsolutePath();
- }
- //ClassLoader cl = LibraryExtractor.class.getClassLoader();
- String prefix = "(?i)" + (isWindows() ? "" : "lib") + libraryName + "[^A-Za-z_].*";
- String libsuffix = "(?i).*\\.(so|dll|dylib|jnilib)";
- //String othersuffix = "(?i).*\\.(pdb)";
-
- URL sourceURL = null;
- List otherURLs = new ArrayList();
-
-
- String arch = getCurrentOSAndArchString();
- //System.out.println("libURL = " + libURL);
- List list = URLUtils.listFiles(URLUtils.getResource(cl, "libraries/" + arch)),
- noArchList = URLUtils.listFiles(URLUtils.getResource(cl, "libraries/noarch"));
-
- Set names = new HashSet();
- for (URL url : list) {
- String name = getFileName(url);
- names.add(name);
- }
- for (URL url : noArchList) {
- String name = getFileName(url);
- if (names.add(name))
- list.add(url);
- }
-
- for (File f : new File(".").listFiles())
- if (f.isFile())
- list.add(f.toURI().toURL());
-
- for (URL url : list) {
- String name = getFileName(url);
- boolean pref = name.matches(prefix), suff = name.matches(libsuffix);
- if (pref && suff)
- sourceURL = url;
- else //if (suff || fileName.matches(othersuffix))
- otherURLs.add(url);
- }
- List files = new ArrayList();
- if (extractAllLibraries) {
- for (URL url : otherURLs)
- files.add(extract(url));
- }
-
- if (System.getProperty("javawebstart.version") != null) {
- if (isWindows()) {
- //File f = new File("c:\\Windows\\" + (Platform.is64Bit() ? "SysWOW64\\" : "System32\\") + libraryName + ".dll");
- File f = new File("c:\\Windows\\" + "System32\\" + libraryName + ".dll");
- if (f.exists())
- return f.toString();
- } else if (isMac()) {
- File f = new File("/System/Library/Frameworks/" + libraryName + ".framework/" + libraryName);
- if (f.exists())
- return f.toString();
- }
- }
-
- if (sourceURL == null)
- return libraryName;
- else {
- File file = extract(sourceURL);
- files.add(file);
-
- int lastSize;
- do {
- lastSize = files.size();
- for (Iterator it = files.iterator(); it.hasNext();) {
- File f = it.next();
- if (!f.getName().matches(libsuffix))
- continue;
-
- try {
- System.load(f.toString());
- it.remove();
- } catch (Throwable ex) {
- System.err.println("Loading " + f.getName() + " failed (" + ex + ")");
- }
- }
- } while (files.size() < lastSize);
-
- return file.getCanonicalPath();
- }
- } catch (Throwable ex) {
- System.err.println("ERROR: Failed to extract library " + libraryName);
- ex.printStackTrace();
- return libraryName;
- }
- }
-
- public static final boolean isWindows() {
- String osName = System.getProperty("os.name");
- return osName.startsWith("Windows");
- }
-
- public static final boolean isMac() {
- String osName = System.getProperty("os.name");
- return osName.startsWith("Mac") || osName.startsWith("Darwin");
- }
-
- //this code is from JNA, but JNA has a fallback to some native
- //stuff in case this doesn't work. Since sun.arch.data.model is
- //defined for Sun and IBM, this should work nearly everywhere.
- public static final boolean is64Bit() {
- String model = System.getProperty("sun.arch.data.model",
- System.getProperty("com.ibm.vm.bitmode"));
- if (model != null) {
- return "64".equals(model);
- }
- String arch = System.getProperty("os.arch").toLowerCase();
- if ("x86_64".equals(arch)
- || "ia64".equals(arch)
- || "ppc64".equals(arch)
- || "sparcv9".equals(arch)
- || "amd64".equals(arch)) {
- return true;
- }
-
- return false;
- }
-
- public static String getCurrentOSAndArchString() {
- String os = System.getProperty("os.name"), arch = System.getProperty("os.arch");
- if (os.equals("Mac OS X")) {
- os = "darwin";
- arch = "fat";
- } else if (os.startsWith("Windows")) {
- return "win" + (is64Bit() ? "64" : "32");
- } else if (os.matches("SunOS|Solaris"))
- os = "solaris";
- return os + "-" + arch;
- }
-
- private static File extract(URL url) throws IOException {
- File localFile;
- if ("file".equals(url.getProtocol()))
- localFile = new File(URLDecoder.decode(url.getFile(), "UTF-8"));
- else {
- File f = new File(System.getProperty("user.home"));
- f = new File(f, ".jnaerator");
- f = new File(f, "extractedLibraries");
- if (!f.exists())
- f.mkdirs();
-
- if (!libPathSet) {
- String path = System.getProperty("java.library.path");
- if (path == null) {
- System.setProperty("java.library.path", f.toString());
- } else {
- System.setProperty("java.library.path", path + ":" + f);
- }
-
- libPathSet = true;
- }
- localFile = new File(f, new File(url.getFile()).getName());
- URLConnection c = url.openConnection();
- if (localFile.exists() && localFile.lastModified() > c.getLastModified()) {
- c.getInputStream().close();
- } else {
- System.out.println("Extracting " + url);
- InputStream in = c.getInputStream();
- OutputStream out = new FileOutputStream(localFile);
- int len;
- byte[] b = new byte[1024];
- while ((len = in.read(b)) > 0)
- out.write(b, 0, len);
- out.close();
- in.close();
- }
- }
- return localFile;
- }
-
- private static String getFileName(URL url) {
- return new File(url.getFile()).getName();
- }
-
- public static void main(String[] args) {
- System.out.println(getCurrentOSAndArchString());
- }
-}
\ No newline at end of file
diff --git a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmp.java b/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmp.java
deleted file mode 100644
index 2f1ddd3d4..000000000
--- a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmp.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package fr.free.miniupnp.libnatpmp;
-
-import java.nio.ByteBuffer;
-
-
-public class NatPmp {
- private static final String JNA_LIBRARY_NAME = LibraryExtractor.getLibraryPath("jninatpmp", true, NatPmp.class);
-
- static {
- String s = JNA_LIBRARY_NAME;
- startup();
- }
-
- public ByteBuffer natpmp;
-
- public NatPmp() {
- init(0, 0);
- }
-
- public NatPmp(int forcedgw) {
- init(1, forcedgw);
- }
-
- /** Cleans up the native resources used by this object.
- Attempting to use the object after this has been called
- will lead to crashes.*/
- public void dispose() {
- free();
- }
-
-
- protected void finalize() {
- if (natpmp != null)
- free();
- }
-
- private native void init(int forcegw, int forcedgw);
- private native void free();
-
- private static native void startup();
-
- public native int sendPublicAddressRequest();
- public native int sendNewPortMappingRequest(int protocol, int privateport, int publicport, int lifetime);
-
- //returns a number of milliseconds, in accordance with Java convention
- public native long getNatPmpRequestTimeout();
-
- public native int readNatPmpResponseOrRetry(NatPmpResponse response);
-
-}
diff --git a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmpResponse.java b/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmpResponse.java
deleted file mode 100644
index 35c87eab0..000000000
--- a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/NatPmpResponse.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package fr.free.miniupnp.libnatpmp;
-
-public class NatPmpResponse {
-
- public static final int TYPE_PUBLICADDRESS=0;
- public static final int TYPE_UDPPORTMAPPING=1;
- public static final int TYPE_TCPPORTMAPPING=2;
-
- /** see TYPE_* constants */
- public short type;
- /** NAT-PMP response code */
- public short resultcode;
- /** milliseconds since start of epoch */
- public long epoch;
-
- /** only defined if type == 0*/
- public int addr;
-
- /** only defined if type != 0 */
- public int privateport;
-
- /** only defined if type != 0 */
- public int mappedpublicport;
-
- /** only defined if type != 0 */
- public long lifetime; //milliseconds
-
-}
\ No newline at end of file
diff --git a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/URLUtils.java b/ext/libnatpmp/fr/free/miniupnp/libnatpmp/URLUtils.java
deleted file mode 100644
index 5b419ab3a..000000000
--- a/ext/libnatpmp/fr/free/miniupnp/libnatpmp/URLUtils.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package fr.free.miniupnp.libnatpmp;
-
-/** I (Leah X Schmidt) copied this code from jnaerator, because
-JNAerator's extractor requires you to buy into the whole JNA
-concept.
-
-JNAErator is
-Copyright (c) 2009 Olivier Chafik, All Rights Reserved
-
-JNAerator is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-JNAerator is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with JNAerator. If not, see .
-
-*/
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-public class URLUtils {
-
- public static URL getResource(Class> cl, String path) throws IOException {
- String clp = cl.getName().replace('.', '/') + ".class";
- URL clu = cl.getClassLoader().getResource(clp);
- String s = clu.toString();
- if (s.endsWith(clp))
- return new URL(s.substring(0, s.length() - clp.length()) + path);
-
- if (s.startsWith("jar:")) {
- String[] ss = s.split("!");
- return new URL(ss[1] + "!/" + path);
- }
- return null;
- }
-
- public static List listFiles(URL directory) throws IOException {
- List ret = new ArrayList();
- String s = directory.toString();
- if (s.startsWith("jar:")) {
- String[] ss = s.substring("jar:".length()).split("!");
- String path = ss[1];
- URL target = new URL(ss[0]);
- InputStream tin = target.openStream();
- try {
- JarInputStream jin = new JarInputStream(tin);
- JarEntry je;
- while ((je = jin.getNextJarEntry()) != null) {
- String p = "/" + je.getName();
- if (p.startsWith(path) && p.indexOf('/', path.length() + 1) < 0)
-
- ret.add(new URL("jar:" + target + "!" + p));
- }
- } finally {
- tin.close();
- }
- } else if (s.startsWith("file:")) {
- File f = new File(directory.getFile());
- File[] ffs = f.listFiles();
- if (ffs != null)
- for (File ff : ffs)
- ret.add(ff.toURI().toURL());
- } else
- throw new IOException("Cannot list contents of " + directory);
-
- return ret;
- }
-}
\ No newline at end of file
diff --git a/ext/libnatpmp/libnatpmpmodule.c b/ext/libnatpmp/libnatpmpmodule.c
deleted file mode 100644
index 0fd9914b5..000000000
--- a/ext/libnatpmp/libnatpmpmodule.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/* $Id: libnatpmpmodule.c,v 1.7 2012/03/05 19:38:37 nanard Exp $ */
-/* libnatpmp
- * http://miniupnp.free.fr/libnatpmp.html
-Copyright (c) 2007-2011, Thomas BERNARD
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-*/
-#include
-#ifdef WIN32
-#include
-#else
-#include
-#include
-#endif
-
-#define STATICLIB
-#include "structmember.h"
-#include "natpmp.h"
-
-/* for compatibility with Python < 2.4 */
-#ifndef Py_RETURN_NONE
-#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
-#endif
-
-#ifndef Py_RETURN_TRUE
-#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
-#endif
-
-#ifndef Py_RETURN_FALSE
-#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
-#endif
-
-typedef struct {
- PyObject_HEAD
-
- /* Type-specific fields go here. */
- unsigned int discoverdelay;
-
- natpmp_t natpmp;
-} NATPMPObject;
-
-static PyMemberDef NATPMP_members[] = {
- {"discoverdelay", T_UINT, offsetof(NATPMPObject, discoverdelay),
- 0/*READWRITE*/, "value in ms used to wait for NATPMP responses"
- },
- {NULL}
-};
-
-static PyObject *
-NATPMPObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
-{
- NATPMPObject *self;
-
- self = (NATPMPObject *)type->tp_alloc(type, 0);
- if (self) {
- initnatpmp(&self->natpmp, 0, 0);
- }
-
- return (PyObject *)self;
-}
-
-static void
-NATPMPObject_dealloc(NATPMPObject *self)
-{
- closenatpmp(&self->natpmp);
- self->ob_type->tp_free((PyObject*)self);
-}
-
-static PyObject *
-NATPMP_externalipaddress(NATPMPObject *self)
-{
- int r;
- struct timeval timeout;
- fd_set fds;
- natpmpresp_t response;
-
- r = sendpublicaddressrequest(&self->natpmp);
-
- if (r < 0) {
-#ifdef ENABLE_STRNATPMPERR
- PyErr_SetString(PyExc_Exception, strnatpmperr(r));
-#endif
- return NULL;
- }
-
- do {
- FD_ZERO(&fds);
- FD_SET(self->natpmp.s, &fds);
- getnatpmprequesttimeout(&self->natpmp, &timeout);
- select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(&self->natpmp, &response);
- if (r < 0 && r != NATPMP_TRYAGAIN) {
-#ifdef ENABLE_STRNATPMPERR
- PyErr_SetString(PyExc_Exception, strnatpmperr(r));
-#endif
- return NULL;
- }
- } while (r == NATPMP_TRYAGAIN);
-
- return Py_BuildValue("s", inet_ntoa(response.pnu.publicaddress.addr));
-}
-
-static PyObject *
-NATPMP_domapping(natpmp_t *n, unsigned short eport, unsigned short iport,
- const char *protocol, unsigned int lifetime)
-{
- int proto;
- struct timeval timeout;
- fd_set fds;
- natpmpresp_t response;
- int r;
-
- if (!strncasecmp("tcp", protocol, 3)) {
- proto = NATPMP_PROTOCOL_TCP;
- } else if (!strncasecmp("udp", protocol, 3)) {
- proto = NATPMP_PROTOCOL_UDP;
- } else {
- PyErr_SetString(PyExc_Exception, "Unknown protocol");
- return NULL;
- }
-
- r = sendnewportmappingrequest(n, proto, iport, eport,
- lifetime);
-
- if (r < 0) {
-#ifdef ENABLE_STRNATPMPERR
- PyErr_SetString(PyExc_Exception, strnatpmperr(r));
-#endif
- return NULL;
- }
-
- do {
- FD_ZERO(&fds);
- FD_SET(n->s, &fds);
- getnatpmprequesttimeout(n, &timeout);
- select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(n, &response);
- if (r < 0 && r != NATPMP_TRYAGAIN) {
-#ifdef ENABLE_STRNATPMPERR
- PyErr_SetString(PyExc_Exception, strnatpmperr(r));
-#endif
- return NULL;
- }
- } while (r == NATPMP_TRYAGAIN);
-
- return Py_BuildValue("H", response.pnu.newportmapping.mappedpublicport);
-}
-
-
-/* AddPortMapping(externalPort, protocol, internalPort, lifetime)
- * protocol is 'UDP' or 'TCP' */
-static PyObject *
-NATPMP_addportmapping(NATPMPObject *self, PyObject *args)
-{
- unsigned short eport;
- unsigned short iport;
- unsigned int lifetime;
- const char *protocol;
-
- if (!PyArg_ParseTuple(args, "HsHI", &eport, &protocol, &iport, &lifetime))
- return NULL;
-
- return NATPMP_domapping(&self->natpmp, eport, iport, protocol, lifetime);
-}
-
-/* DeletePortMapping(externalPort, protocol, internalPort)
- * protocol is 'UDP' or 'TCP' */
-static PyObject *
-NATPMP_deleteportmapping(NATPMPObject *self, PyObject *args)
-{
- unsigned short eport;
- unsigned short iport;
- const char *protocol;
-
- if (!PyArg_ParseTuple(args, "HsH", &eport, &protocol, &iport))
- return NULL;
-
- return NATPMP_domapping(&self->natpmp, eport, iport, protocol, 0);
-}
-
-/* natpmp.NATPMP object Method Table */
-static PyMethodDef NATPMP_methods[] = {
- {"externalipaddress", (PyCFunction)NATPMP_externalipaddress, METH_NOARGS,
- "return external IP address"
- },
- {"addportmapping", (PyCFunction)NATPMP_addportmapping, METH_VARARGS,
- "add a port mapping"
- },
- {"deleteportmapping", (PyCFunction)NATPMP_deleteportmapping, METH_VARARGS,
- "delete a port mapping"
- },
- {NULL} /* Sentinel */
-};
-
-static PyTypeObject NATPMPType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- "libnatpmp.NATPMP", /*tp_name*/
- sizeof(NATPMPObject), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- (destructor)NATPMPObject_dealloc, /*tp_dealloc*/
- 0, /*tp_print*/
- 0, /*tp_getattr*/
- 0, /*tp_setattr*/
- 0, /*tp_compare*/
- 0, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash */
- 0, /*tp_call*/
- 0, /*tp_str*/
- 0, /*tp_getattro*/
- 0, /*tp_setattro*/
- 0, /*tp_as_buffer*/
- Py_TPFLAGS_DEFAULT, /*tp_flags*/
- "NATPMP objects", /* tp_doc */
- 0, /* tp_traverse */
- 0, /* tp_clear */
- 0, /* tp_richcompare */
- 0, /* tp_weaklistoffset */
- 0, /* tp_iter */
- 0, /* tp_iternext */
- NATPMP_methods, /* tp_methods */
- NATPMP_members, /* tp_members */
- 0, /* tp_getset */
- 0, /* tp_base */
- 0, /* tp_dict */
- 0, /* tp_descr_get */
- 0, /* tp_descr_set */
- 0, /* tp_dictoffset */
- 0, /* tp_init */
- 0, /* tp_alloc */
- NATPMPObject_new, /* tp_new */
-};
-
-/* module methods */
-static PyMethodDef libnatpmp_methods[] = {
- {NULL} /* Sentinel */
-};
-
-#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
-#define PyMODINIT_FUNC void
-#endif
-PyMODINIT_FUNC
-initlibnatpmp(void)
-{
- PyObject* m;
-
- if (PyType_Ready(&NATPMPType) < 0)
- return;
-
- m = Py_InitModule3("libnatpmp", libnatpmp_methods,
- "libnatpmp module.");
-
- Py_INCREF(&NATPMPType);
- PyModule_AddObject(m, "NATPMP", (PyObject *)&NATPMPType);
-}
-
diff --git a/ext/libnatpmp/msvc/libnatpmp.sln b/ext/libnatpmp/msvc/libnatpmp.sln
deleted file mode 100644
index ac746d415..000000000
--- a/ext/libnatpmp/msvc/libnatpmp.sln
+++ /dev/null
@@ -1,29 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual C++ Express 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libnatpmp", "libnatpmp.vcproj", "{D59B6527-F3DE-4D26-A08D-52F1EE989301}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "natpmpc-static", "natpmpc-static.vcproj", "{A0B49FA9-98AB-4A74-8B4C-8AB7FA36089B}"
- ProjectSection(ProjectDependencies) = postProject
- {D59B6527-F3DE-4D26-A08D-52F1EE989301} = {D59B6527-F3DE-4D26-A08D-52F1EE989301}
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Release|Win32 = Release|Win32
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|Win32.ActiveCfg = Debug|Win32
- {D59B6527-F3DE-4D26-A08D-52F1EE989301}.Debug|Win32.Build.0 = Debug|Win32
- {D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|Win32.ActiveCfg = Release|Win32
- {D59B6527-F3DE-4D26-A08D-52F1EE989301}.Release|Win32.Build.0 = Release|Win32
- {A0B49FA9-98AB-4A74-8B4C-8AB7FA36089B}.Debug|Win32.ActiveCfg = Debug|Win32
- {A0B49FA9-98AB-4A74-8B4C-8AB7FA36089B}.Debug|Win32.Build.0 = Debug|Win32
- {A0B49FA9-98AB-4A74-8B4C-8AB7FA36089B}.Release|Win32.ActiveCfg = Release|Win32
- {A0B49FA9-98AB-4A74-8B4C-8AB7FA36089B}.Release|Win32.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/ext/libnatpmp/msvc/libnatpmp.vcproj b/ext/libnatpmp/msvc/libnatpmp.vcproj
deleted file mode 100644
index 9bae5c185..000000000
--- a/ext/libnatpmp/msvc/libnatpmp.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ext/libnatpmp/msvc/natpmpc-static.vcproj b/ext/libnatpmp/msvc/natpmpc-static.vcproj
deleted file mode 100644
index c2052d982..000000000
--- a/ext/libnatpmp/msvc/natpmpc-static.vcproj
+++ /dev/null
@@ -1,195 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ext/libnatpmp/natpmp-jni.c b/ext/libnatpmp/natpmp-jni.c
deleted file mode 100644
index feec1cea6..000000000
--- a/ext/libnatpmp/natpmp-jni.c
+++ /dev/null
@@ -1,157 +0,0 @@
-#ifdef __CYGWIN__
-#include
-#define __int64 uint64_t
-#endif
-
-#ifdef WIN32
-#include
-#include
-#include
-#endif
-
-#include
-#include "natpmp.h"
-
-#include "fr_free_miniupnp_libnatpmp_NatPmp.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-JNIEXPORT void JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_init (JNIEnv *env, jobject obj, jint forcegw, jint forcedgw) {
- natpmp_t *p = malloc (sizeof(natpmp_t));
- if (p == NULL) return;
-
- initnatpmp(p, forcegw, (in_addr_t) forcedgw);
-
- jobject wrapped = (*env)->NewDirectByteBuffer(env, p, sizeof(natpmp_t));
- if (wrapped == NULL) return;
-
- jclass thisClass = (*env)->GetObjectClass(env,obj);
- if (thisClass == NULL) return;
-
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "natpmp", "Ljava/nio/ByteBuffer;");
- if (fid == NULL) return;
- (*env)->SetObjectField(env, obj, fid, wrapped);
-}
-
-JNIEXPORT void JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_free (JNIEnv *env, jobject obj) {
-
- jclass thisClass = (*env)->GetObjectClass(env,obj);
- if (thisClass == NULL) return;
-
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "natpmp", "Ljava/nio/ByteBuffer;");
-
- if (fid == NULL) return;
- jobject wrapped = (*env)->GetObjectField(env, obj, fid);
- if (wrapped == NULL) return;
-
- natpmp_t* natpmp = (natpmp_t*) (*env)->GetDirectBufferAddress(env, wrapped);
-
- closenatpmp(natpmp);
-
- if (natpmp == NULL) return;
- free(natpmp);
-
- (*env)->SetObjectField(env, obj, fid, NULL);
-}
-
-static natpmp_t* getNatPmp(JNIEnv* env, jobject obj) {
- jclass thisClass = (*env)->GetObjectClass(env,obj);
- if (thisClass == NULL) return NULL;
-
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "natpmp", "Ljava/nio/ByteBuffer;");
-
- if (fid == NULL) return NULL;
- jobject wrapped = (*env)->GetObjectField(env, obj, fid);
- if (wrapped == NULL) return NULL;
-
- natpmp_t* natpmp = (natpmp_t*) (*env)->GetDirectBufferAddress(env, wrapped);
-
- return natpmp;
-}
-
-JNIEXPORT jint JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_sendPublicAddressRequest(JNIEnv* env, jobject obj) {
- natpmp_t* natpmp = getNatPmp(env, obj);
- if (natpmp == NULL) return -1;
-
- return sendpublicaddressrequest(natpmp);
-}
-
-
-JNIEXPORT void JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_startup(JNIEnv* env, jclass cls) {
- (void)env;
- (void)cls;
-#ifdef WIN32
- WSADATA wsaData;
- WORD wVersionRequested = MAKEWORD(2, 2);
- WSAStartup(wVersionRequested, &wsaData);
-#endif
-}
-
-
-JNIEXPORT jint JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_sendNewPortMappingRequest(JNIEnv* env, jobject obj, jint protocol, jint privateport, jint publicport, jint lifetime) {
- natpmp_t* natpmp = getNatPmp(env, obj);
- if (natpmp == NULL) return -1;
-
- return sendnewportmappingrequest(natpmp, protocol, privateport, publicport, lifetime);
-}
-
-JNIEXPORT jlong JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_getNatPmpRequestTimeout(JNIEnv* env, jobject obj) {
- natpmp_t* natpmp = getNatPmp(env, obj);
-
- struct timeval timeout;
-
- getnatpmprequesttimeout(natpmp, &timeout);
-
- return ((jlong) timeout.tv_sec) * 1000 + (timeout.tv_usec / 1000);
-
-}
-
-#define SET_FIELD(prefix, name, type, longtype) { \
- jfieldID fid = (*env)->GetFieldID(env, thisClass, #name, type); \
- if (fid == NULL) return -1; \
- (*env)->Set ## longtype ## Field(env, response, fid, resp. prefix name); \
-}
-
-JNIEXPORT jint JNICALL Java_fr_free_miniupnp_libnatpmp_NatPmp_readNatPmpResponseOrRetry(JNIEnv* env, jobject obj, jobject response) {
-
- natpmp_t* natpmp = getNatPmp(env, obj);
- natpmpresp_t resp;
- int result = readnatpmpresponseorretry(natpmp, &resp);
-
- if (result != 0) {
- return result;
- }
-
- jclass thisClass = (*env)->GetObjectClass(env, response);
- if (thisClass == NULL) return -1;
-
- SET_FIELD(,type, "S", Short);
- SET_FIELD(,resultcode, "S", Short);
-
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "epoch", "J");
- if (fid == NULL) return -1;
- (*env)->SetLongField(env, response, fid, ((jlong)resp.epoch) * 1000);
-
- if (resp.type == 0) {
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "addr", "I");
- if (fid == NULL) return -1;
- (*env)->SetIntField(env, response, fid, resp.pnu.publicaddress.addr.s_addr);
-
-
- } else {
- SET_FIELD(pnu.newportmapping., privateport, "I", Int);
- SET_FIELD(pnu.newportmapping., mappedpublicport, "I", Int);
-
- jfieldID fid = (*env)->GetFieldID(env, thisClass, "lifetime", "J");
- if (fid == NULL) return -1;
- (*env)->SetLongField(env, response, fid, ((jlong) resp.pnu.newportmapping.lifetime) * 1000 * 1000);
- }
- return result;
-}
-
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/ext/libnatpmp/natpmp.def b/ext/libnatpmp/natpmp.def
deleted file mode 100644
index cd110033f..000000000
--- a/ext/libnatpmp/natpmp.def
+++ /dev/null
@@ -1,11 +0,0 @@
-LIBRARY
-; libnatpmp library
-
-EXPORTS
- initnatpmp
- closenatpmp
- sendpublicaddressrequest
- sendnewportmappingrequest
- getnatpmprequesttimeout
- readnatpmpresponseorretry
- strnatpmperr
diff --git a/ext/libnatpmp/natpmpc.1 b/ext/libnatpmp/natpmpc.1
deleted file mode 100644
index 5f0003da6..000000000
--- a/ext/libnatpmp/natpmpc.1
+++ /dev/null
@@ -1,19 +0,0 @@
-.TH natpmpc 1
-
-.SH NAME
-natpmpc \- NAT\-PMP library test client and mapping setter.
-
-.SH "SYNOPSIS"
-Display the public IP address:
-.br
-\fBnatpmpc\fP
-
-Add a port mapping:
-.br
-\fBnatpmpc\fP \-a [lifetime]
-
-.SH DESCRIPTION
-
-In order to remove a mapping, set it with a lifetime of 0 seconds.
-To remove all mappings for your machine, use 0 as private port and
-lifetime.
diff --git a/ext/libnatpmp/natpmpc.c b/ext/libnatpmp/natpmpc.c
deleted file mode 100644
index 611bd2d1a..000000000
--- a/ext/libnatpmp/natpmpc.c
+++ /dev/null
@@ -1,244 +0,0 @@
-/* $Id: natpmpc.c,v 1.13 2012/08/21 17:23:38 nanard Exp $ */
-/* libnatpmp
-Copyright (c) 2007-2011, Thomas BERNARD
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-*/
-#include
-#include
-#include
-#if defined(_MSC_VER)
-#if _MSC_VER >= 1400
-#define strcasecmp _stricmp
-#else
-#define strcasecmp stricmp
-#endif
-#else
-#include
-#endif
-#ifdef WIN32
-#include
-#else
-#include
-#include
-#endif
-#include "natpmp.h"
-
-void usage(FILE * out, const char * argv0)
-{
- fprintf(out, "Usage :\n");
- fprintf(out, " %s [options]\n", argv0);
- fprintf(out, "\tdisplay the public IP address.\n");
- fprintf(out, " %s -h\n", argv0);
- fprintf(out, "\tdisplay this help screen.\n");
- fprintf(out, " %s [options] -a [lifetime]\n", argv0);
- fprintf(out, "\tadd a port mapping.\n");
- fprintf(out, "\nOption available :\n");
- fprintf(out, " -g ipv4address\n");
- fprintf(out, "\tforce the gateway to be used as destination for NAT-PMP commands.\n");
- fprintf(out, "\n In order to remove a mapping, set it with a lifetime of 0 seconds.\n");
- fprintf(out, " To remove all mappings for your machine, use 0 as private port and lifetime.\n");
-}
-
-/* sample code for using libnatpmp */
-int main(int argc, char * * argv)
-{
- natpmp_t natpmp;
- natpmpresp_t response;
- int r;
- int sav_errno;
- struct timeval timeout;
- fd_set fds;
- int i;
- int protocol = 0;
- uint16_t privateport = 0;
- uint16_t publicport = 0;
- uint32_t lifetime = 3600;
- int command = 0;
- int forcegw = 0;
- in_addr_t gateway = 0;
- struct in_addr gateway_in_use;
-
-#ifdef WIN32
- WSADATA wsaData;
- int nResult = WSAStartup(MAKEWORD(2,2), &wsaData);
- if(nResult != NO_ERROR)
- {
- fprintf(stderr, "WSAStartup() failed.\n");
- return -1;
- }
-#endif
-
- /* argument parsing */
- for(i=1; i i + 1) {
- if(1 != sscanf(argv[i+1], "%u", &lifetime)) {
- fprintf(stderr, "%s is not a correct 32bits unsigned integer\n", argv[i]);
- } else {
- i++;
- }
- }
- break;
- default:
- fprintf(stderr, "Unknown option %s\n", argv[i]);
- usage(stderr, argv[0]);
- return 1;
- }
- } else {
- fprintf(stderr, "Unknown option %s\n", argv[i]);
- usage(stderr, argv[0]);
- return 1;
- }
- }
-
- /* initnatpmp() */
- r = initnatpmp(&natpmp, forcegw, gateway);
- printf("initnatpmp() returned %d (%s)\n", r, r?"FAILED":"SUCCESS");
- if(r<0)
- return 1;
-
- gateway_in_use.s_addr = natpmp.gateway;
- printf("using gateway : %s\n", inet_ntoa(gateway_in_use));
-
- /* sendpublicaddressrequest() */
- r = sendpublicaddressrequest(&natpmp);
- printf("sendpublicaddressrequest returned %d (%s)\n",
- r, r==2?"SUCCESS":"FAILED");
- if(r<0)
- return 1;
-
- do {
- FD_ZERO(&fds);
- FD_SET(natpmp.s, &fds);
- getnatpmprequesttimeout(&natpmp, &timeout);
- r = select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- if(r<0) {
- fprintf(stderr, "select()");
- return 1;
- }
- r = readnatpmpresponseorretry(&natpmp, &response);
- sav_errno = errno;
- printf("readnatpmpresponseorretry returned %d (%s)\n",
- r, r==0?"OK":(r==NATPMP_TRYAGAIN?"TRY AGAIN":"FAILED"));
- if(r<0 && r!=NATPMP_TRYAGAIN) {
-#ifdef ENABLE_STRNATPMPERR
- fprintf(stderr, "readnatpmpresponseorretry() failed : %s\n",
- strnatpmperr(r));
-#endif
- fprintf(stderr, " errno=%d '%s'\n",
- sav_errno, strerror(sav_errno));
- }
- } while(r==NATPMP_TRYAGAIN);
- if(r<0)
- return 1;
-
- /* TODO : check that response.type == 0 */
- printf("Public IP address : %s\n", inet_ntoa(response.pnu.publicaddress.addr));
- printf("epoch = %u\n", response.epoch);
-
- if(command == 'a') {
- /* sendnewportmappingrequest() */
- r = sendnewportmappingrequest(&natpmp, protocol,
- privateport, publicport,
- lifetime);
- printf("sendnewportmappingrequest returned %d (%s)\n",
- r, r==12?"SUCCESS":"FAILED");
- if(r < 0)
- return 1;
-
- do {
- FD_ZERO(&fds);
- FD_SET(natpmp.s, &fds);
- getnatpmprequesttimeout(&natpmp, &timeout);
- select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
- r = readnatpmpresponseorretry(&natpmp, &response);
- printf("readnatpmpresponseorretry returned %d (%s)\n",
- r, r==0?"OK":(r==NATPMP_TRYAGAIN?"TRY AGAIN":"FAILED"));
- } while(r==NATPMP_TRYAGAIN);
- if(r<0) {
-#ifdef ENABLE_STRNATPMPERR
- fprintf(stderr, "readnatpmpresponseorretry() failed : %s\n",
- strnatpmperr(r));
-#endif
- return 1;
- }
-
- printf("Mapped public port %hu protocol %s to local port %hu "
- "liftime %u\n",
- response.pnu.newportmapping.mappedpublicport,
- response.type == NATPMP_RESPTYPE_UDPPORTMAPPING ? "UDP" :
- (response.type == NATPMP_RESPTYPE_TCPPORTMAPPING ? "TCP" :
- "UNKNOWN"),
- response.pnu.newportmapping.privateport,
- response.pnu.newportmapping.lifetime);
- printf("epoch = %u\n", response.epoch);
- }
-
- r = closenatpmp(&natpmp);
- printf("closenatpmp() returned %d (%s)\n", r, r==0?"SUCCESS":"FAILED");
- if(r<0)
- return 1;
-
- return 0;
-}
-
diff --git a/ext/libnatpmp/setup.py b/ext/libnatpmp/setup.py
deleted file mode 100644
index aa774ee73..000000000
--- a/ext/libnatpmp/setup.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/bin/python
-# $Id: setup.py,v 1.3 2012/03/05 04:54:01 nanard Exp $
-#
-# python script to build the libnatpmp module under unix
-#
-# replace libnatpmp.a by libnatpmp.so for shared library usage
-from distutils.core import setup, Extension
-from distutils import sysconfig
-sysconfig.get_config_vars()["OPT"] = ''
-sysconfig.get_config_vars()["CFLAGS"] = ''
-setup(name="libnatpmp", version="1.0",
- ext_modules=[
- Extension(name="libnatpmp", sources=["libnatpmpmodule.c"],
- extra_objects=["libnatpmp.a"],
- define_macros=[('ENABLE_STRNATPMPERR', None)]
- )]
- )
-
diff --git a/ext/libnatpmp/setupmingw32.py b/ext/libnatpmp/setupmingw32.py
deleted file mode 100644
index d02fdfcaa..000000000
--- a/ext/libnatpmp/setupmingw32.py
+++ /dev/null
@@ -1,17 +0,0 @@
-#! /usr/bin/python
-# $Id: setupmingw32.py,v 1.3 2012/03/05 04:54:01 nanard Exp $
-# python script to build the miniupnpc module under windows
-#
-from distutils.core import setup, Extension
-from distutils import sysconfig
-sysconfig.get_config_vars()["OPT"] = ''
-sysconfig.get_config_vars()["CFLAGS"] = ''
-setup(name="libnatpmp", version="1.0",
- ext_modules=[
- Extension(name="libnatpmp", sources=["libnatpmpmodule.c"],
- libraries=["ws2_32"],
- extra_objects=["libnatpmp.a"],
- define_macros=[('ENABLE_STRNATPMPERR', None)]
- )]
- )
-
diff --git a/ext/libnatpmp/testgetgateway.c b/ext/libnatpmp/testgetgateway.c
deleted file mode 100644
index 24cbe7d05..000000000
--- a/ext/libnatpmp/testgetgateway.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* $Id: testgetgateway.c,v 1.7 2012/08/21 17:13:31 nanard Exp $ */
-/* libnatpmp
-Copyright (c) 2007-2011, Thomas BERNARD
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * The name of the author may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-*/
-#include
-#ifdef WIN32
-#include
-#else
-#include
-#include
-#endif
-#include "getgateway.h"
-
-int main(int argc, char * * argv)
-{
- (void)argc;
- (void)argv;
- struct in_addr gatewayaddr;
- int r;
-#ifdef WIN32
- uint32_t temp = 0;
- r = getdefaultgateway(&temp);
- gatewayaddr.S_un.S_addr = temp;
-#else
- r = getdefaultgateway(&(gatewayaddr.s_addr));
-#endif
- if(r>=0)
- printf("default gateway : %s\n", inet_ntoa(gatewayaddr));
- else
- fprintf(stderr, "getdefaultgateway() failed\n");
- return 0;
-}
-
diff --git a/osdep/CMakeLists.txt b/osdep/CMakeLists.txt
index 26595b33e..538e3f7ea 100644
--- a/osdep/CMakeLists.txt
+++ b/osdep/CMakeLists.txt
@@ -9,6 +9,8 @@ set(src
NeighborDiscovery.cpp
OSUtils.cpp
PortMapper.cpp
+ PortMapper-miniupnpc.c
+ PortMapper-libnatpmp.c
)
set(headers
@@ -56,5 +58,3 @@ if(APPLE)
add_executable(MacEthernetTapAgent MacEthernetTapAgent.c MacEthernetTapAgent.h)
target_include_directories(MacEthernetTapAgent PRIVATE ${CMAKE_BINARY_DIR})
endif(APPLE)
-
-
diff --git a/osdep/PortMapper-libnatpmp.c b/osdep/PortMapper-libnatpmp.c
new file mode 100644
index 000000000..5da85cba9
--- /dev/null
+++ b/osdep/PortMapper-libnatpmp.c
@@ -0,0 +1,14 @@
+#define ENABLE_STRNATPMPERR
+#define _BSD_SOURCE
+#define _DEFAULT_SOURCE
+#define _XOPEN_SOURCE 600
+
+#ifdef __APPLE__
+#ifndef _DARWIN_C_SOURCE
+#define _DARWIN_C_SOURCE
+#endif
+#endif
+
+#include "../ext/libnatpmp/getgateway.c"
+#include "../ext/libnatpmp/wingettimeofday.c"
+#include "../ext/libnatpmp/natpmp.c"
diff --git a/osdep/PortMapper-miniupnpc.c b/osdep/PortMapper-miniupnpc.c
new file mode 100644
index 000000000..8d28da109
--- /dev/null
+++ b/osdep/PortMapper-miniupnpc.c
@@ -0,0 +1,41 @@
+#define MINIUPNP_STATICLIB
+#define MINIUPNPC_SET_SOCKET_TIMEOUT
+#define MINIUPNPC_GET_SRC_ADDR
+#define _BSD_SOURCE
+#define _DEFAULT_SOURCE
+#define _XOPEN_SOURCE 600
+#define MINIUPNPC_VERSION_STRING "2.0"
+#define UPNP_VERSION_STRING "UPnP/1.1"
+
+#ifdef __LINUX__
+#define OS_STRING "Linux"
+#endif
+#ifdef __APPLE__
+#define OS_STRING "Darwin"
+#endif
+#ifdef __WINDOWS__
+#define OS_STRING "Windows"
+#endif
+#ifndef OS_STRING
+#define OS_STRING "ZeroTier"
+#endif
+
+#ifdef __APPLE__
+#ifndef _DARWIN_C_SOURCE
+#define _DARWIN_C_SOURCE
+#endif
+#endif
+
+#include "../ext/miniupnpc/connecthostport.c"
+#include "../ext/miniupnpc/igd_desc_parse.c"
+#include "../ext/miniupnpc/minisoap.c"
+#include "../ext/miniupnpc/miniupnpc.c"
+#include "../ext/miniupnpc/miniwget.c"
+#include "../ext/miniupnpc/minixml.c"
+#include "../ext/miniupnpc/portlistingparse.c"
+#include "../ext/miniupnpc/receivedata.c"
+#include "../ext/miniupnpc/upnpcommands.c"
+#include "../ext/miniupnpc/upnpdev.c"
+#include "../ext/miniupnpc/upnperrors.c"
+#include "../ext/miniupnpc/upnpreplyparse.c"
+#include "../ext/miniupnpc/minissdpc.c"
diff --git a/osdep/PortMapper.cpp b/osdep/PortMapper.cpp
index 6b2409b68..aaf4b0549 100644
--- a/osdep/PortMapper.cpp
+++ b/osdep/PortMapper.cpp
@@ -24,8 +24,6 @@
* of your own application.
*/
-#ifdef ZT_USE_MINIUPNPC
-
// Uncomment to dump debug messages
//#define ZT_PORTMAPPER_TRACE 1
@@ -125,7 +123,7 @@ public:
mode = 1;
closenatpmp(&natpmp);
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: NAT-PMP: init failed, switching to UPnP mode" ZT_EOL_S);
+ PM_TRACE("PortMapper: NAT-PMP: init failed, switching to UPnP mode" ZT_EOL_S);
#endif
break;
}
@@ -148,7 +146,7 @@ public:
publicAddress = InetAddress((uint32_t)response.pnu.publicaddress.addr.s_addr,0);
} else {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: NAT-PMP: request for external address failed, aborting..." ZT_EOL_S);
+ PM_TRACE("PortMapper: NAT-PMP: request for external address failed, aborting..." ZT_EOL_S);
#endif
closenatpmp(&natpmp);
break;
@@ -170,8 +168,8 @@ public:
if (r == 0) {
publicAddress.setPort(response.pnu.newportmapping.mappedpublicport);
#ifdef ZT_PORTMAPPER_TRACE
- char paddr[128];
- PM_TRACE("PortMapper: NAT-PMP: mapped %u to %s" ZT_EOL_S,(unsigned int)localPort,publicAddress.toString(paddr));
+ char paddr[128];
+ PM_TRACE("PortMapper: NAT-PMP: mapped %u to %s" ZT_EOL_S,(unsigned int)localPort,publicAddress.toString(paddr));
#endif
Mutex::Lock sl(surface_l);
surface.clear();
@@ -188,7 +186,7 @@ public:
if (!natPmpSuccess) {
mode = 1;
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: NAT-PMP: request failed, switching to UPnP mode" ZT_EOL_S);
+ PM_TRACE("PortMapper: NAT-PMP: request failed, switching to UPnP mode" ZT_EOL_S);
#endif
}
}
@@ -213,7 +211,7 @@ public:
{
UPNPDev *dev = devlist;
while (dev) {
- PM_TRACE("PortMapper: found UPnP device at URL '%s': %s" ZT_EOL_S,dev->descURL,dev->st);
+ PM_TRACE("PortMapper: found UPnP device at URL '%s': %s" ZT_EOL_S,dev->descURL,dev->st);
dev = dev->pNext;
}
}
@@ -227,11 +225,11 @@ public:
if ((UPNP_GetValidIGD(devlist,&urls,&data,lanaddr,sizeof(lanaddr)))&&(lanaddr[0])) {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: my LAN IP address: %s" ZT_EOL_S,lanaddr);
+ PM_TRACE("PortMapper: UPnP: my LAN IP address: %s" ZT_EOL_S,lanaddr);
#endif
if ((UPNP_GetExternalIPAddress(urls.controlURL,data.first.servicetype,externalip) == UPNPCOMMAND_SUCCESS)&&(externalip[0])) {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: my external IP address: %s" ZT_EOL_S,externalip);
+ PM_TRACE("PortMapper: UPnP: my external IP address: %s" ZT_EOL_S,externalip);
#endif
for(int tries=0;tries<60;++tries) {
@@ -257,7 +255,7 @@ public:
memset(haveLeaseDuration,0,sizeof(haveLeaseDuration));
if ((UPNP_GetSpecificPortMappingEntry(urls.controlURL,data.first.servicetype,outport,"UDP",(const char *)0,haveIntClient,haveIntPort,haveDesc,haveEnabled,haveLeaseDuration) == UPNPCOMMAND_SUCCESS)&&(uniqueName == haveDesc)) {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: reusing previously reserved external port: %s" ZT_EOL_S,outport);
+ PM_TRACE("PortMapper: UPnP: reusing previously reserved external port: %s" ZT_EOL_S,outport);
#endif
Mutex::Lock sl(surface_l);
surface.clear();
@@ -272,7 +270,7 @@ public:
int mapResult = 0;
if ((mapResult = UPNP_AddPortMapping(urls.controlURL,data.first.servicetype,outport,inport,lanaddr,uniqueName.c_str(),"UDP",(const char *)0,"0")) == UPNPCOMMAND_SUCCESS) {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: reserved external port: %s" ZT_EOL_S,outport);
+ PM_TRACE("PortMapper: UPnP: reserved external port: %s" ZT_EOL_S,outport);
#endif
Mutex::Lock sl(surface_l);
surface.clear();
@@ -282,7 +280,7 @@ public:
break;
} else {
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: UPNP_AddPortMapping(%s) failed: %d" ZT_EOL_S,outport,mapResult);
+ PM_TRACE("PortMapper: UPnP: UPNP_AddPortMapping(%s) failed: %d" ZT_EOL_S,outport,mapResult);
#endif
Thread::sleep(1000);
}
@@ -291,13 +289,13 @@ public:
} else {
mode = 0;
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: UPNP_GetExternalIPAddress failed, returning to NAT-PMP mode" ZT_EOL_S);
+ PM_TRACE("PortMapper: UPnP: UPNP_GetExternalIPAddress failed, returning to NAT-PMP mode" ZT_EOL_S);
#endif
}
} else {
mode = 0;
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: UPnP: UPNP_GetValidIGD failed, returning to NAT-PMP mode" ZT_EOL_S);
+ PM_TRACE("PortMapper: UPnP: UPNP_GetValidIGD failed, returning to NAT-PMP mode" ZT_EOL_S);
#endif
}
@@ -306,14 +304,14 @@ public:
} else {
mode = 0;
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("PortMapper: upnpDiscover failed, returning to NAT-PMP mode: %d" ZT_EOL_S,upnpError);
+ PM_TRACE("PortMapper: upnpDiscover failed, returning to NAT-PMP mode: %d" ZT_EOL_S,upnpError);
#endif
}
}
// ---------------------------------------------------------------------
#ifdef ZT_PORTMAPPER_TRACE
- PM_TRACE("UPNPClient: rescanning in %d ms" ZT_EOL_S,ZT_PORTMAPPER_REFRESH_DELAY);
+ PM_TRACE("UPNPClient: rescanning in %d ms" ZT_EOL_S,ZT_PORTMAPPER_REFRESH_DELAY);
#endif
Thread::sleep(ZT_PORTMAPPER_REFRESH_DELAY);
}
@@ -347,5 +345,3 @@ std::vector PortMapper::get() const
}
} // namespace ZeroTier
-
-#endif // ZT_USE_MINIUPNPC
diff --git a/osdep/PortMapper.hpp b/osdep/PortMapper.hpp
index a075b7749..36630dae0 100644
--- a/osdep/PortMapper.hpp
+++ b/osdep/PortMapper.hpp
@@ -24,8 +24,6 @@
* of your own application.
*/
-#ifdef ZT_USE_MINIUPNPC
-
#ifndef ZT_PORTMAPPER_HPP
#define ZT_PORTMAPPER_HPP
@@ -39,7 +37,7 @@
/**
* How frequently should we refresh our UPNP/NAT-PnP/whatever state?
*/
-#define ZT_PORTMAPPER_REFRESH_DELAY 300000
+#define ZT_PORTMAPPER_REFRESH_DELAY 120000
namespace ZeroTier {
@@ -75,5 +73,3 @@ private:
} // namespace ZeroTier
#endif
-
-#endif // ZT_USE_MINIUPNPC
diff --git a/service/CMakeLists.txt b/service/CMakeLists.txt
index cd1ec2e6e..bebfb2cdf 100644
--- a/service/CMakeLists.txt
+++ b/service/CMakeLists.txt
@@ -7,14 +7,11 @@ endif(WIN32)
set(src
OneService.cpp
- SoftwareUpdater.cpp
)
set(headers
OneService.hpp
- SoftwareUpdater.hpp
)
add_library(${PROJECT_NAME} STATIC ${src} ${headers})
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
-
diff --git a/service/OneService.cpp b/service/OneService.cpp
index eb998799e..e3e4beb73 100644
--- a/service/OneService.cpp
+++ b/service/OneService.cpp
@@ -352,15 +352,6 @@ struct TcpConnection
Mutex writeq_m;
};
-struct OneServiceIncomingPacket
-{
- uint64_t now;
- int64_t sock;
- struct sockaddr_storage from;
- unsigned int size;
- uint8_t data[ZT_MAX_MTU];
-};
-
class OneServiceImpl : public OneService
{
public:
@@ -383,7 +374,6 @@ public:
unsigned int _primaryPort;
unsigned int _secondaryPort;
unsigned int _tertiaryPort;
- volatile unsigned int _udpPortPickerCounter;
// Local configuration and memo-ized information from it
json _localConfig;
@@ -397,7 +387,7 @@ public:
std::vector< std::string > _interfacePrefixBlacklist;
Mutex _localConfig_m;
- std::vector explicitBind;
+ std::vector _explicitBind;
/*
* To attempt to handle NAT/gateway craziness we use three local UDP ports:
@@ -454,9 +444,7 @@ public:
// uPnP/NAT-PMP port mapper if enabled
bool _portMappingEnabled; // local.conf settings
-#ifdef ZT_USE_MINIUPNPC
PortMapper *_portMapper;
-#endif
// Set to false to force service to stop
volatile bool _run;
@@ -478,15 +466,12 @@ public:
,_localControlSocket6((PhySocket *)0)
,_updateAutoApply(false)
,_primaryPort(port)
- ,_udpPortPickerCounter(0)
,_lastDirectReceiveFromGlobal(0)
,_lastRestart(0)
,_nextBackgroundTaskDeadline(0)
,_termReason(ONE_STILL_RUNNING)
,_portMappingEnabled(true)
-#ifdef ZT_USE_MINIUPNPC
,_portMapper((PortMapper *)0)
-#endif
,_run(true)
,_mqc(NULL)
{
@@ -501,9 +486,7 @@ public:
_phy.close(_localControlSocket4);
_phy.close(_localControlSocket6);
-#ifdef ZT_USE_MINIUPNPC
delete _portMapper;
-#endif
delete _controller;
delete _mqc;
}
@@ -609,7 +592,6 @@ public:
}
}
-#ifdef ZT_USE_MINIUPNPC
if (_portMappingEnabled) {
// If we're running uPnP/NAT-PMP, bind a *third* port for that. We can't
// use the other two ports for that because some NATs do really funky
@@ -633,7 +615,6 @@ public:
}
}
}
-#endif
// Delete legacy iddb.d if present (cleanup)
OSUtils::rmDashRf((_homePath + ZT_PATH_SEPARATOR_S "iddb.d").c_str());
@@ -658,7 +639,6 @@ public:
_lastRestart = clockShouldBe;
int64_t lastTapMulticastGroupCheck = 0;
int64_t lastBindRefresh = 0;
- int64_t lastUpdateCheck = clockShouldBe;
int64_t lastMultipathModeUpdate = 0;
int64_t lastCleanedPeersDb = 0;
int64_t lastLocalInterfaceAddressCheck = (clockShouldBe - ZT_LOCAL_INTERFACE_CHECK_INTERVAL) + 15000; // do this in 15s to give portmapper time to configure and other things time to settle
@@ -706,7 +686,7 @@ public:
if (_ports[i])
p[pc++] = _ports[i];
}
- _binder.refresh(_phy,p,pc,explicitBind,*this);
+ _binder.refresh(_phy,p,pc,_explicitBind,*this);
{
Mutex::Lock _l(_nets_m);
for(std::map::iterator n(_nets.begin());n!=_nets.end();++n) {
@@ -756,13 +736,11 @@ public:
_node->clearLocalInterfaceAddresses();
-#ifdef ZT_USE_MINIUPNPC
if (_portMapper) {
std::vector mappedAddresses(_portMapper->get());
for(std::vector::const_iterator ext(mappedAddresses.begin());ext!=mappedAddresses.end();++ext)
_node->addLocalInterfaceAddress(reinterpret_cast(&(*ext)));
}
-#endif
std::vector boundAddrs(_binder.allBoundLocalInterfaceAddresses());
for(std::vector::const_iterator i(boundAddrs.begin());i!=boundAddrs.end();++i)
@@ -898,7 +876,7 @@ public:
if (ips.length() > 0) {
InetAddress ip(ips.c_str());
if ((ip.ss_family == AF_INET)||(ip.ss_family == AF_INET6))
- explicitBind.push_back(ip);
+ _explicitBind.push_back(ip);
}
}
}
@@ -1125,11 +1103,7 @@ public:
}
}
-#ifdef ZT_USE_MINIUPNPC
settings["portMappingEnabled"] = OSUtils::jsonBool(settings["portMappingEnabled"],true);
-#else
- settings["portMappingEnabled"] = false; // not supported in build
-#endif
scode = 200;
} else if (ps[0] == "network") {