Moved Android library project to packages/
@@ -52,7 +52,7 @@ int main(int argc, char **argv)
|
|||||||
std::string nwidstr = argv[2];
|
std::string nwidstr = argv[2];
|
||||||
int bind_port = atoi(argv[3]);
|
int bind_port = atoi(argv[3]);
|
||||||
int w=0, r=0, err=0, sockfd, accfd;
|
int w=0, r=0, err=0, sockfd, accfd;
|
||||||
char rbuf[32];
|
char rbuf[1000];
|
||||||
memset(rbuf, 0, sizeof rbuf);
|
memset(rbuf, 0, sizeof rbuf);
|
||||||
|
|
||||||
struct sockaddr_in in4, acc_in4;
|
struct sockaddr_in in4, acc_in4;
|
||||||
@@ -90,11 +90,25 @@ int main(int argc, char **argv)
|
|||||||
zts_getpeername(accfd, (struct sockaddr*)&acc_in4, &peer_addrlen);
|
zts_getpeername(accfd, (struct sockaddr*)&acc_in4, &peer_addrlen);
|
||||||
printf("accepted connection from %s : %d\n", inet_ntoa(acc_in4.sin_addr), ntohs(acc_in4.sin_port));
|
printf("accepted connection from %s : %d\n", inet_ntoa(acc_in4.sin_addr), ntohs(acc_in4.sin_port));
|
||||||
|
|
||||||
|
int tot = 0;
|
||||||
printf("reading from client...\n");
|
printf("reading from client...\n");
|
||||||
|
while(true) {
|
||||||
|
memset(rbuf, 0, sizeof rbuf);
|
||||||
|
if (tot == 500000)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
r = zts_read(accfd, rbuf, sizeof rbuf);
|
r = zts_read(accfd, rbuf, sizeof rbuf);
|
||||||
|
printf("r=%d\n", r);
|
||||||
|
printf("Received : %s\n", rbuf);
|
||||||
|
tot+= r;
|
||||||
|
printf("tot=%d\n", tot);
|
||||||
|
}
|
||||||
|
printf("tot=%d\n", tot);
|
||||||
|
|
||||||
printf("sending to client...\n");
|
printf("sending to client...\n");
|
||||||
w = zts_write(accfd, rbuf, strlen(rbuf));
|
w = zts_write(accfd, rbuf, strlen(rbuf));
|
||||||
|
printf("w=%d\n", r);
|
||||||
|
|
||||||
printf("Received : %s\n", rbuf);
|
printf("Received : %s\n", rbuf);
|
||||||
|
|
||||||
|
|||||||
@@ -68,12 +68,12 @@ public class ZeroTier {
|
|||||||
public native int close(int fd);
|
public native int close(int fd);
|
||||||
public native int setsockopt(int fd, int level, int optname, int optval, int optlen);
|
public native int setsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
public native int getsockopt(int fd, int level, int optname, int optval, int optlen);
|
public native int getsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
public native int sendto(int fd, byte[] buf, int len, int flags, ZTSocketAddress addr);
|
public native int sendto(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
public native int send(int fd, byte[] buf, int len, int flags);
|
public native int send(int fd, byte[] buf, int flags);
|
||||||
public native int recv(int fd, byte[] buf, int len, int flags);
|
public native int recv(int fd, byte[] buf, int flags);
|
||||||
public native int recvfrom(int fd, byte[] buf, int len, int flags, ZTSocketAddress addr);
|
public native int recvfrom(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
public native int read(int fd, byte[] buf, int len);
|
public native int read(int fd, byte[] buf);
|
||||||
public native int write(int fd, byte[] buf, int len);
|
public native int write(int fd, byte[] buf);
|
||||||
public native int shutdown(int fd, int how);
|
public native int shutdown(int fd, int how);
|
||||||
public native boolean getsockname(int fd, ZTSocketAddress addr);
|
public native boolean getsockname(int fd, ZTSocketAddress addr);
|
||||||
public native int getpeername(int fd, ZTSocketAddress addr);
|
public native int getpeername(int fd, ZTSocketAddress addr);
|
||||||
|
|||||||
9
packages/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
### Projects and scripts for building various packages
|
||||||
|
|
||||||
|
### Android
|
||||||
|
|
||||||
|
Pre-built binaries can be found [here]()
|
||||||
|
|
||||||
|
This android project builds from the root `CMakeLists.txt` and generates a `.aar` Android Archive which can be imported into an Android Studio project as a library. An example of this library's usage can be found in [examples/android](examples/android). Further examples of the libzt JNI API can be seen in [examples/java](examples/java).
|
||||||
|
|
||||||
|
### PyPI
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 28
|
compileSdkVersion 28
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.example.zerotier"
|
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
versionCode 1
|
versionCode 1
|
||||||
@@ -14,6 +13,11 @@ android {
|
|||||||
cppFlags ""
|
cppFlags ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ndk {
|
||||||
|
// Tells Gradle to build outputs for the following ABIs and package
|
||||||
|
// them into your APK.
|
||||||
|
abiFilters 'armeabi-v7a'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
@@ -23,7 +27,7 @@ android {
|
|||||||
}
|
}
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
path "/Users/joseph/op/zt/neolibzt/CMakeLists.txt"
|
path "../../../CMakeLists.txt"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
54
packages/android/app/src/main/java/ZTFDSet.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* ZeroTier SDK - Network Virtualization Everywhere
|
||||||
|
* Copyright (C) 2011-2018 ZeroTier, Inc. https://www.zerotier.com/
|
||||||
|
*
|
||||||
|
* This program 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.
|
||||||
|
*
|
||||||
|
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* --
|
||||||
|
*
|
||||||
|
* You can be released from the requirements of the license by purchasing
|
||||||
|
* a commercial license. Buying such a license is mandatory as soon as you
|
||||||
|
* develop commercial closed-source software that incorporates or links
|
||||||
|
* directly against ZeroTier software without disclosing the source code
|
||||||
|
* of your own application.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
|
public class ZTFDSet
|
||||||
|
{
|
||||||
|
byte[] fds_bits = new byte[1024];
|
||||||
|
|
||||||
|
public void CLR(int fd)
|
||||||
|
{
|
||||||
|
fds_bits[fd] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean ISSET(int fd)
|
||||||
|
{
|
||||||
|
return fds_bits[fd] == 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SET(int fd)
|
||||||
|
{
|
||||||
|
fds_bits[fd] = 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ZERO()
|
||||||
|
{
|
||||||
|
for (int i=0; i<1024; i++) {
|
||||||
|
fds_bits[i] = 0x00;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,9 +24,11 @@
|
|||||||
* of your own application.
|
* of your own application.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package zerotier;
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
import java.net.*;
|
import com.zerotier.libzt.ZeroTier;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
// Designed to transport address information across the JNI boundary
|
// Designed to transport address information across the JNI boundary
|
||||||
public class ZTSocketAddress
|
public class ZTSocketAddress
|
||||||
@@ -34,9 +36,6 @@ public class ZTSocketAddress
|
|||||||
public byte[] _ip6 = new byte[16];
|
public byte[] _ip6 = new byte[16];
|
||||||
public byte[] _ip4 = new byte[4];
|
public byte[] _ip4 = new byte[4];
|
||||||
|
|
||||||
public long _ipdata;
|
|
||||||
public long _ipdata_ext;
|
|
||||||
|
|
||||||
public int _family;
|
public int _family;
|
||||||
public int _port; // Also reused for netmask or prefix
|
public int _port; // Also reused for netmask or prefix
|
||||||
|
|
||||||
@@ -45,7 +44,7 @@ public class ZTSocketAddress
|
|||||||
public ZTSocketAddress(String ipStr, int port)
|
public ZTSocketAddress(String ipStr, int port)
|
||||||
{
|
{
|
||||||
if(ipStr.contains(":")) {
|
if(ipStr.contains(":")) {
|
||||||
_family = zerotier.ZeroTier.AF_INET6;
|
_family = ZeroTier.AF_INET6;
|
||||||
try {
|
try {
|
||||||
InetAddress ip = InetAddress.getByName(ipStr);
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||||||
_ip6 = ip.getAddress();
|
_ip6 = ip.getAddress();
|
||||||
@@ -53,7 +52,7 @@ public class ZTSocketAddress
|
|||||||
catch (Exception e) { }
|
catch (Exception e) { }
|
||||||
}
|
}
|
||||||
else if(ipStr.contains(".")) {
|
else if(ipStr.contains(".")) {
|
||||||
_family = zerotier.ZeroTier.AF_INET;
|
_family = ZeroTier.AF_INET;
|
||||||
try {
|
try {
|
||||||
InetAddress ip = InetAddress.getByName(ipStr);
|
InetAddress ip = InetAddress.getByName(ipStr);
|
||||||
_ip4 = ip.getAddress();
|
_ip4 = ip.getAddress();
|
||||||
@@ -69,7 +68,7 @@ public class ZTSocketAddress
|
|||||||
|
|
||||||
private String ipString()
|
private String ipString()
|
||||||
{
|
{
|
||||||
if (_family == zerotier.ZeroTier.AF_INET) {
|
if (_family == ZeroTier.AF_INET) {
|
||||||
try {
|
try {
|
||||||
InetAddress inet = InetAddress.getByAddress(_ip4);
|
InetAddress inet = InetAddress.getByAddress(_ip4);
|
||||||
return "" + inet.getHostAddress();
|
return "" + inet.getHostAddress();
|
||||||
@@ -77,7 +76,7 @@ public class ZTSocketAddress
|
|||||||
System.out.println(e);
|
System.out.println(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_family == zerotier.ZeroTier.AF_INET6) {
|
if (_family == ZeroTier.AF_INET6) {
|
||||||
try {
|
try {
|
||||||
InetAddress inet = InetAddress.getByAddress(_ip6);
|
InetAddress inet = InetAddress.getByAddress(_ip6);
|
||||||
return "" + inet.getHostAddress();
|
return "" + inet.getHostAddress();
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
* of your own application.
|
* of your own application.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package zerotier;
|
package com.zerotier.libzt;
|
||||||
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
|
||||||
@@ -68,14 +68,15 @@ public class ZeroTier {
|
|||||||
public native int close(int fd);
|
public native int close(int fd);
|
||||||
public native int setsockopt(int fd, int level, int optname, int optval, int optlen);
|
public native int setsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
public native int getsockopt(int fd, int level, int optname, int optval, int optlen);
|
public native int getsockopt(int fd, int level, int optname, int optval, int optlen);
|
||||||
public native int sendto(int fd, byte[] buf, int len, int flags, ZTSocketAddress addr);
|
public native int sendto(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
public native int send(int fd, byte[] buf, int len, int flags);
|
public native int send(int fd, byte[] buf, int flags);
|
||||||
public native int recv(int fd, byte[] buf, int len, int flags);
|
public native int recv(int fd, byte[] buf, int flags);
|
||||||
public native int recvfrom(int fd, byte[] buf, int len, int flags, ZTSocketAddress addr);
|
public native int recvfrom(int fd, byte[] buf, int flags, ZTSocketAddress addr);
|
||||||
public native int read(int fd, byte[] buf, int len);
|
public native int read(int fd, byte[] buf);
|
||||||
public native int write(int fd, byte[] buf, int len);
|
public native int write(int fd, byte[] buf);
|
||||||
public native int shutdown(int fd, int how);
|
public native int shutdown(int fd, int how);
|
||||||
public native boolean getsockname(int fd, ZTSocketAddress addr);
|
public native boolean getsockname(int fd, ZTSocketAddress addr);
|
||||||
public native int getpeername(int fd, ZTSocketAddress addr);
|
public native int getpeername(int fd, ZTSocketAddress addr);
|
||||||
public native int fcntl(int sock, int cmd, int flag);
|
public native int fcntl(int sock, int cmd, int flag);
|
||||||
|
public native int select(int nfds, ZTFDSet readfds, ZTFDSet writefds, ZTFDSet exceptfds, int timeout_sec, int timeout_usec);
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,9 @@ import android.support.v7.app.AppCompatActivity;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import zerotier.*;
|
import com.zerotier.libzt.ZeroTier;
|
||||||
import java.net.*;
|
import com.zerotier.libzt.ZTSocketAddress;
|
||||||
|
import com.zerotier.libzt.ZTFDSet;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |