zts_stop(), join_network_soft()
This commit is contained in:
@@ -30,7 +30,7 @@
|
|||||||
#ifndef _SDK_DEBUG_H_
|
#ifndef _SDK_DEBUG_H_
|
||||||
#define _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_ERROR 1 // Errors
|
||||||
#define MSG_TRANSFER 2 // RX/TX specific statements
|
#define MSG_TRANSFER 2 // RX/TX specific statements
|
||||||
@@ -136,7 +136,7 @@ extern "C" {
|
|||||||
#if defined(__ANDROID__)
|
#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))
|
#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
|
#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
|
#endif
|
||||||
#else
|
#else
|
||||||
#define DEBUG_FLOW(fmt, args...)
|
#define DEBUG_FLOW(fmt, args...)
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
#define SDK_MTU ZT_MAX_MTU // 2800, usually
|
#define SDK_MTU ZT_MAX_MTU // 2800, usually
|
||||||
|
|
||||||
|
#define UNIX_SOCK_BUF_SIZE 1024*1024
|
||||||
|
|
||||||
// --- lwIP
|
// --- lwIP
|
||||||
#define APPLICATION_POLL_FREQ 2
|
#define APPLICATION_POLL_FREQ 2
|
||||||
#define ZT_LWIP_TCP_TIMER_INTERVAL 50
|
#define ZT_LWIP_TCP_TIMER_INTERVAL 50
|
||||||
@@ -51,4 +53,4 @@
|
|||||||
|
|
||||||
// UDP Buffer sizes (should be about the size of your MTU)
|
// UDP Buffer sizes (should be about the size of your MTU)
|
||||||
#define DEFAULT_UDP_TX_BUF_SZ ZT_MAX_MTU
|
#define DEFAULT_UDP_TX_BUF_SZ ZT_MAX_MTU
|
||||||
#define DEFAULT_UDP_RX_BUF_SZ ZT_MAX_MTU * 128
|
#define DEFAULT_UDP_RX_BUF_SZ ZT_MAX_MTU * 10
|
||||||
@@ -133,8 +133,10 @@ bool zts_proxy_is_running(const char *nwid);
|
|||||||
void zts_start_service(const char *path);
|
void zts_start_service(const char *path);
|
||||||
void *zts_start_core_service(void *thread_id);
|
void *zts_start_core_service(void *thread_id);
|
||||||
void zts_stop_service();
|
void zts_stop_service();
|
||||||
|
void zts_stop();
|
||||||
bool zts_service_is_running();
|
bool zts_service_is_running();
|
||||||
void zts_join_network(const char * nwid);
|
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_leave_network(const char * nwid);
|
||||||
// void zts_get_addresses(const char * nwid, char * addrstr);
|
// void zts_get_addresses(const char * nwid, char * addrstr);
|
||||||
void zts_get_ipv4_address(const char *nwid, char *addrstr);
|
void zts_get_ipv4_address(const char *nwid, char *addrstr);
|
||||||
|
|||||||
@@ -60,8 +60,7 @@ std::string service_path;
|
|||||||
std::string localHomeDir; // Local shortened path
|
std::string localHomeDir; // Local shortened path
|
||||||
std::string givenHomeDir; // What the user/application provides as a suggestion
|
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 homeDir; // The resultant platform-specific dir we *must* use internally
|
||||||
std::string netDir;
|
std::string netDir; // Where network .conf files are to be written
|
||||||
std::string rpcNWID;
|
|
||||||
|
|
||||||
pthread_t intercept_thread;
|
pthread_t intercept_thread;
|
||||||
pthread_key_t thr_id_key;
|
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
|
// Basic ZT service controls
|
||||||
// Will also spin up a SOCKS5 proxy server if USE_SOCKS_PROXY is set
|
// Will also spin up a SOCKS5 proxy server if USE_SOCKS_PROXY is set
|
||||||
void zts_join_network(const char * nwid) {
|
void zts_join_network(const char * nwid) {
|
||||||
DEBUG_INFO();
|
DEBUG_ERROR();
|
||||||
std::string confFile = zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf";
|
std::string confFile = zt1Service->givenHomePath() + "/networks.d/" + nwid + ".conf";
|
||||||
if(!ZeroTier::OSUtils::mkdir(netDir)) {
|
if(!ZeroTier::OSUtils::mkdir(netDir)) {
|
||||||
DEBUG_ERROR("unable to create: %s", netDir.c_str());
|
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
|
zts_start_proxy_server(homeDir.c_str(), nwid, NULL); // NULL addr for default
|
||||||
#endif
|
#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) {
|
void zts_leave_network(const char * nwid) {
|
||||||
if(zt1Service)
|
if(zt1Service)
|
||||||
@@ -154,6 +164,12 @@ void zts_stop_service() {
|
|||||||
if(zt1Service)
|
if(zt1Service)
|
||||||
zt1Service->terminate();
|
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
|
// 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.
|
// Now only returns first assigned address per network. Shouldn't normally be a problem.
|
||||||
|
|||||||
20
src/tap.cpp
20
src/tap.cpp
@@ -63,7 +63,7 @@ namespace ZeroTier {
|
|||||||
int NetconEthernetTap::sendReturnValue(int fd, int retval, int _errno)
|
int NetconEthernetTap::sendReturnValue(int fd, int retval, int _errno)
|
||||||
{
|
{
|
||||||
//#if !defined(USE_SOCKS_PROXY)
|
//#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);
|
int sz = sizeof(char) + sizeof(retval) + sizeof(errno);
|
||||||
char retmsg[sz];
|
char retmsg[sz];
|
||||||
memset(&retmsg, 0, sizeof(retmsg));
|
memset(&retmsg, 0, sizeof(retmsg));
|
||||||
@@ -328,7 +328,7 @@ void NetconEthernetTap::closeConnection(PhySocket *sock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NetconEthernetTap::phyOnUnixClose(PhySocket *sock,void **uptr) {
|
void NetconEthernetTap::phyOnUnixClose(PhySocket *sock,void **uptr) {
|
||||||
DEBUG_EXTRA("physock=%p", sock);
|
//DEBUG_EXTRA("physock=%p", sock);
|
||||||
Mutex::Lock _l(_tcpconns_m);
|
Mutex::Lock _l(_tcpconns_m);
|
||||||
//closeConnection(sock);
|
//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)
|
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;
|
uint64_t CANARY_num;
|
||||||
pid_t pid, tid;
|
pid_t pid, tid;
|
||||||
ssize_t wlen = len;
|
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);
|
// DEBUG_EXTRA(" RPC: physock=%p, (pid=%d, tid=%d, timestamp=%s, cmd=%d)", sock, pid, tid, timestamp, cmd);
|
||||||
|
|
||||||
if(cmd == RPC_SOCKET) {
|
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
|
// Create new lwip socket and associate it with this sock
|
||||||
struct socket_st socket_rpc;
|
struct socket_st socket_rpc;
|
||||||
memcpy(&socket_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct socket_st));
|
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);
|
// DEBUG_EXTRA(" RPC: physock=%p, (pid=%d, tid=%d, timestamp=%s, cmd=%d)", sock, pid, tid, timestamp, cmd);
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
case RPC_BIND:
|
case RPC_BIND:
|
||||||
DEBUG_INFO("RPC_BIND, physock=%p", sock);
|
//DEBUG_INFO("RPC_BIND, physock=%p", sock);
|
||||||
struct bind_st bind_rpc;
|
struct bind_st bind_rpc;
|
||||||
memcpy(&bind_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct bind_st));
|
memcpy(&bind_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct bind_st));
|
||||||
handleBind(sock, rpcSock, uptr, &bind_rpc);
|
handleBind(sock, rpcSock, uptr, &bind_rpc);
|
||||||
break;
|
break;
|
||||||
case RPC_LISTEN:
|
case RPC_LISTEN:
|
||||||
DEBUG_INFO("RPC_LISTEN, physock=%p", sock);
|
//DEBUG_INFO("RPC_LISTEN, physock=%p", sock);
|
||||||
struct listen_st listen_rpc;
|
struct listen_st listen_rpc;
|
||||||
memcpy(&listen_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct listen_st));
|
memcpy(&listen_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct listen_st));
|
||||||
handleListen(sock, rpcSock, uptr, &listen_rpc);
|
handleListen(sock, rpcSock, uptr, &listen_rpc);
|
||||||
break;
|
break;
|
||||||
case RPC_GETSOCKNAME:
|
case RPC_GETSOCKNAME:
|
||||||
DEBUG_INFO("RPC_GETSOCKNAME, physock=%p", sock);
|
//DEBUG_INFO("RPC_GETSOCKNAME, physock=%p", sock);
|
||||||
struct getsockname_st getsockname_rpc;
|
struct getsockname_st getsockname_rpc;
|
||||||
memcpy(&getsockname_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st));
|
memcpy(&getsockname_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st));
|
||||||
handleGetsockname(sock, rpcSock, uptr, &getsockname_rpc);
|
handleGetsockname(sock, rpcSock, uptr, &getsockname_rpc);
|
||||||
break;
|
break;
|
||||||
case RPC_GETPEERNAME:
|
case RPC_GETPEERNAME:
|
||||||
DEBUG_INFO("RPC_GETPEERNAME, physock=%p", sock);
|
//DEBUG_INFO("RPC_GETPEERNAME, physock=%p", sock);
|
||||||
struct getsockname_st getpeername_rpc;
|
struct getsockname_st getpeername_rpc;
|
||||||
memcpy(&getpeername_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st));
|
memcpy(&getpeername_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct getsockname_st));
|
||||||
handleGetpeername(sock, rpcSock, uptr, &getpeername_rpc);
|
handleGetpeername(sock, rpcSock, uptr, &getpeername_rpc);
|
||||||
break;
|
break;
|
||||||
case RPC_CONNECT:
|
case RPC_CONNECT:
|
||||||
DEBUG_INFO("RPC_CONNECT, physock=%p", sock);
|
//DEBUG_INFO("RPC_CONNECT, physock=%p", sock);
|
||||||
struct connect_st connect_rpc;
|
struct connect_st connect_rpc;
|
||||||
memcpy(&connect_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct connect_st));
|
memcpy(&connect_rpc, &buf[IDX_PAYLOAD+STRUCT_IDX], sizeof(struct connect_st));
|
||||||
handleConnect(sock, rpcSock, conn, &connect_rpc);
|
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
|
// 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)
|
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);
|
Mutex::Lock _l(_tcpconns_m);
|
||||||
#if defined(SDK_PICOTCP)
|
#if defined(SDK_PICOTCP)
|
||||||
pico_handleConnect(sock, rpcSock, conn, connect_rpc);
|
pico_handleConnect(sock, rpcSock, conn, connect_rpc);
|
||||||
|
|||||||
Reference in New Issue
Block a user