RPC improvements for bundled and non-bundled builds

This commit is contained in:
Joseph Henry
2016-06-29 01:35:58 -07:00
parent 973e13561c
commit b52551ea4a
8 changed files with 51 additions and 105 deletions

View File

@@ -75,73 +75,35 @@
void print_addr(struct sockaddr *addr);
void dwr(int level, const char *fmt, ... );
static char *api_netpath = (char *)0;
// TODO: Remove before production
void set_netpath(char * path) {
dwr(MSG_DEBUG,"set_netpath(%s)", path);
api_netpath = path;
rpc_mutex_init(); // TODO: double-check this
}
const char *get_netpath() {
return api_netpath;
}
char *api_netpath = (char *)0;
// ------------------------------------------------------------------------------
// ---------------------------------- zt_init_rpc -------------------------------
// ------------------------------------------------------------------------------
void zt_init_rpc(char *nwid)
void zt_init_rpc(char *path, char *nwid)
{
dwr(MSG_DEBUG, "zt_init_rpc\n");
#if defined(__UNITY_3D__)
//char *nw = "565799d8f6e1c11a";
//char *path = "/Users/Joseph/utest2/nc_";
//char *fullpath = malloc(strlen(path)+strlen(nw)+1);
//if(fullpath) {
// strcpy(fullpath, path);
// strcat(fullpath, nw);
// api_netpath = fullpath;
//}
//api_netpath = nwid;
api_netpath = "/Users/Joseph/utest2/nc_565799d8f6e1c11a";
#endif
#if defined(__IOS__)
/*
api_netpath = "ZeroTier/One/nc_" + nwid;
void *spec = pthread_getspecific(thr_id_key);
int thr_id = spec != NULL ? *((int*)spec) : -1;
// dwr(MSG_DEBUG_EXTRA, "set_up_intercept(thr_id=%d)\n", thr_id);
if(thr_id == INTERCEPT_ENABLED) {
if (!api_netpath) {
api_netpath = "ZeroTier/One/nc_e5cd7a9e1c3511dd"; // Path allowed on iOS devices
}
return 1;
if(!api_netpath) {
#if defined(SDK_BUNDLED)
// Get the path/nwid from the user application
char *fullpath = malloc(strlen(path)+strlen(nwid)+1);
if(fullpath) {
strcpy(fullpath, path);
strcat(fullpath, nwid);
api_netpath = fullpath;
}
#else
// Get path/nwid from environment variables
if (!api_netpath) {
api_netpath = getenv("ZT_NC_NETWORK");
dwr(MSG_DEBUG, "$ZT_NC_NETWORK = %s\n", api_netpath);
}
#endif
}
return 0;
*/
api_netpath = "ZeroTier/One/nc_e5cd7a9e1c3511dd";
#elif defined(__ANDROID__)
api_netpath = "ZeroTier/One/nc_" + nwid;
return 1;
#else
if (!api_netpath) {
api_netpath = getenv("ZT_NC_NETWORK");
set_netpath(api_netpath);
dwr(MSG_DEBUG, "netpath = %s\n", api_netpath);
if(!api_netpath) {
// return 0;
}
}
#endif
}
void get_api_netpath() { zt_init_rpc("",""); }
// ------------------------------------------------------------------------------
// ------------------------------------ sendto() --------------------------------
@@ -308,9 +270,7 @@ const char *get_netpath() {
// ------------------------------------------------------------------------------
#if defined(__UNITY_3D__)
// Just expose some basic calls for configuring and RX/TXing through ZT sockets
ssize_t zt_send(int fd, void *buf, int len) {
return write(fd, buf, len);
}
@@ -359,7 +319,7 @@ const char *get_netpath() {
// int socket_family, int socket_type, int protocol
int zt_socket(SOCKET_SIG) {
zt_init_rpc("");
get_api_netpath();
dwr(MSG_DEBUG, "zt_socket()\n");
/* Check that type makes sense */
#if defined(__linux__)
@@ -408,6 +368,7 @@ const char *get_netpath() {
int zt_connect(CONNECT_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_connect(%d)\n", __fd);
struct connect_st rpc_st;
#if defined(__linux__)
@@ -431,6 +392,7 @@ const char *get_netpath() {
#if !defined(__ANDROID__)
int zt_bind(BIND_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_bind(%d)\n", sockfd);
struct bind_st rpc_st;
rpc_st.sockfd = sockfd;
@@ -455,6 +417,7 @@ const char *get_netpath() {
#if defined(__linux__)
int zt_accept4(ACCEPT4_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_accept4(%d):\n", sockfd);
#if !defined(__ANDROID__)
if ((flags & SOCK_CLOEXEC))
@@ -473,12 +436,13 @@ const char *get_netpath() {
int zt_accept(ACCEPT_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_accept(%d):\n", sockfd);
// FIXME: Find a better solution for this before production
#if !defined(__UNITY_3D__)
// FIXME: Find a better solution for this before production
#if !defined(__UNITY_3D__)
if(addr)
addr->sa_family = AF_INET;
#endif
#endif
int new_fd = get_new_fd(sockfd);
dwr(MSG_DEBUG,"newfd = %d\n", new_fd);
@@ -497,6 +461,7 @@ const char *get_netpath() {
int zt_listen(LISTEN_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_listen(%d):\n", sockfd);
struct listen_st rpc_st;
rpc_st.sockfd = sockfd;
@@ -528,6 +493,7 @@ const char *get_netpath() {
int zt_getsockname(GETSOCKNAME_SIG)
{
get_api_netpath();
dwr(MSG_DEBUG,"zt_getsockname(%d):\n", sockfd);
/* TODO: This is kind of a hack as it stands -- assumes sockaddr is sockaddr_in
* and is an IPv4 address. */