More Windows port work.

This commit is contained in:
Adam Ierymenko 2013-08-12 16:57:34 -04:00
parent 36af3d92ec
commit 5076c75b07
18 changed files with 113 additions and 16 deletions

View file

@ -25,7 +25,6 @@
* LLC. Start here: http://www.zerotier.com/
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

View file

@ -25,7 +25,6 @@
* LLC. Start here: http://www.zerotier.com/
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

View file

@ -343,7 +343,11 @@ Node::ReasonForTermination Node::run()
Utils::rm((_r->homePath + ZT_PATH_SEPARATOR_S + "thisdeviceismine"));
// Make sure networks.d exists
#ifdef __WINDOWS__
CreateDirectory((_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d").c_str(),NULL);
#else
mkdir((_r->homePath + ZT_PATH_SEPARATOR_S + "networks.d").c_str(),0700);
#endif
// Load or generate config authentication secret
std::string configAuthTokenPath(_r->homePath + ZT_PATH_SEPARATOR_S + "authtoken.secret");

View file

@ -49,6 +49,10 @@
#include "Salsa20.hpp"
#include "HMAC.hpp"
#ifdef __WINDOWS__
#define strtoull _strtoui64
#endif
namespace ZeroTier {
NodeConfig::NodeConfig(const RuntimeEnvironment *renv,const char *authToken)

View file

@ -27,6 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <utility>
#include <stdexcept>

View file

@ -30,17 +30,23 @@
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <set>
#include <string>
#include "Constants.hpp"
#include "SysEnv.hpp"
#include "Utils.hpp"
#include "RuntimeEnvironment.hpp"
#include "NodeConfig.hpp"
#ifdef __UNIX_LIKE__
#include <arpa/inet.h>
#include <sys/socket.h>
#include <unistd.h>
#include <signal.h>
#endif
#ifdef __APPLE__
#include <sys/sysctl.h>
#include <sys/uio.h>
@ -48,11 +54,9 @@
#include <net/route.h>
#endif
#ifdef _WIN32
#ifdef __WINDOWS__
#include <Windows.h>
#else
#include <unistd.h>
#include <signal.h>
#include <WinSock2.h>
#endif
namespace ZeroTier {
@ -210,10 +214,15 @@ uint64_t SysEnv::getNetworkConfigurationFingerprint()
#endif // __linux__
#ifdef _WIN32
#ifdef __WINDOWS__
not implemented yet;
uint64_t SysEnv::getNetworkConfigurationFingerprint()
throw()
{
// TODO: windows version
return 1;
}
#endif // _WIN32
#endif // __WINDOWS__
} // namespace ZeroTier

View file

@ -26,6 +26,7 @@
*/
#include <algorithm>
#include "Topology.hpp"
#include "NodeConfig.hpp"
#include "CMWC4096.hpp"

View file

@ -221,9 +221,20 @@ static const char *MONTH_NAMES[12] = { "Jan","Feb","Mar","Apr","May","Jun","Jul"
std::map<std::string,bool> Utils::listDirectory(const char *path)
{
std::map<std::string,bool> r;
#ifdef __WINDOWS__
HANDLE hFind;
WIN32_FIND_DATA ffd;
if ((hFind = FindFirstFile((std::string(path) + "\\*").c_str(),&ffd)) != INVALID_HANDLE_VALUE) {
do {
r[std::string(ffd.cFileName)] = ((ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0);
} while (FindNextFile(hFind,&ffd));
FindClose(hFind);
}
#else
struct dirent de;
struct dirent *dptr;
std::map<std::string,bool> r;
DIR *d = opendir(path);
if (!d)
@ -238,6 +249,7 @@ std::map<std::string,bool> Utils::listDirectory(const char *path)
r[std::string(dptr->d_name)] = (dptr->d_type == DT_DIR);
} else break;
}
#endif
return r;
}
@ -434,11 +446,43 @@ std::string Utils::toRfc1123(uint64_t t64)
struct tm t;
char buf[128];
time_t utc = (time_t)(t64 / 1000ULL);
#ifdef __WINDOWS__
gmtime_s(&t,&utc);
#else
gmtime_r(&utc,&t);
#endif
sprintf(buf,"%3s, %02d %3s %4d %02d:%02d:%02d GMT",DAY_NAMES[t.tm_wday],t.tm_mday,MONTH_NAMES[t.tm_mon],t.tm_year + 1900,t.tm_hour,t.tm_min,t.tm_sec);
return std::string(buf);
}
#ifdef __WINDOWS__
static int is_leap(unsigned y) {
y += 1900;
return (y % 4) == 0 && ((y % 100) != 0 || (y % 400) == 0);
}
static time_t timegm(struct tm *tm) {
static const unsigned ndays[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
time_t res = 0;
int i;
for (i = 70; i < tm->tm_year; ++i)
res += is_leap(i) ? 366 : 365;
for (i = 0; i < tm->tm_mon; ++i)
res += ndays[is_leap(tm->tm_year)][i];
res += tm->tm_mday - 1;
res *= 24;
res += tm->tm_hour;
res *= 60;
res += tm->tm_min;
res *= 60;
res += tm->tm_sec;
return res;
}
#endif
uint64_t Utils::fromRfc1123(const char *tstr)
{
struct tm t;
@ -453,15 +497,25 @@ uint64_t Utils::fromRfc1123(const char *tstr)
wdays[3] = '\0';
for(t.tm_wday=0;t.tm_wday<7;++t.tm_wday) {
#ifdef __WINDOWS__
if (!_stricmp(DAY_NAMES[t.tm_wday],wdays))
break;
#else
if (!strcasecmp(DAY_NAMES[t.tm_wday],wdays))
break;
#endif
}
if (t.tm_wday == 7)
return 0;
mons[3] = '\0';
for(t.tm_mon=0;t.tm_mon<12;++t.tm_mon) {
#ifdef __WINDOWS__
if (!_stricmp(MONTH_NAMES[t.tm_mday],mons))
break;
#else
if (!strcasecmp(MONTH_NAMES[t.tm_mday],mons))
break;
#endif
}
if (t.tm_mon == 12)
return 0;
@ -471,6 +525,7 @@ uint64_t Utils::fromRfc1123(const char *tstr)
t.tm_isdst = 0; // ignored by timegm
time_t utc = timegm(&t);
return ((utc > 0) ? (1000ULL * (uint64_t)utc) : 0ULL);
}

View file

@ -32,8 +32,6 @@
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <string>
#include <stdexcept>
@ -44,9 +42,12 @@
#include "../ext/lz4/lz4hc.h"
#ifdef __WINDOWS__
#include <windows.h>
#include <Windows.h>
#include <WinSock2.h>
#else
#include <unistd.h>
#include <sys/time.h>
#include <arpa/inet.h>
#endif
#include "Constants.hpp"
@ -74,7 +75,7 @@ public:
throw()
{
#ifdef __WINDOWS__
foo;
DeleteFile(path);
#else
return (unlink(path) == 0);
#endif
@ -342,9 +343,20 @@ public:
static inline uint64_t now()
throw()
{
#ifdef __WINDOWS__
FILETIME ft;
SYSTEMTIME st;
ULARGE_INTEGER tmp;
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
tmp.LowPart = ft.dwLowDateTime;
tmp.HighPart = ft.dwHighDateTime;
return ( ((tmp.QuadPart - 116444736000000000ULL) / 10000L) + st.wMilliseconds );
#else
struct timeval tv;
gettimeofday(&tv,(struct timezone *)0);
return ( (1000ULL * (uint64_t)tv.tv_sec) + (uint64_t)(tv.tv_usec / 1000) );
#endif
};
/**
@ -353,9 +365,20 @@ public:
static inline double nowf()
throw()
{
#ifdef __WINDOWS__
FILETIME ft;
SYSTEMTIME st;
ULARGE_INTEGER tmp;
GetSystemTime(&st);
SystemTimeToFileTime(&st,&ft);
tmp.LowPart = ft.dwLowDateTime;
tmp.HighPart = ft.dwHighDateTime;
return (((double)(tmp.QuadPart - 116444736000000000ULL)) / 10000000.0);
#else
struct timeval tv;
gettimeofday(&tv,(struct timezone *)0);
return ( ((double)tv.tv_sec) + (((double)tv.tv_usec) / 1000000.0) );
#endif
}
/**