Move Os* functions to util.cpp
This commit is contained in:
parent
c53773a914
commit
c08b18c028
4
netapi.h
4
netapi.h
|
@ -18,10 +18,6 @@
|
||||||
|
|
||||||
#pragma warning (disable: 4200)
|
#pragma warning (disable: 4200)
|
||||||
|
|
||||||
uint64 OsGetMilliseconds();
|
|
||||||
void OsGetTimestampTAI64N(uint8 dst[12]);
|
|
||||||
void OsInterruptibleSleep(int millis);
|
|
||||||
|
|
||||||
union IpAddr {
|
union IpAddr {
|
||||||
sockaddr_in sin;
|
sockaddr_in sin;
|
||||||
sockaddr_in6 sin6;
|
sockaddr_in6 sin6;
|
||||||
|
|
|
@ -249,45 +249,6 @@ done:
|
||||||
#endif // defined(OS_LINUX)
|
#endif // defined(OS_LINUX)
|
||||||
|
|
||||||
|
|
||||||
#if defined(OS_MACOSX)
|
|
||||||
static mach_timebase_info_data_t timebase = { 0, 0 };
|
|
||||||
static uint64_t initclock;
|
|
||||||
|
|
||||||
void InitOsxGetMilliseconds() {
|
|
||||||
if (mach_timebase_info(&timebase) != 0)
|
|
||||||
abort();
|
|
||||||
initclock = mach_absolute_time();
|
|
||||||
|
|
||||||
timebase.denom *= 1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64 OsGetMilliseconds()
|
|
||||||
{
|
|
||||||
uint64_t clock = mach_absolute_time() - initclock;
|
|
||||||
return clock * (uint64_t)timebase.numer / (uint64_t)timebase.denom;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else // defined(OS_MACOSX)
|
|
||||||
uint64 OsGetMilliseconds() {
|
|
||||||
struct timespec ts;
|
|
||||||
if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
|
|
||||||
//error
|
|
||||||
fprintf(stderr, "clock_gettime failed\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return (uint64)ts.tv_sec * 1000 + (ts.tv_nsec / 1000000);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void OsGetTimestampTAI64N(uint8 dst[12]) {
|
|
||||||
struct timeval tv;
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
uint64 secs_since_epoch = tv.tv_sec + 0x400000000000000a;
|
|
||||||
uint32 nanos = tv.tv_usec * 1000;
|
|
||||||
WriteBE64(dst, secs_since_epoch);
|
|
||||||
WriteBE32(dst + 8, nanos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void OsInterruptibleSleep(int millis) {
|
void OsInterruptibleSleep(int millis) {
|
||||||
usleep((useconds_t)millis * 1000);
|
usleep((useconds_t)millis * 1000);
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,26 +60,6 @@ static bool IsIpv6AddressSet(const void *p) {
|
||||||
return (ReadLE64(p) | ReadLE64((char*)p + 8)) != 0;
|
return (ReadLE64(p) | ReadLE64((char*)p + 8)) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OsInterruptibleSleep(int millis) {
|
|
||||||
SleepEx(millis, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64 OsGetMilliseconds() {
|
|
||||||
return GetTickCount64();
|
|
||||||
}
|
|
||||||
|
|
||||||
void OsGetTimestampTAI64N(uint8 dst[12]) {
|
|
||||||
SYSTEMTIME systime;
|
|
||||||
uint64 file_time_uint64 = 0;
|
|
||||||
GetSystemTime(&systime);
|
|
||||||
SystemTimeToFileTime(&systime, (FILETIME*)&file_time_uint64);
|
|
||||||
uint64 time_since_epoch_100ns = (file_time_uint64 - 116444736000000000);
|
|
||||||
uint64 secs_since_epoch = time_since_epoch_100ns / 10000000 + 0x400000000000000a;
|
|
||||||
uint32 nanos = (uint32)(time_since_epoch_100ns % 10000000) * 100;
|
|
||||||
WriteBE64(dst, secs_since_epoch);
|
|
||||||
WriteBE32(dst + 8, nanos);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
PSLIST_ENTRY __fastcall InterlockedPushListSList(
|
PSLIST_ENTRY __fastcall InterlockedPushListSList(
|
||||||
IN PSLIST_HEADER ListHead,
|
IN PSLIST_HEADER ListHead,
|
||||||
|
|
71
util.cpp
71
util.cpp
|
@ -20,6 +20,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "tunsafe_types.h"
|
#include "tunsafe_types.h"
|
||||||
|
#include "tunsafe_endian.h"
|
||||||
|
|
||||||
static const char kBase64Alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
static const char kBase64Alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||||
|
|
||||||
|
@ -410,3 +411,73 @@ bool ParseBase64Key(const char *s, uint8 key[32]) {
|
||||||
return base64_decode((uint8*)s, strlen(s), key, &size) && size == 32;
|
return base64_decode((uint8*)s, strlen(s), key, &size) && size == 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(OS_WIN)
|
||||||
|
uint64 OsGetMilliseconds() {
|
||||||
|
return GetTickCount64();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OsGetTimestampTAI64N(uint8 dst[12]) {
|
||||||
|
SYSTEMTIME systime;
|
||||||
|
uint64 file_time_uint64 = 0;
|
||||||
|
GetSystemTime(&systime);
|
||||||
|
SystemTimeToFileTime(&systime, (FILETIME*)&file_time_uint64);
|
||||||
|
uint64 time_since_epoch_100ns = (file_time_uint64 - 116444736000000000);
|
||||||
|
uint64 secs_since_epoch = time_since_epoch_100ns / 10000000 + 0x400000000000000a;
|
||||||
|
uint32 nanos = (uint32)(time_since_epoch_100ns % 10000000) * 100;
|
||||||
|
WriteBE64(dst, secs_since_epoch);
|
||||||
|
WriteBE32(dst + 8, nanos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OsInterruptibleSleep(int millis) {
|
||||||
|
SleepEx(millis, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(OS_WIN)
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(OS_POSIX)
|
||||||
|
|
||||||
|
#if defined(OS_MACOSX)
|
||||||
|
static mach_timebase_info_data_t timebase = { 0, 0 };
|
||||||
|
static uint64_t initclock;
|
||||||
|
|
||||||
|
void InitOsxGetMilliseconds() {
|
||||||
|
if (mach_timebase_info(&timebase) != 0)
|
||||||
|
abort();
|
||||||
|
initclock = mach_absolute_time();
|
||||||
|
|
||||||
|
timebase.denom *= 1000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64 OsGetMilliseconds() {
|
||||||
|
uint64_t clock = mach_absolute_time() - initclock;
|
||||||
|
return clock * (uint64_t)timebase.numer / (uint64_t)timebase.denom;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // defined(OS_MACOSX)
|
||||||
|
uint64 OsGetMilliseconds() {
|
||||||
|
struct timespec ts;
|
||||||
|
if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
|
||||||
|
//error
|
||||||
|
fprintf(stderr, "clock_gettime failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
return (uint64)ts.tv_sec * 1000 + (ts.tv_nsec / 1000000);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void OsGetTimestampTAI64N(uint8 dst[12]) {
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
uint64 secs_since_epoch = tv.tv_sec + 0x400000000000000a;
|
||||||
|
uint32 nanos = tv.tv_usec * 1000;
|
||||||
|
WriteBE64(dst, secs_since_epoch);
|
||||||
|
WriteBE32(dst + 8, nanos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OsInterruptibleSleep(int millis) {
|
||||||
|
usleep((useconds_t)millis * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(OS_POSIX)
|
6
util.h
6
util.h
|
@ -42,3 +42,9 @@ bool ParseHexString(const char *text, void *data, size_t data_size);
|
||||||
void PrintHexString(const void *data, size_t data_size, char *result);
|
void PrintHexString(const void *data, size_t data_size, char *result);
|
||||||
void SplitString(char *s, int separator, std::vector<char*> *components);
|
void SplitString(char *s, int separator, std::vector<char*> *components);
|
||||||
bool ParseBase64Key(const char *s, uint8 key[32]);
|
bool ParseBase64Key(const char *s, uint8 key[32]);
|
||||||
|
|
||||||
|
|
||||||
|
uint64 OsGetMilliseconds();
|
||||||
|
void InitOsxGetMilliseconds();
|
||||||
|
void OsInterruptibleSleep(int millis);
|
||||||
|
void OsGetTimestampTAI64N(uint8 dst[12]);
|
||||||
|
|
Loading…
Reference in a new issue