GNUnet 0.28.0-dev.5
 
Loading...
Searching...
No Matches
gnunet_time_lib.h
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2001-2022 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
36#ifndef GNUNET_TIME_LIB_H
37#define GNUNET_TIME_LIB_H
38
39#ifdef __cplusplus
40extern "C"
41{
42#if 0 /* keep Emacsens' auto-indent happy */
43}
44#endif
45#endif
46
47
48#include "gnunet_common.h"
49
54{
59 uint64_t abs_value_us;
60};
61
73
79{
84 uint64_t rel_value_us;
85};
86
88
100
101
113
125
127
131#define GNUNET_TIME_UNIT_ZERO ((struct GNUNET_TIME_Relative){0})
132
136#define GNUNET_TIME_UNIT_ZERO_ABS ((struct GNUNET_TIME_Absolute){0})
137
141#define GNUNET_TIME_UNIT_ZERO_TS ((struct GNUNET_TIME_Timestamp){{0}})
142
146#define GNUNET_TIME_UNIT_MICROSECONDS GNUNET_TIME_relative_get_unit_ ()
147
151#define GNUNET_TIME_UNIT_MILLISECONDS GNUNET_TIME_relative_get_millisecond_ ()
152
156#define GNUNET_TIME_UNIT_SECONDS GNUNET_TIME_relative_get_second_ ()
157
161#define GNUNET_TIME_UNIT_MINUTES GNUNET_TIME_relative_get_minute_ ()
162
166#define GNUNET_TIME_UNIT_HOURS GNUNET_TIME_relative_get_hour_ ()
167
171#define GNUNET_TIME_UNIT_DAYS GNUNET_TIME_relative_multiply ( \
172 GNUNET_TIME_UNIT_HOURS, 24)
173
177#define GNUNET_TIME_UNIT_WEEKS GNUNET_TIME_relative_multiply ( \
178 GNUNET_TIME_UNIT_DAYS, 7)
179
183#define GNUNET_TIME_UNIT_MONTHS GNUNET_TIME_relative_multiply ( \
184 GNUNET_TIME_UNIT_DAYS, 30)
185
189#define GNUNET_TIME_UNIT_YEARS GNUNET_TIME_relative_multiply ( \
190 GNUNET_TIME_UNIT_DAYS, 365)
191
196#define GNUNET_TIME_UNIT_FOREVER_REL \
197 ((struct GNUNET_TIME_Relative){UINT64_MAX})
198
203#define GNUNET_TIME_UNIT_FOREVER_ABS \
204 ((struct GNUNET_TIME_Absolute){UINT64_MAX})
205#define GNUNET_TIME_UNIT_NEVER_ABS \
206 ((struct GNUNET_TIME_Absolute){UINT64_MAX})
207
212#define GNUNET_TIME_UNIT_FOREVER_TS \
213 ((struct GNUNET_TIME_Timestamp){{UINT64_MAX}})
214
215
219#define GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD \
220 GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15)
221
222
229#define GNUNET_TIME_STD_BACKOFF(r) GNUNET_TIME_relative_min ( \
230 GNUNET_TIME_STD_EXPONENTIAL_BACKOFF_THRESHOLD, \
231 GNUNET_TIME_relative_multiply ( \
232 GNUNET_TIME_relative_max (GNUNET_TIME_UNIT_MILLISECONDS, (r)), 2))
233
234
285
286
298
299
308GNUNET_TIME_string_to_round_interval (const char *ri_str,
310
311
318const char *
320
321
337
338
355
356
372
373
390
391
400const char *
402
403
414const char *
416
417
428const char *
430 bool do_round);
431
432
444 struct GNUNET_TIME_Relative threshold);
445
446
455
456
462
463
469
470
476
477
483
484
490
491
497
498
504
505
511
512
518
519
527
528
538
539
549
550
559
560
568
569
578#define GNUNET_TIME_absolute_cmp(t1,op,t2) \
579 ((void) (1 op 2), (t1).abs_value_us op (t2).abs_value_us)
580
581
590#define GNUNET_TIME_timestamp_cmp(t1,op,t2) \
591 GNUNET_TIME_absolute_cmp ((t1).abs_time,op,(t2).abs_time)
592
593
602#define GNUNET_TIME_relative_cmp(t1,op,t2) \
603 ((void) (1 op 2), (t1).rel_value_us op (t2).rel_value_us)
604
605
615 struct GNUNET_TIME_Relative t2);
616
617
627 struct GNUNET_TIME_Relative t2);
628
629
639 struct GNUNET_TIME_Absolute t2);
640
641
651 struct GNUNET_TIME_Absolute t2);
652
653
663 struct GNUNET_TIME_Relative rt);
664
665
675 struct GNUNET_TIME_Timestamp t2);
676
677
687 struct GNUNET_TIME_Timestamp t2);
688
689
699
700
710bool
712 struct GNUNET_TIME_Absolute a2,
713 struct GNUNET_TIME_Relative t);
714
715
728 uint64_t finished,
729 uint64_t total);
730
731
744
745
755
756
768
769
781
782
792 double factor);
793
803 unsigned long long factor);
804
805
815 unsigned long long factor);
816
817
827 unsigned long long factor);
828
829
839 struct GNUNET_TIME_Relative a2);
840
841
851 struct GNUNET_TIME_Relative a2);
852
853
862
863
872
873
882
883
892
893
901GNUNET_TIME_absolute_from_ms (uint64_t ms_after_epoch);
902
903
909bool
911
912
918bool
920
921
927bool
929
930
936bool
938
939
945bool
947
948
954bool
956
957
965GNUNET_TIME_absolute_from_s (uint64_t s_after_epoch);
966
967
975GNUNET_TIME_timestamp_from_s (uint64_t s_after_epoch);
976
977
984uint64_t
986
987
996
997
1006
1007
1013void
1014GNUNET_TIME_set_offset (long long offset);
1015
1016
1022long long
1024
1025
1029unsigned int
1031
1032
1040GNUNET_TIME_year_to_time (unsigned int year);
1041
1042
1049unsigned int
1051
1052
1057
1058
1079 const struct GNUNET_CONFIGURATION_Handle *cfg);
1080
1081
1082#if 0 /* keep Emacsens' auto-indent happy */
1083{
1084#endif
1085#ifdef __cplusplus
1086}
1087#endif
1088
1089/* ifndef GNUNET_TIME_LIB_H */
1090#endif
1091
/* end of group time */
1093
/* end of group addition */
1095
1096/* end of gnunet_time_lib.h */
static int start
Set if we are to start default services (including ARM).
Definition gnunet-arm.c:38
static struct GNUNET_CONFIGURATION_Handle * cfg
Our configuration.
Definition gnunet-arm.c:108
static int end
Set if we are to shutdown all services (including ARM).
Definition gnunet-arm.c:33
static bool finished
Set to true once we are finished and should exit after sending our final message to the parent.
static struct GNUNET_SCHEDULER_Task * t
Main task.
static void do_round(void *cls)
Send out PUSHes and PULLs, possibly update #view, samplers.
static struct GNUNET_TIME_Relative duration
Option '-d': duration of the mapping.
Definition gnunet-vpn.c:90
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
#define GNUNET_NETWORK_STRUCT_BEGIN
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32.
#define GNUNET_NETWORK_STRUCT_END
Define as empty, GNUNET_PACKED should suffice, but this won't work on W32;.
GNUNET_GenericReturnValue
Named constants for return values.
#define GNUNET_PACKED
gcc-ism to get packed structs.
struct GNUNET_TIME_Absolute GNUNET_TIME_year_to_time(unsigned int year)
Convert a year to an expiration time of January 1st of that year.
Definition time.c:801
struct GNUNET_TIME_Relative GNUNET_TIME_relative_min(struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
Return the minimum of two relative time values.
Definition time.c:344
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_zero_(void)
Return relative time of 0ms.
Definition time.c:133
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_hour_(void)
Return relative time of 1 hour.
Definition time.c:187
const char * GNUNET_TIME_relative2s(struct GNUNET_TIME_Relative delta, bool do_round)
Give relative time in human-readable fancy format.
Definition time.c:264
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_s(uint64_t s_after_epoch)
Convert seconds after the UNIX epoch to absolute time.
Definition time.c:701
struct GNUNET_TIME_Relative GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a)
Convert relative time from network byte order.
Definition time.c:626
bool GNUNET_TIME_absolute_is_future(struct GNUNET_TIME_Absolute abs)
Test if abs is truly in the future (excluding now).
Definition time.c:677
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_millisecond_(void)
Return relative time of 1ms.
Definition time.c:160
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence)
Get the duration of an operation as the difference of the current time and the given start time "henc...
Definition time.c:438
struct GNUNET_TIME_Relative GNUNET_TIME_relative_saturating_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Saturating multiply relative time by a given factor.
Definition time.c:529
struct GNUNET_TIME_Relative GNUNET_TIME_relative_max(struct GNUNET_TIME_Relative t1, struct GNUNET_TIME_Relative t2)
Return the maximum of two relative time values.
Definition time.c:352
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_minute_(void)
Return relative time of 1 minute.
Definition time.c:178
struct GNUNET_TIME_Timestamp GNUNET_TIME_timestamp_min(struct GNUNET_TIME_Timestamp t1, struct GNUNET_TIME_Timestamp t2)
Return the minimum of two timestamps.
Definition time.c:384
enum GNUNET_GenericReturnValue GNUNET_TIME_string_to_round_interval(const char *ri_str, enum GNUNET_TIME_RounderInterval *ri)
Convert rounding interval given as a string to the enum value.
Definition time.c:1375
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_zero_(void)
Return absolute time of 0ms.
Definition time.c:142
struct GNUNET_TIME_Timestamp GNUNET_TIME_relative_to_timestamp(struct GNUNET_TIME_Relative rel)
Convert relative time to a timestamp in the future.
Definition time.c:336
struct GNUNET_TIME_Timestamp GNUNET_TIME_timestamp_from_s(uint64_t s_after_epoch)
Convert seconds after the UNIX epoch to timestamp.
Definition time.c:714
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_remaining(struct GNUNET_TIME_Absolute future)
Given a timestamp in the future, how much time remains until then?
Definition time.c:406
GNUNET_TIME_RounderInterval
Quantities by which we support round up absolute time values.
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_max(struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2)
Return the maximum of two absolute time values.
Definition time.c:368
unsigned int GNUNET_TIME_get_current_year(void)
Return the current year (e.g.
Definition time.c:747
bool GNUNET_TIME_absolute_is_zero(struct GNUNET_TIME_Absolute abs)
Test if abs is truly zero.
Definition time.c:844
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_from_ms(uint64_t ms_after_epoch)
Convert milliseconds after the UNIX epoch to absolute time.
Definition time.c:687
bool GNUNET_TIME_relative_is_zero(struct GNUNET_TIME_Relative rel)
Test if rel is zero.
Definition time.c:660
bool GNUNET_TIME_absolute_is_never(struct GNUNET_TIME_Absolute abs)
Test if abs is never.
Definition time.c:646
struct GNUNET_TIME_Relative GNUNET_TIME_randomized_backoff(struct GNUNET_TIME_Relative rt, struct GNUNET_TIME_Relative threshold)
Randomized exponential back-off, starting at 1 ms and going up by a factor of 2+r,...
Definition time.c:830
struct GNUNET_TIME_Relative GNUNET_TIME_relative_subtract(struct GNUNET_TIME_Relative a1, struct GNUNET_TIME_Relative a2)
Subtract relative timestamp from the other.
Definition time.c:601
const char * GNUNET_TIME_absolute2s(struct GNUNET_TIME_Absolute ts)
Like asctime, except for GNUnet time.
Definition time.c:239
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_forever_(void)
Return "forever".
Definition time.c:205
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get(void)
Get the current time.
Definition time.c:111
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_forever_(void)
Return "forever".
Definition time.c:196
struct GNUNET_TIME_Timestamp GNUNET_TIME_timestamp_get(void)
Get timestamp representing the current time.
Definition time.c:125
uint64_t GNUNET_TIME_timestamp_to_s(struct GNUNET_TIME_Timestamp ts)
Convert timestamp to number of seconds after the UNIX epoch.
Definition time.c:728
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply_double(struct GNUNET_TIME_Relative rel, double factor)
Multiply relative time by a given factor.
Definition time.c:506
bool GNUNET_TIME_relative_is_forever(struct GNUNET_TIME_Relative rel)
Test if rel is forever.
Definition time.c:653
struct GNUNET_TIME_Absolute GNUNET_TIME_round_down_utc(struct GNUNET_TIME_Absolute at, enum GNUNET_TIME_RounderInterval ri)
Round @at down to the start of the next interval ri, using UTC calendar boundaries.
Definition time.c:1302
long long GNUNET_TIME_get_offset(void)
Get the timestamp offset for this instance.
Definition time.c:56
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a)
Convert absolute time from network byte order.
Definition time.c:737
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_round_down(struct GNUNET_TIME_Absolute at, struct GNUNET_TIME_Relative rt)
Round down absolute time at to multiple of rt.
Definition time.c:392
struct GNUNET_TIME_Relative GNUNET_TIME_relative_add(struct GNUNET_TIME_Relative a1, struct GNUNET_TIME_Relative a2)
Add relative times together.
Definition time.c:583
void GNUNET_TIME_set_offset(long long offset)
Set the timestamp offset for this instance.
Definition time.c:49
struct GNUNET_TIME_Relative GNUNET_TIME_randomize(struct GNUNET_TIME_Relative r)
Return a random time value between 0.5*r and 1.5*r.
Definition time.c:851
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_subtract(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Relative duration)
Subtract a given relative duration from the given start time.
Definition time.c:471
unsigned int GNUNET_TIME_time_to_year(struct GNUNET_TIME_Absolute at)
Convert an expiration time to the respective year (rounds)
Definition time.c:761
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_second_(void)
Return relative time of 1s.
Definition time.c:169
struct GNUNET_TIME_Relative GNUNET_TIME_relative_get_unit_(void)
Return relative time of 1 microsecond.
Definition time.c:151
struct GNUNET_TIME_Absolute GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel)
Convert relative time to an absolute time in the future.
Definition time.c:316
struct GNUNET_TIME_Relative GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Multiply relative time by a given factor.
Definition time.c:486
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_min(struct GNUNET_TIME_Absolute t1, struct GNUNET_TIME_Absolute t2)
Return the minimum of two absolute time values.
Definition time.c:360
struct GNUNET_TIME_RelativeNBO GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a)
Convert relative time to network byte order.
Definition time.c:616
enum GNUNET_TIME_RounderInterval GNUNET_TIME_relative_to_round_interval(struct GNUNET_TIME_Relative rel)
Convert a relative time to the corresponding rounding interval.
Definition time.c:1312
bool GNUNET_TIME_absolute_approx_eq(struct GNUNET_TIME_Absolute a1, struct GNUNET_TIME_Absolute a2, struct GNUNET_TIME_Relative t)
Test if a1 and a2 are equal within a margin of error of t.
Definition time.c:63
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Relative duration)
Add a given relative duration to the given start time.
Definition time.c:452
struct GNUNET_TIME_Timestamp GNUNET_TIME_timestamp_max(struct GNUNET_TIME_Timestamp t1, struct GNUNET_TIME_Timestamp t2)
Return the maximum of two timestamps.
Definition time.c:376
struct GNUNET_TIME_Absolute GNUNET_TIME_absolute_get_monotonic(const struct GNUNET_CONFIGURATION_Handle *cfg)
Obtain the current time and make sure it is monotonically increasing.
Definition time.c:860
struct GNUNET_TIME_Absolute GNUNET_TIME_round_down(struct GNUNET_TIME_Absolute at, enum GNUNET_TIME_RounderInterval ri)
Round @at down to the start of the next interval ri.
Definition time.c:1292
struct GNUNET_TIME_Absolute GNUNET_TIME_round_up(struct GNUNET_TIME_Absolute at, enum GNUNET_TIME_RounderInterval ri)
Round up the given at to the interval ri.
Definition time.c:1272
struct GNUNET_TIME_TimestampNBO GNUNET_TIME_timestamp_hton(struct GNUNET_TIME_Timestamp t)
Convert timestamp to network byte order.
Definition time.c:91
struct GNUNET_TIME_Relative GNUNET_TIME_relative_divide(struct GNUNET_TIME_Relative rel, unsigned long long factor)
Divide relative time by a given factor.
Definition time.c:548
const char * GNUNET_TIME_round_interval2s(enum GNUNET_TIME_RounderInterval ri)
Convert rounding interval to string.
Definition time.c:1400
struct GNUNET_TIME_Relative GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, struct GNUNET_TIME_Absolute end)
Compute the time difference between the given start and end times.
Definition time.c:423
struct GNUNET_TIME_AbsoluteNBO GNUNET_TIME_absolute_hton(struct GNUNET_TIME_Absolute a)
Convert absolute time to network byte order.
Definition time.c:636
bool GNUNET_TIME_absolute_is_past(struct GNUNET_TIME_Absolute abs)
Test if abs is truly in the past (excluding now).
Definition time.c:667
struct GNUNET_TIME_Relative GNUNET_TIME_calculate_eta(struct GNUNET_TIME_Absolute start, uint64_t finished, uint64_t total)
Calculate the estimate time of arrival/completion for an operation.
Definition time.c:562
struct GNUNET_TIME_Timestamp GNUNET_TIME_timestamp_ntoh(struct GNUNET_TIME_TimestampNBO tn)
Convert timestamp from network byte order.
Definition time.c:101
struct GNUNET_TIME_Absolute GNUNET_TIME_round_up_utc(struct GNUNET_TIME_Absolute at, enum GNUNET_TIME_RounderInterval ri)
Round up the given at to the interval ri, using UTC calendar boundaries.
Definition time.c:1282
const char * GNUNET_TIME_timestamp2s(struct GNUNET_TIME_Timestamp ts)
Convert ts to human-readable timestamp.
Definition time.c:214
struct GNUNET_TIME_Timestamp GNUNET_TIME_absolute_to_timestamp(struct GNUNET_TIME_Absolute at)
Round an absolute time to a timestamp.
Definition time.c:79
@ GNUNET_TIME_RI_NONE
No rounding up.
@ GNUNET_TIME_RI_MINUTE
Round up to the next minute.
@ GNUNET_TIME_RI_QUARTER
Round up to the next quarter.
@ GNUNET_TIME_RI_HOUR
Round up to the next hour.
@ GNUNET_TIME_RI_SECOND
Round up to a multiple of seconds.
@ GNUNET_TIME_RI_WEEK
Round up to the next calendar week.
@ GNUNET_TIME_RI_DAY
Round up to the next day.
@ GNUNET_TIME_RI_YEAR
Round up to the next year.
@ GNUNET_TIME_RI_MONTH
Round up to the next month.
static struct GNUNET_TIME_Relative delta
Definition speedup.c:36
Time for absolute time used by GNUnet, in microseconds and in network byte order.
uint64_t abs_value_us__
The actual value (in network byte order).
Time for absolute times used by GNUnet, in microseconds.
uint64_t abs_value_us
The actual value.
Time for relative time used by GNUnet, in microseconds and in network byte order.
uint64_t rel_value_us__
The actual value (in network byte order).
Time for relative time used by GNUnet, in microseconds.
uint64_t rel_value_us
The actual value.
Time for timestamps used by GNUnet, in seconds and in network byte order.
struct GNUNET_TIME_AbsoluteNBO abs_time_nbo
The actual value.
Time for timestamps used by GNUnet, in microseconds rounded to seconds.
struct GNUNET_TIME_Absolute abs_time
The actual value.
enum GNUNET_TIME_RounderInterval ri
Definition time.c:1358