Browse Source

Revert "changed timer source (#522)" (#536)

This reverts commit 0298efa36e.
pull/554/head
Logan oos Even 4 years ago
committed by GitHub
parent
commit
599e424b5d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      Makefile.in
  2. 2
      include/n2n.h
  3. 30
      src/n2n.c

4
Makefile.in

@ -48,8 +48,8 @@ N2N_LIB=libn2n.a
N2N_OBJS=$(patsubst src/%.c, src/%.o, $(wildcard src/*.c)) N2N_OBJS=$(patsubst src/%.c, src/%.o, $(wildcard src/*.c))
N2N_DEPS=$(wildcard include/*.h) $(wildcard src/*.c) Makefile $(N2N_LIB) N2N_DEPS=$(wildcard include/*.h) $(wildcard src/*.c) Makefile $(N2N_LIB)
LIBS_EDGE+=-lrt $(LIBS_EDGE_OPT) LIBS_EDGE+=$(LIBS_EDGE_OPT)
LIBS_SN=-lrt LIBS_SN=
#For OpenSolaris (Solaris too?) #For OpenSolaris (Solaris too?)
ifeq ($(shell uname), SunOS) ifeq ($(shell uname), SunOS)

2
include/n2n.h

@ -54,6 +54,7 @@
#define PACKAGE_BUILDDATE (__DATE__ " " __TIME__) #define PACKAGE_BUILDDATE (__DATE__ " " __TIME__)
#include <time.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h> #include <stdlib.h>
@ -120,7 +121,6 @@
#define closesocket(a) close(a) #define closesocket(a) close(a)
#endif /* #ifndef WIN32 */ #endif /* #ifndef WIN32 */
#include <time.h> /* should be included after eventually including unistd.h for _POSIX_TIMERS macro gets correctly defined */
#include "minilzo.h" #include "minilzo.h"
#include <signal.h> #include <signal.h>
#include <string.h> #include <string.h>

30
src/n2n.c

@ -546,31 +546,19 @@ int gettimeofday(struct timeval *tp, void *tzp) {
// returns a time stamp for use with replay protection // returns a time stamp for use with replay protection
uint64_t time_stamp (void) { uint64_t time_stamp (void) {
struct timeval tod;
uint64_t micro_seconds; uint64_t micro_seconds;
#if defined (_POSIX_TIMERS)
struct timespec t;
clock_gettime(CLOCK_REALTIME, &t);
#else
struct timeval t;
gettimeofday (&t, NULL);
#endif
gettimeofday (&tod, NULL);
/* We will (roughly) calculate the microseconds since 1970 leftbound into the return value. /* We will (roughly) calculate the microseconds since 1970 leftbound into the return value.
The leading 32 bits are used for tv_sec. The following 20 bits (sufficent as microseconds The leading 32 bits are used for tv_sec. The following 20 bits (sufficent as microseconds
fraction never exceeds 1,000,000,) encode the value tv_nsec/1024 ( ~ usec) or tv_usec fraction never exceeds 1,000,000,) encode the value tv_usec. The remaining lowest 12 bits
respectively. The remaining lowest 12 bits are kept random for use in IV */ are kept random for use in IV */
micro_seconds = (uint64_t)(t.tv_sec) << 32; micro_seconds = n2n_rand();
#if defined (_POSIX_TIMERS) micro_seconds = ( (((uint64_t)(tod.tv_sec) << 32) + (tod.tv_usec << 12))
micro_seconds += (t.tv_nsec >> 10) << 12; | (micro_seconds >> 52) );
#else // more exact but more costly due to the multiplication:
micro_seconds += t.tv_usec << 12; // micro_seconds = (tod.tv_sec * 1000000 + tod.tv_usec) << 12) | ...
#endif
micro_seconds |= (uint64_t)n2n_rand() >> 52;
// to do the following would be more exact but also
// more costly due to the multiplication and divison:
// micro_seconds = (t.tv_sec * 1000000 + t.tv_nsec / 1000) << 12) | ... or
// micro_seconds = (t.tv_sec * 1000000 + t.tv_usec) << 12) | ...
return (micro_seconds); return (micro_seconds);
} }

Loading…
Cancel
Save