diff --git a/src/debug.h b/src/debug.h index 89b1ced..2bf60aa 100644 --- a/src/debug.h +++ b/src/debug.h @@ -30,7 +30,7 @@ #ifndef _SDK_DEBUG_H_ #define _SDK_DEBUG_H_ -#define DEBUG_LEVEL 4 // Set this to adjust what you'd like to see in the debug traces +#define DEBUG_LEVEL 5 // Set this to adjust what you'd like to see in the debug traces #define MSG_ERROR 1 // Errors #define MSG_TRANSFER 2 // RX/TX specific statements @@ -136,7 +136,7 @@ extern "C" { #if defined(__ANDROID__) #define DEBUG_FLOW(fmt, args...) ((void)__android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, "ZT_FLOW : %14s:%4d:%25s: " fmt "\n", __FILENAME__, __LINE__, __FUNCTION__, ##args)) #else - #define DEBUG_FLOW(fmt, args...) fprintf(stderr, "ZT_FLOW: %14s:%4d:%25s: " fmt "\n", __FILENAME__, __LINE__, __FUNCTION__, ##args) + #define DEBUG_FLOW(fmt, args...) fprintf(stderr, "ZT_FLOW : %14s:%4d:%25s: " fmt "\n", __FILENAME__, __LINE__, __FUNCTION__, ##args) #endif #else #define DEBUG_FLOW(fmt, args...) diff --git a/src/defs.h b/src/defs.h index 0bef79a..d7686cf 100644 --- a/src/defs.h +++ b/src/defs.h @@ -27,6 +27,8 @@ #define SDK_MTU ZT_MAX_MTU // 2800, usually +#define UNIX_SOCK_BUF_SIZE 1024*1024 + // --- lwIP #define APPLICATION_POLL_FREQ 2 #define ZT_LWIP_TCP_TIMER_INTERVAL 50 @@ -51,4 +53,4 @@ // UDP Buffer sizes (should be about the size of your MTU) #define DEFAULT_UDP_TX_BUF_SZ ZT_MAX_MTU -#define DEFAULT_UDP_RX_BUF_SZ ZT_MAX_MTU * 128 \ No newline at end of file +#define DEFAULT_UDP_RX_BUF_SZ ZT_MAX_MTU * 10 \ No newline at end of file diff --git a/src/sdk.h b/src/sdk.h index 777688f..57368ad 100644 --- a/src/sdk.h +++ b/src/sdk.h @@ -133,8 +133,10 @@ bool zts_proxy_is_running(const char *nwid); void zts_start_service(const char *path); void *zts_start_core_service(void *thread_id); void zts_stop_service(); +void zts_stop(); bool zts_service_is_running(); void zts_join_network(const char * nwid); +void zts_join_network_soft(const char * filepath, const char * nwid); 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); diff --git a/src/service.cpp b/src/service.cpp index 79faa12..2871c7f 100644 --- a/src/service.cpp +++ b/src/service.cpp @@ -60,8 +60,7 @@ std::string service_path; std::string localHomeDir; // Local shortened path std::string givenHomeDir; // What the user/application provides as a suggestion std::string homeDir; // The resultant platform-specific dir we *must* use internally -std::string netDir; -std::string rpcNWID; +std::string netDir; // Where network .conf files are to be written pthread_t intercept_thread; pthread_key_t thr_id_key; @@ -122,8 +121,8 @@ int zts_get_proxy_server_address(const char * nwid, struct sockaddr_storage * ad // Basic ZT service controls // Will also spin up a SOCKS5 proxy server if USE_SOCKS_PROXY is set -void zts_join_network(const char * nwid) { - DEBUG_INFO(); +void zts_join_network(const char * nwid) { + DEBUG_ERROR(); std::string confFile = zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf"; if(!ZeroTier::OSUtils::mkdir(netDir)) { DEBUG_ERROR("unable to create: %s", netDir.c_str()); @@ -140,6 +139,17 @@ void zts_join_network(const char * nwid) { zts_start_proxy_server(homeDir.c_str(), nwid, NULL); // NULL addr for default #endif } +// Just create the dir and conf file required, don't instruct the core to do anything +void zts_join_network_soft(const char * filepath, const char * nwid) { + std::string net_dir = std::string(filepath) + "/networks.d/"; + std::string confFile = net_dir + std::string(nwid) + ".conf"; + if(!ZeroTier::OSUtils::mkdir(net_dir)) { + DEBUG_ERROR("unable to create: %s", net_dir.c_str()); + } + if(!ZeroTier::OSUtils::writeFile(confFile.c_str(), "")) { + DEBUG_ERROR("unable to write network conf file: %s", confFile.c_str()); + } +} // void zts_leave_network(const char * nwid) { if(zt1Service) @@ -154,6 +164,12 @@ void zts_stop_service() { if(zt1Service) zt1Service->terminate(); } +void zts_stop() { + DEBUG_INFO("Stopping STSDK"); + zts_stop_service(); + /* TODO: kill each proxy server as well + zts_stop_proxy_server(...); */ +} // FIXME: Re-implemented to make it play nicer with the C-linkage required for Xcode integrations // Now only returns first assigned address per network. Shouldn't normally be a problem. diff --git a/src/tap.cpp b/src/tap.cpp index f333242..4f17ce5 100644 --- a/src/tap.cpp +++ b/src/tap.cpp @@ -63,7 +63,7 @@ namespace ZeroTier { int NetconEthernetTap::sendReturnValue(int fd, int retval, int _errno) { //#if !defined(USE_SOCKS_PROXY) - DEBUG_EXTRA("fd=%d, retval=%d, errno=%d", fd, retval, _errno); + //DEBUG_EXTRA("fd=%d, retval=%d, errno=%d", fd, retval, _errno); int sz = sizeof(char) + sizeof(retval) + sizeof(errno); char retmsg[sz]; memset(&retmsg, 0, sizeof(retmsg)); @@ -328,7 +328,7 @@ void NetconEthernetTap::closeConnection(PhySocket *sock) } void NetconEthernetTap::phyOnUnixClose(PhySocket *sock,void **uptr) { - DEBUG_EXTRA("physock=%p", sock); + //DEBUG_EXTRA("physock=%p", sock); Mutex::Lock _l(_tcpconns_m); //closeConnection(sock); } @@ -359,7 +359,7 @@ void NetconEthernetTap::phyOnUnixWritable(PhySocket *sock,void **uptr,bool lwip_ void NetconEthernetTap::phyOnUnixData(PhySocket *sock, void **uptr, void *data, ssize_t len) { - DEBUG_EXTRA("physock=%p, len=%d", sock, (int)len); + //DEBUG_EXTRA("physock=%p, len=%d", sock, (int)len); uint64_t CANARY_num; pid_t pid, tid; ssize_t wlen = len; @@ -384,7 +384,7 @@ void NetconEthernetTap::phyOnUnixData(PhySocket *sock, void **uptr, void *data, // DEBUG_EXTRA(" RPC: physock=%p, (pid=%d, tid=%d, timestamp=%s, cmd=%d)", sock, pid, tid, timestamp, cmd); if(cmd == RPC_SOCKET) { - DEBUG_INFO("RPC_SOCKET, physock=%p", sock); + //DEBUG_INFO("RPC_SOCKET, physock=%p", sock); // Create new lwip socket and associate it with this sock struct socket_st socket_rpc; memcpy(&socket_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct socket_st)); @@ -478,31 +478,31 @@ void NetconEthernetTap::phyOnUnixData(PhySocket *sock, void **uptr, void *data, // DEBUG_EXTRA(" RPC: physock=%p, (pid=%d, tid=%d, timestamp=%s, cmd=%d)", sock, pid, tid, timestamp, cmd); switch(cmd) { case RPC_BIND: - DEBUG_INFO("RPC_BIND, physock=%p", sock); + //DEBUG_INFO("RPC_BIND, physock=%p", sock); struct bind_st bind_rpc; memcpy(&bind_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct bind_st)); handleBind(sock, rpcSock, uptr, &bind_rpc); break; case RPC_LISTEN: - DEBUG_INFO("RPC_LISTEN, physock=%p", sock); + //DEBUG_INFO("RPC_LISTEN, physock=%p", sock); struct listen_st listen_rpc; memcpy(&listen_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct listen_st)); handleListen(sock, rpcSock, uptr, &listen_rpc); break; case RPC_GETSOCKNAME: - DEBUG_INFO("RPC_GETSOCKNAME, physock=%p", sock); + //DEBUG_INFO("RPC_GETSOCKNAME, physock=%p", sock); struct getsockname_st getsockname_rpc; memcpy(&getsockname_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st)); handleGetsockname(sock, rpcSock, uptr, &getsockname_rpc); break; case RPC_GETPEERNAME: - DEBUG_INFO("RPC_GETPEERNAME, physock=%p", sock); + //DEBUG_INFO("RPC_GETPEERNAME, physock=%p", sock); struct getsockname_st getpeername_rpc; memcpy(&getpeername_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st)); handleGetpeername(sock, rpcSock, uptr, &getpeername_rpc); break; case RPC_CONNECT: - DEBUG_INFO("RPC_CONNECT, physock=%p", sock); + //DEBUG_INFO("RPC_CONNECT, physock=%p", sock); struct connect_st connect_rpc; memcpy(&connect_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct connect_st)); handleConnect(sock, rpcSock, conn, &connect_rpc); @@ -574,7 +574,7 @@ int NetconEthernetTap::handleConnectProxy(PhySocket *sock, struct sockaddr_in *r // Connect a stack's PCB/socket/Connection object to a remote host void NetconEthernetTap::handleConnect(PhySocket *sock, PhySocket *rpcSock, Connection *conn, struct connect_st* connect_rpc) { - DEBUG_ATTN("physock=%p", sock); + //DEBUG_ATTN("physock=%p", sock); Mutex::Lock _l(_tcpconns_m); #if defined(SDK_PICOTCP) pico_handleConnect(sock, rpcSock, conn, connect_rpc);