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> <Optimization>Disabled</Optimization>
<MultiProcessorCompilation>true</MultiProcessorCompilation> <MultiProcessorCompilation>true</MultiProcessorCompilation>
<RuntimeTypeInfo>false</RuntimeTypeInfo> <RuntimeTypeInfo>false</RuntimeTypeInfo>
<AdditionalIncludeDirectories>ext\bin\libcrypto\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile> </ClCompile>
<Link> <Link>
<TargetMachine>MachineX86</TargetMachine> <TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation> <GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<AdditionalDependencies>ext\bin\libcrypto\win32-vs2012\libeay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
<ItemGroup> <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/ * LLC. Start here: http://www.zerotier.com/
*/ */
#include <iostream>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -26,6 +26,7 @@
*/ */
#include <algorithm> #include <algorithm>
#include "Topology.hpp" #include "Topology.hpp"
#include "NodeConfig.hpp" #include "NodeConfig.hpp"
#include "CMWC4096.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> 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 de;
struct dirent *dptr; struct dirent *dptr;
std::map<std::string,bool> r;
DIR *d = opendir(path); DIR *d = opendir(path);
if (!d) 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); r[std::string(dptr->d_name)] = (dptr->d_type == DT_DIR);
} else break; } else break;
} }
#endif
return r; return r;
} }
@ -434,11 +446,43 @@ std::string Utils::toRfc1123(uint64_t t64)
struct tm t; struct tm t;
char buf[128]; char buf[128];
time_t utc = (time_t)(t64 / 1000ULL); time_t utc = (time_t)(t64 / 1000ULL);
#ifdef __WINDOWS__
gmtime_s(&t,&utc);
#else
gmtime_r(&utc,&t); 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); 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); 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) uint64_t Utils::fromRfc1123(const char *tstr)
{ {
struct tm t; struct tm t;
@ -453,15 +497,25 @@ uint64_t Utils::fromRfc1123(const char *tstr)
wdays[3] = '\0'; wdays[3] = '\0';
for(t.tm_wday=0;t.tm_wday<7;++t.tm_wday) { 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)) if (!strcasecmp(DAY_NAMES[t.tm_wday],wdays))
break; break;
#endif
} }
if (t.tm_wday == 7) if (t.tm_wday == 7)
return 0; return 0;
mons[3] = '\0'; mons[3] = '\0';
for(t.tm_mon=0;t.tm_mon<12;++t.tm_mon) { 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)) if (!strcasecmp(MONTH_NAMES[t.tm_mday],mons))
break; break;
#endif
} }
if (t.tm_mon == 12) if (t.tm_mon == 12)
return 0; return 0;
@ -471,6 +525,7 @@ uint64_t Utils::fromRfc1123(const char *tstr)
t.tm_isdst = 0; // ignored by timegm t.tm_isdst = 0; // ignored by timegm
time_t utc = timegm(&t); time_t utc = timegm(&t);
return ((utc > 0) ? (1000ULL * (uint64_t)utc) : 0ULL); return ((utc > 0) ? (1000ULL * (uint64_t)utc) : 0ULL);
} }

View file

@ -32,8 +32,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdint.h> #include <stdint.h>
#include <time.h> #include <time.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <string> #include <string>
#include <stdexcept> #include <stdexcept>
@ -44,9 +42,12 @@
#include "../ext/lz4/lz4hc.h" #include "../ext/lz4/lz4hc.h"
#ifdef __WINDOWS__ #ifdef __WINDOWS__
#include <windows.h> #include <Windows.h>
#include <WinSock2.h>
#else #else
#include <unistd.h> #include <unistd.h>
#include <sys/time.h>
#include <arpa/inet.h>
#endif #endif
#include "Constants.hpp" #include "Constants.hpp"
@ -74,7 +75,7 @@ public:
throw() throw()
{ {
#ifdef __WINDOWS__ #ifdef __WINDOWS__
foo; DeleteFile(path);
#else #else
return (unlink(path) == 0); return (unlink(path) == 0);
#endif #endif
@ -342,9 +343,20 @@ public:
static inline uint64_t now() static inline uint64_t now()
throw() 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; struct timeval tv;
gettimeofday(&tv,(struct timezone *)0); gettimeofday(&tv,(struct timezone *)0);
return ( (1000ULL * (uint64_t)tv.tv_sec) + (uint64_t)(tv.tv_usec / 1000) ); return ( (1000ULL * (uint64_t)tv.tv_sec) + (uint64_t)(tv.tv_usec / 1000) );
#endif
}; };
/** /**
@ -353,9 +365,20 @@ public:
static inline double nowf() static inline double nowf()
throw() 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; struct timeval tv;
gettimeofday(&tv,(struct timezone *)0); gettimeofday(&tv,(struct timezone *)0);
return ( ((double)tv.tv_sec) + (((double)tv.tv_usec) / 1000000.0) ); return ( ((double)tv.tv_sec) + (((double)tv.tv_usec) / 1000000.0) );
#endif
} }
/** /**