ios/osx example project updates
This commit is contained in:
@@ -116,9 +116,6 @@ class ViewController: NSViewController {
|
|||||||
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)),
|
||||||
sin_family: UInt8(AF_INET),
|
sin_family: UInt8(AF_INET),
|
||||||
@@ -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), {
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
20
make-mac.mk
20
make-mac.mk
@@ -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
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user