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

@ -35,11 +35,13 @@
<Optimization>Disabled</Optimization>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<AdditionalIncludeDirectories>ext\bin\libcrypto\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>ext\bin\libcrypto\win32-vs2012\libeay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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
}
/**