[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r36276 - in libmicrohttpd: . src/include src/microhttpd w32
From: |
gnunet |
Subject: |
[GNUnet-SVN] r36276 - in libmicrohttpd: . src/include src/microhttpd w32/VS2013 |
Date: |
Thu, 27 Aug 2015 11:43:09 +0200 |
Author: Karlson2k
Date: 2015-08-27 11:43:09 +0200 (Thu, 27 Aug 2015)
New Revision: 36276
Added:
libmicrohttpd/src/microhttpd/mhd_mono_clock.c
libmicrohttpd/src/microhttpd/mhd_mono_clock.h
Modified:
libmicrohttpd/ChangeLog
libmicrohttpd/configure.ac
libmicrohttpd/src/include/microhttpd.h
libmicrohttpd/src/microhttpd/Makefile.am
libmicrohttpd/src/microhttpd/connection.c
libmicrohttpd/src/microhttpd/connection_https.c
libmicrohttpd/src/microhttpd/daemon.c
libmicrohttpd/src/microhttpd/digestauth.c
libmicrohttpd/src/microhttpd/internal.c
libmicrohttpd/src/microhttpd/internal.h
libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj
libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj.filters
Log:
Reimplement monotonic clock with wide range of platforms support
Modified: libmicrohttpd/ChangeLog
===================================================================
--- libmicrohttpd/ChangeLog 2015-08-27 05:25:57 UTC (rev 36275)
+++ libmicrohttpd/ChangeLog 2015-08-27 09:43:09 UTC (rev 36276)
@@ -1,3 +1,7 @@
+Thu Aug 27 09:38:44 CEST 2015
+ Reimplement monotonic clock functions for better
+ support various platforms. -EG
+
Fri Aug 14 14:13:55 CEST 2015
Export MHD_get_reason_phrase_for() symbol. -CG
Modified: libmicrohttpd/configure.ac
===================================================================
--- libmicrohttpd/configure.ac 2015-08-27 05:25:57 UTC (rev 36275)
+++ libmicrohttpd/configure.ac 2015-08-27 09:43:09 UTC (rev 36276)
@@ -451,6 +451,40 @@
AC_DEFINE(HAVE_CLOCK_GETTIME, 1, [Have
clock_gettime])
])
+AC_MSG_CHECKING([[for clock_get_time]])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[
+ #include <mach/clock.h>
+ #include <mach/mach.h>
+ ]],
+ [[
+ clock_serv_t cs;
+ mach_timespec_t mt;
+ host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cs);
+ clock_get_time(cs, &mt);
+ mach_port_deallocate(mach_task_self(), cs);
+ ]])
+ ],
+ [
+ AC_DEFINE([HAVE_CLOCK_GET_TIME], [1], [Define to 1 if you have
`clock_get_time', `host_get_clock_service' and `mach_port_deallocate'
functions.])
+ AC_MSG_RESULT([[yes]])
+ ],
+ [AC_MSG_RESULT([[no]])
+ ])
+
+AC_MSG_CHECKING([[for gethrtime]])
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#include <sys/time.h>]], [[hrtime_t hrt = gethrtime(); ]])
+ ],
+ [
+ AC_DEFINE([HAVE_GETHRTIME], [1], [Define to 1 if you have `gethrtime'
function.])
+ AC_MSG_RESULT([[yes]])
+ ],
+ [AC_MSG_RESULT([[no]])
+ ])
+
# IPv6
AC_MSG_CHECKING(for IPv6)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/include/microhttpd.h 2015-08-27 09:43:09 UTC (rev
36276)
@@ -130,7 +130,7 @@
* Current version of the library.
* 0x01093001 = 1.9.30-1.
*/
-#define MHD_VERSION 0x00094209
+#define MHD_VERSION 0x00094210
/**
* MHD-internal return code for "YES".
Modified: libmicrohttpd/src/microhttpd/Makefile.am
===================================================================
--- libmicrohttpd/src/microhttpd/Makefile.am 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/Makefile.am 2015-08-27 09:43:09 UTC (rev
36276)
@@ -62,6 +62,7 @@
daemon.c \
internal.c internal.h \
memorypool.c memorypool.h \
+ mhd_mono_clock.c mhd_mono_clock.h \
mhd_limits.h mhd_byteorder.h \
response.c response.h
libmicrohttpd_la_CPPFLAGS = \
Modified: libmicrohttpd/src/microhttpd/connection.c
===================================================================
--- libmicrohttpd/src/microhttpd/connection.c 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/connection.c 2015-08-27 09:43:09 UTC (rev
36276)
@@ -30,6 +30,7 @@
#include "connection.h"
#include "memorypool.h"
#include "response.h"
+#include "mhd_mono_clock.h"
#if HAVE_NETINET_TCP_H
/* for TCP_CORK */
@@ -1970,7 +1971,7 @@
{
struct MHD_Daemon *daemon = connection->daemon;
- connection->last_activity = MHD_monotonic_time();
+ connection->last_activity = MHD_monotonic_sec_counter();
if (connection->connection_timeout != daemon->connection_timeout)
return; /* custom timeout, no need to move it in "normal" DLL */
@@ -2656,7 +2657,7 @@
}
timeout = connection->connection_timeout;
if ( (0 != timeout) &&
- (timeout <= (MHD_monotonic_time() - connection->last_activity)) )
+ (timeout <= (MHD_monotonic_sec_counter() - connection->last_activity)) )
{
MHD_connection_close (connection,
MHD_REQUEST_TERMINATED_TIMEOUT_REACHED);
Modified: libmicrohttpd/src/microhttpd/connection_https.c
===================================================================
--- libmicrohttpd/src/microhttpd/connection_https.c 2015-08-27 05:25:57 UTC
(rev 36275)
+++ libmicrohttpd/src/microhttpd/connection_https.c 2015-08-27 09:43:09 UTC
(rev 36276)
@@ -30,6 +30,7 @@
#include "connection.h"
#include "memorypool.h"
#include "response.h"
+#include "mhd_mono_clock.h"
#include <gnutls/gnutls.h>
@@ -46,7 +47,7 @@
{
int ret;
- connection->last_activity = MHD_monotonic_time();
+ connection->last_activity = MHD_monotonic_sec_counter();
if (connection->state == MHD_TLS_CONNECTION_INIT)
{
ret = gnutls_handshake (connection->tls_session);
@@ -139,7 +140,7 @@
MHD_state_to_string (connection->state));
#endif
timeout = connection->connection_timeout;
- if ( (timeout != 0) && (timeout <= (MHD_monotonic_time() -
connection->last_activity)))
+ if ( (timeout != 0) && (timeout <= (MHD_monotonic_sec_counter() -
connection->last_activity)))
MHD_connection_close (connection,
MHD_REQUEST_TERMINATED_TIMEOUT_REACHED);
switch (connection->state)
Modified: libmicrohttpd/src/microhttpd/daemon.c
===================================================================
--- libmicrohttpd/src/microhttpd/daemon.c 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/daemon.c 2015-08-27 09:43:09 UTC (rev
36276)
@@ -38,6 +38,7 @@
#include "memorypool.h"
#include "mhd_limits.h"
#include "autoinit_funcs.h"
+#include "mhd_mono_clock.h"
#if HAVE_SEARCH_H
#include <search.h>
@@ -822,7 +823,7 @@
#endif
if (NULL == tvp && timeout > 0)
{
- now = MHD_monotonic_time();
+ now = MHD_monotonic_sec_counter();
if (now - con->last_activity > timeout)
tv.tv_sec = 0;
else
@@ -1440,7 +1441,7 @@
connection->addr_len = addrlen;
connection->socket_fd = client_socket;
connection->daemon = daemon;
- connection->last_activity = MHD_monotonic_time();
+ connection->last_activity = MHD_monotonic_sec_counter();
/* set default connection handlers */
MHD_set_http_callbacks_ (connection);
@@ -2175,7 +2176,7 @@
if (MHD_NO == have_timeout)
return MHD_NO;
- now = MHD_monotonic_time();
+ now = MHD_monotonic_sec_counter();
if (earliest_deadline < now)
*timeout = 0;
else
@@ -4878,6 +4879,7 @@
#endif
gnutls_global_init ();
#endif
+ MHD_monotonic_sec_counter_init();
}
@@ -4890,6 +4892,7 @@
if (mhd_winsock_inited_)
WSACleanup();
#endif
+ MHD_monotonic_sec_counter_finish();
}
_SET_INIT_AND_DEINIT_FUNCS(MHD_init, MHD_fini);
Modified: libmicrohttpd/src/microhttpd/digestauth.c
===================================================================
--- libmicrohttpd/src/microhttpd/digestauth.c 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/digestauth.c 2015-08-27 09:43:09 UTC (rev
36276)
@@ -26,6 +26,7 @@
#include <limits.h>
#include "internal.h"
#include "md5.h"
+#include "mhd_mono_clock.h"
#if defined(_WIN32) && defined(MHD_W32_MUTEX_)
#ifndef WIN32_LEAN_AND_MEAN
@@ -643,7 +644,7 @@
}
/* 8 = 4 hexadecimal numbers for the timestamp */
nonce_time = strtoul (nonce + len - 8, (char **)NULL, 16);
- t = (uint32_t) MHD_monotonic_time();
+ t = (uint32_t) MHD_monotonic_sec_counter();
/*
* First level vetting for the nonce validity: if the timestamp
* attached to the nonce exceeds `nonce_timeout', then the nonce is
@@ -820,7 +821,7 @@
char nonce[HASH_MD5_HEX_LEN + 9];
/* Generating the server nonce */
- calculate_nonce ((uint32_t) MHD_monotonic_time(),
+ calculate_nonce ((uint32_t) MHD_monotonic_sec_counter(),
connection->method,
connection->daemon->digest_auth_random,
connection->daemon->digest_auth_rand_size,
Modified: libmicrohttpd/src/microhttpd/internal.c
===================================================================
--- libmicrohttpd/src/microhttpd/internal.c 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/internal.c 2015-08-27 09:43:09 UTC (rev
36276)
@@ -171,25 +171,4 @@
}
-/**
- * Equivalent to time(NULL) but tries to use some sort of monotonic
- * clock that isn't affected by someone setting the system real time
- * clock.
- *
- * @return 'current' time
- */
-time_t
-MHD_monotonic_time (void)
-{
-#ifdef HAVE_CLOCK_GETTIME
-#ifdef CLOCK_MONOTONIC
- struct timespec ts;
-
- if (0 == clock_gettime (CLOCK_MONOTONIC, &ts))
- return ts.tv_sec;
-#endif
-#endif
- return time (NULL);
-}
-
/* end of internal.c */
Modified: libmicrohttpd/src/microhttpd/internal.h
===================================================================
--- libmicrohttpd/src/microhttpd/internal.h 2015-08-27 05:25:57 UTC (rev
36275)
+++ libmicrohttpd/src/microhttpd/internal.h 2015-08-27 09:43:09 UTC (rev
36276)
@@ -1439,17 +1439,6 @@
/**
- * Equivalent to `time(NULL)` but tries to use some sort of monotonic
- * clock that isn't affected by someone setting the system real time
- * clock.
- *
- * @return 'current' time
- */
-time_t
-MHD_monotonic_time(void);
-
-
-/**
* Convert all occurences of '+' to ' '.
*
* @param arg string that is modified (in place), must be 0-terminated
Added: libmicrohttpd/src/microhttpd/mhd_mono_clock.c
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_mono_clock.c
(rev 0)
+++ libmicrohttpd/src/microhttpd/mhd_mono_clock.c 2015-08-27 09:43:09 UTC
(rev 36276)
@@ -0,0 +1,312 @@
+/*
+ This file is part of libmicrohttpd
+ Copyright (C) 2015 Karlson2k (Evgeny Grin)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
+*/
+
+/**
+ * @file microhttpd/mhd_mono_clock.h
+ * @brief internal monotonic clock functions implementations
+ * @author Karlson2k (Evgeny Grin)
+ */
+
+#include "mhd_mono_clock.h"
+
+#ifdef HAVE_CLOCK_GET_TIME
+#include <mach/mach.h>
+/* for host_get_clock_service(), mach_host_self(), mach_task_self() */
+#include <mach/clock.h>
+/* for clock_get_time() */
+
+#define _MHD_INVALID_CLOCK_SERV ((clock_serv_t) -2)
+
+static clock_serv_t mono_clock_service = _MHD_INVALID_CLOCK_SERV;
+#endif /* HAVE_CLOCK_GET_TIME */
+
+#ifdef HAVE_CLOCK_GETTIME
+#ifdef CLOCK_REALTIME
+#define _MHD_UNWANTED_CLOCK CLOCK_REALTIME
+#else /* !CLOCK_REALTIME */
+#define _MHD_UNWANTED_CLOCK ((clockid_t) -2)
+#endif /* !CLOCK_REALTIME */
+
+static clockid_t mono_clock_id = _MHD_UNWANTED_CLOCK;
+#endif /* HAVE_CLOCK_GETTIME */
+
+/* sync clocks; reduce chance of value wrap */
+static time_t mono_clock_start = 0;
+static time_t sys_clock_start = 0;
+#ifdef HAVE_GETHRTIME
+static hrtime_t hrtime_start = 0;
+#endif /* HAVE_GETHRTIME */
+#ifdef _WIN32
+#if _WIN32_WINNT >= 0x0600
+static uint64_t tick_start = 0;
+#else /* _WIN32_WINNT < 0x0600 */
+static int64_t perf_freq = 0;
+static int64_t perf_start = 0;
+#endif /* _WIN32_WINNT < 0x0600 */
+#endif /* _WIN32 */
+
+
+
+/**
+ * Type of monotonic clock source
+ */
+enum _MHD_mono_clock_source
+{
+ /**
+ * No monotonic clock
+ */
+ _MHD_CLOCK_NO_SOURCE = 0,
+
+ /**
+ * clock_gettime() with specific clock
+ */
+ _MHD_CLOCK_GETTIME,
+
+ /**
+ * clock_get_time() with specific clock service
+ */
+ _MHD_CLOCK_GET_TIME,
+
+ /**
+ * gethrtime() / 1000000000
+ */
+ _MHD_CLOCK_GETHRTIME,
+
+ /**
+ * GetTickCount64() / 1000
+ */
+ _MHD_CLOCK_GETTICKCOUNT64,
+
+ /**
+ * QueryPerformanceCounter() / QueryPerformanceFrequency()
+ */
+ _MHD_CLOCK_PERFCOUNTER
+};
+
+/**
+ * Initialise monotonic seconds counter.
+ */
+void
+MHD_monotonic_sec_counter_init (void)
+{
+#ifdef HAVE_CLOCK_GET_TIME
+ mach_timespec_t cur_time;
+#endif /* HAVE_CLOCK_GET_TIME */
+ enum _MHD_mono_clock_source mono_clock_source = _MHD_CLOCK_NO_SOURCE;
+#ifdef HAVE_CLOCK_GETTIME
+ struct timespec ts;
+
+ mono_clock_id = _MHD_UNWANTED_CLOCK;
+#endif /* HAVE_CLOCK_GETTIME */
+#ifdef HAVE_CLOCK_GET_TIME
+ mono_clock_service = _MHD_INVALID_CLOCK_SERV;
+#endif /* HAVE_CLOCK_GET_TIME */
+
+ if (0)
+ {
+ } else
+#ifdef HAVE_CLOCK_GETTIME
+#ifdef CLOCK_MONOTONIC_COARSE
+ /* Linux-specific fast value-getting clock */
+ /* Can be affected by frequency adjustment and don't count time in suspend,
*/
+ /* but preferred since it's fast */
+ if (0 == clock_gettime (CLOCK_MONOTONIC_COARSE, &ts))
+ {
+ mono_clock_id = CLOCK_MONOTONIC_COARSE;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_MONOTONIC_COARSE */
+#ifdef CLOCK_MONOTONIC_FAST
+ /* FreeBSD/DragonFly fast value-getting clock */
+ /* Can be affected by frequency adjustment, but preferred since it's fast */
+ if (0 == clock_gettime (CLOCK_MONOTONIC_FAST, &ts))
+ {
+ mono_clock_id = CLOCK_MONOTONIC_FAST;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_MONOTONIC_COARSE */
+#ifdef CLOCK_MONOTONIC_RAW
+ /* Linux-specific clock */
+ /* Not affected by frequency adjustment, but don't count time in suspend */
+ if (0 == clock_gettime (CLOCK_MONOTONIC_RAW , &ts))
+ {
+ mono_clock_id = CLOCK_MONOTONIC_RAW;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_MONOTONIC_RAW */
+#ifdef CLOCK_BOOTTIME
+ /* Linux-specific clock */
+ /* Count time in suspend so it's real monotonic on Linux, */
+ /* but can be slower value-getting than other clocks */
+ if (0 == clock_gettime(CLOCK_BOOTTIME, &ts))
+ {
+ mono_clock_id = CLOCK_BOOTTIME;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_BOOTTIME */
+#ifdef CLOCK_MONOTONIC
+ /* Monotonic clock */
+ /* Widely supported, may be affected by frequency adjustment */
+ /* On Linux it's not truly monotonic as it doesn't count time in suspend */
+ if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
+ {
+ mono_clock_id = CLOCK_MONOTONIC;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_BOOTTIME */
+#endif /* HAVE_CLOCK_GETTIME */
+#ifdef HAVE_CLOCK_GET_TIME
+ /* Darwin-specific monotonic clock */
+ /* Should be monotonic as clock_set_time function always unconditionally */
+ /* failed on latest kernels */
+ if (KERN_SUCCESS == host_get_clock_service(mach_host_self(), SYSTEM_CLOCK,
&mono_clock_service) &&
+ KERN_SUCCESS == clock_get_time(mono_clock_service, &cur_time))
+ {
+ mono_clock_start = cur_time.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GET_TIME;
+ } else
+#endif /* HAVE_CLOCK_GET_TIME */
+#ifdef _WIN32
+#if _WIN32_WINNT >= 0x0600
+ /* W32 Vista or later specific monotonic clock */
+ /* Available since Vista, ~15ms accuracy */
+ if (1)
+ {
+ tick_start = GetTickCount64();
+ mono_clock_source = _MHD_CLOCK_GETTICKCOUNT64;
+ } else
+#else /* _WIN32_WINNT < 0x0600 */
+ /* W32 specific monotonic clock */
+ /* Available on Windows 2000 and later */
+ if (1)
+ {
+ LARGE_INTEGER freq, perf_counter;
+ QueryPerformanceFrequency(&freq); /* never fail on XP and later */
+ QueryPerformanceCounter(&perf_counter); /* never fail on XP and later */
+ perf_freq = freq.QuadPart;
+ perf_start = perf_counter.QuadPart;
+ mono_clock_source = _MHD_CLOCK_PERFCOUNTER;
+ } else
+#endif /* _WIN32_WINNT < 0x0600 */
+#endif /* _WIN32 */
+#ifdef HAVE_CLOCK_GETTIME
+#ifdef CLOCK_HIGHRES
+ /* Solaris-specific monotonic high-resolution clock */
+ /* Not preferred due to be potentially resource-hungry */
+ if (0 == clock_gettime(CLOCK_HIGHRES, &ts))
+ {
+ mono_clock_id = CLOCK_HIGHRES;
+ mono_clock_start = ts.tv_sec;
+ mono_clock_source = _MHD_CLOCK_GETTIME;
+ } else
+#endif /* CLOCK_HIGHRES */
+#endif /* HAVE_CLOCK_GETTIME */
+#ifdef HAVE_GETHRTIME
+ /* HP-UX and Solaris monotonic clock */
+ /* Not preferred due to be potentially resource-hungry */
+ if (1)
+ {
+ hrtime_start = gethrtime();
+ mono_clock_source = _MHD_CLOCK_GETHRTIME;
+ } else
+#endif /* HAVE_GETHRTIME */
+ {
+ /* no suitable clock source was found */
+ mono_clock_source = _MHD_CLOCK_NO_SOURCE;
+ }
+
+#ifdef HAVE_CLOCK_GET_TIME
+ if (_MHD_CLOCK_GET_TIME != mono_clock_source &&
+ _MHD_INVALID_CLOCK_SERV != mono_clock_service)
+ {
+ /* clock service was initialised but clock_get_time failed */
+ mach_port_deallocate(mach_task_self(), mono_clock_service);
+ mono_clock_service = _MHD_INVALID_CLOCK_SERV;
+ }
+#endif /* HAVE_CLOCK_GET_TIME */
+
+ sys_clock_start = time(NULL);
+}
+
+
+/**
+ * Deinitialise monotonic seconds counter by freeing any allocated resources
+ */
+void
+MHD_monotonic_sec_counter_finish(void)
+{
+#ifdef HAVE_CLOCK_GET_TIME
+ if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
+ {
+ mach_port_deallocate(mach_task_self(), mono_clock_service);
+ mono_clock_service = _MHD_INVALID_CLOCK_SERV;
+ }
+#endif /* HAVE_CLOCK_GET_TIME */
+}
+
+/**
+ * Monotonic seconds counter, useful for timeout calculation.
+ * Tries to be not affected by manually setting the system real time
+ * clock or adjustments by NTP synchronization.
+ *
+ * @return number of seconds from some fixed moment
+ */
+time_t
+MHD_monotonic_sec_counter (void)
+{
+#ifdef HAVE_CLOCK_GETTIME
+ struct timespec ts;
+
+ if (_MHD_UNWANTED_CLOCK != mono_clock_id &&
+ 0 == clock_gettime (mono_clock_id , &ts))
+ return ts.tv_sec - mono_clock_start;
+#endif /* HAVE_CLOCK_GETTIME */
+#ifdef HAVE_CLOCK_GET_TIME
+ if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
+ {
+ mach_timespec_t cur_time;
+ if (KERN_SUCCESS == clock_get_time(mono_clock_service, &cur_time))
+ return cur_time.tv_sec - mono_clock_start;
+ }
+#endif /* HAVE_CLOCK_GET_TIME */
+#if defined(_WIN32)
+#if _WIN32_WINNT >= 0x0600
+ if (1)
+ return (time_t)(((uint64_t)(GetTickCount64() - tick_start)) / 1000);
+#else /* _WIN32_WINNT < 0x0600 */
+ if (0 != perf_freq)
+ {
+ LARGE_INTEGER perf_counter;
+ QueryPerformanceCounter(&perf_counter); /* never fail on XP and later */
+ return (time_t)(((uint64_t)(perf_counter.QuadPart - perf_start)) /
perf_freq);
+ }
+#endif /* _WIN32_WINNT < 0x0600 */
+#endif /* _WIN32 */
+#ifdef HAVE_GETHRTIME
+ if (1)
+ return (time_t)(((uint64_t)(gethrtime() - hrtime_start)) / 1000000000);
+#endif /* HAVE_GETHRTIME */
+
+ return time(NULL) - sys_clock_start;
+}
Added: libmicrohttpd/src/microhttpd/mhd_mono_clock.h
===================================================================
--- libmicrohttpd/src/microhttpd/mhd_mono_clock.h
(rev 0)
+++ libmicrohttpd/src/microhttpd/mhd_mono_clock.h 2015-08-27 09:43:09 UTC
(rev 36276)
@@ -0,0 +1,54 @@
+/*
+ This file is part of libmicrohttpd
+ Copyright (C) 2015 Karlson2k (Evgeny Grin)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
+*/
+
+/**
+ * @file microhttpd/mhd_mono_clock.h
+ * @brief internal monotonic clock functions declarations
+ * @author Karlson2k (Evgeny Grin)
+ */
+
+#ifndef MHD_MONO_CLOCK_H
+#define MHD_MONO_CLOCK_H 1
+#include "platform.h"
+
+/**
+ * Initialise monotonic seconds counter.
+ */
+void
+MHD_monotonic_sec_counter_init(void);
+
+
+/**
+ * Deinitialise monotonic seconds counter by freeing any allocated resources
+ */
+void
+MHD_monotonic_sec_counter_finish(void);
+
+
+/**
+ * Monotonic seconds counter, useful for timeout calculation.
+ * Tries to be not affected by manually setting the system real time
+ * clock or adjustments by NTP synchronization.
+ *
+ * @return number of seconds from some fixed moment
+ */
+time_t
+MHD_monotonic_sec_counter(void);
+
+#endif /* MHD_MONO_CLOCK_H */
Modified: libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj
===================================================================
--- libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj 2015-08-27 05:25:57 UTC
(rev 36275)
+++ libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj 2015-08-27 09:43:09 UTC
(rev 36276)
@@ -75,6 +75,7 @@
<ClCompile Include="..\..\src\microhttpd\internal.c" />
<ClCompile Include="..\..\src\microhttpd\md5.c" />
<ClCompile Include="..\..\src\microhttpd\memorypool.c" />
+ <ClCompile Include="..\..\src\microhttpd\mhd_mono_clock.c" />
<ClCompile Include="..\..\src\microhttpd\postprocessor.c" />
<ClCompile Include="..\..\src\microhttpd\reason_phrase.c" />
<ClCompile Include="..\..\src\microhttpd\response.c" />
@@ -94,6 +95,7 @@
<ClInclude Include="..\..\src\microhttpd\memorypool.h" />
<ClInclude Include="..\..\src\microhttpd\mhd_byteorder.h" />
<ClInclude Include="..\..\src\microhttpd\mhd_limits.h" />
+ <ClInclude Include="..\..\src\microhttpd\mhd_mono_clock.h" />
<ClInclude Include="..\..\src\microhttpd\reason_phrase.h" />
<ClInclude Include="..\..\src\microhttpd\response.h" />
<ClInclude Include="..\..\src\microhttpd\tsearch.h" />
Modified: libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj.filters
===================================================================
--- libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj.filters 2015-08-27
05:25:57 UTC (rev 36275)
+++ libmicrohttpd/w32/VS2013/libmicrohttpd.vcxproj.filters 2015-08-27
09:43:09 UTC (rev 36276)
@@ -61,6 +61,9 @@
<ClCompile Include="..\..\src\microhttpd\tsearch.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\microhttpd\mhd_mono_clock.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\microhttpd\base64.h">
@@ -111,6 +114,9 @@
<ClInclude Include="..\..\src\microhttpd\mhd_byteorder.h">
<Filter>Source Files</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\microhttpd\mhd_mono_clock.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="microhttpd_dll_res_vc.rc">
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r36276 - in libmicrohttpd: . src/include src/microhttpd w32/VS2013,
gnunet <=