ios/osx example project updates
This commit is contained in:
@@ -116,9 +116,6 @@ class ViewController: NSViewController {
|
||||
var bind_thread : NSThread!
|
||||
func attempt_bind()
|
||||
{
|
||||
// TCP
|
||||
if(selectedProtocol == SOCK_STREAM)
|
||||
{
|
||||
sock = zt_socket(AF_INET, SOCK_STREAM, 0)
|
||||
var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)),
|
||||
sin_family: UInt8(AF_INET),
|
||||
@@ -144,16 +141,17 @@ class ViewController: NSViewController {
|
||||
// Accept connection
|
||||
var len:socklen_t = 0;
|
||||
var legIntPtr = withUnsafeMutablePointer(&len, { $0 })
|
||||
|
||||
// TCP
|
||||
if(selectedProtocol == SOCK_STREAM) {
|
||||
while(accepted_sock < 0) {
|
||||
accepted_sock = zt_accept(sock, UnsafeMutablePointer<sockaddr>([addr]), legIntPtr)
|
||||
}
|
||||
print("accepted connection")
|
||||
}
|
||||
|
||||
// UDP
|
||||
if(selectedProtocol == SOCK_DGRAM)
|
||||
{
|
||||
|
||||
if(selectedProtocol == SOCK_DGRAM) {
|
||||
// nothing
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +175,7 @@ class ViewController: NSViewController {
|
||||
// UDP
|
||||
if(selectedProtocol == SOCK_DGRAM)
|
||||
{
|
||||
// sendto
|
||||
// zt_sendto
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,7 +194,7 @@ class ViewController: NSViewController {
|
||||
// UDP
|
||||
if(selectedProtocol == SOCK_DGRAM)
|
||||
{
|
||||
// recvfrom
|
||||
// zt_recvfrom
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,6 +204,11 @@ class ViewController: NSViewController {
|
||||
while(true)
|
||||
{
|
||||
sleep(1)
|
||||
dispatch_async(dispatch_get_main_queue()) {
|
||||
var str_buf = [Int8](count: 16, repeatedValue: 0)
|
||||
zt_get_addresses(self.txtNWID.stringValue, &str_buf);
|
||||
print("IPV4 = ", String.fromCString(str_buf))
|
||||
}
|
||||
// TCP
|
||||
if(selectedProtocol == SOCK_STREAM)
|
||||
{
|
||||
@@ -226,7 +229,7 @@ class ViewController: NSViewController {
|
||||
// UDP
|
||||
if(selectedProtocol == SOCK_DGRAM)
|
||||
{
|
||||
// recvfrom
|
||||
// zt_recvfrom
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,10 +274,13 @@ class ViewController: NSViewController {
|
||||
|
||||
var service_thread : NSThread!
|
||||
func ztnc_start_service() {
|
||||
// If you plan on using SOCKS Proxy, you don't need to initialize the RPC
|
||||
//start_service("/Users/ztest")
|
||||
// If you plan on using direct calls via RPC
|
||||
start_service_and_rpc("/Users/ztest","XXXXXXXXXXXXXXXX");
|
||||
// Specify a path where the app's ZeroTier data files will be stored.
|
||||
// A path of "." will store them in the same location as the binary
|
||||
|
||||
// - If you plan on using SOCKS Proxy, you don't need to initialize the RPC
|
||||
// start_service(".")
|
||||
// - If you plan on using direct calls via RPC
|
||||
zt_start_service_and_rpc(".","8056c2e21c000001");
|
||||
}
|
||||
|
||||
|
||||
@@ -284,7 +290,7 @@ class ViewController: NSViewController {
|
||||
// Set initial UI values for demo
|
||||
txtAddr.stringValue = serverAddr
|
||||
txtPort.intValue = serverPort
|
||||
txtNWID.stringValue = "XXXXXXXXXXXXXXXX"
|
||||
txtNWID.stringValue = "8056c2e21c000001"
|
||||
|
||||
// ZeroTier Service thread
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {
|
||||
|
||||
@@ -126,7 +126,6 @@
|
||||
<state key="normal" title="Join"/>
|
||||
<connections>
|
||||
<action selector="UI_JoinNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="kem-tf-1h1"/>
|
||||
<action selector="btnJoinNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="LSj-sJ-YEs"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="nwid" borderStyle="roundedRect" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="TvY-qZ-Zjm">
|
||||
@@ -139,7 +138,6 @@
|
||||
<state key="normal" title="Leave"/>
|
||||
<connections>
|
||||
<action selector="UI_LeaveNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7Pg-IK-dMo"/>
|
||||
<action selector="btnLeaveNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="hmg-2Y-GCl"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q7W-t2-dqo">
|
||||
|
||||
@@ -212,6 +212,7 @@ class ViewController: UIViewController {
|
||||
var str_buf = [Int8](count: 16, repeatedValue: 0)
|
||||
zt_get_addresses(self.txtNWID.text!, &str_buf);
|
||||
self.lblAddress.text = String.fromCString(str_buf)
|
||||
// print("IPV4 = ", String.fromCString(str_buf))
|
||||
}
|
||||
|
||||
// TCP
|
||||
@@ -258,41 +259,9 @@ class ViewController: UIViewController {
|
||||
//recvfrom(<#T##Int32#>, <#T##UnsafeMutablePointer<Void>#>, <#T##Int#>, <#T##Int32#>, <#T##UnsafeMutablePointer<sockaddr>#>, <#T##UnsafeMutablePointer<socklen_t>#>)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
let host = CFHostCreateWithName(kCFAllocatorDefault, "google.com").takeRetainedValue()
|
||||
var resolved = CFHostStartInfoResolution(host, .Addresses, nil)
|
||||
let addresses = CFHostGetAddressing(host, &resolved)?.takeUnretainedValue() as! [NSData]?
|
||||
|
||||
|
||||
if let data = addresses?.first {*/
|
||||
//var storage = sockaddr_storage()
|
||||
//data.getBytes(&storage, length: sizeof(sockaddr_storage))
|
||||
|
||||
// if Int32(storage.ss_family) == AF_INET {
|
||||
// let addr4 = withUnsafePointer(&storage) { UnsafePointer<sockaddr_in>($0).memory }
|
||||
|
||||
// prints 74.125.239.132
|
||||
// print(String(CString: inet_ntoa(addr4.sin_addr), encoding: NSASCIIStringEncoding))
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
//var s_addr:sockaddr_in = (sockaddr_in)&socketAddress
|
||||
|
||||
//var s_addr = UnsafeMutablePointer<sockaddr>(storage)
|
||||
|
||||
if(bytesRead > 0)
|
||||
{
|
||||
|
||||
//try withUnsafeMutablePointer(&socketAddress) {
|
||||
// try sendto(sock, buffer, len, 0, UnsafeMutablePointer<sockaddr>($0), socklen_t(socketAddress.sin.sin_len))
|
||||
//}
|
||||
|
||||
print("socketAddressLength = ", socketAddressLength);
|
||||
|
||||
|
||||
let bytesWritten = withUnsafePointer(&socketAddress) {
|
||||
print("TXing...\n");
|
||||
sendto(sock, UnsafePointer(buffer), bytesRead, 0, UnsafePointer<sockaddr>($0), socketAddressLength)
|
||||
@@ -322,7 +291,7 @@ class ViewController: UIViewController {
|
||||
var service_thread : NSThread!
|
||||
func ztnc_start_service() {
|
||||
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
|
||||
start_service_and_rpc(path[0],"8056c2e21c000001")
|
||||
zt_start_service_and_rpc(path[0],"8056c2e21c000001")
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
|
||||
20
make-mac.mk
20
make-mac.mk
@@ -149,21 +149,23 @@ tests: $(TEST_OBJDIR) $(TEST_TARGETS)
|
||||
|
||||
JAVAC := $(shell which javac)
|
||||
|
||||
clean:
|
||||
|
||||
clean_android:
|
||||
# android JNI lib project
|
||||
test -s /usr/bin/javac || { echo "Javac not found"; exit 1; }
|
||||
-cd $(INT)/android/android_jni_lib/proj; ./gradlew clean
|
||||
-rm -rf $(INT)/android/android_jni_lib/proj/build
|
||||
# example android app project
|
||||
-cd $(INT)/android/example_app; ./gradlew clean
|
||||
|
||||
clean_basic:
|
||||
-rm -rf $(BUILD)/*
|
||||
-rm -rf $(INT)/Unity3D/Assets/Plugins/*
|
||||
-rm -rf zerotier-cli zerotier-idtool
|
||||
-find . -type f \( -name 'zerotier-one' -o -name 'zerotier-sdk-service' \) -delete
|
||||
-find . -type f \( -name '*.o' -o -name '*.so' -o -name '*.o.d' -o -name '*.out' -o -name '*.log' -o -name '*.dSYM' \) -delete
|
||||
|
||||
# android JNI lib project
|
||||
test -s /usr/bin/javac || { echo "Javac not found"; exit 1; }
|
||||
|
||||
-cd $(INT)/android/android_jni_lib/proj; ./gradlew clean
|
||||
-rm -rf $(INT)/android/android_jni_lib/proj/build
|
||||
|
||||
# example android app project
|
||||
-cd $(INT)/android/example_app; ./gradlew clean
|
||||
clean: clean_basic clean_android
|
||||
|
||||
clean_for_production:
|
||||
-find . -type f \( -name '*.identity'\) -delete
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
// ZT INTERCEPT/RPC CONTROLS
|
||||
int zt_init_rpc(const char *path, const char *nwid);
|
||||
int start_intercept();
|
||||
void disable_intercept();
|
||||
void enable_intercept();
|
||||
int zt_start_intercept();
|
||||
void zt_disable_intercept();
|
||||
void zt_enable_intercept();
|
||||
|
||||
// ZT SERVICE CONTROLS
|
||||
void start_service(const char * path);
|
||||
void stop_service();
|
||||
void start_service_and_rpc(const char * path, const char * nwid);
|
||||
void zt_start_service(const char * path);
|
||||
void zt_stop_service();
|
||||
void zt_start_service_and_rpc(const char * path, const char * nwid);
|
||||
void zt_join_network(const char *nwid);
|
||||
void zt_leave_network(const char *nwid);
|
||||
void zt_is_running(const char *nwid);
|
||||
@@ -39,6 +39,8 @@ int zt_getsockopt(GETSOCKOPT_SIG);
|
||||
int zt_close(CLOSE_SIG);
|
||||
int zt_getsockname(GETSOCKNAME_SIG);
|
||||
int zt_getpeername(GETPEERNAME_SIG);
|
||||
int zt_recvfrom(RECVFROM_SIG);
|
||||
int zt_sendto(SENDTO_SIG);
|
||||
|
||||
#endif /* Example_OSX_Bridging_Header_h */
|
||||
|
||||
|
||||
@@ -167,6 +167,7 @@ void zts_get_addresses(const char * nwid, char *addrstr)
|
||||
ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int];
|
||||
if(tap && tap->_ips.size()){
|
||||
std::string addr = tap->_ips[0].toString();
|
||||
dwr(MSG_DEBUG, "addr.length() = %d, addr = %s\n", addr.length(), addr.c_str());
|
||||
memcpy(addrstr, addr.c_str(), addr.length());
|
||||
}
|
||||
else {
|
||||
@@ -185,6 +186,7 @@ void zts_get_addresses(const char * nwid, char *addrstr)
|
||||
return ip_strings;
|
||||
*/
|
||||
}
|
||||
|
||||
int zts_get_device_id() { /* TODO */ return 0; }
|
||||
|
||||
bool zts_is_relayed() {
|
||||
@@ -344,10 +346,10 @@ char *zts_get_homepath() {
|
||||
// Starts a ZeroTier service in the background
|
||||
void *zts_start_service(void *thread_id) {
|
||||
|
||||
//#ifdef ZTSDK_BUILD_VERSION
|
||||
#ifdef defined(__ANDROID__)
|
||||
dwr(MSG_DEBUG, "ZTSDK_BUILD_VERSION = %d\n", ZTSDK_BUILD_VERSION);
|
||||
LOGV("ZTSDK_BUILD_VERSION = %d\n", ZTSDK_BUILD_VERSION);
|
||||
//#endif
|
||||
#endif
|
||||
|
||||
#if defined(SDK_BUNDLED) && !defined(__ANDROID__)
|
||||
set_intercept_status(INTERCEPT_DISABLED); // Ignore network calls from ZT service
|
||||
@@ -377,14 +379,13 @@ void *zts_start_service(void *thread_id) {
|
||||
localHomeDir = givenHomeDir; // Used for RPC and *can* differ from homeDir on some platforms
|
||||
#endif
|
||||
|
||||
dwr(MSG_DEBUG, "homeDir = %s", givenHomeDir.c_str());
|
||||
dwr(MSG_DEBUG, "homeDir = %s\n", givenHomeDir.c_str());
|
||||
// Where network .conf files will be stored
|
||||
netDir = homeDir + "/networks.d";
|
||||
zt1Service = (ZeroTier::OneService *)0;
|
||||
|
||||
// Construct path for network config and supporting service files
|
||||
if (homeDir.length()) {
|
||||
dwr(MSG_DEBUG, "start_service(): constructing path...\n");
|
||||
std::vector<std::string> hpsp(ZeroTier::Utils::split(homeDir.c_str(),ZT_PATH_SEPARATOR_S,"",""));
|
||||
std::string ptmp;
|
||||
if (homeDir[0] == ZT_PATH_SEPARATOR)
|
||||
|
||||
@@ -35,50 +35,41 @@
|
||||
// ZEROTIER CONTROLS
|
||||
// Starts a ZeroTier service at the specified path
|
||||
// This will only support SOCKS5 Proxy
|
||||
extern "C" void start_service(const char * path) {
|
||||
extern "C" void zt_start_service(const char * path) {
|
||||
init_service(INTERCEPT_DISABLED, path);
|
||||
}
|
||||
|
||||
extern "C" void stop_service() {
|
||||
zts_stop_service();
|
||||
}
|
||||
|
||||
// Starts a ZeroTier service at the specified path and initializes the RPC mechanism
|
||||
// This will allow direct API calls
|
||||
extern "C" void start_service_and_rpc(const char * path, const char * nwid) {
|
||||
extern "C" void zt_start_service_and_rpc(const char * path, const char * nwid) {
|
||||
init_service_and_rpc(INTERCEPT_DISABLED, path, nwid);
|
||||
}
|
||||
|
||||
extern "C" void zt_stop_service() {
|
||||
zts_stop_service();
|
||||
}
|
||||
// Joins a ZeroTier virtual network
|
||||
extern "C" void zt_join_network(const char * nwid) {
|
||||
zts_join_network(nwid);
|
||||
}
|
||||
|
||||
// Leaves a ZeroTier virtual network
|
||||
extern "C" void zt_leave_network(const char * nwid) {
|
||||
zts_leave_network(nwid);
|
||||
}
|
||||
|
||||
// Returns a list of addresses associated with this device on the given network
|
||||
extern "C" void zt_get_addresses(const char * nwid, char * addrstr) {
|
||||
zts_get_addresses(nwid, addrstr);
|
||||
}
|
||||
|
||||
//
|
||||
extern "C" void zt_start_proxy_server(const char *homepath, const char *nwid, struct sockaddr_storage *addr) {
|
||||
zts_start_proxy_server(homepath, nwid, addr);
|
||||
}
|
||||
|
||||
//
|
||||
extern "C" void zt_stop_proxy_server(const char *nwid) {
|
||||
zts_stop_proxy_server(nwid);
|
||||
}
|
||||
|
||||
//
|
||||
extern "C" void zt_get_proxy_server_address(const char *nwid, struct sockaddr_storage *addr) {
|
||||
zts_get_proxy_server_address(nwid, addr);
|
||||
}
|
||||
|
||||
// Explicit ZT API wrappers
|
||||
#if !defined(__IOS__)
|
||||
// This isn't available for iOS since function interposition isn't as reliable
|
||||
@@ -121,4 +112,10 @@ extern "C" int zt_getpeername(GETPEERNAME_SIG) {
|
||||
}
|
||||
extern "C" int zt_fcntl(FCNTL_SIG) {
|
||||
return zts_fcntl(fd, cmd, flags);
|
||||
}
|
||||
extern "C" ssize_t zt_recvfrom(RECVFROM_SIG) {
|
||||
return zts_recvfrom(socket, buffer, length, flags, address, address_len);
|
||||
}
|
||||
extern "C" ssize_t zt_sendto(SENDTO_SIG) {
|
||||
return zts_sendto(sockfd, buf, len, flags, addr, addr_len);
|
||||
}
|
||||
Reference in New Issue
Block a user