From 447595bf73dc63cd5377c40e86bcf2028e8127ee Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Fri, 9 Dec 2016 11:39:15 -0800 Subject: [PATCH] patch for getting tap addresses from _nets --- .../iOS/Example_iOS_App/ViewController.swift | 2 +- src/service.cpp | 14 +++++++------- zerotierone/service/OneService.cpp | 16 +++++++++------- zerotierone/service/OneService.hpp | 2 +- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift b/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift index 15816d7..bfd4d71 100644 --- a/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift +++ b/integrations/apple/example_app/iOS/Example_iOS_App/ViewController.swift @@ -185,7 +185,7 @@ class ViewController: UIViewController { sleep(1) dispatch_async(dispatch_get_main_queue()) { var str_buf = [Int8](count: 16, repeatedValue: 0) - self.zt.get_ipv6_address(self.txtNWID.text!, &str_buf) + self.zt.get_ipv4_address(self.txtNWID.text!, &str_buf) self.lblAddress.text = String.fromCString(str_buf) print("addr = ", String.fromCString(str_buf)) } diff --git a/src/service.cpp b/src/service.cpp index c6263ca..909431c 100644 --- a/src/service.cpp +++ b/src/service.cpp @@ -81,7 +81,7 @@ void zts_init_rpc(const char * path, const char * nwid); int zts_start_proxy_server(const char *homepath, const char * nwid, struct sockaddr_storage * addr) { DEBUG_INFO(); uint64_t nwid_int = strtoull(nwid, NULL, 16); - ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; + ZeroTier::NetconEthernetTap * tap = zt1Service->getTap(nwid_int); if(tap) { if(tap->startProxyServer(homepath, nwid_int, addr) < 0) { DEBUG_ERROR("zts_start_proxy_server(%s): Problem while starting server.", nwid); @@ -95,7 +95,7 @@ int zts_start_proxy_server(const char *homepath, const char * nwid, struct socka int zts_stop_proxy_server(const char *nwid) { DEBUG_INFO(); uint64_t nwid_int = strtoull(nwid, NULL, 16); - ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; + ZeroTier::NetconEthernetTap * tap = zt1Service->getTap(nwid_int); if(tap) { if(tap->stopProxyServer() < 0) { DEBUG_ERROR("zts_stop_proxy_server(%s): Problem while stopping server.", nwid); @@ -113,7 +113,7 @@ bool zts_proxy_is_running(const char *nwid) // int zts_get_proxy_server_address(const char * nwid, struct sockaddr_storage * addr) { uint64_t nwid_int = strtoull(nwid, NULL, 16); - ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; + ZeroTier::NetconEthernetTap * tap = zt1Service->getTap(nwid_int); if(tap) { tap->getProxyServerAddress(addr); return 0; @@ -163,7 +163,7 @@ void zts_stop_service() { void zts_get_ipv4_address(const char *nwid, char *addrstr) { uint64_t nwid_int = strtoull(nwid, NULL, 16); - ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; + ZeroTier::NetconEthernetTap *tap = zt1Service->getTap(nwid_int); if(tap && tap->_ips.size()){ for(int i=0; i_ips.size(); i++) { if(tap->_ips[i].isV4()) { @@ -182,13 +182,13 @@ void zts_get_ipv4_address(const char *nwid, char *addrstr) void zts_get_ipv6_address(const char *nwid, char *addrstr) { uint64_t nwid_int = strtoull(nwid, NULL, 16); - ZeroTier::NetconEthernetTap * tap = zt1Service->getTaps()[nwid_int]; + ZeroTier::NetconEthernetTap *tap = zt1Service->getTap(nwid_int); if(tap && tap->_ips.size()){ - for(int i=0; i_ips.size(); i++){ + for(int i=0; i_ips.size(); i++) { if(tap->_ips[i].isV6()) { std::string addr = tap->_ips[i].toString(); // DEBUG_EXTRA("addr=%s, addrlen=%d", addr.c_str(), addr.length()); - memcpy(addrstr, addr.c_str(), addr.length()); // first address found that matches protocol version 6 + memcpy(addrstr, addr.c_str(), addr.length()); // first address found that matches protocol version 4 return; } } diff --git a/zerotierone/service/OneService.cpp b/zerotierone/service/OneService.cpp index 0ee69cd..e4f4e43 100644 --- a/zerotierone/service/OneService.cpp +++ b/zerotierone/service/OneService.cpp @@ -539,12 +539,12 @@ public: settings.allowGlobal = false; settings.allowDefault = false; } - - EthernetTap *tap; ZT_VirtualNetworkConfig config; // memcpy() of raw config from core std::vector managedIps; std::list managedRoutes; NetworkSettings settings; + public: + EthernetTap *tap; }; std::map _nets; Mutex _nets_m; @@ -1052,11 +1052,13 @@ public: return _homePath; } - virtual std::map< uint64_t,EthernetTap * > getTaps() - { - std::map< uint64_t,EthernetTap * > _taps; - // FIXME: Rewrite for _nets - return _taps; + virtual EthernetTap * getTap(uint64_t nwid) + { + Mutex::Lock _l(_nets_m); + std::map::const_iterator n(_nets.find(nwid)); + if (n == _nets.end()) + return NULL; + return n->second.tap; } virtual Node * getNode() diff --git a/zerotierone/service/OneService.hpp b/zerotierone/service/OneService.hpp index 544bf00..21dc109 100644 --- a/zerotierone/service/OneService.hpp +++ b/zerotierone/service/OneService.hpp @@ -181,7 +181,7 @@ public: /* * */ - virtual std::map< uint64_t,EthernetTap * > getTaps() = 0; + virtual EthernetTap * getTap(uint64_t nwid) = 0; /* *