From 071ac463082646189ade6e31bb3f6051516f81b2 Mon Sep 17 00:00:00 2001 From: plutooo Date: Mon, 5 Aug 2013 12:51:58 -0700 Subject: core: Rewrote ping-module, better performance and cleaner code. --- core/ping.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 core/ping.c (limited to 'core/ping.c') diff --git a/core/ping.c b/core/ping.c new file mode 100644 index 00000000..8a7d534f --- /dev/null +++ b/core/ping.c @@ -0,0 +1,95 @@ +/* + * ping.c -- Buffered pinging using cyclic arrays. + * + * This file is donated to the Tox Project. + * Copyright 2013 plutooo + */ + +#include +#include + +#include "network.h" +#include "util.h" + +#define PING_NUM_MAX 256 +#define PING_TIMEOUT 5 // 5s + +typedef struct { + IP_Port ipp; + uint64_t id; + uint64_t timestamp; +} pinged_t; + +static pinged_t pings[PING_NUM_MAX]; +static size_t num_pings; +static size_t pos_pings; + + +void init_ping() { + num_pings = 0; + pos_pings = 0; +} + +static bool is_timeout(uint64_t time) { + return (time + PING_TIMEOUT) < now(); +} + +static void remove_timeouts() { // O(n) + size_t i, id; + size_t new_pos = pos_pings; + size_t new_num = num_pings; + + // Loop through buffer, oldest first + for(i=0; i