diff --git a/src/sdk.h b/src/sdk.h index cc9ebce..d896290 100644 --- a/src/sdk.h +++ b/src/sdk.h @@ -117,6 +117,7 @@ void zts_leave_network(const char * nwid); // void zts_get_addresses(const char * nwid, char * addrstr); void zts_get_ipv4_address(const char *nwid, char *addrstr); void zts_get_ipv6_address(const char *nwid, char *addrstr); +bool zts_has_address(const char *nwid); int zts_get_device_id(); bool zts_is_relayed(); char *zts_get_homepath(); diff --git a/src/service.cpp b/src/service.cpp index 15a6adf..fe085e5 100644 --- a/src/service.cpp +++ b/src/service.cpp @@ -160,6 +160,19 @@ void zts_stop_service() { // Now only returns first assigned address per network. Shouldn't normally be a problem. // Get IPV4 Address for this device on given network + +bool zts_has_address(const char *nwid) +{ + char ipv4_addr[64], ipv6_addr[64]; + zts_get_ipv4_address(nwid, ipv4_addr); + zts_get_ipv6_address(nwid, ipv6_addr); + if(!strcmp(ipv4_addr, "-1.-1.-1.-1/-1") && !strcmp(ipv4_addr, "-1.-1.-1.-1/-1")) { + return false; + } + return true; +} + + void zts_get_ipv4_address(const char *nwid, char *addrstr) { uint64_t nwid_int = strtoull(nwid, NULL, 16); diff --git a/src/sockets.c b/src/sockets.c index 32eb70f..f2bd43b 100644 --- a/src/sockets.c +++ b/src/sockets.c @@ -123,14 +123,14 @@ int (*realclose)(CLOSE_SIG); // start the SDK service if this is bundled #if defined(SDK_BUNDLED) if(!service_initialized) { - //api_netpath = "/root/dev/ztest5/nc_565799d8f612388c"; DEBUG_ATTN("api_netpath = %s", api_netpath); pthread_t intercept_thread; pthread_create(&intercept_thread, NULL, zts_start_core_service, (void *)(path)); service_initialized = 1; - DEBUG_ATTN("waiting for service to come online"); - //while(!zts_service_is_running()) { } - sleep(10); + DEBUG_ATTN("waiting for service to assign address to network stack"); + // wait for zt service to assign the network stack an address + sleep(1); + while(!zts_has_address(nwid)) { } } #endif } diff --git a/src/stack_drivers/picotcp/picotcp.hpp b/src/stack_drivers/picotcp/picotcp.hpp index f212299..3e0027c 100644 --- a/src/stack_drivers/picotcp/picotcp.hpp +++ b/src/stack_drivers/picotcp/picotcp.hpp @@ -97,12 +97,6 @@ namespace ZeroTier { void pico_cb_udp_read(NetconEthernetTap *tap, struct pico_socket *s); void pico_cb_tcp_write(NetconEthernetTap *tap, struct pico_socket *s); void pico_cb_socket_activity(uint16_t ev, struct pico_socket *s); - - /* - void pico_cb_udp(uint16_t ev, struct pico_socket *s); - void pico_cb_udp_write(NetconEthernetTap *tap, struct pico_socket *s); - void pico_cb_udp_read(NetconEthernetTap *tap, struct pico_socket *s); - */ int pico_eth_send(struct pico_device *dev, void *buf, int len); void pico_rx(NetconEthernetTap *tap, const MAC &from,const MAC &to,unsigned int etherType,const void *data,unsigned int len);