diff --git a/make-linux.mk b/make-linux.mk index 912d0ec..ef7ef14 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -222,13 +222,16 @@ linux_service_and_intercept: linux_intercept linux_sdk_service # Builds a single shared library which contains everything linux_shared_lib: pico $(OBJS) - $(CXX) $(CXXFLAGS) $(STACK_FLAGS) $(DEFS) $(INCLUDES) $(ZTFLAGS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -DSDK_DEBUG -DSDK_PICOTCP -DSDK_IPV4 $(PICO_DRIVER_FILES) $(SDK_INTERCEPT_C_FILES) $(SDK_SERVICE_CPP_FILES) src/service.cpp -c - ar -rcs libzt.a picotcp.o proxy.o tap.o one.o OneService.o service.o sockets.o rpc.o intercept.o OneService.o $(OBJS) + $(CXX) $(CXXFLAGS) $(STACK_FLAGS) $(DEFS) $(INCLUDES) $(ZTFLAGS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED $(PICO_DRIVER_FILES) $(SDK_INTERCEPT_C_FILES) $(SDK_SERVICE_CPP_FILES) src/service.cpp -c + ar -rcs build/libzt.a picotcp.o proxy.o tap.o one.o OneService.o service.o sockets.o rpc.o intercept.o OneService.o $(OBJS) -# Builds zt-embedded tests +# Builds zts_* library tests linux_shared_lib_tests: - $(CXX) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -DSDK_DEBUG -DSDK_PICOTCP -DSDK_IPV4 $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) -Isrc tests/api_test/zt_tcpserver4.c -o zt_tcpserver4.out -L. -lzt -ldl - $(CXX) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -DSDK_DEBUG -DSDK_PICOTCP -DSDK_IPV4 -DSDK_DEBUG $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) -Isrc tests/api_test/zt_tcpclient4.c -o zt_tcpclient4.out -L. -lzt -ldl + mkdir -p $(TEST_OBJDIR) + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) $(STACK_FLAGS) $(DEFS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -Isrc tests/shared_test/zts.tcpserver4.c -o $(TEST_OBJDIR)/$(OSTYPE).zts.tcpserver4.out -Lbuild -lzt -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) $(STACK_FLAGS) $(DEFS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -Isrc tests/shared_test/zts.tcpclient4.c -o $(TEST_OBJDIR)/$(OSTYPE).zts.tcpclient4.out -Lbuild -lzt -ldl + + # -------- ANDROID --------- # TODO: CHECK if ANDROID/GRADLE TOOLS are installed diff --git a/make-mac.mk b/make-mac.mk index 518e018..423cc49 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -37,9 +37,9 @@ SDK_SERVICE_CPP_FILES:=src/tap.cpp \ $(ZT1)/one.cpp SDK_SERVICE_C_FILES = src/rpc.c -SDK_INTERCEPT_C_FILES:=sockets.c \ - intercept.c \ - rpc.c +SDK_INTERCEPT_C_FILES:=src/sockets.c \ + src/intercept.c \ + src/rpc.c ZTFLAGS:=-DSDK -DZT_ONE_NO_ROOT_CHECK @@ -221,18 +221,9 @@ remove_only_intermediates: -find . -type f \( -name '*.o' -o -name '*.so' \) -delete -# Builds a single shared library which contains everything -ifeq ($(SDK_LWIP),1) -osx_shared_lib: lwip $(OBJS) - $(CXX) $(CXXFLAGS) $(LDFLAGS) $(STACK_FLAGS) $(INCLUDES) $(ZTFLAGS) -DSDK_INTERCEPT -shared -o $(SHARED_LIB) $(OBJS) $(LWIP_DRIVER_FILES) $(SDK_SERVICE_CPP_FILES) $(SDK_SERVICE_C_FILES) $(LDLIBS) -ldl -else -osx_shared_lib: pico $(OBJS) - $(CXX) $(CXXFLAGS) $(LDFLAGS) $(STACK_FLAGS) $(INCLUDES) $(ZTFLAGS) -DSDK_INTERCEPT -shared -o $(SHARED_LIB) $(OBJS) $(PICO_DRIVER_FILES) $(SDK_SERVICE_CPP_FILES) $(SDK_SERVICE_C_FILES) $(LDLIBS) -ldl -endif - osx_intercept: # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility - cd src ; gcc $(DEFS) $(INCLUDES) -g -O2 -Wall -std=c99 -fPIC -DVERBOSE -D_GNU_SOURCE -DSDK_INTERCEPT -nostdlib -nostdlib -shared -o ../$(INTERCEPT) $(SDK_INTERCEPT_C_FILES) -ldl + gcc $(DEFS) $(INCLUDES) -g -O2 -Wall -std=c99 -fPIC -DVERBOSE -D_GNU_SOURCE -DSDK_INTERCEPT -nostdlib -nostdlib -shared -o $(INTERCEPT) $(SDK_INTERCEPT_C_FILES) -ldl # Build only the SDK service @@ -250,6 +241,18 @@ endif # Build both intercept library and SDK service (separate) osx_service_and_intercept: osx_intercept osx_sdk_service +# Builds a single shared library which contains everything +osx_shared_lib: pico $(OBJS) + $(CXX) $(CXXFLAGS) $(STACK_FLAGS) $(DEFS) $(INCLUDES) $(ZTFLAGS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED $(PICO_DRIVER_FILES) $(SDK_INTERCEPT_C_FILES) $(SDK_SERVICE_CPP_FILES) src/service.cpp -c + libtool -static -o build/libzt.a zerotierone/node/IncomingPacket.o picotcp.o proxy.o tap.o one.o OneService.o service.o sockets.o rpc.o intercept.o OneService.o $(OBJS) + +# Builds zts_* library tests +osx_shared_lib_tests: + mkdir -p $(TEST_OBJDIR) + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) $(STACK_FLAGS) $(DEFS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -Isrc tests/shared_test/zts.tcpserver4.c -o $(TEST_OBJDIR)/$(OSTYPE).zts.tcpserver4.out -Lbuild -lzt -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(INCLUDES) $(STACK_FLAGS) $(DEFS) -DSDK_SERVICE -DSDK -DSDK_BUNDLED -Isrc tests/shared_test/zts.tcpclient4.c -o $(TEST_OBJDIR)/$(OSTYPE).zts.tcpclient4.out -Lbuild -lzt -ldl + + # -------- ANDROID --------- diff --git a/src/sockets.c b/src/sockets.c index f2bd43b..18339e0 100644 --- a/src/sockets.c +++ b/src/sockets.c @@ -48,7 +48,7 @@ #include #include #include -#include +//#include #include #include #include @@ -254,7 +254,15 @@ int (*realclose)(CLOSE_SIG); memcpy(p, iov[i].iov_base, iov[i].iov_len); p += iov[i].iov_len; } - //err = sendto(fd, buf, tot_len, flags, msg->msg_name, msg->msg_namelen); + #if defined(__cplusplus) + #if defined(__APPLE__) + err = sendto(fd, buf, tot_len, flags, (const struct sockaddr *)(msg->msg_name), msg->msg_namelen); + #elif defined (__linux__) + err = sendto(fd, buf, tot_len, flags, (__CONST_SOCKADDR_ARG)(msg->msg_name), msg->msg_namelen); + #endif + #else + err = sendto(fd, buf, tot_len, flags, msg->msg_name, msg->msg_namelen); + #endif free(buf); return err; } @@ -303,7 +311,6 @@ int (*realclose)(CLOSE_SIG); // TODO: case for address size mismatch? memcpy(addr, tmpbuf, *addrlen); memcpy(&tmpsz, tmpbuf + sizeof(struct sockaddr_storage), sizeof(tmpsz)); - char body[2800]; payload_offset = sizeof(int) + sizeof(struct sockaddr_storage); memcpy(buf, tmpbuf + payload_offset, ZT_MAX_MTU-payload_offset); } @@ -338,7 +345,15 @@ int (*realclose)(CLOSE_SIG); errno = ENOMEM; return -1; } - //n = err = recvfrom(fd, buf, tot_len, flags, msg->msg_name, &msg->msg_namelen); + #if defined(__cplusplus) + #if defined(__APPLE__) + n = err = recvfrom(fd, buf, tot_len, flags, (struct sockaddr * __restrict)(msg->msg_name), &msg->msg_namelen); + #elif defined(__linux__) + n = err = recvfrom(fd, buf, tot_len, flags, (__SOCKADDR_ARG)(msg->msg_name), &msg->msg_namelen); + #endif + #else + n = err = recvfrom(fd, buf, tot_len, flags, msg->msg_name, &msg->msg_namelen); + #endif p = buf; // According to: http://pubs.opengroup.org/onlinepubs/009695399/functions/recvmsg.html diff --git a/src/stack_drivers/picotcp/picotcp.hpp b/src/stack_drivers/picotcp/picotcp.hpp index 3e0027c..f51aad0 100644 --- a/src/stack_drivers/picotcp/picotcp.hpp +++ b/src/stack_drivers/picotcp/picotcp.hpp @@ -171,9 +171,11 @@ namespace ZeroTier { #elif defined(__linux__) && !defined(SDK_BUNDLED) #define __DYNAMIC_STACK__ // Dynamically load stack library + DEBUG_ATTN("loading network stack library (%s)", path); _libref = dlmopen(LM_ID_NEWLM, path, RTLD_NOW); #elif defined(__linux__) && defined(SDK_BUNDLED) // TODO: Determine why __STATIC_STACK__ won't work in SDK_BUNDLED mode #define __DYNAMIC_STACK__ + DEBUG_ATTN("loading network stack library (%s)", path); _libref = dlmopen(LM_ID_NEWLM, path, RTLD_NOW); #elif defined(__APPLE__) #include "TargetConditionals.h" @@ -185,9 +187,12 @@ namespace ZeroTier { #elif TARGET_OS_MAC && !defined(SDK_BUNDLED) #define __DYNAMIC_STACK__ // Dynamically load stack library + DEBUG_ATTN("loading network stack library (%s)", path); _libref = dlopen(path, RTLD_NOW); #else - #define __STATIC_STACK__ + #define __DYNAMIC_STACK__ // should be switched to __STATIC_STACK__ + DEBUG_ATTN("loading network stack library (%s)", path); + _libref = dlopen(path, RTLD_NOW); #endif #endif diff --git a/src/tap.cpp b/src/tap.cpp index 6c9a463..f333242 100644 --- a/src/tap.cpp +++ b/src/tap.cpp @@ -140,7 +140,6 @@ NetconEthernetTap::NetconEthernetTap( Utils::snprintf(stackPath,sizeof(stackPath),"%s%slibjip.so",homePath,ZT_PATH_SEPARATOR_S); jipstack = new jip_stack(stackPath); #endif - _unixListenSocket = _phy.unixListen(sockPath,(void *)this); chmod(sockPath, 0777); // To make the RPC socket available to all users diff --git a/tests/api_test/tcpserver4.c b/tests/api_test/tcpserver4.c index 295a9ea..0472f37 100644 --- a/tests/api_test/tcpserver4.c +++ b/tests/api_test/tcpserver4.c @@ -15,14 +15,11 @@ int main(int argc , char *argv[]) return 0; } - int sock, client_sock, c, read_size, port = atoi(argv[1]); + int comm_fd, sock, client_sock, c, read_size, port = atoi(argv[1]); char client_message[2000]; - - char str[100]; - int comm_fd; - + struct sockaddr_in servaddr; - struct sockaddr_in client; + struct sockaddr_in client; sock = socket(AF_INET, SOCK_STREAM, 0); bzero( &servaddr, sizeof(servaddr)); diff --git a/tests/api_test/zt_tcpclient4.c b/tests/shared_test/zts.tcpclient4.c similarity index 95% rename from tests/api_test/zt_tcpclient4.c rename to tests/shared_test/zts.tcpclient4.c index 0e8236a..d1e566e 100644 --- a/tests/api_test/zt_tcpclient4.c +++ b/tests/shared_test/zts.tcpclient4.c @@ -2,7 +2,6 @@ #include #include -#include #include #include @@ -25,7 +24,7 @@ int main(int argc , char *argv[]) int sock, port = atoi(argv[2]); struct sockaddr_in server; - char message[MSG_SZ] , server_reply[MSG_SZ]; + char server_reply[MSG_SZ]; sock = zts_socket(AF_INET , SOCK_STREAM , 0); if (sock == -1) { diff --git a/tests/api_test/zt_tcpserver4.c b/tests/shared_test/zts.tcpserver4.c similarity index 92% rename from tests/api_test/zt_tcpserver4.c rename to tests/shared_test/zts.tcpserver4.c index a366ac9..aa45cbf 100644 --- a/tests/api_test/zt_tcpserver4.c +++ b/tests/shared_test/zts.tcpserver4.c @@ -2,7 +2,6 @@ #include #include -#include #include #include @@ -21,9 +20,6 @@ int main(int argc , char *argv[]) int sock, client_sock, c, read_size, port = atoi(argv[1]); char client_message[2000]; - - char str[100]; - int comm_fd; struct sockaddr_in servaddr; struct sockaddr_in client; @@ -34,7 +30,7 @@ int main(int argc , char *argv[]) servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htons(INADDR_ANY); servaddr.sin_port = htons(port); - bind(sock, (struct sockaddr *) &servaddr, sizeof(servaddr)); + zts_bind(sock, (struct sockaddr *) &servaddr, sizeof(servaddr)); printf("listening\n"); zts_listen(sock , 3);