Răsfoiți Sursa

Merge branch 'adamierymenko-dev' into android-jni

Grant Limberg 10 ani în urmă
părinte
comite
60da0e6cae
4 a modificat fișierele cu 61 adăugiri și 51 ștergeri
  1. 38 0
      AUTHORS.md
  2. 0 27
      AUTHORS.txt
  3. 1 1
      ext/installfiles/windows/ZeroTier One.aip
  4. 22 23
      osdep/Phy.hpp

+ 38 - 0
AUTHORS.md

@@ -0,0 +1,38 @@
+## Authors
+
+ * ZeroTier protocol design and core network virtualization engine, ZeroTier One service, React web UI, packaging for most platforms, kitchen sink...<br>
+   Adam Ierymenko / [email protected]
+
+ * Java JNI Interface to enable Android application development, and Android app itself (code for that is elsewhere)<br>
+   Grant Limberg / [email protected]
+
+## Contributors
+
+ * Debugging and testing, OpenWRT support fixes.<br>
+   Moritz Warning / [email protected]
+
+ * Several others made smaller contributions, which GitHub tracks here:<br>
+   https://github.com/zerotier/ZeroTierOne/graphs/contributors
+
+## Third Party Code
+
+ * LZ4 compression algorithm by Yann Collet (BSD license)<br>
+   http://code.google.com/p/lz4/
+
+ * http-parser by many authors (MIT license)<br>
+   https://github.com/joyent/http-parser
+
+ * json-parser by James McLaughlin (BSD license)<br>
+   https://github.com/udp/json-parser
+
+ * TunTapOSX by Mattias Nissler (BSD license)<br>
+   http://tuntaposx.sourceforge.net
+
+ * tap-windows and tap-windows6 by the OpenVPN project (GPL)<br>
+   https://github.com/OpenVPN/tap-windows<br>
+   https://github.com/OpenVPN/tap-windows6
+
+ * Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519
+   digital signature algorithm, and Poly1305 MAC algorithm, all by
+   Daniel J. Bernstein (public domain)<br>
+   http://cr.yp.to/

+ 0 - 27
AUTHORS.txt

@@ -1,27 +0,0 @@
-ZeroTier One is designed and written by Adam Ierymenko, with a few bug
-fixes and other contributions from other users. Information about all
-contributors can be found on the GitHub home page at:
-
-https://github.com/zerotier/ZeroTierOne
-
-ZeroTier One includes the following third party code:
-
- * LZ4 compression algorithm by Yann Collet (BSD license)
-   http://code.google.com/p/lz4/
-
- * http-parser by many authors (MIT license)
-   https://github.com/joyent/http-parser
-
- * json-parser by James McLaughlin (BSD license)
-   https://github.com/udp/json-parser
-
- * TunTapOSX by Mattias Nissler (forked for ZT1) (BSD license)
-   http://tuntaposx.sourceforge.net
-
- * tap-windows by the OpenVPN project (forked for ZT1) (GPL)
-   https://github.com/OpenVPN/tap-windows
-
- * Salsa20 stream cipher, Curve25519 elliptic curve cipher, Ed25519
-   digital signature algorithm, and Poly1305 MAC algorithm, all by
-   Daniel J. Bernstein (public domain)
-   http://cr.yp.to/

+ 1 - 1
ext/installfiles/windows/ZeroTier One.aip

@@ -23,7 +23,7 @@
     <ROW Property="CTRLS" Value="2"/>
     <ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:2"/>
     <ROW Property="Manufacturer" Value="ZeroTier, Inc."/>
-    <ROW Property="ProductCode" Value="1033:{D0B06684-2CB3-4EA8-BC7F-FC24F2C6DA40} " Type="16"/>
+    <ROW Property="ProductCode" Value="1033:{CEB9F664-D7D0-446A-BAB0-CDC553ADC137} " Type="16"/>
     <ROW Property="ProductLanguage" Value="1033"/>
     <ROW Property="ProductName" Value="ZeroTier One"/>
     <ROW Property="ProductVersion" Value="1.0.3" Type="32"/>

+ 22 - 23
osdep/Phy.hpp

@@ -123,12 +123,13 @@ private:
 
 	enum PhySocketType
 	{
-		ZT_PHY_SOCKET_TCP_OUT_PENDING = 0x00,
-		ZT_PHY_SOCKET_TCP_OUT_CONNECTED = 0x01,
-		ZT_PHY_SOCKET_TCP_IN = 0x02,
-		ZT_PHY_SOCKET_TCP_LISTEN = 0x03,
-		ZT_PHY_SOCKET_RAW = 0x04,
-		ZT_PHY_SOCKET_UDP = 0x05
+		ZT_PHY_SOCKET_CLOSED = 0x00, // socket is closed, will be removed on next poll()
+		ZT_PHY_SOCKET_TCP_OUT_PENDING = 0x01,
+		ZT_PHY_SOCKET_TCP_OUT_CONNECTED = 0x02,
+		ZT_PHY_SOCKET_TCP_IN = 0x03,
+		ZT_PHY_SOCKET_TCP_LISTEN = 0x04,
+		ZT_PHY_SOCKET_RAW = 0x05,
+		ZT_PHY_SOCKET_UDP = 0x06
 	};
 
 	struct PhySocketImpl
@@ -205,8 +206,10 @@ public:
 
 	~Phy()
 	{
-		while (!_socks.empty())
-			this->close((PhySocket *)&(_socks.front()),true);
+		for(typename std::list<PhySocketImpl>::const_iterator s(_socks.begin());s!=_socks.end();++s) {
+			if (s->type != ZT_PHY_SOCKET_CLOSED)
+				this->close((PhySocket *)&(*s),true);
+		}
 		ZT_PHY_CLOSE_SOCKET(_whackReceiveSocket);
 		ZT_PHY_CLOSE_SOCKET(_whackSendSocket);
 	}
@@ -620,11 +623,7 @@ public:
 #endif
 		}
 
-		bool atEnd = false;
-		for(typename std::list<PhySocketImpl>::iterator s(_socks.begin()),nexts;(!atEnd);s=nexts) {
-			nexts = s; ++nexts; // we can delete the linked list item, so traverse now
-			atEnd = (nexts == _socks.end()); // if we delete the last element, s!=_socks.end() will no longer terminate our loop
-
+		for(typename std::list<PhySocketImpl>::iterator s(_socks.begin());s!=_socks.end();) {
 			switch (s->type) {
 
 				case ZT_PHY_SOCKET_TCP_OUT_PENDING:
@@ -724,6 +723,10 @@ public:
 					break;
 
 			}
+
+			if (s->type == ZT_PHY_SOCKET_CLOSED)
+				_socks.erase(s++);
+			else ++s;
 		}
 	}
 
@@ -736,6 +739,8 @@ public:
 		if (!sock)
 			return;
 		PhySocketImpl &sws = *(reinterpret_cast<PhySocketImpl *>(sock));
+		if (sws.type == ZT_PHY_SOCKET_CLOSED)
+			return;
 
 		FD_CLR(sws.sock,&_readfds);
 		FD_CLR(sws.sock,&_writefds);
@@ -765,21 +770,15 @@ public:
 				break;
 		}
 
-		long oldSock = (long)sws.sock;
-
-		for(typename std::list<PhySocketImpl>::iterator s(_socks.begin());s!=_socks.end();++s) {
-			if (reinterpret_cast<PhySocket *>(&(*s)) == sock) {
-				_socks.erase(s);
-				break;
-			}
-		}
+		// Causes entry to be deleted from list in poll(), ignored elsewhere
+		sws.type = ZT_PHY_SOCKET_CLOSED;
 
-		if (oldSock >= _nfds) {
+		if (sws.sock >= _nfds) {
 			long nfds = (long)_whackSendSocket;
 			if ((long)_whackReceiveSocket > nfds)
 				nfds = (long)_whackReceiveSocket;
 			for(typename std::list<PhySocketImpl>::iterator s(_socks.begin());s!=_socks.end();++s) {
-				if ((long)s->sock > nfds)
+				if ((s->type != ZT_PHY_SOCKET_CLOSED)&&((long)s->sock > nfds))
 					nfds = (long)s->sock;
 			}
 			_nfds = nfds;