ios/osx example project updates

This commit is contained in:
Joseph Henry
2016-08-25 13:46:01 -07:00
parent a36c40e3a8
commit b3247c8b09
7 changed files with 58 additions and 83 deletions

View File

@@ -115,9 +115,6 @@ class ViewController: NSViewController {
// BIND // BIND
var bind_thread : NSThread! var bind_thread : NSThread!
func attempt_bind() func attempt_bind()
{
// TCP
if(selectedProtocol == SOCK_STREAM)
{ {
sock = zt_socket(AF_INET, SOCK_STREAM, 0) sock = zt_socket(AF_INET, SOCK_STREAM, 0)
var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)), var addr = sockaddr_in(sin_len: UInt8(sizeof(sockaddr_in)),
@@ -144,16 +141,17 @@ class ViewController: NSViewController {
// Accept connection // Accept connection
var len:socklen_t = 0; var len:socklen_t = 0;
var legIntPtr = withUnsafeMutablePointer(&len, { $0 }) var legIntPtr = withUnsafeMutablePointer(&len, { $0 })
// TCP
if(selectedProtocol == SOCK_STREAM) {
while(accepted_sock < 0) { while(accepted_sock < 0) {
accepted_sock = zt_accept(sock, UnsafeMutablePointer<sockaddr>([addr]), legIntPtr) accepted_sock = zt_accept(sock, UnsafeMutablePointer<sockaddr>([addr]), legIntPtr)
} }
print("accepted connection") print("accepted connection")
} }
// UDP // UDP
if(selectedProtocol == SOCK_DGRAM) if(selectedProtocol == SOCK_DGRAM) {
{ // nothing
} }
} }
@@ -177,7 +175,7 @@ class ViewController: NSViewController {
// UDP // UDP
if(selectedProtocol == SOCK_DGRAM) if(selectedProtocol == SOCK_DGRAM)
{ {
// sendto // zt_sendto
} }
} }
@@ -196,7 +194,7 @@ class ViewController: NSViewController {
// UDP // UDP
if(selectedProtocol == SOCK_DGRAM) if(selectedProtocol == SOCK_DGRAM)
{ {
// recvfrom // zt_recvfrom
} }
} }
@@ -206,6 +204,11 @@ class ViewController: NSViewController {
while(true) while(true)
{ {
sleep(1) 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 // TCP
if(selectedProtocol == SOCK_STREAM) if(selectedProtocol == SOCK_STREAM)
{ {
@@ -226,7 +229,7 @@ class ViewController: NSViewController {
// UDP // UDP
if(selectedProtocol == SOCK_DGRAM) if(selectedProtocol == SOCK_DGRAM)
{ {
// recvfrom // zt_recvfrom
} }
} }
} }
@@ -271,10 +274,13 @@ class ViewController: NSViewController {
var service_thread : NSThread! var service_thread : NSThread!
func ztnc_start_service() { func ztnc_start_service() {
// If you plan on using SOCKS Proxy, you don't need to initialize the RPC // Specify a path where the app's ZeroTier data files will be stored.
//start_service("/Users/ztest") // A path of "." will store them in the same location as the binary
// If you plan on using direct calls via RPC
start_service_and_rpc("/Users/ztest","XXXXXXXXXXXXXXXX"); // - 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 // Set initial UI values for demo
txtAddr.stringValue = serverAddr txtAddr.stringValue = serverAddr
txtPort.intValue = serverPort txtPort.intValue = serverPort
txtNWID.stringValue = "XXXXXXXXXXXXXXXX" txtNWID.stringValue = "8056c2e21c000001"
// ZeroTier Service thread // ZeroTier Service thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {

View File

@@ -126,7 +126,6 @@
<state key="normal" title="Join"/> <state key="normal" title="Join"/>
<connections> <connections>
<action selector="UI_JoinNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="kem-tf-1h1"/> <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> </connections>
</button> </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"> <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"/> <state key="normal" title="Leave"/>
<connections> <connections>
<action selector="UI_LeaveNetwork:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7Pg-IK-dMo"/> <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> </connections>
</button> </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"> <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">

View File

@@ -212,6 +212,7 @@ class ViewController: UIViewController {
var str_buf = [Int8](count: 16, repeatedValue: 0) var str_buf = [Int8](count: 16, repeatedValue: 0)
zt_get_addresses(self.txtNWID.text!, &str_buf); zt_get_addresses(self.txtNWID.text!, &str_buf);
self.lblAddress.text = String.fromCString(str_buf) self.lblAddress.text = String.fromCString(str_buf)
// print("IPV4 = ", String.fromCString(str_buf))
} }
// TCP // 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>#>) //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) if(bytesRead > 0)
{ {
//try withUnsafeMutablePointer(&socketAddress) {
// try sendto(sock, buffer, len, 0, UnsafeMutablePointer<sockaddr>($0), socklen_t(socketAddress.sin.sin_len))
//}
print("socketAddressLength = ", socketAddressLength); print("socketAddressLength = ", socketAddressLength);
let bytesWritten = withUnsafePointer(&socketAddress) { let bytesWritten = withUnsafePointer(&socketAddress) {
print("TXing...\n"); print("TXing...\n");
sendto(sock, UnsafePointer(buffer), bytesRead, 0, UnsafePointer<sockaddr>($0), socketAddressLength) sendto(sock, UnsafePointer(buffer), bytesRead, 0, UnsafePointer<sockaddr>($0), socketAddressLength)
@@ -322,7 +291,7 @@ class ViewController: UIViewController {
var service_thread : NSThread! var service_thread : NSThread!
func ztnc_start_service() { func ztnc_start_service() {
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 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() { override func viewDidLoad() {

View File

@@ -149,21 +149,23 @@ tests: $(TEST_OBJDIR) $(TEST_TARGETS)
JAVAC := $(shell which javac) 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 $(BUILD)/*
-rm -rf $(INT)/Unity3D/Assets/Plugins/* -rm -rf $(INT)/Unity3D/Assets/Plugins/*
-rm -rf zerotier-cli zerotier-idtool -rm -rf zerotier-cli zerotier-idtool
-find . -type f \( -name 'zerotier-one' -o -name 'zerotier-sdk-service' \) -delete -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 -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 clean: clean_basic clean_android
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_for_production: clean_for_production:
-find . -type f \( -name '*.identity'\) -delete -find . -type f \( -name '*.identity'\) -delete

View File

@@ -10,14 +10,14 @@
// ZT INTERCEPT/RPC CONTROLS // ZT INTERCEPT/RPC CONTROLS
int zt_init_rpc(const char *path, const char *nwid); int zt_init_rpc(const char *path, const char *nwid);
int start_intercept(); int zt_start_intercept();
void disable_intercept(); void zt_disable_intercept();
void enable_intercept(); void zt_enable_intercept();
// ZT SERVICE CONTROLS // ZT SERVICE CONTROLS
void start_service(const char * path); void zt_start_service(const char * path);
void stop_service(); void zt_stop_service();
void start_service_and_rpc(const char * path, const char * nwid); void zt_start_service_and_rpc(const char * path, const char * nwid);
void zt_join_network(const char *nwid); void zt_join_network(const char *nwid);
void zt_leave_network(const char *nwid); void zt_leave_network(const char *nwid);
void zt_is_running(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_close(CLOSE_SIG);
int zt_getsockname(GETSOCKNAME_SIG); int zt_getsockname(GETSOCKNAME_SIG);
int zt_getpeername(GETPEERNAME_SIG); int zt_getpeername(GETPEERNAME_SIG);
int zt_recvfrom(RECVFROM_SIG);
int zt_sendto(SENDTO_SIG);
#endif /* Example_OSX_Bridging_Header_h */ #endif /* Example_OSX_Bridging_Header_h */

View File

@@ -167,6 +167,7 @@ void zts_get_addresses(const char * nwid, char *addrstr)
ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int];
if(tap && tap->_ips.size()){ if(tap && tap->_ips.size()){
std::string addr = tap->_ips[0].toString(); 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()); memcpy(addrstr, addr.c_str(), addr.length());
} }
else { else {
@@ -185,6 +186,7 @@ void zts_get_addresses(const char * nwid, char *addrstr)
return ip_strings; return ip_strings;
*/ */
} }
int zts_get_device_id() { /* TODO */ return 0; } int zts_get_device_id() { /* TODO */ return 0; }
bool zts_is_relayed() { bool zts_is_relayed() {
@@ -344,10 +346,10 @@ char *zts_get_homepath() {
// Starts a ZeroTier service in the background // Starts a ZeroTier service in the background
void *zts_start_service(void *thread_id) { 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); dwr(MSG_DEBUG, "ZTSDK_BUILD_VERSION = %d\n", ZTSDK_BUILD_VERSION);
LOGV("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__) #if defined(SDK_BUNDLED) && !defined(__ANDROID__)
set_intercept_status(INTERCEPT_DISABLED); // Ignore network calls from ZT service 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 localHomeDir = givenHomeDir; // Used for RPC and *can* differ from homeDir on some platforms
#endif #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 // Where network .conf files will be stored
netDir = homeDir + "/networks.d"; netDir = homeDir + "/networks.d";
zt1Service = (ZeroTier::OneService *)0; zt1Service = (ZeroTier::OneService *)0;
// Construct path for network config and supporting service files // Construct path for network config and supporting service files
if (homeDir.length()) { 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::vector<std::string> hpsp(ZeroTier::Utils::split(homeDir.c_str(),ZT_PATH_SEPARATOR_S,"",""));
std::string ptmp; std::string ptmp;
if (homeDir[0] == ZT_PATH_SEPARATOR) if (homeDir[0] == ZT_PATH_SEPARATOR)

View File

@@ -35,50 +35,41 @@
// ZEROTIER CONTROLS // ZEROTIER CONTROLS
// Starts a ZeroTier service at the specified path // Starts a ZeroTier service at the specified path
// This will only support SOCKS5 Proxy // 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); 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 // Starts a ZeroTier service at the specified path and initializes the RPC mechanism
// This will allow direct API calls // 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); init_service_and_rpc(INTERCEPT_DISABLED, path, nwid);
} }
extern "C" void zt_stop_service() {
zts_stop_service();
}
// Joins a ZeroTier virtual network // Joins a ZeroTier virtual network
extern "C" void zt_join_network(const char * nwid) { extern "C" void zt_join_network(const char * nwid) {
zts_join_network(nwid); zts_join_network(nwid);
} }
// Leaves a ZeroTier virtual network // Leaves a ZeroTier virtual network
extern "C" void zt_leave_network(const char * nwid) { extern "C" void zt_leave_network(const char * nwid) {
zts_leave_network(nwid); zts_leave_network(nwid);
} }
// Returns a list of addresses associated with this device on the given network // Returns a list of addresses associated with this device on the given network
extern "C" void zt_get_addresses(const char * nwid, char * addrstr) { extern "C" void zt_get_addresses(const char * nwid, char * addrstr) {
zts_get_addresses(nwid, addrstr); zts_get_addresses(nwid, addrstr);
} }
// //
extern "C" void zt_start_proxy_server(const char *homepath, const char *nwid, struct sockaddr_storage *addr) { extern "C" void zt_start_proxy_server(const char *homepath, const char *nwid, struct sockaddr_storage *addr) {
zts_start_proxy_server(homepath, nwid, addr); zts_start_proxy_server(homepath, nwid, addr);
} }
// //
extern "C" void zt_stop_proxy_server(const char *nwid) { extern "C" void zt_stop_proxy_server(const char *nwid) {
zts_stop_proxy_server(nwid); zts_stop_proxy_server(nwid);
} }
// //
extern "C" void zt_get_proxy_server_address(const char *nwid, struct sockaddr_storage *addr) { extern "C" void zt_get_proxy_server_address(const char *nwid, struct sockaddr_storage *addr) {
zts_get_proxy_server_address(nwid, addr); zts_get_proxy_server_address(nwid, addr);
} }
// Explicit ZT API wrappers // Explicit ZT API wrappers
#if !defined(__IOS__) #if !defined(__IOS__)
// This isn't available for iOS since function interposition isn't as reliable // This isn't available for iOS since function interposition isn't as reliable
@@ -122,3 +113,9 @@ extern "C" int zt_getpeername(GETPEERNAME_SIG) {
extern "C" int zt_fcntl(FCNTL_SIG) { extern "C" int zt_fcntl(FCNTL_SIG) {
return zts_fcntl(fd, cmd, flags); 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);
}