Skip to content

Commit

Permalink
Merge 061821e into 08ff19a
Browse files Browse the repository at this point in the history
  • Loading branch information
iphydf committed Jul 8, 2018
2 parents 08ff19a + 061821e commit 4dd643c
Show file tree
Hide file tree
Showing 35 changed files with 268 additions and 126 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@ set(toxcore_PKGCONFIG_REQUIRES ${toxcore_PKGCONFIG_REQUIRES} libsodium)
set(toxcore_SOURCES ${toxcore_SOURCES}
toxcore/logger.c
toxcore/logger.h
toxcore/mono_time.c
toxcore/mono_time.h
toxcore/network.c
toxcore/network.h
toxcore/util.c
Expand Down
1 change: 1 addition & 0 deletions auto_tests/TCP_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "../toxcore/TCP_server.h"

#include "../toxcore/crypto_core.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/util.h"

#include "helpers.h"
Expand Down
1 change: 1 addition & 0 deletions auto_tests/onion_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <sys/types.h>
#include <time.h>

#include "../toxcore/mono_time.h"
#include "../toxcore/onion.h"
#include "../toxcore/onion_announce.h"
#include "../toxcore/onion_client.h"
Expand Down
1 change: 1 addition & 0 deletions other/DHT_bootstrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "../toxcore/LAN_discovery.h"
#include "../toxcore/friend_requests.h"
#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/tox.h"
#include "../toxcore/util.h"

Expand Down
1 change: 1 addition & 0 deletions other/bootstrap_daemon/src/tox-bootstrapd.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
#include "../../../toxcore/LAN_discovery.h"
#include "../../../toxcore/TCP_server.h"
#include "../../../toxcore/logger.h"
#include "../../../toxcore/mono_time.h"
#include "../../../toxcore/onion_announce.h"
#include "../../../toxcore/util.h"

Expand Down
1 change: 1 addition & 0 deletions other/monolith.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "../toxcore/group.c"
#include "../toxcore/list.c"
#include "../toxcore/logger.c"
#include "../toxcore/mono_time.c"
#include "../toxcore/network.c"
#include "../toxcore/net_crypto.c"
#include "../toxcore/onion.c"
Expand Down
2 changes: 1 addition & 1 deletion testing/av_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ extern "C" {
#include "../toxav/ring_buffer.c"

#include "../toxav/toxav.h"
#include "../toxcore/network.h" /* current_time_monotonic() */
#include "../toxcore/mono_time.h" /* current_time_monotonic() */
#include "../toxcore/tox.h"
#include "../toxcore/util.h"

Expand Down
1 change: 1 addition & 0 deletions toxav/audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "rtp.h"

#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"

static struct JitterBuffer *jbuf_new(uint32_t capacity);
static void jbuf_clear(struct JitterBuffer *q);
Expand Down
1 change: 1 addition & 0 deletions toxav/bwcontroller.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "ring_buffer.h"

#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/util.h"

#define BWC_PACKET_ID 196
Expand Down
1 change: 1 addition & 0 deletions toxav/groupav.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <string.h>

#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/util.h"

#define GROUP_JBUF_SIZE 6
Expand Down
1 change: 1 addition & 0 deletions toxav/rtp.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

#include "../toxcore/Messenger.h"
#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/util.h"

enum {
Expand Down
1 change: 1 addition & 0 deletions toxav/toxav.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

#include "../toxcore/Messenger.h"
#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/util.h"

#include <assert.h>
Expand Down
1 change: 1 addition & 0 deletions toxav/video.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "rtp.h"

#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/network.h"

/**
Expand Down
17 changes: 17 additions & 0 deletions toxcore/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,22 @@ cc_library(
deps = [":ccompat"],
)

cc_library(
name = "mono_time",
srcs = ["mono_time.c"],
hdrs = ["mono_time.h"],
deps = [":ccompat"],
)

cc_test(
name = "mono_time_test",
srcs = ["mono_time_test.cc"],
deps = [
":mono_time",
"@com_google_googletest//:gtest_main",
],
)

cc_library(
name = "network",
srcs = [
Expand All @@ -70,6 +86,7 @@ cc_library(
":ccompat",
":crypto_core",
":logger",
":mono_time",
],
)

Expand Down
1 change: 1 addition & 0 deletions toxcore/DHT.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

#include "LAN_discovery.h"
#include "logger.h"
#include "mono_time.h"
#include "network.h"
#include "ping.h"
#include "util.h"
Expand Down
1 change: 1 addition & 0 deletions toxcore/Messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <time.h>

#include "logger.h"
#include "mono_time.h"
#include "network.h"
#include "util.h"

Expand Down
1 change: 1 addition & 0 deletions toxcore/TCP_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include <stdlib.h>
#include <string.h>

#include "mono_time.h"
#include "util.h"

struct TCP_Client_Connection {
Expand Down
1 change: 1 addition & 0 deletions toxcore/TCP_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include <stdlib.h>
#include <string.h>

#include "mono_time.h"
#include "util.h"


Expand Down
1 change: 1 addition & 0 deletions toxcore/TCP_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include <unistd.h>
#endif

#include "mono_time.h"
#include "util.h"

typedef struct TCP_Secure_Connection {
Expand Down
1 change: 1 addition & 0 deletions toxcore/friend_connection.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include <stdlib.h>
#include <string.h>

#include "mono_time.h"
#include "util.h"

#define PORTS_PER_DISCOVERY 10
Expand Down
1 change: 1 addition & 0 deletions toxcore/group.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <stdlib.h>
#include <string.h>

#include "mono_time.h"
#include "util.h"

/* return 1 if the groupnumber is not valid.
Expand Down
154 changes: 154 additions & 0 deletions toxcore/mono_time.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 600
#endif

#if !defined(OS_WIN32) && (defined(_WIN32) || defined(__WIN32__) || defined(WIN32))
#define OS_WIN32
#endif

#ifdef __APPLE__
#include <mach/clock.h>
#endif

#if !defined(OS_WIN32) && !defined(__APPLE__)
#include <sys/time.h>
#include <time.h>
#endif

#include "mono_time.h"

#include <stdlib.h>

#include "ccompat.h"

/* don't call into system billions of times for no reason */
struct Mono_Time {
uint64_t time;
uint64_t base_time;
};

Mono_Time *mono_time_new(void)
{
Mono_Time *monotime = (Mono_Time *)malloc(sizeof(Mono_Time));

if (monotime == nullptr) {
return nullptr;
}

monotime->time = 0;
monotime->base_time = 0;

return monotime;
}

void mono_time_free(Mono_Time *monotime)
{
free(monotime);
}

void mono_time_update(Mono_Time *monotime)
{
if (monotime->base_time == 0) {
monotime->base_time = ((uint64_t)time(nullptr) - (current_time_monotonic() / 1000ULL));
}

monotime->time = (current_time_monotonic() / 1000ULL) + monotime->base_time;
}

uint64_t mono_time_get(const Mono_Time *monotime)
{
return monotime->time;
}

bool mono_time_is_timeout(const Mono_Time *monotime, uint64_t timestamp, uint64_t timeout)
{
return timestamp + timeout <= mono_time_get(monotime);
}


static Mono_Time global_time;

/* XXX: note that this is not thread-safe; if multiple threads call unix_time_update() concurrently, the return value of
* unix_time() may fail to increase monotonically with increasing time */
void unix_time_update(void)
{
mono_time_update(&global_time);
}
uint64_t unix_time(void)
{
return mono_time_get(&global_time);
}
int is_timeout(uint64_t timestamp, uint64_t timeout)
{
return mono_time_is_timeout(&global_time, timestamp, timeout);
}



/* return current UNIX time in microseconds (us). */
uint64_t current_time_actual(void)
{
uint64_t time;
#ifdef OS_WIN32
/* This probably works fine */
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
time = ft.dwHighDateTime;
time <<= 32;
time |= ft.dwLowDateTime;
time -= 116444736000000000ULL;
return time / 10;
#else
struct timeval a;
gettimeofday(&a, nullptr);
time = 1000000ULL * a.tv_sec + a.tv_usec;
return time;
#endif
}


#ifdef OS_WIN32
static uint64_t last_monotime;
static uint64_t add_monotime;
#endif

/* return current monotonic time in milliseconds (ms). */
uint64_t current_time_monotonic(void)
{
uint64_t time;
#ifdef OS_WIN32
uint64_t old_add_monotime = add_monotime;
time = (uint64_t)GetTickCount() + add_monotime;

/* Check if time has decreased because of 32 bit wrap from GetTickCount(), while avoiding false positives from race
* conditions when multiple threads call this function at once */
if (time + 0x10000 < last_monotime) {
uint32_t add = ~0;
/* use old_add_monotime rather than simply incrementing add_monotime, to handle the case that many threads
* simultaneously detect an overflow */
add_monotime = old_add_monotime + add;
time += add;
}

last_monotime = time;
#else
struct timespec monotime;
#if defined(__linux__) && defined(CLOCK_MONOTONIC_RAW)
clock_gettime(CLOCK_MONOTONIC_RAW, &monotime);
#elif defined(__APPLE__)
clock_serv_t muhclock;
mach_timespec_t machtime;

host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &muhclock);
clock_get_time(muhclock, &machtime);
mach_port_deallocate(mach_task_self(), muhclock);

monotime.tv_sec = machtime.tv_sec;
monotime.tv_nsec = machtime.tv_nsec;
#else
clock_gettime(CLOCK_MONOTONIC, &monotime);
#endif
time = 1000ULL * monotime.tv_sec + (monotime.tv_nsec / 1000000ULL);
#endif
return time;
}
35 changes: 35 additions & 0 deletions toxcore/mono_time.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#ifndef C_TOXCORE_TOXCORE_MONO_TIME_H
#define C_TOXCORE_TOXCORE_MONO_TIME_H

#include <stdbool.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct Mono_Time Mono_Time;

Mono_Time *mono_time_new(void);
void mono_time_free(Mono_Time *monotime);

void mono_time_update(Mono_Time *monotime);
uint64_t mono_time_get(const Mono_Time *monotime);
bool mono_time_is_timeout(const Mono_Time *monotime, uint64_t timestamp, uint64_t timeout);

// TODO(#980): Use per-tox monotime, delete these functions.
void unix_time_update(void);
uint64_t unix_time(void);
int is_timeout(uint64_t timestamp, uint64_t timeout);

/* return current UNIX time in microseconds (us). */
uint64_t current_time_actual(void);

/* return current monotonic time in milliseconds (ms). */
uint64_t current_time_monotonic(void);

#ifdef __cplusplus
}
#endif

#endif // C_TOXCORE_TOXCORE_MONO_TIME_H
Loading

0 comments on commit 4dd643c

Please sign in to comment.